A Philosophy of Software Design

John Ousterhout

出版社

Yaknyam Press

出版时间

2018-04-06

ISBN

9781732102200

评分

★★★★★
书籍介绍
This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly
AI导读
核心看点
  • 核心目标是管理复杂度,通过分解问题降低认知负荷。
  • 提倡设计“深”的模块,接口简洁而功能强大。
  • 强调通过注释和异常处理策略来优化设计质量。
适合谁读
  • 希望提升软件架构与设计能力的中高级开发者。
  • 对软件工程哲学及复杂度管理感兴趣的程序员。
  • 寻求平衡敏捷开发与长期可维护性的技术团队。
读前提醒
  • 本书篇幅短小精悍,适合周末快速通读并反复回味。
  • 部分观点如先写注释可能与习惯相悖,建议开放心态。
  • 结合书中提到的“红旗”标志,反思现有代码设计。
读者共识
  • 字字珠玑,短小精悍,被读者誉为软件设计神作。
  • 观点极具启发性,虽非严格规则,但能拓宽设计视野。
  • 关于异常处理和注释的章节收获最大,实用性强。

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "A Philosophy of Software Design Preface - The most fundamental problem in computer science is problem decomposition: how to take a complex problem and divide it up into pieces that can be solved independently. 1 Introduction ### 1.1 How to use this book - The best way to use this book is in conjunct"
  • "The best way to eliminate exception handling complexity is to define your APIs so that there are no exceptions to handle: define errors out of existence. This may seem sacrilegious, but it is very effective in practice. Consider the Tcl unset command discussed above. Rather than throwing an error wh"
  • "The second technique for reducing the number of places where exceptions must be handled is 【exception masking】. With this approach, an exceptional condition is detected and handled at a low level in the system, so that higher levels of software need not be aware of the condition. Exception masking i"
  • "One common cause of information leakage is a design style I call temporal decomposition. In temporal decomposition, the structure of a system corresponds to the time order in which operations will occur. Consider an application that reads a file in a particular format, modifies the contents of the f"
  • "When deciding whether to combine or separate, the goal is to reduce the complexity of the system as a whole and improve its modularity. It might appear that the best way to achieve this goal is to divide the system into a large number of small components: the smaller the components, the simpler each"
  • "One of the risks of agile development is that it can lead to tactical programming. Agile development tends to focus developers on features, not abstractions, and it encourages developers to put off design decisions in order to produce working software as soon as possible. For example, some agile pra"
  • "One of the best ways to improve your design skills is to learn to recognize red flags: signs that a piece of code is probably more complicated than it needs to be."
  • "Beautiful designs reflect a balance between competing ideas and approaches. Several chapters have sections titled “Taking it too far,” which describe how to recognize when you are overdoing a good thing."
作者简介
John Ousterhout is the Bosack Lerner Professor of Computer Science at Stanford University. His current research focuses on new software stack layers to allow datacenter applications to take advantage of communication and storage technologies with microsecond-scale latencies. Ousterhout's prior positions include 14 years in industry, where he founded two companies (Scriptics and Electric Cloud), preceded by 14 years as Professor of Computer Science at U.C. Berkeley. He is the creator of the Tcl scripting language and is also well known for his work in distributed operating systems and storage systems. Ousterhout received a BS degree in Physics from Yale University and a PhD in Computer Science from Carnegie Mellon University. He is a member of the National Academy of Engineering and has received numerous awards, including the ACM Software System Award, the ACM Grace Murray Hopper Award, the National Science Foundation Presidential Young Investigator Award, and the U.C. Berkeley Distinguished Teaching Award.
用户评论
神作啊。简直字字珠玑。
短小精悍,字字珠玑。
复杂度
模块划分是一门艺术。这不是一本讲述了严格规则的书,每个人看过之后可能都会有所得,但能拿走多少就看个人悟性。你可以不同意这本书的很多理念,但不能否认它的启发性。
结构性强,从complexity出发,剥丝抽茧层层递进,能帮助大脑建立清晰的思维框架。前面几章值得再读
"The first is to describe the nature of software complexity ... The book’s second, and more challenging, goal is to present techniques you can use during the software development process to minimize complexity."/"...the increments of development should be abstraction, not features..."/这本书着重强调软件系统设计的目标是控制住系统内部的复杂度。比较少讨论功能和性能。
提供了一些新的视角,有借鉴意义。
看书之前/之后都可以来看看他的Google Talk。放不了链接。。。去油管搜这个把: A Philosophy of Software Design | John Ousterhout | Talks at Google
全英文的还是啃完了,佩服自己。
收藏