APoSD
www.goodreads.com Conslusion Conslusion 本書のテーマはひとつ: 複雑性 複雑性に取り組むことは、ソフトウェア設計における最も重要な仕事である 複雑なソフトウェアは… 構築・保守しづらい 実行時速度が遅いことさえある 複雑性の原因について述べた: 依…
www.goodreads.com Designing for Performance How to think about performance Measure before modifying Design around the critical path An example: RAMCloud Buffers Conclusion 英語 Designing for Performance ここまで(1-19章)のソフトウェア設計の…
www.goodreads.com Software Trends Object-oriented programming and inheritance Agile development Unit test Test-driven development Design patterns Getters and setters Conclusion 英語 Software Trends ここ数十年で人気となったトレンドやパター…
www.goodreads.com Code should be obvious Things that make code more obvious Things that make code less obvious Conclusion 英語 Code should be obvious 不明瞭さは複雑性の2大原因のうちひとつ 重要な情報が新参の開発者にとって明らかでないとおこ…
www.goodreads.com Modifying Existing Code Stay strategic Maintaining comments: keep the comments near the code Comments belong in the code, not the commit logbook Maintaining comments: avoid duplication Maintaining: check the diffs Higher-…
www.goodreads.com Choosing names Example: bad names cause bugs Create an image Names should be precise Use names consistently A different opinion: Go style guide Conclusion Choosing names 識別子の命名は、ソフトウェア設計において最も過小評…
www.goodreads.com Define errors out of existence Why exceptions add complexity Too many exceptions Define errors out of existence Example: file deletion in windows Example: Java substring methoda Mask exceptions Exception aggregation Just …
www.goodreads.com Better Together Or Better Apart? Bring together if information is shared Bring together if it will simplify the interface Bring together to eliminte duplication Separate general-purpose and special-purpose code Red Flag: …
www.goodreads.com Write The Commnts First (Use Comments As Part Of The Design Process) Delayed comments are bad comments Write the comments first Comments are a design tool Early comments are fun comments Are early comments expensive? Conc…
www.goodreads.com Consistency Examples of consistency Ensuring consistency Taking it too far Conslusion 英語 Consistency 一貫性は複雑性を減らす強力なツール 似ているものは似たやりかた 似ていないものは異なるやりかた 一貫性がある 一貫性がない…
www.goodreads.com Different Layer, Different Abstraction Pass-through methods When is interface duplication OK? Decorators Interface versus implementation Pass-through variables Conclusion 英語 Different Layer, Different Abstraction 上位の…
www.goodreads.com Pull Complexity Downwords Example: editor text class Example: configuration parameters Taking it too far Conclusion 英語 Pull Complexity Downwords モジュールを開発するときは、実装ではなくインタフェースを単純化するのが大事…
www.goodreads.com Design It Twice 英語 Design It Twice ソフトウェア設計は難しいので、ベストなものを一発で考えつくことはまずできない 設計は二回せよ 列挙する 比較検討して選定する 例: GUIエディタのTextクラスのインタフェース設計 まずいくつか可…
www.goodreads.com Why Write Comments? -- The Four Excuses Good code is self-documenting I don't have time to write comments Comments get out of date and become misleading All the comments I have seen are worthless Benefits of well-written …
www.goodreads.com General-Purpose Modules Are Deeper Make classes somewhat general-purpose Example: storing text for an editor A more general-purpose API Generaity leads to better information hiding Questions to ask yourself What is the si…
www.goodreads.com Information Hiding (and Leakage) Information hiding Information leakage Temporal decomposition Example: HTTP server Example: Too many classes Example: HTTP parameter handling Example: defaults in HTTP responses Red Flag: …
www.goodreads.com Modules Should Be Deep Modular design What's in an interface Abstractions Deep modules Shalow modules Classitis Examples: Java and Unix I/O Conclusion 英語 Modules Should Be Deep modular design 開発者が一度に直面する複雑…
www.goodreads.com Working Code Isn't Enough (Strategic vs. Tactical Programming) Tactical programming Strategic programming How much to invest? Startups and investment Conclusion 英語 Working Code Isn't Enough (Strategic vs. Tactical Progr…
www.goodreads.com The Nature of Complexity Complexity defined Symptoms of complexity Causes of complexity Complexity is incremental Conclusion The Nature of Complexity 敵はch1にて論じたとおり「複雑性」 敵を知ること 複雑性って何? システム…
www.goodreads.com Comments Should Describe Things That Aren't Obvious From The Code Pick conventions Don't repeat the code Lower-level comments add precision Higher-level comments enhance intuition Interface documentation Implementation co…
www.goodreads.com Introduction (It's All About Complexity) How to use this book 英語 Introduction (It's All About Complexity) コンピュータソフトウェアを作ることは、人類史においてもっとも純粋な創作活動である 物理的な制約がない 仮想的な世界…
www.goodreads.com Preface 英語 Preface 人類が計算機でプログラムを書いて80年 あれこれ議論されてきた 開発手法 agileとか ツール デバッガ VCS テストカバレッジツール OOP/FP デザインパターン、アルゴリズム しかし、ソフトウェア設計についてはほとん…