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 i...
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
作者简介
· · · · · ·
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...
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.
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 conjunction with code reviews.- 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.
- When applying the ideas from this book, it’s important to use moderation and discretion.- This means that the greatest limitation in writing software is our ability to understand the systems we are creating.
- There are two general approaches to fighting complexity, both of which will be discussed in this bo... (查看原文)
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 when unset is asked to delete an unknown variable, it should have simply returned without doing anything. I should have changed the definition of unset slightly: rather than deleting a variable, unset should ensure that a variable no longer exists. With the first definition, unset can’t do its job if the variable doesn’t exist, so generating an exception makes sense. With the second definition, it is perfectly natural for unset to be invoked with the name of a variable that doesn’t exist. In this ... (查看原文)
最近看到很多人都在标记 《A Philosophy of Software Design》 这本书,这本书的作者是大名鼎鼎 Raft 和 Tcl 的发明者 John Ousterhout。 还没来得及看书,但是看了下 YouTube 上 John Ousterhout 关于 A Philosophy of Software Design 在 Google 做的 talk ,觉得很不错。...
(展开)
Read on my blog: https://linghao.io/notes/a-philosophy-of-software-design A Philosophy of Software Design is a short yet to-the-point book on high level ideas on how to design a software system with less complexity. It’s a book I would recommend to every...
(展开)
很早就耳闻这本书,通过作者的演讲视频了解过里边的主要观点。确实是很薄的小书,很快就看完了,总体觉得还是挺不错的,但也算不上石破天惊。 书中前半部分1-10章重点讲软件复杂度以及本书核心观点(modules should be deep),是精华所在。后面几乎花了7-8章来讲注释和命名风格...
(展开)
读完这本书,收获更多的不是具体design的方法,而是mindset。 现在回去看本书的封面觉得很有意思,上方是杂乱的线,代表复杂的implementation,而下方是整齐的线,代表interface;这表示本书最重要的一个观点,module should be deep,一个deep module有简单的interface,但是...
(展开)
John Ousterhout, the author of this book who has built a number of influential systems (Tcl / Tk, Raft, RAMcloud, etc), has ever gave an impressive talk at Google which covers the same theme. In that talk, he asked the audience, "If you had to pick one id...
(展开)
2 有用 ye11ow 2018-10-02 14:44:45
引用最后一章第一句话:This book is about one thing: complexity。虽然标题里带有"philosophy",但其实书里介绍的大部分内容还是挺直觉。关于异常和注释的两章反而让我收获最多
3 有用 Instante 2019-07-05 14:35:48
短小精悍,字字珠玑。
0 有用 大钢总 2021-10-27 11:14:09
无论是刚入行的程序员还是项目leader都非常值得读的一本书。
0 有用 大男孩 2022-02-15 17:52:24
提供了一些新的视角,有借鉴意义。
1 有用 热情花招 2021-11-25 16:41:49
A clean, simple, and obvious design is a beautiful thing