プログラマのバイブルと名高い「リーダブルコード −より良いコードを書くためのシンプルで実践的なテクニック」を読みました。
リーダブルコードで検索すると、「古い」「新人」といったサジェストが表示されます。
名著なのでもう世の中に数多くのまとめ記事や感想記事がありますが、せっかくなので自分なりにもまとめようと思います。
目次
本の概要
この本は、C, C++, Java, PHP, Python, HTML, JavaScriptと多くのコーディング・プログラミング言語で書かれた、問題のあるサンプルプログラムを改善点と改善したプログラムを紹介するという形式でテクニックがまとめられています。
改善点をどういう考えで問題と捉えどのように変えたらよくなるか、丁寧にまとめられているので、一章読んだだけでもあたかも美しいコードを自分で書けるようになったかのような錯覚してしまいます。
コード自体の見やすさ、わかりやすさ
まず、見た目の美しさ・わかりやすさの説明から始まります。変数や関数の名前や、インデントや余白の使い方についても美しくわかりやすくするためのテクニックがまとめられています。
この名前だと何のための変数かわからないぞ!この名前だと別の処理の関数だと勘違いさせる可能性があるぞ!と全て例と答えをセットにまとめられています。
コメントを残す時のポイントもまとめられています。
書くべきコメント、書かないべきコメントの違いをしっかりと説明されています。
理解しやすいロジックについて
次にプログラムの論理部分について説明されます。
if文やループ文で使う論理式や、ネストの深浅について良い例悪い例がまとめられています。直感的に理解できるコードの書き方が解説されているので、理解しておきたいポイントです。
ほかに、変数を使うべきタイミングとむしろ使わない方がいいタイミングについて解説されます。コードを読む上で必要ない変数は何か、Pythonのプログラムを例に解説されています。
再利用可能で使いやすいコード構築
最後にコードを書く上で考慮すべき関数やメソッドの書き方についてまとめられています。
既に出来上がったプログラムに関しても分割するべきでロジックについて説明されています。分割したロジックを使ってプログラム全体の見通しが良くなりリファクタリングしやすくなります。
おまけ?実際にプログラムを作成する
おまけ、と言っては贅沢な部作として、実際に設計するところから順にプログラムを作成しながら今までのテクニックを身につけれるように解説する部が用意されています。
単純にプログラムを作成するのではなく、あえて横道に逸れて問題提起しながら作成しているので理解を深めることができます。
対象読者
プログラミングのバイブル・初学者や新人がまず読む本と言われています。結構難易度の高い書籍だと思いますけどね。「コードの癖がつく前に読むべき」という意見はわかりますが、初心者がサンプルコードに載ってるassert関数やオブジェクト思考プログラムを見て、問題点が理解できるのでしょうか。僕が学び初めの頃に読んだら、そもそもこのプログラムは何したいんだ?って思ってしまいそう。
(今の新人はレベルが違う可能性もある。)
最低知識は持っているべき
「HTTP関係の処理をするサンプルプログラムです。」や「クッキーの必要部分を取得するためにパースします。」のような、ITに触れていれば当然知っている単語や概念が当然のように出てきます。それについて説明されることはないので、知識がないとまずサンプルプログラムの意味自体がわからないのではないかと思いました。
必ずしもその知識を持っておく必要はないのかもしれませんが、知っているかいないかでコーディングのテクニックを活かす場面の解像度が断然変わってくると思いました。
サンプルコードの言語は、C, C++, Java, PHP, Python, HTML, JavaScriptの7種類ほどありますが、どのひとつでも(HTML以外)しっかり書いたことあれば理解できる程度のコードになっていました。プログラミング言語はどの言語でも本質は同じなのでコードの本質部分を自分なりに掴んでいれば問題なくコードを理解することはできると思います。
今から読むには古いのか?
「リーダブルコード 古い」と検索サジェストに出てきます。
結論から言うと、古いけど絶対読むべき書籍です。
この「古い」がコードのことを言っているのであれば古いです。サンプルプログラムには今は使われていない記法も確認することができました。
ただ、この書籍はコードの紹介ではなくコードを書く時の考え方、命名のわかりやすさ、構成を美しくするために記法がメインテーマです。これは初版から10年経っている今でも全く変わっておらず、むしろ今の方が宗教的に混沌としているくらいなので、今こそ皆もう一度読むべきでは?とすら思います。
感想
この本を読み切るのに大体20時間くらいかかりました。書いていることを活用しようとするとコードを書く時間も長くなってしまうと思います。
ただ読んだ知識をしっかり活かすことができれば、今後コードをリファクタリングするときや保守のとき大幅に時短できると思います。
対象読者の時も書いた通り、書籍の難易度は高いので初学者にいきなり読んで理解しとけ、とは思いません。ただこの程度の内容が理解できないままプロとして仕事をすることはできないと思いました。
駆け出しから案件を請ける前、スクールから転職活動をする前には必ずこの書籍を通るべきだと思います。
最後に個人的に特に感銘を受けたテクニックについてまとめます。
オブジェクトの整列
まずオブジェクトの整列とはどういうことか、JavaScriptのある配列を例にまとめます。
const webStatusArray = [
[ 'example.com', '2020-05-12', 'Yuhya' ],
[ 'zaty.jp', '2021-01-03', 'Zaty' ],
[ 'web-production.zaty.jp' '2022-03-01', 'Zion Tajima' ],
[ 'white-sasame.jp', '2019-05-01', 'Kuro Ango' ]
]
のような配列があるとします。括弧の内側に一つのスペースとカンマの後に一つスペースを開ける書き方をしています。僕はずっとこの書き方をしていて、個人的に規則的でとてもわかりやすいと思っていました。
ここで整列をさせた同じ配列を見てみます。
const webStatusArray = [
[ 'example.com', '2020-05-12', 'Yuhya' ],
[ 'zaty.jp', '2021-01-03', 'Zaty' ],
[ 'web-production.zaty.jp' '2022-03-01', 'Zion Tajima' ],
[ 'white-sasame.jp', '2019-05-01', 'Kuro Ango' ]
]
このように要素ごとに始まり部分を縦に揃えて整列する形式です。余白数に規則がなく、もっと文字数の多い要素を持つ列が増えたら他の部分も少し直さなければいけないので個人的には距離をおいていました。
ただ冷静になって考えると圧倒的にこの方が見やすく、3ヶ月後見返した時瞬時に理解できるのはこの書き方ですね。
余白規則なんてものよりも、わかりやすさの方がずっと大事であると反省しました。
まとめ
今回リーダブルコードを読んだ感想文を書きました。読書感想文なぞ書くのは小学生ぶりでしょうか。
かれこれ3年以上しっかりめにプログラムを書いてきたわけですが、全て独学なのでこういうリファクタリングを意識したコードやコードデザインについては我流になっているなと感じました。こういう書籍もしっかり読んで自分の知識を世の中の常識に近づけなければいけないなと思います。
リーダブルコードでも紹介されている書籍も今後読みたいと思います。