ホームページ目次前の話次の話

プログラマは頭は悪い方が望ましい

2008年3月8日

そろそろプログラムから足を洗い、優雅な生活、 あるいはまっとうな生活をしたいと思っていたのだが、 そんなことを思ったためか、 以前にも増してプログラムをいじる機会が増えてしまった。

プログラマは怠惰であれ、横着であれというのは知っているだろうか。 作業をするのに、「努力しました」ではなくて、 うまい方法を見つけて、たいした作業をしなくてもすむ怠惰な横着な方法でやりました、 というのが望ましいのである。

手作業で、同じ事を何度も何度もくり返さなければならなくなっても、 それをちっとも面倒と思わないプログラマ、プログラマ予備軍が何故か世の中にはいる。 あきれたものである。怠惰、横着、楽、、、については、ネット上にも 多数の情報があるので、これ以上は略す。

さて、今日は、別のこと、「プログラマは頭が悪い方が良い」ということについて考えてみよう。 一般には、コンピュータをあやつるプログラムを書くプログラマは頭が良いことが 望まれているようだが、本当にそうだろうか。

このところ、色々なプログラムおよびプログラマ、プログラマ予備軍を見ていて、 頭の程度と出来るプログラムの品質は比例ではなく反比例ではないかと 思わざるを得ないことが実に多いのである。

Javaのとても長〜い長〜いクラスファイル(5629行) のプログラムをその後もいじっていて、現在912行まで縮めた。 ここまで圧縮というか腑分けをするのに、すでに頭がくらくらしている。 1時間あたり、256行程度しか廃棄処分能力がないので、既に20時間くらいを費してしまった。

5629行のAppletクラスの中に、何もかもぶちこんでいて、それでも何とか動作しているのである。 まあ、こんなプログラムを何とか動作させるだけでも、相当に頭が良いことがわかる。 変数は private となっているが、実質的には public と同じである。 巨大クラスしかないので、当然のことながら、複数画面の切り替えから、 各画面内の操作に対する応答まで、すべてがAppletをextendsしたクラスの中で処理されている。 恐ろしいことである。

さらに、「車輪の再発明」も行なわれていた。 Appletなのだから、というかウィンドウ対応プログラムだから、 メインループが勝手に存在し、適当に要求を出せば、画面切り替えはもちろん、 その他もろもろのことをやってくれるようになっているのだが、 どうもそういう仕組が嫌いなのか知らないのか、 自分でメインループを作って、タイマーやらスレッドの管理をやってくれている。

一定時間間隔で処理しなければならないこともあるのだが、 その時間管理を、何と、メインループのまっただ中で、 システムの時間を毎度見ながら、経過時間を計算しつつ動作しているのである。 適当に、スリープさせたりして、なかなか涙ぐましい努力というか、 頑張った巨大遺跡が残っている、というかこれがないと動かないのでまだ遺跡ではない。

Javaだったら(Javaでなくてもたいてい出来ると思うが)、そんな糞面倒なことをしなくても、 Timerなるものがずっと前から存在する。 万一Timerを使わなくても、別スレッドをつくってそっちで管理してくれよ、 こんなのやってられないと思ってしまう訳である。 しかし、自作メインループなので、ここをいじると、プログラム全体が簡単に動かなくなる。

まったく救急治療も大変である。 心臓が間違って2つあり、どちらも動いてしまっているのから1つ取り除いて 正常にするような面倒な手術なので、今回は手術しないことにした。 とりあえずの延命手術だけをして、寿命が来たら、ゼロから作ることにしよう。

問題は、なぜこんなにプログラムを難しくしてしまうのだろうか。 ちょっと考えてみた。

JavaのGUIプログラミングの入門書でも読んでいれば、 こんな作りにすることはまず無いと思う。 だから、たぶん、そういうごくごく普通の勉強はしていないのではないかと思う。

しかし、作りたいものはあって、それを何とか作ってしまう天才的能力は持ち合わせている。 たぶん、普通のJavaプログラマに比較して極端に少い知識しかないけれど、 そのわずかの知識をもとに、APIマニュアルと、頭でメインループという 「車輪の再発明」が行なわれたものと思う。

プログラムを作った本人は、たぶん上手い方法を考案したものだと思っている可能性が高い。 しかし、こちらとしては、こんなことをされたら改造も何もできないではないか、 こんなプログラム捨てたい! となる。 まったく正反対の考えになってしまっていると確信している。

頭が良いから、わずかの知識や経験から、何とか動くものを作ってしまう能力があるのだろう。 ある意味、天才的というか、汗と努力の結晶といえば良いのだろうか。 一応動いているので、上手く行っていると判断してしまえば、 さらに研きがかかるに違いない。 勉強して知識なり情報蒐集するよりも、さらに熟考し、努力することに走るに違いない。

こういうとんでもないプログラムを書く人の学歴に共通の特徴がある。 それは、少くとも博士後期課程以上なのである。 博士号取得もまもなくか、すでに博士号を取得済だったりするのである。 要するに、世間一般でいうところの非常に頭の良い人なのである。

なにかもっと楽な方法、うまい方法が用意されている筈だ、 そうでなければおかしいと私は思って探すことが多い。 しかし、頭が良いと、私が難しい方法、面倒な気が狂いそうな方法という方法も、 きっと楽勝で理解できるすばらしい頭脳の持ち主に違いない。

O'Reilly Japan刊

3/14発売

出版記念
プレゼント

オープンソース
Scheme言語処理系
Gaucheの愛好者団体

詳細はブログで


ホームページ目次前の話次の話