2005-09-01-01-コメントレス・プログラミング - project-enigma

2005-09-01-01-コメントレス・プログラミング

>> Site top >> weblog >> 月別アーカイブ >> 2005年09月のlog >> 2005-09-01-01-コメントレス・プログラミング

最終更新日付:2014/01/10 08:19:56


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

2005 年 09 月 01 日

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

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

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

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

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

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

───追記───

続編あり。

 

コメント

michieru - 09/01/2005 02:25:54 PM

アルゴリズム上は、コメントがあるとかえって邪魔っていう気がしますね。

最低限、変数名の宣言のところに、どんなデータを納めるのかを解説してくれれば、後はコードを読んで考えるわけで。

最近、他人の作ったプログラムを直す機会が多く、何の説明もなくコードのブロックごとに「なんとかの処理」と書いてあるだけのものでした。

地獄でしたね。変数名がiやjやkっていうのもあって広域的に使っていたり、似たような5〜6文字の変数名が多かったりして差がわかりにくかったりして。

そうです、データ構造だけコメントがほしいです。(^-^;;

陰郎 - 09/01/2005 08:42:22 PM

おぉ〜、michieruさん、コメントありがとうございます。

> アルゴリズム上は、コメントがあるとかえって邪魔っていう気がしますね。

見通しも悪くなりますしね。自分の場合、ネストしたループなんかがコメントのせいで1画面に収まらなかったりするともう不安になります。

> 変数名がiやjやkっていうのもあって広域的に使っていたり

局所変数ならまだしも、大域変数でその名前はもはや犯罪ですな。そもそもアルファベット1文字は名前ですらない...そういうのは軽犯罪として取り締まってはいかがかと半ば本気で思います。

> そうです、データ構造だけコメントがほしいです。

そうですね。構造体やらデータ間の関連・制約など、コードだけからでは読み取れない情報はコメントとして必須ですね。

自分の場合は個人的な開発がほとんどですから、今回書いたような、ある意味極端な流儀に走っています。でも、これが少人数のチームになるとそう簡単にはいかないでしょうし、業務開発のように頻繁に人間が入れ替わる大所帯となると、やはり官僚主義でないと制御できないというところはあると思います(何故かそういうとこで仕事してます)。そういうところでは個人間のスキル差が激しいですからね。本当にいろんな人がいます。そうなると、あの呪わしい台詞、「誰でも分かるように書いて」が聞こえてくるわけです...あ、愚痴っぽくなっちゃった。失礼しました。

このページにコメントする

 

このページのタグ

Page tag : 雑感

 

 


Copyright(C) 2005-2017 project-enigma.
Generated by CL-PREFAB.