三人のプログラマ (プログラマ分類論)

WotCMTG のプレーヤーを3タイプ考えているという文脈の話をしているときに,別のことを思い出した.ものすごく優秀なプログラマを何人か見ていて,どの人もすごいんだけど微妙に方向が違うなあといつも感じてた.それがどう違うかをずっと考察してたんだけど,こんなふうに分類できるんじゃないかと最近考えてたので少し書いてみる.プログラマは,極端に言えば次の3タイプに分類できるのではないかと思う*1



  • 芸術家: いかに,プログラムを美しく書くかに興味のある人

エレガントさ,シンプルさ,サイズの短さ,(見た目の)芸術性など,求めるものは人によって多少違う.この手の人は,使う言語や環境に拘る一方で,自分が使いたい言語なり開発環境なりが使えないプラットフォームには,全く価値を見出さない.自らの美意識を満たすプログラムを書き上げるためであれば,機能やパフォーマンスを(時には膨大な時間,金すらも)簡単に犠牲にする.また,プログラミングに関するエッセイを書かせると(芸術家だけあって)表現が独創的だったりして面白いことが多い.

  • 発明家: いかに,自分の作りたい機能を実装するかに興味のある人.

機能が実現さえできれば,言語,プラットフォーム,書き方,使うライブラリなどに拘らない.なるべく最小の手数で高速に実装することが重要であって,プログラムがスパゲティになろうが,リソースを猛烈に食おうが知ったことではない.基本は,リソースが足りないなら買い足せばいいじゃんの精神.リソース不足で機能が実装できないと,とてもイライラする.システムの内部がどのように実現されているかにはあまり興味がなく,そのシステムで「何ができるか」に興味がある.実装に使えるライブラリの情報を豊富に持っていたり,ライブラリの仕様に異常に詳しいことが多い.歩くリファレンスマニュアルみたいな人はだいたいこの部類.

  • 最適家: いかに,最適なプログラムを実装するかに興味がある人.

最適の基準は,処理速度が速い,メモリ効率が良い,バグが無いといったシステム的な基準である場合と,モジュールの拡張性の高さ,他のプログラムとの相性の良さ,デバッガにかけたときの追跡性のよさなど,数値評価しにくいパラメータである場合がある.この手の人は,最適を目指す過程でシステムやプラットフォームなどの仕組みを知ろうするため,リバースエンジニアリングの技術が高いことも多い.結果的にシステムのバグや不具合を知ることになり,そのまま暗黒面に落ちるといろいろ大変なことになる.興味をもつシステムについては異常に詳しい反面,興味のないシステムについてはゼロ知識だったりと,極端な面をもつこともある.


実際には,どれかの属性だけ極端に強いという人は少なくて,これらの組み合わせにはなっている.ただ,スーパーなプログラマを見ていると,プログラミングがすきというよりは,それぞれに実現したい何かがあって,その表現手段としてプログラミングがハマっただけ,という人が少なくない.実際,同じ属性をもつ別のことをやらせてもスーパーなんだろうと思う.

*1:あくまで私見ですよ.