プログラムコードは消費するもの
ココログの元開発者であり、現在「はてな」にいる伊藤直也さんが、CNETの連載コラムを書いています。「梅田望夫・英語で読むITトレンド」のゲストライターとしてなのだが、いつもながらキレ味のいい文章で、彼が純粋な技術以外のところでも大きな才能を発揮していることを感じます。
「インターネット時代のエンジニアの価値」という題で、ネットで先人のソースなどを見られるようになったおかげで、技術の差は縮まってくる、ということなど、なかなか面白い。
http://blog.japan.cnet.com/umeda/archives/001893.html
その中で、「人月計算」の話がちょっとでてきます、
人月計算という計算方法があります。あるシステムを構築するにあたって、「このシステムは10人月だから、1人月100万円として1000万円だね」といった会話がなされます。そのシステムを作るのに10人分の労力がかかるから1000万円ということです。この会話に違和感を覚える人も多いはず。そこには、各個人の能力というものが一切考慮されていません。しかし、IT業界においてはこの人月計算がシステム構築コストを算定するにあたっての標準的な物差しです。
これをさらに細分化したような考え方に「(プログラムの)コード1行につきいくら」というものがあります。
「1ヶ月で1000行プログラムを書く人」のことを、「あの人の〈生産性〉は1000行/月だ」などといいます。
上記の「人月いくら」と合わせると、「1行あたり1000円」などという数字もハジきだされます。(それが取引単位になることはふつうはありませんが)
「生産性」というくらいですから、プログラムの「行」は「生産するもの」と考えられているわけです。
ところが、これに対して「コードは(生産するものではなく)『消費するもの』である」と言った人がいます。最初に言ったのが誰かは確かめていませんが、ぼくが読んだのは Edsger Dijkstra(ダイクストラ)が1989年2月にACMの会議の招待講演で話した"On the Cruelty of Really Teaching Computer Science"(勝手訳「コンピューターサイエンスを本当に教えることの残酷さ」)というスピーチの講義録です。
(プログラムコードの行数を数えること自体に意味があるとは思えないが)、《もし数えるのであれば、「生産された行数」ではなくて「消費された行数」と考えるべきである》
というのです。サラッと書いてあるだけだったので、はじめはよく意味がわからなかったのですが、コードというのはプログラムという生産物を作るために「消費する」ものであって、コード自体が生産物ではない、ということなんですね。
「私は300行のコードを生産した」
ではなくて
「私は(このプログラムを作るために)300行のコードを消費した」
あるいは
「300行のコードを消費して、このプログラムを作った」
というべきだということだと思います。
これは新鮮でした。
同じことをするプログラムを「無駄なコードを書いて行数を多くした方が高く売れる」という不条理は、わかっていたことですが、こうしてはっきり言われてしまうと、バカバカしさが明らかになります。ダイクストラは、
《こうした考え方のバカバカしさは、帳簿の収支の反対側につけているようなもの》
とも言っています。
どこかに同じような話があったなと思ったら、「仕事が遅いほど残業手当が多くなる」という話でした。
November 30, 2004 at 09:50 AM in 日記・コラム・つぶやき | Permalink
TrackBack
TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/4586/2110200
Listed below are links to weblogs that reference プログラムコードは消費するもの:
Comments
「仕事が遅いほど残業手当が多くなる」奴は私の会社にもいるなぁ。
ずっと昔のことだけれど、DOSの時代にVZエディターのお世話になっていました。このソフトの前身はわずか9801バイトで書かれていたと聞きました。
短いコードでエレガントなアルゴリズムが最高ですね。
Posted by: 271828 | Nov 30, 2004 7:07:53 PM
時間で金を払えば無駄な時間を使われ、金額を固定すればさぼるし、かといって「歩合制」にできる仕事は限られていますからね。まあ、そんなことが心配になるようでは、どこか他が狂っているのでしょうけど。
VZ好きでした。9801バイトってのはPC-9801のシャレなんだろうか。それにしても小さい。究極の「小さいプログラム」は、「エレガント」ではなくなる恐れがありますが、ふつうのレベルでは「エレガントかつ小さい」のでしょうね。
プログラミングには興味はあったのですが、Excelのマクロもロクに書けません。
Posted by: のぶ | Dec 2, 2004 9:28:14 AM