Schi Heil と叫ぶために

hiroakiuno's blog

科学の基本は分類である。プログラミングも科学である。故に…

「私って、プログラマに向いていませんね…」
と職場の後輩が嘆いていた。自分の設計をレビューで指摘された際の返し文句でもちろん冗談。でもプログラマに向いているとか向いていないとかってやっぱあるんでしょうかね?今日はその辺を考えてみる。

とは言うものの、突き詰めて考えれば当然「仕事ができる人」とか「頭がいい人」の像と同じになってしまうので、あまり突き詰めないでプログラムを書いている際に一番感じていることを考えると、それは「全ての場合を考える几帳面さがあるかどうか」ということ。つまり if (A) を考えたときに elseif すなわち A の補集合をすぐに考るかどうか。if (A&&B) を考えたら、それ以外の3通りをすぐに意識するかどうか。当たり前だがその辺が一番大事かなと思う。もちろん API やライブラリをたくさん知っているとか、イディオムやデザインパターンアーキテクチャパターンなどの定石を学ぶとか、XP やリファクタリングなどのプロセスや手法を使いこなすことは重要だが、それらは基本的に「一般に良いと言われている」プログラムを書く技術であって、勉強と経験で自然と身につけられるし向き不向きではない。そんなこと知らなくても場合の数をきちんと数えられる人が書いたプログラムは読みやすいし抜けがない。そしてそういう人は場合の数が増えたとき全てを網羅することがどれだけ大変なことかを知っているから、シンプルな設計を心がけ、結局「一般に良いと言われている」技術に行き着く。

科学の基本は分類である

これは昔ある先生が言っていた言葉でよくパクらせてもらう言葉だが結局はそういうこと。そう、思い起こせば子供の頃から、葉っぱが双葉なのか一枚なのか、卵生なのか胎生なのか、水に浮くのか沈むのか、電気を通すのか通さないのか、2で割れるのか割れないのか、多項式時間で解けるのか解けないのか、そんなことを考えるのが科学だった。図書の分類法などはその際たるもので、最近ホットなソーシャルブックマークもやはり分類である。

プログラミングも同じ。場合の数を考える力。それも適切な粒度で考える力。プログラムの設計に一番重要だと思う。一方、設計から離れアイデアや企画を考えるときには、物事を複数の立場で眺められるかどうか。詳細化には「分類」、拡張するときは「見方」が重要。そんな感じです。

以上、この文章に漏れがあってプログラマに向いていないと言われないか心配。