Lento con forza

大学生気分のIT系エンジニアが色々書いてく何か。ブログ名決めました。

僕が全ての記憶を失った時に今のレベルのiOSエンジニアに戻るための道標

この記事は はてなエンジニア Advent Calendar 2022の15日目の記事です。はてなではモバイルアプリのエンジニアとして働いていて、主にiOSアプリを主領域としています。最近記憶がなくなったらどうしようと考えていたので、突然記憶喪失になっても仕事に困らないように記事にしてみました。僕ならこうしたい、ということなので、全ての人に再現性のあるわけではないとは思いますが、プログラミングをゼロから勉強するときの参考にも、少しはなると思います。

プログラミングを覚えた頃

プログラミングを覚えた頃の話は覚えていますか?僕はあまり覚えていません。

最初に触ったプログラミング言語は覚えていて、それはC言語です。モノづくりが好きだった僕がプログラミングに出会い、プログラミングの面白さと可能性を感じて、猫でもわかるプログラミングC言語編をやりました。

猫Cは途中でCGIをC言語で実装する章があって、これが僕のWebプログラミングデビューです。今考えるとC言語でWebアプリを書くのは尖りすぎてますよね。Webの文脈では、この後Pythonに出会いました。その時にC言語とのギャップからPythonの素晴らしさに感動して、今でも一番好きな言語の一つです。

猫でもわかるプログラミングが僕の最初のプログラミングの先生なので、そのままC++、Windows SDKと進んでいきました。当時はDreamSparkというプログラムがあり、Visual Studioが学生限定で無料で使えていました。これを使ってWindowsのGUIプログラムにも手を出して、オセロやトランプゲームなどを作っていました。

その後PythonでWebアプリを作ったり、JavaScriptでブラウザゲームを作ったりしていたんですが、猫C以降のプログラミング学習をどうやっていたかは、全く覚えていません。なんか多分がむしゃらに色々作ってた感じなんだと思います。

iOSアプリの話をしてませんでしたが、UEIがやっている9leapというゲーム開発コンテストで大学1年生くらいの時に賞をもらい、MacBook Airを貰いました。Macという武器を手に入れたのでiOSアプリの開発にものめり込んでいきました。iOSアプリ開発の振り返りは別の記事で昔書きました。こちらです。

kouki.hatenadiary.com

プログラミングの学習

さて、僕はこのようにがむしゃらスタイルの学習スタイルだったわけですが、今やり直すとしても同じことをやるでしょうか?これはこれで楽しかったし無駄だったとは思いませんが、今ならもっと効率的な何かがあると思います。知の高速道路というやつですかね。

ゼロからプログラミングの学習をするなら、圧倒的にN予備校をオススメすると思います。*1

www.nnn.ed.nico

プログラミング入門Webアプリコース はゼロからでも始められるようになっていて、まずはこれを履修すると良いと思います。それ以降はお好みでN予備校を続けても良いですが、N予備校で基礎を作った後は、本や実践でプログラミングの練度を高めていくのをオススメしたいと思います。

コンピューターサイエンスの学習

プログラミングの学習と並行して、コンピューターサイエンスも学ぶことも必須だと思います。

教材は悩みますが、基本情報と応用情報の取得を目指すことが良いのではないでしょうか。

これらを選んだ理由は、以下の通りです。

  • 一通りの領域が網羅されていること
  • 基本情報、応用情報とステップアップしていけること
  • 試験の結果で理解度を確認できること

これらは試験なので、対策ができます。特に、過去問をやるなどの試験対策をすることで合格できるかもしれません。

ただ、試験に合格するということを目的にはあまりして欲しくないと思っています。合格するのが目的ではないですからね。

学ぶために使う教材は試験名が書いてある教本で良いと思います。ただ、興味がある単語に出会ったらググってみてください。もっと知りたかったら専門の本も読んでみましょう。

基本情報の領域には、マネジメントとストラテジという、一見プログラミングをする上で関係なさそうな項目もありますね?僕は最初にこれらの資格を取得した時はこの辺りを完全に無視していました*2が、就職してからその領域を再び勉強をしまくっているので、もし興味が持てるならこのタイミングで勉強できるといいですね。

繰り返しになりますが、試験対策を頑張るのではなく、勉強を頑張った結果、試験で理解度をチェックするのがベストです。

iOSアプリの学習

さて、プログラミングの基礎とコンピューターサイエンスの基礎が身についたくらいで、iOSアプリの学習も始めていきましょう。

まずはUIの作り方を覚えましょう。ちょうど僕が高校生の頃にWindows SDKでやってたように、自分の作りたいものをたくさん作っていくのが成長の秘訣です。作りたいものがなかったとしても、何かしら動くものを作るのは楽しいものです。

UIの作り方をどう覚えるか。今ならApple公式のチュートリアルを一通りやってみるのが良いでしょう。 developer.apple.com

一通りやった後は、ひたすら実践あるのみです。どんどん実践していきましょう。

iOSアプリの学習 アドバンスド

実践あるのみと言っても、実践を続けていると様々な悩みが生まれてくると思います。設計について学ばなくても良いのだろうか。今書いてあるコードは良いコードなのだろうか。仕事で使えるスキルになっているのだろうか。

そのような不安があるのは当然だと思います。僕も昔思っていました。そんな僕に送る本がこちらです!!

リーダブルコード

良いコードの話題になった時に100億回は出てくる本だと思いますが、これは読んでおきましょう。

オブジェクト指向でなぜ作るのか

オブジェクト指向にはプログラミングや設計のエッセンスが詰まっています。その中でもこの本は丁寧にわかりやすく、設計に関するエッセンスと、その動作理由まで詳しく説明してくれている良い本です。

リファクタリング

リファクタリングはプログラミングをする上で必須の技術です。この本はリファクタリングのパターンと、それを行う理由、そしてどのような効果があるかを示してくれます。今でもよく開く本の一つです。リファレンス的にも使えます。

エクストリームプログラミング

XPには良いプログラマーのプラクティスが詰まっています。チームで働くことと、ソフトウェアを作ることにおいて、この本は全ての基本にあたることが書いてあります。

達人プログラマー

タイトルもまさに、達人のプログラマーになるためのエッセンスが詰まっています。正直古臭いと感じる部分や、わかりにくく思うこともあるでしょう。僕でもそう思うので、新しく学習しようとする時にはさらにそう感じると思います。ただ、とても大切なことがたくさん書いてあります。この先も何度か読み直すごとに、受ける印象の変化も楽しめる本だと思います。

iOS固有の設計について

iOS固有の設計についても、いろいろあると思います。今はMVVMがどうとか、TCAが良いとか、いろいろな議論が行われています。ただ、この辺りは流行り廃りもあって、具体的にどれをどう学べば良いのか、難しいことも多いです。設計の基礎や考え方を学ぶという意味では、クリーンアーキテクチャがおすすめです。

ソフトウェアアーキテクチャの基礎も、同じような理由でおすすめです。Googleのエンジニアが考える最高のエンジニアリングについて詳細に説明されています。

おそらくこれ以降も変わらず、これからの時代に重要な考え方として、データフローの考え方と、Single source of truthの原則を守ることがあります。これはAppleのドキュメントでも解説されているので、このページの内容は頭に入れておくと良いでしょう。

https://developer.apple.com/documentation/swiftui/state-and-data-flow

仲間を見つける

もう一つ、良いエンジニアを目指すために重要だと考えていることがあります。仲間と師匠、もしくはメンターを見つけることです。

仲間は非常に大切です。僕もプログラミングを勉強していた頃は、Skypeで毎日のように同級生と議論し合いながら、作ったものを見せ合いながら、悩みを共有し合いながら勉強していました。もちろんプログラミング以外の話もたくさんしていましたけど。

僕には師匠らしき人がおらず*3、いるとよかったと思ったことは何度もあります。強いていうなら、僕にとっての師匠としての役割は、一緒に勉強していた仲間たちなのではないかと思います。

仲間も師匠もメンターもいないよ、という方は、もしかしたら僕が何か役に立てるかもしれません。仲間が増えることは嬉しいことですし、教育や学習は僕が人生で大切にしたい3つのことのうちの1つなので、何かしら貢献できると嬉しいと思っています!

twitter.com

終わりに あるいは WEB+DB PRESSの宣伝

iOSアプリエンジニアに戻るようになるつもりが、あんまりiOS特有の事情については触れませんでした。結局良いiOSエンジニアになるための一番良い方法は、良いエンジニアを目指すことが一番の近道、というのが今の僕の考えです。

良いエンジニアは勉強することが大好きで、たくさんのことを素早く学び、自分の考えに昇華できる力を持っていると思います。このエントリで紹介した本はそのような力をつけるために役立つでしょう。

とは言っても、最新のiOS 16に関する技術をサクッと知りたいよ!ということもありますよね。そんな人におすすめなのがWEB+DB PRESS Vol.132です。

ここには、最新のiOS 16について同僚と僕で書いた、30ページの特集が載っています。このようにまとめられている情報を効率的に摂取していくことも大切ですね。

gihyo.jp

明日は id:masawada です!

*1:僕自身はN予備校で学習したわけではないのですが、N予備校の開発に携わっていました。当時僕はシステム側を作っていたので教材コンテンツには関わっていなかったのですが、教材を作るチームが素晴らしく、教材の出来の良さを感じていました。

*2:これらの試験の合格基準は60%なので、マネジメントとストラテジを捨てても合格できます

*3:もし俺が師匠だ!という人がいたら教えてください!!師匠と呼ばせていただきます!!!