mongolyyのブログ

開発(Javascript, Typescript, React, Next.js)や開発手法(スクラム, アジャイル)、勉強したことについて色々書ければと。

「ちょうぜつソフトウェア設計入門」を読んだ

はじめに

メーカーのコーポレート部門でテックリードとして働いてるモンゴルです。
今回はXで話題になっていた「ちょうぜつソフトウェア設計入門」を読みました。感想を書いていこうと思います。

感想

設計原理、原則に一歩近づけた

各章、例えば、クリーンアーキテクチャで4層構造が説明されますが、経緯、その根本にある原理が書いてあって腹落ちしやすかったです。
筆者がこれまで、設計概念を抽象的にとらえて理解していたんだなと感じ、ただただすごいと感じました。

自分の印象に残ったのは、安定度の話です。
安定度が高いもの、普遍的なものを中心とすることで、変更しやすいソフトウェアが開発できる。
そして中心にモデルを置き、その外側に人側がやりたいことに関するレイヤー、使用する技術に関するレイヤーを置くという依存関係にすることで安定度が高くなると理解しました。

オブジェクト指向の理解が深まった

今まで、「カプセル化、継承、ポリモーフィズムが実装可能であればオブジェクト指向だー」くらいの雑な理解でした。
本書を読んで、「オブジェクト指向は複雑なプログラムの設計に対峙した人間が理解しやすいようにメタファーを与えて整理しようとした試み」ということを初めて知りました。

この前提に立つと、ただやみくもに継承を使うということは発生しない思いました。
また、「業務分析、ビジネス分析をしたときに整理した考え方を設計、開発に生かすために存在するんだ」という意識が高まり、分析、設計、開発は連続性をもって取り組むと良さそうとも思いました。

情報のモデリングの中で、現実そのものを表すのではなく、恣意的に分析した部分的な断面という表現も印象に残りました。
ただやみくもに分析するのではなく、顧客価値、事業価値を見据えて分析することで価値のあるモデリングができるんだと思いました。

テスト駆動開発が設計手法だということを改めて理解できた

以前、研修でTDDはテストの手法ではなく設計の手法だということを聞いたことがありました。
その時は例もなかったのでしっくり来ていなかったのですが、本書はサンプルコードがあり、テストしやすくすることで、抽象化が発生し、その結果、単一責任原則、オープンクローズド原則などが保たれやすくなると理解しました。

逆にBDDについて、TDDと似た印象を持っていましたが、本書を読んで違う結果が得られる、長所が違うということも学べました。

おわりに

本当はもっと書きたかったのですが、字数もそこそこいったのでこの辺にしたいと思います。
Xでの話題通り、めちゃくちゃ良書でした。いい意味で表紙詐欺、タイトル詐欺でした。(笑)
章立てが秀逸で、扱っているテーマは広範囲のはずなのに、しっかり流れがあって筆者の言いたいことが伝わってきたのがすごかったです。

クリーンアーキテクチャ本やエヴァンス本を読んで、もやもやしている若手におすすめの本でした。