なぜ私はいまだにプログラミングをするのか

当ポストはコンピュータ・サイエンティストDaniel Lemire氏のブログ記事翻訳です。原文へのリンクはこちら:http://lemire.me/blog/archives/2011/06/06/why-i-still-program/

なぜ私はいまだにプログラミングをするのか

歳をとるにしたがって、プログラミングのような実践的な仕事から遠ざかり、チーム・マネジメントや資金調達といったもっと高級なものに仕事の場を移すことが普通のことだと思われています。「真の教授」たるもの、細かいことは下々にまかせ、「ビッグ・ピクチャー」を掲げておけばよいというようなアカデミアにおいては、これはまったくその通りなのでしょう。別の言葉でいえば、そのような組織は垂直コラボレーションの力学が働くように設計されています。つまり、階層構造の頂点に立つ人々が、他の(賃金の安い)従業員を監督するという風にできています。研究の場では、これは、シニア・サイエンティストがアイデアを出し、ジュニア・サイエンティストがそのアイデアを実装するということを意味します。時を経るにしたがい、シニア・サイエンティストはジュニア・サイエンティストのやっていることができなくなってしまうかもしれません。でも、彼らは資金調達のエキスパートになります。このモデルは規模を拡大させることができます。つまり、シニア・サイエンティストは中間レベルのサイエンティストに指示を出し、その中間レベルのサイエンティストはさらに一段下の階層にいる人に指示をだし、さらに…という具合です。ジョージ・チャムはこのモデルを“教授ネズミ講”*1と呼びました。資金が潤沢で、ずっと増え続けるならばとてもうまくいくモデルだからです。

これと逆の形態が水平コラボレーションです。このモデルではシニア・サイエンティストはすべてをこなします。壮大なアイデアを出すところから、その執行までです。彼らは面倒な仕事を、可能であれば自動化したり避けたりしようとします。コラボレーションは主に、自分とは違う視点を得るため、あるいは足りない部分を補完してくれる専門知識を得るためになされます。このモデルは資金が乏しい時でもうまくいきますが、関わる人間の頭数という意味での規模は拡大できません。水平コラボレーションには人との親密な関係が不可欠だからです。

それぞれのモデルは得意とする仕事の性質が異なります。推測するに、垂直コラボレーションは、長期計画で、かつ結果が予測できるものに向いています。水平コラボレーションは偶発的発見や「野性的」アイデアを試すのに向いていると思います。

水平コラボレーション支持者の表れとして、私は、歳をとったにもかかわらずいまだにプログラミングをしています。これは普通のことではありません。聞いた人が怪訝な顔をするぐらいには変なことなのです。書くのにとても長い時間がかかるプログラムもあります。私は年間2〜3ヶ月、プログラミングに時間を費やしています。おそらく、プログラミングのような下層のタスクに費やすには、私の時間は貴重すぎます。私のなん分の一かのお給料の人に、うまくやってもらえることですから。では、なぜ私はいまだにプログラミングをするのでしょう?

もしかしたら、私を最も擁護してくれるのは、巨匠ドナルド・クヌースかもしれません。曰く、

高位レベルの抽象的なアイデアの力と美を発見した者は、往々にしてある間違いを犯す。すなわち、低位レベルの具体的アイデアにはそれほど価値はなく、忘れてしまってもかまわないと思い込むのである。(中略)対照的に、一流のコンピュータ・サイエンティストは、コンピュータが実際どのように動いているかという基本概念に徹底して根を張った思考をする。現に、コンピュータ・サイエンスをやる上で要となるのは、様々なレベルの抽象化を同時に考える能力である。

ただ、私はこれとは別に持論も持っています。

  • 私は重要な仕事やインパクトのある仕事をしたいと思っています。しかし、論文は、たくさん引用されるものであってさえも、なかなか人に読まれるものではありません。大きなインパクトを持つ論文はほとんどありません。一方で、ソフトウェアの世界で意義のある仕事をするのは、論文の世界と比べれば簡単です。例えば、最近Facebookのある開発チームが、Apache Hive(データ保存のためのHadoopベースのフレームワーク)に入っている私の“圧縮ビットマップ・インデックス・ライブラリ”のひとつをシステムに組み込みました。賭けてもいいですが、このソフトウェアを私が書くことになった原論文を、Facebookの誰ひとり読んでいないでしょう。
  • 自分のアイデアを実装しようとした際に、そのアイデアをより深く理解する必要に迫られるという経験を何度となくしてきました。よくあるのは、論文の中ではお行儀よくみえていたものが、実装しなくてはいけないとなると、突如として奇怪で扱いづらいものに感じられるということです。また、数学的議論にバグがあったことを、実装を通じて発見することも度々です。この仕事を誰か他の人にアウトソースできるでしょうか?えぇ、おそらく。でもそうしたら、この過程はいまほど実りのあるものではなくなってしまうでしょう。
  • 人は時間とともにプログラミングが上手くなるものです。私は数十年にわたってこの能力を鍛えあげてきました。他の人だったら数週間あるいは数ヶ月かかるであろう難しい問題を、一から書きはじめて数日のうちに仕上げて解いてしまうというのは気分のよいものです。

もし私の議論が理にかなっており、かつ、ドナルド・クヌースまでもが私の味方なのであれば、なぜ、私がプログラマー兼サイエンティストだと打ち明けると人々は驚くのでしょう?下層の仕事としてプログラミングを拒絶する現象は「有閑階級の理論」によって説明することができます。実際、人は有用性ではなく名誉を求めています。道具づくり、調理、あるいは農業などは名誉なこととはされません。名誉を最大化したいなら、有閑階級に仲間入りすることです。そこではあなたのする仕事は、ただちに何かの役に立つようなことがあってはなりません。そんなわけで、CEOや政治家になる方が、看護婦や料理人になるより誉れ高いのです。はるか彼方から指揮をとるサイエンティストに名誉があるのです。プログラミングは道具づくりみたいなものですから、有閑階級の人たちは関わろうとしません。彼らは肩書きに、「エンジニア」、「アナリスト」または「デベロッパー」などを使用しますが、「プログラマー」を使うことはほとんどありません。役に立ちすぎるからです。

注意:すべての人がプログラミングをすべきということではありません。プログラミングは多くの時間を消費する活動です。私はプログラミングをしすぎるため、他の多くのエキサイティングなことができないでいます。

さらなる読み物: フレデリック・P・ブルックス Jr. , 「デザインのためのデザイン」, 2010

*1:訳注:原文ではProfezi scheme."Ponzi scheme"=ネズミ講と"Professor"=教授をかけた言葉遊び