« デザインにコト挙げする! | メイン | 目隠しして綱渡り »

2005年09月01日

コメントレス・プログラミング

 僕は自分のプログラムのソースコードにコメントを書かない。ほとんど全くと言っていいほど書かない。今日はそれについて少し書こう。

 もちろん、コメントは時として非常に大事なものだが、一般に書かれているようなコメントの大部分はそうではない。そして何より大事なことは、コメントの正当性を保証するのは人間の仕事だということだ。そして人間は間違える生き物である。他人のコードを読むとき、昔の自分のコードを読むとき、コメントが書いてあったらそれが正しいと思いたくなるだろう。コードを読み解くよりもコメントを読むほうが楽だからだ。でもそれが正しい ── つまりプログラムの動作と内容が一致している ── ことをコンパイラは保証してくれない。コメントが間違っていてもコンパイラは文句を言わないのだ。そして往々にしてコメントというのは間違っていたり曖昧だったりするのだ。そんなものは害悪でしかない。

 もうひとつ。これは穿った見方かもしれないが、「コメントをちゃんと書け」という文化は、暗に「ソースコードの可読性・理解容易性が低いのは仕方がない」という姿勢を示していると思う。官僚主義的な命名規約の下では関数名や変数名が記号の羅列のようになり、ドキュメント性を確保できない。だから説明的なコメントをつける。だらだらと長いロジックを書けば見通しが悪くなる。それをコメントで補足したくなる。こういったものはすべて「芳香剤」でしかない。つまり悪臭を放つソースコードを良い香りのするコメントでごまかしているのだ。

 公平のために書いておくと、芳香剤でないようなコメントももちろん存在する。それは必要なコメントだ。僕はコメントを全面否定するつもりはない。しかし、コードが臭くなければ芳香剤のようなコメントを書く必要もない。芳香剤を必要としないコードを書くように心がけるほうが、コメントをちゃんと書く努力をするよりもよほどまっとうだと思う。そうすれば、逆に必要なコメントの存在感が増し、目を引くようにもなるだろう。

 もうひとつ。仮にコメントが正しかったとしても、それを読んで理解した「つもり」になるのが僕は嫌いだ。コメントが誤っているというリスクを除いても、コメントを読んだだけでは「消化」できない。コードが自分の中に浸透しないのだ。コードを理解するのと完全に同等な理解が得られるコメントなど存在しない。だから僕はコードを熟読する。最終的には結局そうする必要があるのだから。

 コメントレス・プログラミングをまともに実践するには、高い抽象化能力と表現力を持った言語が必要になる。手続き型や関数型の言語では限界がある。現時点ではオブジェクト指向言語が良い。僕の道具は C++ だ。プログラミングは楽しくなければならない。

投稿者 kagelow : 2005年09月01日 11:53



kagelow home へ