見出し画像

【読書感想文】良いコード/悪いコードで学ぶ設計入門

どんな本か?

この世のソースコードは「一回書いて終わり」というものは少なく、
「一回作り上げたあと、継続的に保守をしてアップデートし続けていく」というものがほとんどだと思います。

この本は「継続的に保守をしてアップデートをしやすくするためには
どのようなことに気をつけてコードを書いたら良いか」
ということが細かく書かれています。

特によかったポイント

①数少ない「ソースコードの設計」に関する書籍

この本は
「プログラムをどうやって書けば分かりやすく、バグを生みにくく、保守しやすくなるか」
ということについて徹底的に書かれています。

そもそもの問題として、こういった内容に触れている書籍は数少ないです。
「プログラムが正しく動けばそれで良い」と考えている人たちが多かったり、
初心者向けの書籍の方が需要が高いことが原因だと思われます。

初心者向けの本として「リーダブルコード」が良く例に挙げられますが、
あれは良本であると同時に、他にコードの書き方本がほとんどないという側面もあるのではないでしょうか。

②具体例が詳細に書かれていて初心者にも分かりやすい

この本には、「悪いコード」とそれを改善した「良いコード」が比較されて書かれています。
これによって、分かりやすいということはもちろんですが、
それ以上にアンチパターンに気づくことが大きなメリットです。

自分もそうですが、「悪いコード」を書く人は
わざわざ複雑なコードを書こうとしているわけではなく
気づかない間に書いてしまっているだけなのです。

コードを書いているときに「あ、これは良くない書き方だな」と気付けることこそが、初心者にとって大きな一歩になります。

③明日の業務から活かすことができるレベルで実用的

この本は

  • よくやってしまう悪いコード

  • 例が具体的

という特性上、明日の業務から活かすことができるレベルで書かれています。

コード設計の王道であるドメイン駆動設計などの考え方は、
保守運用でどうこうなるものではなく最初の設計が決め手になります。

一方この本では、「明日修正する保守作業」からでも気をつけることができます。

つまり日常的にコードを書いている人であれば
この本で読んだ知識を明日から活かすことができます。

④リーダブルコードとの違い

「リーダブルコード」と比較して、本書は次のような特徴があります。

■リーダブルコード

  • 主に手続型で書かれることを想定していて、オブジェクト指向には触れていない

  • 一般的なプログラミングの処理を題材にしている

  • 小手先の修正で改善できるアイデアが多い

■良いコード/悪いコードで学ぶ設計入門

  • 主にオブジェクト指向言語で実装することを想定している

  • 業務ロジックで書かれそうな処理を題材にしている

  • リファクタリングする場合、やや大きな変更になる

「リーダブルコード」の参考コードにもC++、JavaScript、Javaなどが使われているが、classやinterfaceなどについては触れられていない。
その点、「良いコード/悪いコードで学ぶ設計入門」ではそういったclassやinterfaceの機能、列挙型などの機能を使った解決策が提示されている点が大きな違いになる。

⑤一番学びのあった章

一番学びのあった章は「条件分岐」の章です。

プログラミングとしては、条件分岐が少ない方がわかりやすいコードになります。
ただし複雑な業務ロジックを表現するためには、多くの条件分岐が必要になるのは当然のことです。

その点、この本では「条件分岐を減らす方法」が書かれており、
今まで「条件分岐は分かりやすく書けても減らすことはできない」
と考えていた私にとって非常に衝撃的でした。

どんな人におすすめか?

  • コードを書くのにある程度慣れてきた人

  • プログラミング初心者を脱却したい人

  • 保守運用で既存のコードを修正するときに苦労した人

  • これから新規システムをゼロから作成しようとしている人

まとめ

システムの改修のたびに、過去のコードに苦しめられるのは避けたいことです。

  • 読みにくくて既存コードの理解に時間がかかる

  • こっちのコードを修正すると、あっちのコードに影響が出る

  • 影響調査が大変、影響範囲が大きすぎる

  • リリース後に修正漏れに気づいた

このような経験をした人なら「なるほど、こうすれば良かったのか」
と思えるような内容になっています。

未来への負の遺産を残さないためにも、
良いコードを書けるようになって、エンジニアとして一つレベルアップしましょう。

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?