良いコードとは?
みなさんは「良いコード」と聞いて何をイメージしますか? きっと次のようにいろいろな思いを抱かれる方がいることでしょう。
- 良い仕事をしたい普通のプログラマー
- 別にハッカーを目指すわけでもないし、休日はパソコンに向かうより家族との時間を大切にしたいです。でも、だからといってプログラムが嫌いなわけではありません。良いコードは書けるようになりたいし、高いクオリティの仕事をしたいです。
- 達人プログラマーを目指す中級プログラマー
- 新しい技術は大好きっす。書籍やWebでの情報収集は常識なので、良いコードは書けていると思うっす。ただ、最近はインプットが多すぎて、ちょっと消化不良気味。ときにはアウトプットしていきたいなぁ。
- 達人プログラマー
- 良いコードが書けるようになるには時間が必要じゃ。焦らず積み上げていけば必ずや誰でも良いコードが何かわかるようになるはずじゃぞ。すべては、やるか、やらないかじゃ。
一口に良いコードと言っても、状況が異なると定義も変わってきます。一般的に、次の4つを満たすものが良いコードと言えるでしょう。
保守性が高い
私たちが書いたコードは、私たちが想像するよりも長く利用されます。あとから見て何をやっているのか理解不能なコードは良いコードとは言えません。将来の自分は記憶力において他人と同然です。つまり、他人が見て理解できるコードであれば、将来の自分が見ても理解できる良いコードであると言えます。
具体的には変数やメソッドに適切な名前を付けて、スコープを小さくすると可読性と保守性が高まります。また、長いコードの分割や重複したコードの集約、良いデータ構造の選択により、理解しやすい保守性の高いコードが実現できます。
すばやく効率的に動作する
似たような実装がいくつか考えられるとき、あきらかに効率の悪いものを選択する必要はありません。良いコードは適切なパフォーマンスで動作します。コードの計算量を常に意識し、最適なアルゴリズムを選択することでパフォーマンスを高めることができます。
正確に動作する
確実に動作し、信頼性が高いことは良いコードの条件です。「防御的プログラミング」という言葉がありますが、これは「正常な値が来るはず」という決め付けをせずに、不正な値が来ても被害を受けないように防御的にプログラミングを行うことです。良いコードは防御的で、不測のバグを生み出しにくい作りになっています。ユニットテストを導入してテストの自動化を行うことで、バグが少なく正確に動作するコードが実現できます。
無駄な部分がない
無駄がないコードは理解するのも修正するのも簡単で時間がかからないため、良いコードと言えます。コード内に繰り返し現れるパターンを劇的に短くする方法として抽象化やメタプログラミング、フレームワークの導入があります。特にフレームワークを使うだけではなく、実際に作ってみると動作原理がよくわかるのでお勧めです。動作原理がわかれば抽象化が理解でき、より無駄のないコードが書けるようになります。
本書『[増補改訂]良いコードを書く技術 ── 読みやすく保守しやすいプログラミング作法』は読みやすく保守しやすい「良いコード」の書き方を解説した入門書です。良いコードを書くための習慣から、名前の付け方、コードの分割や集約を行う方法、抽象化の作法、データ構造、計算量とアルゴリズム、ユニットテストやメタプログラミング、そして簡単なフレームワークの自作まで、プログラマーとして長く役立つ基本が身に付きます。
良いコードが書けるようになるとプログラミングがどんどん楽しくなります。日々の習慣を積み重ねて、良いコード、良い仕事を目指していきましょう。