項目 | 評価 |
---|---|
オススメ度 | – 2022年発売の個人的ベスト本の1つ |
内容がためになるか | – 表紙を良い意味で裏切る本格的な内容 |
読みやすさ | – 文体は柔らかく読み物のように読める |
面白さ | – 挿絵の漫画が意外と本質的で面白い |
人気度 | 発売当初からかなり人気。Amazon ベストセラー1位 |
対象レベル | 中級者にステップアップしたい初級者〜中級者 |
本書について
タイトル:ちょうぜつソフトウェア設計入門 PHPで理解するオブジェクト指向の活用
発売日:2022年12月
ページ数:328ページ
著者:田中ひさてる氏 Twitter Qiita
ちょうぜつ Advent Calendar 2020
ちょうぜつ設計とは(著者の方が発売後にQiitaに投稿)
たまに、調べ物をしていてQiitaを見た時に漫画が載っていることがあったが、その著者の方だった。
全体の感想
- 素晴らしい本だった。非常にためになった。今までの本とは違った視点でソフトウェア設計に必要な観点を教えてくれた。
- 説明はわかりやすく、挿絵も楽しく、読後感がスッキリとしていた。
- ソフトウェアエンジニアにとって必読であるRobert C. Martinの本を読む前の準備として最適と思う。
- Robert C. MartinのClean Architectureは読んだことがあったが、抽象的で何となくしかわかっていなかった。この本は、より具体的に繰り返し説明してくれていたため、なるほど!と思うことが多々あった。
- パッケージ原則について、ここまで丁寧にわかりやすく説明してくれている本は他に無いのでは?と思う。
- 抽象に依存する重要性をわかりやすく学ぶことができた。
- この本を読むことは、中級者にステップアップするための近道になると思う。
- PHPとあるが言語は本質ではないため、Web系だけでなく、組込み系やアプリ系の人にもオススメ。
オススメ読書ルートと想定読者
オブジェクト指向でなぜつくるのか => Head First デザインパターン 第2版 => 本書「ちょうぜつソフトウェア設計入門」 => アジャイルソフトウェア開発の奥義 => Clean Architecture
ある程度、基礎的なオブジェクト指向(カプセル化・継承・ポリモーフィズム、抽象クラス、インターフェース等)について知っていないと本書の言いたいことを上手く理解できないかもしれない。これらが初見であれば、まずはオブジェクト指向でなぜつくるのかでオブジェクト指向の基本を知るのが良いと思う。Head First デザインパターン 第2版は、オブジェクト指向を学ぶ上で非常に楽しく、抽象に依存することの重要性やオブジェクト指向原則などについて本質的な理解が得られる一冊のため、本書の前か後に読むと効果抜群と思う。実際、自分はこの本が発売される前にHead Firstを読んでいたため、このちょうぜつ本も理解しやすかったと思う。
このちょうぜつ本はできるだけ抽象的な説明だけで終わらせないようにしている配慮を感じる。そのため、Bobおじさん(Robert C. Martin)の本を読む前の1冊としては最適と思う。Bobおじさんの本は本質を教えてくれるが、重厚で難しい部分もあるため、本書のような現代的で取っ付きやすい本から始めて、原書で知識を深める順序が良い気がする。アジャイルソフトウェア開発の奥義は700ページ程ある鈍器なので、読み終えるのにはなかなか時間がかかる。Clean Architectureは少し抽象的なので、1回読むだけで理解することは難しいと思う。
感じた想定読者は、
- プログラミングはある程度できるようになったが、仕様変更で機能が追加されたり、機能が変更される場合に、あちこちを修正しないといけない、テストも色々とやり直すことになって非効率、等を経験し、もっと効率的なプログラミング方法、ソフトウェア設計方法がないのだろうか、と感じてきたソフトウェアエンジニア。
- しかし、わかりやすい説明なので、最低限1言語でもプログラミングができるようになったら読むのも有りな気がする。次の一歩を進めるのが速くなれると思う。
- 中級者が再度頭を整理するために読むのも良い気がする。
- Bobおじさん(Robert C. Martin)の本を読んだが難しいと感じた、またはこれから読もうとしている人。
迷うくらいなら買ったほうが良い、と言えるくらいオススメできます。
Clean Architectureは既に読んだけど、正直ちゃんとは理解できていなかった。この本はClean Architectureやアジャイルソフトウェア開発の奥義の前に読む本として、かなり良さそう、というのが本書の読み方を読んで思った感想。なので真っ先に読むことにした。#ちょうぜつ本
— アジャイルクマムシ (@agile_kumamushi) December 18, 2022
入門書で共感できることはわりと近い距離で名作洋書につながってるよという思いなのでオススメしてもらいたい #ちょうぜつ本 https://t.co/Qwsrc7HxJy
— 田中ひさてる (@tanakahisateru) January 11, 2023
本書の概要
- PHPはあまり関係ない。どの言語でも使える設計の基礎部分を説明してくれている。
- 大学教授のレビューも受けている (東京工業大学/京都大学 首藤研究室)。
- 章毎に独立しておらず、全体で1本の物語になるように構成されているため通読がおすすめ。
- 「ソフトウェア設計」のうち、どんなアプリケーション機能を提供するかと、具体的にどんなミドルウェアとアルゴリズムで機能を実現するかを除いた領域、ソフトウェアのアーキテクチャ作りに着目している。
- 安定して良いプログラムを書き続ける支えとなるアイデア、広く知られたコード構成ノウハウ、といったものを通じて、アジャイル登場以降の現在のソフトウェア設計が共通して持っている、前提知識の感覚を得るのをねらいとしている。
- 少しずつ明文化されていった達人(ソフトウェア工学の偉人)の感覚の中にしかなかった原理や知見を、最速で理解できる順序に並び替えている。
- 参考文献を見るとわかるが、Bobおじさん(Robert C. Martin)の本に大きく影響を受けている。
Bobおじさん(Robert C. Martin)の本との関連に関して、著者の方がtwitterで質問に答えてくれた。この回答もあって、「アジャイルソフトウェア開発の奥義」を読む前に、この本を読むことにした。Clean Craftsmanshipはいずれ読みたい本。
「ちょうぜつソフトウェア設計入門」のamazon説明見たら、Bobおじさんの「アジャイルソフトウェア開発の奥義」に影響を受けいてそうな構成に感じた。今、アジャイルソフトウェア開発の奥義を読もうとしてるけど、#ちょうぜつ本 を先に読んだほうがいいのか、どっちだろう。
— アジャイルクマムシ (@agile_kumamushi) December 14, 2022
ボブおじ本が、OOPわかる前提→SOLID→パッケージ→クリーン、の順に進むのって、人によってオブジェクト指向の意味がブレブレだと理解できないと思って、OOPぬきで目的から逆順に進めるかたちで書きました。クリーンアーキテクチャ、アジャイル、クラフトマンシップの3冊とかぶってます
— 田中ひさてる (@tanakahisateru) December 15, 2022
クラフトマンシップとかぶったのは偶然なんですけどね。原稿書き終わったあと出版されてびっくりしました。まさか倫理と歴史とかTDDとかまでかぶるとは…
— 田中ひさてる (@tanakahisateru) December 15, 2022
各章のまとめと感想
第1章 クリーンアーキテクチャ
第2章 パッケージ原則
第3章 オブジェクト指向
第4章 UML(統一モデリング言語)
第5章 オブジェクト指向原則 SOLID
[第6章 テスト駆動開発]
[第7章 依存性注入]
[第8章 デザインパターン]
[第9章 アジャイル開発]
Twitter反応まとめ
#ちょうぜつ本
というハッシュタグを著者の方が定期的に確認しているようで、いろんな反応をしていて面白いが、ためになることもかなり言ってくれている。本書を理解する上でも有用と思うので、幾つか抜粋しておく。Twitterはどんどん流れていって勿体無い。しかし、ちょうど勉強している内容なので、自分よりも遥かに知識、経験のある人の意見を読むのは面白い。
良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方で有名なミノ駆動さんの感想。
#ちょうぜつ本 ひさてるさん( @tanakahisateru )の『ちょうぜつソフトウェア設計入門』読了。
— ミノ駆動 (@MinoDriven) December 18, 2022
ソフトウェア原理原則の「ありがちな誤解」を解くための本だと感じました。それらを俯瞰した上で変更容易性の高い構造をどう設計していけばいいのか、を解説した本。
#ちょうぜつ本 クリーンアーキテクチャ、オブジェクト指向、カプセル化……この辺の概念って広く誤解がある印象ですけど、それら含め様々な原理原則について歴史的な経緯等も踏まえながら誤解を解く解説が、本書全体でなされています。
— ミノ駆動 (@MinoDriven) December 18, 2022
#ちょうぜつ本 誤解を解くのはかなり重要で、実務で活かしてみたものの、わかったつもりになってて効果があまり発揮されなかったり、ひどいと逆効果になってしまったり、銀の弾丸に陥ってしまったり、ということがよくあるので、そういった罠に陥らないようにするのは大事だな、と。
— ミノ駆動 (@MinoDriven) December 18, 2022
#ちょうぜつ本 CAやSOLID原則などソフトウェア設計の概念を知り始めたり、それを実務に使い始めて試行錯誤している方にオススメだと思います。逆にそういった用語知識が不十分な方には、結構重い内容だと思います。
— ミノ駆動 (@MinoDriven) December 18, 2022
#ちょうぜつ本 実際僕自身が読むのに結構骨が折れましたw ソフトウェアの歴史に踏み込んだ解説や専門用語の知識が求められる解説がそれなりにあったので、ググりながら読んでました。それだけ本書は背景解説が重厚。設計で迷ったときに何度も立ち返えられる旨味があると感じます。
— ミノ駆動 (@MinoDriven) December 18, 2022
さすが! 全クリ早いですね!! 毎回しつこく「何であるかは簡単に言えないけど、何でないかは明確」的なことを書いてたやつですよね。そうなんです。間違いやすい罠にかからないのが、自分の力で精度の高い理解を得るベストなアドバイスだって考えです
— 田中ひさてる (@tanakahisateru) December 18, 2022
言われたとおりコードを書くとこから一歩進んで、自分で興味を持ち始めて、ちょっとは聞きかじったことがある、ぐらいの読者に効果が高いようにしました。用語の名前すら聞いたことない層には厳しいってとこは、おっしゃるとおりです。そこで御著の出番ですね!
— 田中ひさてる (@tanakahisateru) December 18, 2022
確かに、読者さんが自力で設計を考える指針って感じの本でもありましたね。
— ミノ駆動 (@MinoDriven) December 18, 2022
あと、「抽象に依存すること」が主眼として書かれているように読めて、読者さんが抽象を意識して手を動かす経験を経れば、ちょうぜつ本の理解がさらにクッと上がる感じも受けましたねー。
イェーイ! 最初に書いた「言語化しにくいひとつのこと」が伝わった気がしました。やったぜって思っています
— 田中ひさてる (@tanakahisateru) December 18, 2022
その他、
依存性注入(DI)、デザインパターン、SOLID原則…それぞれ有名なので、御存知の方は多いと思います。しかし、これらはすべて手段に過ぎません。この本は、クリーンアーキテクチャを土台に据えて、これらが何のためにどう活きるのか?を明らかにしていきます。書名は「PHPで」だけどJava知識で読めます https://t.co/PD95YXNP8v
— Kazuyuki Shudo / 首藤一幸 (@shudo) December 15, 2022
単に売れればいいというよりは、行き渡るべきところにきちんと届いて欲しいのが正直な気持ち。駆け出しじゃなくて、現職エンジニアになっちゃった人。年収がどうとか、受け身でもらえるもんもらうじゃなくて、どうやったら開発が上手く行くかに意識が向きだした層。業界に一番必要な人々 #ちょうぜつ本
— 田中ひさてる (@tanakahisateru) December 12, 2022
なんだか要点をおさえてない人ほど、好き嫌いだの賛否両論だのが極端になる傾向があって、逆にわかってる人にとっては、ものを考えるときに淡々と持ち出してくる、単なる知識の引き出しでしかなくて、何の感情もわかないフラットな存在ですからね #ちょうぜつ本
— 田中ひさてる (@tanakahisateru) December 14, 2022
読み物として面白いって感じの反応がちらほらあって、がんばって勉強するぞと読解に取り組む本じゃなくて、話の展開にワクワクしながら絵と文章で楽しく読んで学べる技術書、ってコンセプトで構成したアイデア成功かもやったぜって気持ち #ちょうぜつ本
— 田中ひさてる (@tanakahisateru) December 17, 2022
オブジェクト指向の定義について。
はい。そうひとつに定義できるものではない、というのが僕の主張です
— 田中ひさてる (@tanakahisateru) December 18, 2022
あ、補足です。定義がないので各自どう認識してもかまわない、です。ただし、関数型でないレガシーだと言ったり、構造化プログラミングと抽象データ型で説明しきれる話なのに、オブジェクト指向というラベルを付けてありがたいものだと人に教えるのだけは、明確に間違いと言えると思っています
— 田中ひさてる (@tanakahisateru) December 18, 2022
コメント