美しいコード

昨日の「プログラミングは抽象化」([id:emeitch:20050524])で、美しいコードについて語ったが、これを書いた後でなんだかもやもやした。

「美しいコード=適切に抽象化されたコード」と定義したが、この適切な抽象化とは、目的でなく手段のように思えたのだ。では、適切にコードを抽象化することの目的は何なのか...?

構造的には、

「適切に抽象化されたコード→(??何か??)=美しいコード」

だ。

そんなことを考えながら、今日も最終局面を迎えているプロジェクトのコードをいろいろ仕様変更に基づいていじっていた。そんなところへ、「美しくない!」と感じるコードを見つけた。何故美しくないと感じたか、よくよく分析してみると、

  • 複数モジュールで互いに共有すべき知識が、互いのコードに分散し、直接表現されていて、モジュールとして独立していない。

ということに気付いた。ということは、この逆、

  • 複数モジュールで互いに共有すべき知識が、しっかりまとめられ、それを参照するだけの状態になることで、モジュールとしての独立性がたもたれている。

この状態こそが、美しいコードなんだっ。と気付いたとき、そこにフッと天からありがたいお言葉が舞い降りた。

プログラムの読みやすさ、書きやすさを決めるひとつの重要な属性は、あるプログラム片を目にしたときに、その意味に影響を与える範囲が限定され得るということ、したがってその範囲さえ見ていれば、プログラム全てに目を通さなくてもそのプログラム片の持つ意味が完全に理解できること、だと思います。*1

これだっ!これこそが、美しいコードだ!昔見た、shiroさんのお言葉が脳裏を過ぎったのだ。天の恵みに感謝。そして、なによりshiroさんに感謝。

もしかしたら、「美しいコード」であるためには、もっと他のファクターが必要かもしれない。でも今は、それはわからない。ただ、少なくとも今の自分にとって、shiroさんのお言葉が指し示す内容こそが、「美しいコード」に一番必要な要素であることは間違いない。

*1:このことについては、一連の議論の発端となったMatzにっき(Matzにっき(2003-09-15))でも「心にとめて行きたい原則」として言及されています。ご参照までに。