iPhoneアプリ作成までの道のり1

ことによると、私は来期の新人にObjective-Cを教えることになるかもしれない。たぶん、そんなことはない。私の想像通りに事が進めば、きっとJavaを教えることになる。Javaに関しては、うちの会社にはある程度まともだと思われるカリキュラムが存在するので、この場合、さして問題ない。だが、もしかしたら、小さな政治的事情によって、Objective-Cを教えることになるかもしれない。

「さして問題はない」と言いつつも、しかし、実際のところ、新人に教える言語として、Javaというのはどうなんだろう。C++よりは遥かに適切なのは間違いない。だがJavaはもうC++と同じかそれ以上に大きくなりすぎてしまった。確かに、言語としてはJavaは易しい。素人が失敗しにくいようにできていると思う。しかし、企業が求めるJavaプログラマというのは、

Javaの言語仕様はもちろん理解していて、
・JavaVM仕様も理解していて、
オブジェクト指向デザインパターンを理解していて、
・HTMLとCSSを使って画面デザインができて、
Servlet(とStruts Action系クラス), JSP(とELやStrutsタグ), JavaScript(とjQuery)を使えて、
・データベースへのSQL発行(これだけとっても、JDBC, Hibernate, JPA, SQLJなど様々)ができて、
・Effective Javaに書かれているイディオムや注意点を理解していて、
・マーティンファウラーのリファクタリングアナリシスパターンを理解していて、
アジャイル開発手法というものを理解していて、
・DIコンテナを使えて、テスト駆動開発に適応できる

プログラマのことを指しているのではないだろうか。だとすれば、これらをすべて新人に教え込むのは、いかにも無理である。

一方で、プラットフォームを仮にiPhoneのみに絞った場合はどうだろう。*1
差し当たって覚えなければならない言語はObjective-Cのみだ。設計によってはHTML+CSS+jQuery Mobileという形になるかもしれない。WebのGUIを無視すれば、Objective-Cという言語と、Cocoa Touchの設計思想と使い方、作法を覚えればスタートは切れるということになる。実際のところはそんなに甘いものではないが*2、それにしても、一見すればJavaプログラマになるよりは遥かにハードルの数が少ないように思える。Objective-Cは、C言語の小さなスーパーセットであり、私に言わせればC++よりは遥かに汚れていない。それに、CocoaGUIの設計はよく出来ているし、理解しやすいとも思う。

そう考えてみると、来期の新人に教えるかどうかはともかく、iPhoneアプリの開発案件の数によっては、今後、新人にObjective-Cを教える機会は十分にあり得るのではないかと思えてきた。

そんなわけで、これから数回に渡って、新人に教えるという前提のもと、iPhoneプログラムを作成できるようになるまでの道のりを考えてみたいと思う。


1. C言語を覚える

これは最初の一歩というよりも、前提条件になってしまう。
入門書によっては、「Objective-Cを覚えるにあたって、C言語を知っている必要はない」としているものもあるようだが、それは嘘だ。Cのメモリ管理の面倒臭さを知っていなければ、Objective-Cを使うことはできない。さもなければ、あっという間にメモリリークにBAD_ACCESSの嵐に見舞われることは想像するに容易い。そもそもが、C言語のスーパーセットである言語を覚えるのに、C言語を知らなくて良いわけがないのだ。

逆に言えば、C言語さえしっかりマスターしていれば、Objective-Cとして覚えなければいけないことはそれほど多くない。少しだけSmalltalk風味の味付けが入るだけだ。そしてそれは革命的な便利さだ。実行速度を多少犠牲にする代わりに、「Programming is fun again.」と口走ってしまうほどの感動を得られる。(かもしれない)

C言語に物凄く精通している必要はない。基本的な型、構文、関数、構造体、ポインタをきちんと理解しておけばまずはOKだ。簡単な目安としては、ここのチェック項目がすべてクリアできてれば良いだろう。クリアできない項目があったとき用に、こちらに簡単な解説を用意してみた。できれば、それプラス、もう少し。malloc, freeをたくさん使うプログラムを書いた経験があれば尚良い。メモリリーク箇所を探すのに苦労した経験があるなら完璧だ。

さて、新人に教えるという前提に立ってみると、全くのプログラミング初心者に1からC言語を教えていては、それだけで1年かかってしまう。情報系の大学か専門学校を卒業しているとすれば、C言語くらいは知っていると考えて良いものだろうか。この辺で早くも不安になってきたが、ここはひとまず、「C言語は入社前にマスターしておく」ことを条件としておこう。実際教えることになった場合、対象者のスキルによっては、多少のCお復習いのフォローなり、学習期間の延長が必要になるかもしれない。


--

*1:身も蓋もないことを言うと、この連載をすべて書き終えてから思ったことだが、これまでの前提を考えた場合にもっと適している題材がAndroid Javaなのでは・・・? と、後から思った。

*2:実際にどう甘くないのかというと、これは言語やプラットフォームに関係ないことだが、実際に開発作業をすると、必ず、どこかで、何度か、ハマることになる。例えば、原因不明のバグの追跡に追われたりだとか、自分のプログラムとは関係ないところのAPIで予期せぬことが起こったりだとか。プログラムを書く事を仕事にする場合、そういった困難に対して、決して諦めずに、必ず乗り越えるという根性、強い精神力が一番大事なのではないだろうか。