【38】余分なコードは決して書かない

ピート・グッドリフ(Pete Goodliffe)

 「より少ないことは、より豊かなこと(Less is more)」。言い古された格言ですが、確かに真実です。

 たとえば、一部のコードを削ることで、かえってコードベースの質が向上するということもあります。私も実際にコードベースをそういう方法で改良したことがあります。

 今日のソフトウェア開発は、YAGNI(You Ain’t Gonna Need It.:それは多分、必要ない)をはじめとする XP(eXtreme Programming)のプラクティスに従って行われることが増えています。ただ、人間のすることなので、どうしても時々は、プラクティスに従わずに作業をしてしまうことがあるのです。

 以前、ある製品を開発した時、一部のタスクの実行に時間がかかりすぎるという問題が起きたことがありました。本来は、ほぼ瞬時に完了するはずの簡単なタスクです。原因は、実装をやりすぎていたことにありました。ベルやホイッスルなどといった余分な付属機能を加えすぎていたのです。作った時にはステキなアイデアに思えたのですが、結局は無駄でした。

 この時は、不要と思われるコードを削ることで、実行速度を上げることに成功しました。余分な機能をなくすことで、コードベース全体の「エントロピー」を下げた、と言うこともできます。作業の間に何も壊していないことは、ユニットテストが教えてくれました。

 これは、コードをシンプルにすることの効用が実によくわかる例だと言えます。

 しかし、そもそもなぜ、不要なはずのコードが書かれたのでしょうか? あとで余分と判断されたとはいえ、プログラマはその時必要だと思ったからそのコードを書いたわけですが、なぜそう思ったのでしょうか。またレビューやペア作業で見過ごされたのはなぜでしょうか? それはおそらく、次のような理由ではないかと考えられます。

 常に考える必要があるのです。いま自分が書いているコードは本当に必要なものなのか、と。