iOSアプリ開発の勉強方法「サンプルドリブン勉強法」と挫折しないコツ


[過去のこういう経験](http://thebridge.jp/2015/09/tsutsumi-shuichi-interview-1)もあって、「iOSアプリ開発はどう勉強したらいいか？」「おすすめの入門書は？」みたいな質問をされることがよくあります。**iOSアプリ開発の最初のとっかかり**について自分の経験と、そこから導き出した「サンプルドリブン勉強法」「挫折しないコツ」について書いておこうと思います。


##入門書購入

iOSアプリ開発を始めたとき、まず入門書を数冊買いました。はじめてのMacbookを買った帰り、有楽町のビックカメラの技術書コーナーでパラパラめくって、「話が理解できそうなもの」を選んだ記憶があります。

当時のブログに書いた記事がこちら。

- [Mac買いました、そしてiPhoneアプリ作りました](http://d.hatena.ne.jp/nns/20090902/1251915988)

> この本に載ってたサンプルアプリを、
**内容を理解することなく**手順をなぞって実装し、
とりあえず動かしてみました。

スクリーンショット付きで本に載っていた手順通りにXcodeでプロジェクトをつくって、本に書かれているプログラムをそのまんま（3行ぐらい。意味は理解してない）打ち込んで、本に書いてある通りにビルドのボタンを押すと・・・シミュレータで「ブラウザアプリ」が動作したのです。当時の自分はUIKitの何たるかなんて当然理解してなくて、ブラウザなんてめっちゃ難しそうって思ってたので、これは**ちょっとした感動**でした。


##第一作目のアプリ

その後「ビルドして実機で動作させる」手順まで覚えた僕が次にやったのは、本の通読・・・ではなく、本質を理解・・・しようとすることでもなく、

- 手元にある書籍のサンプルコードを一通りビルドして試してみる
- その<b>サンプルコードからの改変でつくれそうなアプリ</b>を考えてみる

ということでした。


で、つくってストアでのリリースまで漕ぎ着けたのが、「余命電卓」というアプリです。（2009年の話）

- [余命電卓](https://itunes.apple.com/jp/app/id342740491?mt=8)


『iPhone SDKの教科書』という書籍に収録されていた、**年齢を計算する『Age』というサンプルが元**になっています。

- ピッカーで誕生日を設定できる
- 設定した誕生日から算出した「現在の年齢」が表示される

というサンプルで、僕のつくった余命電卓は、単にその**「現在の年齢」の代わりに「余命」 [^1] を表示するようにしただけ**でした。 [^2]

[^1]: 余命 ＝ 78歳（日本男性の平均寿命）　−　現在の年齢　・・・という超簡単ロジック

[^2]: 今は広告とかツイート機能とか入ってますが、リリース当初はもちろんそんな機能はありません。


<img width="586" alt="yomei.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/3180/e2488a7b-697f-4e16-667d-a43acfeab354.jpeg">


このサンプルコードの改変に必要だった知識は、

- アイコンなどの画像リソースの入れ替え
- ボタンを押したら設定画面に遷移するようにする
- 年齢の代わりに「平均寿命 - 年齢」で計算した余命を表示する
- 余命を時間・分・秒等に換算する
- タイマーで秒数カウントダウン

これぐらいです。画面遷移やタイマー等は、同様の機能を実現している他のサンプルをあたって、該当するコードを持ってきました。


##挫折しないコツ1：わからないことには目を瞑る

Xcodeプロジェクトを新規作成するだけで、わらわらとわけのわからないファイルがたくさん生成され、実際にプログラムを書くファイルである xxxx.h や xxxx.m （今だと xxxx.swift）にも最初からわけのわからないことが色々と書かれています。


そういうのを <b>全部理解しようとしなかった</b>、のが途中で挫折しなかった秘訣かなと。


Objective-Cでいうと、@interface, @implementation って何なのかとか。assign だとか nonatomic とか。


もちろん大事ではあるのですが、プログラミングを始めたばかりの人がそういうのをひとつひとつしっかり理解してから前に進もうとすると、動くものをつくれるようになるまでが遠すぎて、挫折してしまうのかなと。


##挫折しないコツ2：できないことはあきらめる

余命電卓の最初のバージョンでは、日本男性の平均寿命78歳から誕生日を引く、という超シンプルなロジックだったのですが、次に僕がやろうとしたのは、「性別を選ぶと男女それぞれの平均寿命から引き算する」というものでした。

男／女の選択には UISegmentedControl というのを使えばいい、というのは他のサンプルでわかったので、そのへんのコードをコピペで持ってきて、ビルド成功！


・・・が、なぜかクラッシュする・・・


当時の僕は<span class="deco" style="color:#FF0000;">解決方法がわからなくて、**その機能をあきらめました**</span>。


プログラミングにおいて、的確にトラブルシューティングを行うことは、（ものにもよりますが）しっかりした理解と経験を必要とするわりと高等な技術だと思っています。ここで**挫折して二度とプログラムをやらないよりは、あきらめて別のできそうなことを探す**、というのもひとつの手かと。


##サンプルドリブン勉強法

そんなわけで、僕が書籍のサンプルコードから「余命電卓」をつくったように、

- <b>最初からある程度機能があって、動くコード</b>から始めて、
- そこに書いてある色んな<b>わけのわからないことには目を瞑りつつ</b>、
- 画像を入れ替えてみるとか、足し算してるところを引き算にしてみるとか、そういう <b>わかること／できることだけで</b>まずはやってみる

というのも、**挫折せずにプログラミングの楽しさを知る＝入門する**ためのひとつの方法かなと、僕の経験から思います。


##入門書の選び方

上記の経験をふまえつつ、個人的に入門書を選ぶ際の観点としては以下をオススメしています。

- **自分がつくりたいアプリに近いサンプルが載っている**
- **出版年月が新しい**
  - 古いと、サンプルが動かない可能性がある
  - **動かないサンプルを動くようにするのは入門者には厳しい**かも
- パラパラとめくって、自分にとって説明がわかりやすそうか？をみる
  - 人によって前提知識は全然違うし、文章の好みとかもあるので


##まとめ

自分で手を動かしてものをつくれることに憧れて、自分がアプリ開発を始めたころの経験について書かせていただきました。もちろんこれは普遍的な話でも正解でもなくて、「僕の場合はこうでした」という話にすぎませんが、どなたかの参考になれば幸いです。[^3]

[^3]: 「わからなかったらあきらめよう」的なことを連呼してしまいましたが、これはあくまで「プログラミングの楽しさを知る」という段階での話であって、これからプロとしてやっていこうという会社の新人さんとか向けの話ではありません。プロのプログラマとしてやっていくのであれば上記と**真逆**の行動指針が求められます。

##関連

- [ 「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで](http://www.slideshare.net/t26v0748/tech-crunchhackathon-20131111expanded)