手抜きと下手の違い

 この本は、文体というか書き方が傲慢でトゲトゲしく、好感がもてない。しかしながら、書いてあることはというと、 「まあ、そのとおりだ」と言わざるを得ない部分があり、仕方がないな、ということになる。

 よくないプログラムに2種類あります。

 1つは手抜きのプログラムです。プログラムのことがよくわかっているものでも、一度しか使わないプログラムとか、動作確認のためだけとか、とにかく数時間で作り上げなければ作ること自体が無意味になるような場合には手抜きのプログラムを作ります。プロのプログラマだって、メンテナンスのまったく必要のないときには、徹底的に手抜きのプログラムを作ります。元々腕がよいのですが、理由があっててを抜いているわけです。したがって、プログラムの筋はよく、何をやろうとしているのか見当もつかないということはありません。

 もう1つは、下手なプログラムです。コンピューターシステム全体のこととか、プログラミング言語の理解不足、経験不足などにより、やるべきことを理解できないまま書き上げたプログラムです。無駄が非常に多く、プログラムが混乱していて、何をやろうとしているのか読み取れないものです。自分で書いたプログラムの面倒を、自分でできないでいるのです。

 この2つはまったく違います。よく「汚いプログラム」という言い方をします。この場合は、だいたい下手なプログラムを意味しています。下手なプログラムに対して「汚い」と指摘すると、時間がないからとか、忙しかったからとか理由をつけますが、それならば手を抜けばよいのです。上手がいくら手を抜いても下手なプログラムを作れるわけではありません。上手が手を抜いたプログラムは手元にいっぱいあるのですが、診断室の対象になるような汚さはありませんでした。上手が下手のふりをして下手なプログラムを捏造しても、うまく捏造できません。上手な者には下手な者のまねをするのは困難です。

 「汚い」というのにも、さまざまなパターンがあります。ソースリストが見かけ上ぐちゃぐちゃしている程度のから、設計そのものが完全におかしいのではないか、全部廃棄して作り直す以外に手はないものまであります。全部廃棄して作り直すにしても、どうして完全な再作成をすべきかを理解しないままで作業すると、結局同程度のものができることになります。これは指導するときに非常に注意しなければいけないことです。細かい点をいっぱい指導するより、重要などうしようもない点を1つ2つ指導すれば、見違えるようなプログラムを作ってくるはずです。

 この診断室では、下手の下手たる本質をできるだけ研究し、まとめようとしたものです。下手にもいろいろ種類があり、救える人もいれば、もう救いがたい人もいっぱいいます。自ら上手になろうと努力している人が救われるだけでしょう。

(『Cプログラミング診断室』藤原博文 1993)

こさぼのページ