プログラマが知るべき97のこと/美はシンプルさに宿る

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

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

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

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

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

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

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

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

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

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

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