美はシンプルさに宿る

1つのプラトンの言葉を引用します。ソフトウェア開発に携わる人ならばぜひ知っておくべき言葉、常に心に留めておくべき言葉だと思います。

「文章にしろ、和音にしろ、リズムにしろ、美しく、優雅なもの優れたものはすべて、シンプルである」

この言葉には、ソフトウェア開発において大事にすべきことが見事に要約されていると思います。

プログラマがコードを書くときに留意すべきことはいくつかありますが、まとめればだいたい次のようになるでしょう。

  • 可読性
  • 保守性
  • 開発効率
  • (言葉で表現するのが難しい)美しさ

プラトンの言葉が教えてくれるのは、シンプルであることを心がければ、上のすべてが達成されるということです。

4つ目の「美しさ」とは何でしょうか。コードが美しいとはどういう意味7日は、曖昧で、なかなか明確にはわかりません。美しいかどうかは、どうしても主観的な判断になります。何を美しいと感じるかは、その人の経験や思考に大きく影響されるでしょう。美しさにかぎらず、感じ方というのは、どうしても一人一人違ってしまいます。たとえば、いわゆる「芸術家」の美的感覚(少なくとも「美しさ」に対する考え方)は、きっと科学者とは違っているでしょう。芸術を学んだ人が「ソフトウェアの美しさ」という言葉を聞けば、それは芸術作品のような美しさのことだと思うでしょう。一方、科学を学んだ人は「ソフトウェアの美しさ」と聞くと、対称性や黄金比の話をしていると思うかもしれません。あるいは、できるだけコードの書き方を定型化すること、と解釈するかもしれません。私の経験から言うと、両者の間で最も違っているのが、「シンプルさ」というものに対する考え方のようです。

これまでに見たことがあるソースコードをどれでもいいので、頭に思い浮かべてみてください。他人の書いたコードをあまりみたことがないという人は、ページを一旦閉じ、オープンソースソフトウェアのソースコードを今すぐどこからか入手して、内容をよく見てください。冗談抜きで、今すぐです。検索すればすぐに見つかります。言語は問いません。できれば著名なプログラマの書いたソースコードがよいでしょう。

私はこれまでに、優れている、美しいと思えるコードを多数見てきました。そこには、必ずいくつか共通の特徴があると気づきました。その中でも特に重要なのが「シンプルである」ということです。アプリケーションやシステムが全体としてどれほど複雑であっても、個々の部分を取り出してみると、全てシンプルになっています。単一の責務を持ったオブジェクトは、メソッドも全て機能が絞りこまれており、名前を見ればすぐに、持っている機能がわかるようになっています。「メソッドのコードはどれも5行から10行くらいの長さにすべき」と言うと、あまりに極端な意見だと思う人もいるでしょう。言語によっては、その長さにすることが非常に難しい物もあります。しかし、それでも、それぐらいの短さを目指すべきだと私は思うのです。

美しいコードとは、突き詰めれば、シンプルなコードのことです。システムを構成する各部分が全てシンプルで、個々の部分が担う責務も最小限に抑えられていて、部分どうしの関連もシンプル、そんなコードですシンプルできれいなコードになっていればテストもしやすく、開発速度を落とさずに長期間に渡る保守が可能になります。

美は、シンプルなものから生じ、シンプルなものに宿るのです。