システムの美しさ

http://d.hatena.ne.jp/hirosemi/20060512#1147455233
に触発されて


一般的な「美しさ」というものにほとんど基準がないように、コードの美しさはチームという文化圏で変わります。美しいという概念すらないチームもあります。

僕はいくつかの文化圏を渡り歩いた結果、それらの経験から抽出されたできるだけ普遍的な美しさを考えたことがありました。しかし、この道を歩いてきたのは残念ながら周囲には僕しかおらず、チームに広めることは不可能でした。皆別々の文化圏を経験してたまたま今同じチームにいるだけなのです。だから仕事に美しさを求めるのは止めました。

しかし一方で、経験に基づく感覚ではなく、アプリオリに誰もが感じる美しさがあるのでは?という考えも捨て切れません。柄じゃないですけど、例えばモーツァルトの曲のように。だから汚いコードを放っておけないこともあります。「人それぞれだから」と言ってしまったらチームとしてうまく行かないと思うのです。

その結果、自動化できる点はその仕組みを使うようにしてきました。例えばインデントについては必ずフォーマッタにかけた後にリポジトリにコミットするとか。

しかし、ネーミングについては指針は決めることができても、十分なチーム内でのコミュニケーションがない限り美しくすることどころか、統一感を出すことすら難しいです。また、上手な省略もポイントだと思います。例えば、主語・述語・目的語を必ず話すような喋り方は鬱陶しいです。美しい文章には適切な省略があり、それは読者と共有しているコンテキスト、必要十分なコミュニケーションが成立しているから可能になります。コーディングも同様に言語で提供されている省略形だったり、チーム内に知られている省略した変数名を必要に応じて使うことが美しいと感じられる要因の一つである気がします。

省略が美しいなんてRubyに触らなかったら思わなかったかもしれません。Java質実剛健って感じだから。