似たようなものを探す能力
プログラミングにおいて、「似たようなものを探す能力」が重要だと思います。 たいていのコードは、過去の似たようなコードを参考にして書かれるからです。 探す先は、自分の記憶だったり、既存コードだったり、書籍やWeb上の情報だったりします。
こう書いてしまうと、プログラミングという作業を過度に貶めてしまう気もしますが、事実はこんなものではないでしょうか。 もちろん、真に創造的なプログラミングをしている人の存在を否定するものではありません。
- 似たようなことをしているコードを探し出す能力
- 探し出したコードを変形して、変化とその因果関係を把握する能力
こういう能力が必要になります。
ここでの「似ている」は、コードの表記が似ているという話ではありません。やろうとしていることが似ている、という意味です。 プログラミングでは、何かを実現したくてコードを書きます。やりたいことが分かっていても、どう書いてよいか分からない時の話です。
とても小さなレベルなら、今ならWebで探すだけです。例えば、現在時刻を取得するコードの書き方が知りたければ、検索エンジンで少し探せばすぐに見つかります。 Webに情報が無い社内独自言語などであれば、社内の既存コードから探すことになるでしょう。これはささやかな例ですが、この時に使うキーワードにもセンスが問われます。
もっと大きなレベルでは、多くの場合、やりたいことが単純にWebでは検索できません。こういう場合、やりたいことを小さなレベルに分解して、それぞれを探す力が必要になります。 例えばWeb系アプリなら、ユーザのフォーム入力を参照するにはどうコードを書くか、データベースから情報を引っぱるにはコードをどう書くか、などがあります。 これらの一般的な書き方はWebで調べると見つかるかもしれませんが、このぐらいのレイヤの話になると、(フレームワークなどの)環境や既存コードの流儀なども関係してくるので、既存コードから似たコードを探すことが必須です。
慣れない外国語で作文をする時のことを考えると、プログラミングの経験が無くても、この作業の難しさの想像がつくかもしれません。
例えば、方程式の解き方を説明する文を外国語で書きたいとします。 単語レベルのキーワードで探し始めるのがひとつの手です。「方程式」や「解」といった外国語の単語で探し始めます。 先に挙げたWeb系アプリの例で言えば、フォーム入力を参照するコードを探すために、parameterなどのキーワードで探すイメージです(ここでparameterというキーワードが出るにはちょっとしたメタ知識が必要ですが)。 一方、外国語で書かれた数学の教科書を参照する手段もあります。これは方程式の解き方の説明は数学の教科書にあるというメタ知識があるからです。 コードで言えば、ソフトウェアの構造上、フォーム入力を参照する箇所はこの辺にあるに違いないと当たりをつけるイメージです。
この辺にあるに違いない、と当たりをつける部分がコードリーディングのスキルです。静的に当たりをつける以外に、デバッガで追うなど動的に当たりをつける方法があります。 ここがなかなか他人に伝承不能な部分で、伝承不能ということは、スキルとしての実体も怪しいのかもしれません。
個人的には、エディタとgrepとデバッガが手に馴染んでいないと困ると思います。 ただし、まれにツールを全然使いこなしていない凄いプログラマもいるので、必要条件では無いようです。
- Category(s)
- カテゴリなし
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/inoue/code-reading/tbping