05-美はシンプルさに宿る

プログラマが知るべき97のこと」の5つ目は、シンプルさに関する話です。簡単にまとめると「シンプルなコードは、可読性に優れ、個々の箇所の責務も適切に最小限になっており、テストもしやすく、保守も容易」であるという事です。きのこ本はどのエピソードも重要な事を書いてますが、個人的にはこのエピソードはベスト5に入る話かもしれません*1
シンプルさ、これは自分も一番気を付けていることであり、社内教育の中でも最も重要視している部分です。ここ最近話す事として、プログラマとしてのスキルアップの過程の話があります。誰でも、プログラマとして歩き始めた頃は右も左も解らず、プログラミング言語の文法を覚える所から始まります。この段階がプログラマではないとは言いませんが、1人前ではありません。その後、イディオム・アルゴリズムデザインパターンなど実装の型(かた)を覚えていきます。武道の型と同様に正しい型を反復して覚えることでプログラマ道の基礎を身につけるわけです。この段階までいけばそこそこのプログラマと言えるでしょう。しかし、様々な型や技を習得していくと、拡張性を重視して複雑な設計をしたり、複雑なアルゴリズムを書いて満足したりといった事に陥りがちです。自分もそんな時期はありましたが、リファクタリングテスト駆動開発などのプラクティスを学んでいるうちに「シンプルさ」が重要と気付きました。
シンプルであることは数多くのメリットがあります。可読性が高くなりますので、保守がしやすくなるだけではなく、バグを混入させる確率も低くなります。また、新人など成長過程のプログラミング入門者にとっては、最高の教材になります。「使うかもしれないは実装しない」というプラクティスもあるように、不要な実装をしなければ、開発効率も高くなるでしょう。そして、何よりもテストがしやすいです。単体テストを本格的に導入してくると解る所ですが、単体テストしやすい設計にすることは難しいものです。02-関数型プログラミングを学ぶことの重要性であるように関数型プログラミングの手法を組み込むなど様々なアプローチがあります。その中で最も強力なのはシンプルなAPIです。誰でも理解でき、誰もが使えるようなシンプルなAPIが最もテストしやすいわけです。
最近はGoogle App Engineを使っていますが、GAEに最適化されたフレームワークSlim3」はまさにシンプルさを追求したフレームワークです。「"Simple" and "Less Is More"」がSlim3の由来であり、コードを読んでいても、使っていても、シンプルさを体感できまず。GAEの習得には数ヶ月かかりますが、Slim3の習得には半日もあれば十分です。
さあ、「このコード、もっとシンプルにならない?」を口癖にしましょう。

プログラマが知るべき97のこと

プログラマが知るべき97のこと

*1:現在65くらいまでしか読み終わっていません