僕がCakePHPを選んだ理由。次の一歩はRailsかjQueryか

2月後半からプログラミングに集中できるようになり、2ヶ月がたちました。
CakePHPで2つ目のWebアプリがほぼ完成し、データ待ちになった今、学習初期の思考と次の一歩の意思決定を振り返るためのメモ。

CakePHPを使った理由

プログラム設計の素養を身につけたいという思いと、最速でサービスを完成させたいという思いのバランスをとった選択でした。

良いコードを書く素養

僕は、「良いプログラマ」になりたいです。プログラマは、人により生産性が大きく異なること。特にチームで開発する際に大きな差が生まれることを、多くの人から聞いて心に留めていたのです。その要素がどんなものかは知らずとも。
それを学ぶため、達人プログラマなどを読みました。その中で、「良いプログラマ」の素養の一つが「良いコード」を書けることで*1、良いコードの要素は。「保守性」「堅牢性」「パフォーマンス」に集約できそうだと結論づけました。
保守性=チームで効率よく開発、保守できること。可読性や再利用性を高めることはその手段で、OOPMVCの分離、変数の命名、インデントなどを含む。
堅牢性=想定外の動作を引き起こさないこと。サニタイズなどのセキュリティ対策や、バリデーションや例外処理といった、想定外の状況への対策を含む。
パフォーマンス=一定の環境下で、実行時間や使用リソースが小さいこと。アルゴリズムとデータ構造の知識や経験、ボトルネックを見抜く能力が必要。

フレームワークでショートカット

良いコードを書くには、良いコードを読むことだといいます。僕が初めて読んだオープンソースのコードはWordPressだったのですが、その善し悪し以前に、全く意味が理解できませんでした。
その直前に、平PHPで2ちゃん風スレッドフロート式掲示板をさくっと作り、プログラミング楽しい!オレできるかも!を実感した直後のことでした。同じ動くプログラムでも、そのコードは月とスッポンほどに違っていました。
そのコードを「良いコード」へリファクタリングするのは諦め、新しいサービスをフレームワークで作ることにしました。フレームワークを使い、その規約に従うことで、「保守性」「堅牢性」の多くの部分がカバーされると考えたのです。

どのフレームワーク

残る問題は、どのフレームワークを使うかです。最速でサービスを完成させるため、PHPを使うことは既定路線でした。前職サービスでの使用言語がPHPで、最悪その時の先輩に質問可能でしたし、XAMPPにより「コードを書けば実行できる」環境が整っていました。
残る考慮要素は、学習の容易さ、ライブラリの充実度合い、フレームワークの適正開発規模、将来的な有用性でした。
僕の場合は、「フレームワークが人気であるか」が前者2点に大きく関わるという判断、とりあえずは小規模開発である、また将来のRailsへの移行を意識し、CakePHPにしました。*2

次の技術的な一歩は?

今こそ新しい一歩を踏み出すとき

今、新しい技術に手をつけたいと思っています。一方で、やっとCakePHPをスラスラと扱えるようになったところ、また生産性が下がるのは辛いです。しかし技術的にもサービス的にも適切なタイミングだと思っています。
サービス面→マネタイズ、生産性向上のコアとなる2サービスが完成し、自分の中で重要度の高いサービスの新規作成が一旦完了した。また、これらのメンテナンスと改良でどちらにしろCakePHPは使い続ける。
技術面→PHPCakePHPというワンライン状態から脱することで、言語、FWを相対的に見ることができるようになる。それが、今後の技術選択の意思決定の質を大幅に上げると予想される。

RailsjQuery

次の一歩として考えているのは、Ruby+RailsJavaScript+jQueryです。
Rubyは、今後のメイン言語候補、プログラマとしての「良い習慣」の実践という意味で良い選択肢かなと。Ruby(Rails)は生産性が高く、変化への適応性に富んだ言語のようです。また、Rails使用者の多くには、新しいものへの貪欲さと、それをアウトプットする積極性があると感じています。これはサービス完成最優先で、BDDやCIなんかを無視してきた僕には、ツール、情報量の面でありがたいものです。
一方JavaScriptは、「できることを広げる」という観点で非常に有望そうです。アニメーションやajaxは、ハイレベルなUXを実現してくれるはずです。また、Titaniumを使ったネイティブアプリも手を出してみたい分野です。
PythonRubyに近いところでかなり悩んで検討しましたが、一旦Rubyで。世界的なトレンドはあれど、欧米の開発者とコラボする予定もないですし。

技術戦略、資金戦略、人生戦略

どう生きるか、の意思決定

RailsjQueryかってのは、どう見ても技術的な優位や将来性の話ではなく、僕が今後何をしたいかによって決まることです。
現状の僕は、あまりに多くのことをやりすぎているようです。この2ヶ月の間、プログラミングに加え、HTMLとCSSgimpの使い方も学習し、企画デザイン含め全て一人でやりきりました。
これは「学習能力」という僕の最大の強みの発揮であり、「パートナー探し」という重要事項の回避でもあります。
下手に学習能力が高いために、パートナーを探す努力をしていない面は否めず、これはネガティブな結果を招くかもしれません。今はクラウドワークスなんてサービスもありますし、デザインなんかは人にお願いし、そのご縁を大事にしつつパートナーを見つけたいと思う次第です。

戦略的に生きる

僕が常に心がけているのは、戦略的に生きることです。戦略的に生きるには、ゴールが明確でなくてはいけません。自分が幸福になるために実現したいことを明確にし、その実現に必要な「スキル」「リソース」を考え、最も効率的に獲得する道筋を描く必要があるのです。そのゴールが具体的であればあるほど、道筋を、筋のいい仮説として描きやすくなります。
このエントリは、現状を言語化することで、経験を元にその仮説の修正を行う試みです。月中の定例にしてもいいかもしれません。

*1:この過程で良いプログラマ≠良いコードを書くプログラマでないことも学びました。多くの習慣、知識や人に対するスタンスの総体として良いプログラマは存在するのだなと

*2:実はこの時勉強不足でCodeigniterを知りませんでした。知ってたらCodeigniterにしたかも