僕がCakePHPを選んだ理由。次の一歩はRailsかjQueryか
2月後半からプログラミングに集中できるようになり、2ヶ月がたちました。
CakePHPで2つ目のWebアプリがほぼ完成し、データ待ちになった今、学習初期の思考と次の一歩の意思決定を振り返るためのメモ。
CakePHPを使った理由
プログラム設計の素養を身につけたいという思いと、最速でサービスを完成させたいという思いのバランスをとった選択でした。
良いコードを書く素養
僕は、「良いプログラマ」になりたいです。プログラマは、人により生産性が大きく異なること。特にチームで開発する際に大きな差が生まれることを、多くの人から聞いて心に留めていたのです。その要素がどんなものかは知らずとも。
それを学ぶため、達人プログラマなどを読みました。その中で、「良いプログラマ」の素養の一つが「良いコード」を書けることで*1、良いコードの要素は。「保守性」「堅牢性」「パフォーマンス」に集約できそうだと結論づけました。
保守性=チームで効率よく開発、保守できること。可読性や再利用性を高めることはその手段で、OOPやMVCの分離、変数の命名、インデントなどを含む。
堅牢性=想定外の動作を引き起こさないこと。サニタイズなどのセキュリティ対策や、バリデーションや例外処理といった、想定外の状況への対策を含む。
パフォーマンス=一定の環境下で、実行時間や使用リソースが小さいこと。アルゴリズムとデータ構造の知識や経験、ボトルネックを見抜く能力が必要。
フレームワークでショートカット
良いコードを書くには、良いコードを読むことだといいます。僕が初めて読んだオープンソースのコードはWordPressだったのですが、その善し悪し以前に、全く意味が理解できませんでした。
その直前に、平PHPで2ちゃん風スレッドフロート式掲示板をさくっと作り、プログラミング楽しい!オレできるかも!を実感した直後のことでした。同じ動くプログラムでも、そのコードは月とスッポンほどに違っていました。
そのコードを「良いコード」へリファクタリングするのは諦め、新しいサービスをフレームワークで作ることにしました。フレームワークを使い、その規約に従うことで、「保守性」「堅牢性」の多くの部分がカバーされると考えたのです。
次の技術的な一歩は?
今こそ新しい一歩を踏み出すとき
今、新しい技術に手をつけたいと思っています。一方で、やっとCakePHPをスラスラと扱えるようになったところ、また生産性が下がるのは辛いです。しかし技術的にもサービス的にも適切なタイミングだと思っています。
サービス面→マネタイズ、生産性向上のコアとなる2サービスが完成し、自分の中で重要度の高いサービスの新規作成が一旦完了した。また、これらのメンテナンスと改良でどちらにしろCakePHPは使い続ける。
技術面→PHP、CakePHPというワンライン状態から脱することで、言語、FWを相対的に見ることができるようになる。それが、今後の技術選択の意思決定の質を大幅に上げると予想される。
RailsかjQueryか
次の一歩として考えているのは、Ruby+RailsかJavaScript+jQueryです。
Rubyは、今後のメイン言語候補、プログラマとしての「良い習慣」の実践という意味で良い選択肢かなと。Ruby(Rails)は生産性が高く、変化への適応性に富んだ言語のようです。また、Rails使用者の多くには、新しいものへの貪欲さと、それをアウトプットする積極性があると感じています。これはサービス完成最優先で、BDDやCIなんかを無視してきた僕には、ツール、情報量の面でありがたいものです。
一方JavaScriptは、「できることを広げる」という観点で非常に有望そうです。アニメーションやajaxは、ハイレベルなUXを実現してくれるはずです。また、Titaniumを使ったネイティブアプリも手を出してみたい分野です。
PythonはRubyに近いところでかなり悩んで検討しましたが、一旦Rubyで。世界的なトレンドはあれど、欧米の開発者とコラボする予定もないですし。
技術戦略、資金戦略、人生戦略
どう生きるか、の意思決定
RailsかjQueryかってのは、どう見ても技術的な優位や将来性の話ではなく、僕が今後何をしたいかによって決まることです。
現状の僕は、あまりに多くのことをやりすぎているようです。この2ヶ月の間、プログラミングに加え、HTMLとCSS、gimpの使い方も学習し、企画デザイン含め全て一人でやりきりました。
これは「学習能力」という僕の最大の強みの発揮であり、「パートナー探し」という重要事項の回避でもあります。
下手に学習能力が高いために、パートナーを探す努力をしていない面は否めず、これはネガティブな結果を招くかもしれません。今はクラウドワークスなんてサービスもありますし、デザインなんかは人にお願いし、そのご縁を大事にしつつパートナーを見つけたいと思う次第です。
戦略的に生きる
僕が常に心がけているのは、戦略的に生きることです。戦略的に生きるには、ゴールが明確でなくてはいけません。自分が幸福になるために実現したいことを明確にし、その実現に必要な「スキル」「リソース」を考え、最も効率的に獲得する道筋を描く必要があるのです。そのゴールが具体的であればあるほど、道筋を、筋のいい仮説として描きやすくなります。
このエントリは、現状を言語化することで、経験を元にその仮説の修正を行う試みです。月中の定例にしてもいいかもしれません。