勉強日記

チラ裏

ソフトウェア設計

A Philosophy of Software Design ch21 Conclusion

www.goodreads.com Conslusion Conslusion 本書のテーマはひとつ: 複雑性 複雑性に取り組むことは、ソフトウェア設計における最も重要な仕事である 複雑なソフトウェアは… 構築・保守しづらい 実行時速度が遅いことさえある 複雑性の原因について述べた: 依…

A Philosophy of Software Design ch20 Designing for Performance

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章)のソフトウェア設計の…

A Philosophy of Software Design ch19 Software Trends

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 ここ数十年で人気となったトレンドやパター…

A Philosophy of Software Design ch18 Code should be obvious

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大原因のうちひとつ 重要な情報が新参の開発者にとって明らかでないとおこ…

A Philosophy of Software Design ch16 Modifying Existing Code

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-…

A Philosophy of Software Design ch14 Choosing names

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 識別子の命名は、ソフトウェア設計において最も過小評…

A Philosophy of Software Design ch10 Define errors out of existence

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 …

A Philosophy of Software Design ch9 Better Together Or Better Apart?

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: …

A Philosophy of Software Design ch15 Write The Commnts First (Use Comments As Part Of The Design Process)

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…

A Philosophy of Software Design ch17 Consistency

www.goodreads.com Consistency Examples of consistency Ensuring consistency Taking it too far Conslusion 英語 Consistency 一貫性は複雑性を減らす強力なツール 似ているものは似たやりかた 似ていないものは異なるやりかた 一貫性がある 一貫性がない…

A Philosophy of Software Design ch7. Different Layer, Different Abstraction

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 上位の…

A Philosophy of Software Design ch8. Pull Complexity Downwords

www.goodreads.com Pull Complexity Downwords Example: editor text class Example: configuration parameters Taking it too far Conclusion 英語 Pull Complexity Downwords モジュールを開発するときは、実装ではなくインタフェースを単純化するのが大事…

A Philosophy of Software Design ch11. Design It Twice

www.goodreads.com Design It Twice 英語 Design It Twice ソフトウェア設計は難しいので、ベストなものを一発で考えつくことはまずできない 設計は二回せよ 列挙する 比較検討して選定する 例: GUIエディタのTextクラスのインタフェース設計 まずいくつか可…

A Philosophy of Software Design ch12 Why Write Comments? -- The Four Excuses

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 …

A Philosophy of Software Design ch6. General-Purpose Modules Are Deeper

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…

A Philosophy of Software Design ch5. Information Hiding (and Leakage)

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: …

A Philosophy of Software Design ch4 Modules Should Be Deep

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 開発者が一度に直面する複雑…

A Philosophy of Software Design ch3 Working Code Isn't Enough (Strategic vs. Tactical Programming)

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…

A Philosophy of Software Design ch2 The Nature of Complexity

www.goodreads.com The Nature of Complexity Complexity defined Symptoms of complexity Causes of complexity Complexity is incremental Conclusion The Nature of Complexity 敵はch1にて論じたとおり「複雑性」 敵を知ること 複雑性って何? システム…

A Philosophy of Software Design ch13 Comments Should Describe Things That Aren't Obvious From The Code

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…

A Philosophy of Software Design ch1 Introduction

www.goodreads.com Introduction (It's All About Complexity) How to use this book 英語 Introduction (It's All About Complexity) コンピュータソフトウェアを作ることは、人類史においてもっとも純粋な創作活動である 物理的な制約がない 仮想的な世界…

A Philosophy of Software Design ch0 Preface

www.goodreads.com Preface 英語 Preface 人類が計算機でプログラムを書いて80年 あれこれ議論されてきた 開発手法 agileとか ツール デバッガ VCS テストカバレッジツール OOP/FP デザインパターン、アルゴリズム しかし、ソフトウェア設計についてはほとん…