エンジニアにおすすめの書籍として『リーダブルコード』が挙げられることがよくありますね。
もとは英語の書籍ということもあり、
「なんとなく難しそう...」、「自分にはまだ早い...」
と思ってる方も居るのではないでしょうか?
筆者自身まだまだプログラミング学習中の身ですが、「もっと早く読めばよかった!」と少し後悔したので、重要だと感じた部分を簡単に要約しつつ、感想をまとめてみました。
理解しやすいコードって?
理解しやすいコードの方が良い。
「そんなことはわかってるけど、じゃあ具体的に何を改善したら良いの?」
本書はまさにそんな疑問に答えてくれます。
他人が最短で理解できるコードを意識しよう
コードは他人が最短で理解できるコードでなければならない
これは個人で学習・開発していると気づきにくい+軽視しがちな部分じゃないでしょうか?
初心者のうちは「どうせ自分しか見ないし、、、」と考えがちですよね。
しかし、ここで言う"他の人"とは数カ月後の自分も含まれています。
数ヶ月前に自分が書いたコードを見ると、まったく理解できないまでとは言わずとも
「...あれ、ここどうなってるんだっけ...?」と少し考えてしまうことがあるでしょう。
つまり、後々の自分を含めたすべての人が最短で理解できるコードを意識しよう、という事です。
コードの短さよりも理解にかかる時間の短さを優先しよう
これは初心者よりも少しコードが書けるようになった段階で陥りがちな気がします。
複雑な処理を無理に短くまとめて、

「よっしゃ、めっちゃスッキリ書けた!俺って天才...?」
というオレオレコードはやめようね、という話。笑
重要度は「コードの短さ < 理解にかかる時間の短さ」です。
本当にそのコードが理解しやすいのか一度立ち止まって、客観的視点で確かめましょう。
名前に情報を詰め込む
ここで言う「名前」とは「変数名」ことだと思ってください。
では具体的にどんなことを意識すればいいのでしょうか?
明確な名前をつける
気取った言い回しよりも明確で正確な方がいい
例えば、getPage(url)という関数があったとしましょう。
関数内のコードを読まずに、名前だけを見たときにすぐに役割がわかりますか?
「どこからページを取ってくるの?、インターネットから?データベースから?」
まだ少し疑問が残りますね。
もしインターネットから取ってくるのならdownloadPageやfetchPageの方が明確です。
とまぁ、ここまでが書籍で挙げられていた内容ですが、個人的に正直ここは「すぐに改善するのは難しいな」と感じました。
何度もコードを書いていくことで頻出の表現を覚えるのが良さそうですね。
汎用的な名前を避ける
例えばretval(return value = 返り値の略)などの汎用的な名前をつけたとしましょう。
この名前からは「返り値であること」しか情報を得られません。
(関数から戻ってくる値の時点で返り値なのは当たり前ですよね。)
retvalという名前には情報がない。変数の値の性質を表した名前を付けよう。
変数の性質をしっかりと表した名前をつけることで、理解しやすさだけでなくバグの発見にも役立ちます。
関数を書くときに気をつけること
プログラミングをしていく上で避けて通れないのは、「関数」です。
初心者のうちは一つの関数がどんどん肥大化していく、、、なんてこともよくありますよね。
そんな問題への具体的な解決法が紹介されています。
上位問題と下位問題を切り分ける
例えば、最終的な目標が「タスクAを処理すること」である関数があったとします。
ただ「タスクAを処理するためには前準備としてタスクBを処理することが必要」だと仮定しましょう。
つまり順番としてはタスクBを処理→その結果を使ってタスクAを処理です。
ここで一つの関数に「タスクBの処理をしてからタスクAを処理する」というロジックを詰め込むのは適切ではありません、というお話です。
本書ではタスクAを上位問題(最終的に達成したい処理)、タスクBを下位問題(最終目標の過程に過ぎない処理)と定義しています。
これらを切り分けて小さな関数に分けることが理解しやすいコードに繋がります。
一度に一つのタスクを
タスクをどのように分割するかよりも、分割するということが大切なのだ。
一つの関数内で並行していくつもの処理を行うのはやめましょう、ということです。
他人が理解しにくいだけでなく、バグの温床にもなってしまいます。
ここでは、具体的ステップとして以下の方法が紹介されていました。
上のステップに沿って「一度に一つのタスクを」という原則をしっかりと守れば、見通しの良いコードが書けるようになるでしょう。
ただ、個人的にここが一番難しいと感じた部分でもあります。
具体的な切り分け方や改善方法は割愛するので、ぜひ書籍で確かめてみてください。
まとめ
今回は『リーダブルコード』を簡単に要約&感想をまとめてみました。
"より良いコードを書くためのシンプルで実践的なテクニック"と謳っているだけあって、他にもすぐに使えるテクニックがかなり詰まっている印象です。
早いうちからこの本の内容を意識できればかなりレベルの高いコードを書けるようになるんじゃないでしょうか?
今回触れた内容はほんの一部に過ぎないので、もっと詳しく知りたい方はぜひ購入してみてください。
この本では実際の現場のコードを使って例が挙げられているのでイメージしやすく、初心者から上級者までおすすめできます。