iOS開発者向け講座その1~はじめるにあたり~

これは

2012年の岐阜県スマートフォンアプリ開発関連人材育成事業でiOSアプリ開発の講師をしています。その講義で口頭で話した内容の概略メモです。
情報工学を受講したことがなく、C言語などは知らない方に、iOSアプリ開発に参加する上で知っておくべき、プログラミングの概念と技術の概要を伝えるのが、目的です。
このテキストは、講義を受けた方が、あとで内容を思い出すためのメモです。思い出すための糸口として概略をまとめています。

受講内容と想定している受講者

講義回数はは、1週間に2回、ほぼ1日の講義を、2ヶ月、全16回の予定です。
受講者は、C言語を知らない、またC++などで開発経験があるなど、スキルはさまざまな、経歴もさまざまです。

ぶっちゃけゼロから作れる開発者になるのは困難だと思っています

iPhoneの登場初期のような、真っ白な画面を表示するだけのアプリが”照明アプリ”として何十万ダウンロードを達成する時代は、大昔に終わっています。
iOSが出てから5年ほどですが、iOSアプリを企業また個人で作っている人の中には、10歳からプログラミングをしている人が、ゴロゴロいます。

そのなかで仕事としてiOSに関わるならば、たった数十時間で開発者になれる、という言葉の内容と意味を、自分が今まで受けた教育や蓄積した経験をもとに、考えてください。
私は、開発者になるのは困難だと思っています。無理だと言ってもいいでしょう。

しかし、iOSアプリの価値は、気持ちいい絵と音楽とユーザインタフェースです。純粋な開発者はそれを支える縁の下の力持ちです。この状況は、Windowsのような業務アプリとは全く違い、おそらくは、ゲーム開発会社に近いでしょう。その世界では、開発者の仕事が理解できて、アニメーションのパラメータ設定であれば自分で”コードを触れる”ことには、意味があります。

自分にとっての、iOSの知識と経験の活用を考えてください。また、自分が10時間でできることは、他人も10時間でできます。しかし、5年前に10時間でやったことをもとに、5年間の経験と蓄積を重ねているならば、その5年間はだれがやっても5年間かかります。その意味で、知識と経験の活用を、考えてください。

達成目標

習熟の目標設定は、

  • Obj-Cの言語仕様が”だいたい”わかる
  • サンプルコードをいじり(アニメーションの動きなどを変化させる)、そのいじった内容を論理的に他人に説明できる。

です。

テキストと資料

このほか、Appleの開発者サイトhttps://developer.apple.com/devcenter/ios/index.actionには、ドキュメントおよびフォーラムがあります。

”プログラミング”の経験がある方は、”動くからいい”、を捨ててください

ProcessingやArduino、MAXなど、何かしらの動作制御やデータ処理をコンピュータでした経験があるならば、それはプログラミングの経験と呼べます。
この講座を受ける方は、”動くからいい”、”動けばいい”、という考えを捨ててください。

  • 考えて作らない
  • 経験を蓄積しない
  • 非効率な開発をする
考えて作らない

コードを書いたなら、それが当たり前に動くから、プロとしてやっていけます。それは、目の前で動くのみならず、仕様の範囲での”ありとあらゆる状況”で動くもので、あるはずです。
しかし自分の想定と違って、思ったように動いていない場合は、よくあります。
その場合は、

  • 開発時の、こう考えて、こう作れば、こう動くはずだ、を再確認する
  • その確認に基づいて、思ったような動きをしていない部分の、コードを読み直す、またデバッグなどでその部分を特定する
  • その部分の動きを確認する、予想と照らしあわせて、差異を見つける

手順を取ります。そして、修正します。
”動くからいい”と考える場合は、このフローが身につかない人が多いと、私は思っています。

経験を蓄積しない

動かない場合も、上記のフローを通して、なぜ動かなかったかを、知識として整理して、それが発生する状況を把握して、はじめて経験となります。

非効率な開発をする

iOSの開発に使うXcodeは、ステップ実行、ブレークポイントなど、アプリケーションの実行状態を直接確認できるデバッグ機能があります。

アプリケーションを1行づつ実行して、値の変化を追って、”動くようにした”という方がいるかもしれません。おそらく、それは、とても時間のかかる作業だったでしょう。
しかしそれは”作業”です。開発者に徹夜をして欲しいと思う人は、誰もいません。徹夜の回数を誇られても、残業代がかさんだなとか、トラブルメーカーになりそうだから、次の仕事ではこいつは外しておこうと、思うだけです。

もしも最初から、上記フローを使い、また経験を活用して、原因箇所を限定すれば、コードをよく読みなおすだけで、修正できたかもしれません。
動くものを作ることが仕事です。その結果に至るまでの、最も楽ができる、最も効率的な開発手法を、自分以外の人でも使える汎用なフローとして、身につけてください。

”プログラミング”をするまえに

概念を理解してください

概念はとても大切です。

  • それは、どんな概念か、
  • 歴史的な変遷もふくめて、どこから、どうして、その概念が生まれたのか、またそれが、こうして教え継がれる価値はなにか、

を吸収してください。

実作業の前準備が仕事の8割を決めます

目の前にある作業、コードを書くとか、Xcodeで何か作業をするとか、は肉体的な充実感があり、仕事をした気になります。
ですが、実作業をする前に、このクラス設計は正しいか、自分がこれから書こうとしているコードは、どこでどうつかわれるかを、理解しているか、”わかっているか”をチェックしてください。

英語は必要です

英文を読むことにアレルギーがあるなら、それを克服するか、この仕事は諦めてください。
ここでの”英語が必要”は、文章を読み開発に必要な情報を自分で吸収できること、です。

  • 英語構文の知識は、中学3年で十分です。
  • 技術用語およびわからない単語は、都度調べて覚えてください。
  • プログラミングガイドのような、長文を読むときは、文章の構造を利用して、短時間に無駄なく、どの詳細の階層を読んでいるかを意識すると楽ができます。
    • 英語は重要な情報が頭にくる、そして詳細が後ろに続く言語です。
    • タイトルと見出しは内容を濃縮した情報です。じっくり読んで全体を把握します。
    • タイトルに続く”概要”は、だれにむけて、どんな情報を、どう書いているのか、それを読むと何が得られるのか、をまとめています。読むべきか否かを判断するのに十二分の情報がここに含まれています。
    • 段落は、先頭の1行がその段落の内容を表しています。1行を読むのも時間が惜しい時は、接続詞と主語と助動詞(must, may, shall, そしてnotの有無)そして動詞を見ます。
独学はよいのですが独善になっていないか気をつけましょう

プログラミング言語ソースコードを書くときの、変数や関数の命名、また設計パターンは、何十年の先人が経験を蓄積してきた、定番の方法があります。独学はよいのですが、この点で、独善にならないように気をつけましょう。
プログラムのソースコードは、必要な機能をプログラミング言語で人間が読んでも分かりやすく表現する活動です。ソースコードで、他人が読みにくい”おりじなりてぃー(笑)”あふれるソースコードは、害悪です。もしも私がマネージャをしているなら、そのようなメンバーは即時はずします。それは、”開発後期”になって、原因が分かりにくい不具合を混入させる、その人のソースコードが読みにくい場合は他のメンバーにゼロから書きなおさせることになると、経験が告げるからです。
独善にならないよい方法は、

  • 事前にコーディング規則に目を通すこと、
  • 開発チームで良いコードを書くと言われている方のソースコードをよく読むこと、
  • チーム内でレビューを重ねてお互いにわかりやすいか、悪い意味で属人性の強い書き方になっていないかを指摘をもらうこと、

です。

1次資料、2次資料、3次資料を使い分けましょう

ここでは、

  • 1次情報:Appleが公式に出している情報およびAppleが運営するサイト
  • 2次:の情報が1次、著作物を残したりStackOverflowで評価が高い開発者の回答
  • 3次:その他のGoogleなどの検索で出てきた情報

とします。

1次資料は、例えばフレームワークの全体から詳細までを網羅した情報です。何かを開発するとき、”わかったつもり”にならず、公開されている1次情報の読むべき該当情報は、ひと通り目を通します。
開発をしていると、”個別の”、うまくいかないことや、どう作ればいいのかわからないこと、にぶつかります。そのような個別の情報は、Appleの1次ドキュメントから読み取ることは、大変です。そんなときは、Q&AサイトやGoogle検索を使います。

StackOverflowは回答の質を評価し、評価が高い回答が上位に表示されていて、役に立ちます。Google検索は site:http://stackoverflow.com と検索対象サイトを限定するのもよいでしょう。

Google検索で漠然と検索するときは、時間の使いすぎに注意します。検索1ページ目に回答そのもののページが見つからない場合は、検索ワードを変えるなどしましょう。もしも、検索結果ページに目を通しだしたら、脱線も含めて、回答が得られるまで3時間かかること、つまり今日の仕事の半分の時間はそれに通夜してしまうことを、を覚悟してからにしましょう。

検索の前に自分の状態を把握しましょう

2次、3次情報を探すときは、自分の状態を確認してからにします:

  • エラー発生箇所もエラーメッセージも分からない
    • 検索以前に自分が何をしているかが把握できていません。自分の能力を超えている仕事です。自分にはできないかもしれないと悟り、他の方と相談するなり、他の手段を考えましょう。
  • エラー発生箇所とエラーメッセージを読み取ったが、内容が理解できない
    • エラーメッセージは、同様の事例検索の強力なキーワードです。望むらくはそのエラーメッセージが、あまりにありきたりで、ありふれていて、数多くの様々な原因が、そのエラーメッセージを出さないものであることを、祈りましょう。
  • エラーの発生条件やエラーメッセージが把握できていて、SDKのバグではないか?など、自分なりに原因推定がついている、
    • 裏付けがほしい、程度で情報を検索するレベルです。おそらく1時間もかからずに、解決できるでしょう。