A Philosophy of Software Design, 2nd Edition

A Philosophy of Software Design, 2nd Edition

  • Downloads:6459
  • Type:Epub+TxT+PDF+Mobi
  • Create Date:2021-10-19 06:51:13
  • Update Date:2025-09-06
  • Status:finish
  • Author:John Ousterhout
  • ISBN:173210221X
  • Environment:PC/Android/iPhone/iPad/Kindle

Download

Reviews

Gordon

Simple, impactful, useful, brief。 Reading this book is an easy choice if you’re interested in software systems!Quotes I liked from the book:https://medium。com/@gordongibson_3762。。。“For the purposes of this book, I define “complexity” in a practical way。 Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system。” Simple, impactful, useful, brief。 Reading this book is an easy choice if you’re interested in software systems!Quotes I liked from the book:https://medium。com/@gordongibson_3762。。。“For the purposes of this book, I define “complexity” in a practical way。 Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system。” 。。。more

David

Some good ideas, slightly repetitive examples。

Enrique

Absolutely loved it。 All the aspects covered in this book aimed towards the same goal: reducing complexity。 But I love that it discusses compromising and using your judgment when facing choices (e。g。 performance vs readability, etc) and provides some guidelines, unlike *other* books which have an authoritative, even dogmatic, tone。Every programmer should read this book。

Sebastian Castillo

It’s a piece of art。 The kind of books that potentially may change your life。 It’s modern, practical yet grounded by first principles。 It’s simple to read and even funny。 I improved our company code review guide lines based on this book very single invitation: reduce complexity。

Richard Liu

Pretty solid book outlining the basic tenets of software design。 It's high quality and doesn't overstay its welcome - short and concise and to the point。 Pretty solid book outlining the basic tenets of software design。 It's high quality and doesn't overstay its welcome - short and concise and to the point。 。。。more

Jeff Patterson

The book was fine and has an audience, I'm not that audience。 I found the material a little old hat and nothing much new or profound for me。 Perhaps a junior developer would find the material more compelling。 The book was fine and has an audience, I'm not that audience。 I found the material a little old hat and nothing much new or profound for me。 Perhaps a junior developer would find the material more compelling。 。。。more

Justin

This could be a good bookThere are a lot of good ideas in this book。 Unfortunately the author tends to take a "there are a lot of nuances so instead of providing concrete examples, here are some vague hand wavy examples" approach to a lot of the topics。 Then, when he does provide concrete examples, I disagree with them。 I may be an Uncle Bob fanboy, but I believe his Clean Code and Clean Architecture books provide better advice。I also had an issue with the code samples he provided throughout。 Th This could be a good bookThere are a lot of good ideas in this book。 Unfortunately the author tends to take a "there are a lot of nuances so instead of providing concrete examples, here are some vague hand wavy examples" approach to a lot of the topics。 Then, when he does provide concrete examples, I disagree with them。 I may be an Uncle Bob fanboy, but I believe his Clean Code and Clean Architecture books provide better advice。I also had an issue with the code samples he provided throughout。 The bad examples all seemed to come from student code or just Java as a general concept (it seems the author just does not like Java as a language)。Overall, this book could be improved by providing more/better examples of both bad and good practices。 I would still disagree with his stance on commenting code, though。 。。。more

Simon Eskildsen

This is a good compilation of lessons in building good software, likely many of which you've heard under other, idiosyncratic names in the occasional Hacker News post。 The author's put names on a few things I watch out for, but never put a name to。 Nothing remarkable, but an easy, nice read that's a good refresher for anyone who writes software。 This is a good compilation of lessons in building good software, likely many of which you've heard under other, idiosyncratic names in the occasional Hacker News post。 The author's put names on a few things I watch out for, but never put a name to。 Nothing remarkable, but an easy, nice read that's a good refresher for anyone who writes software。 。。。more

Ted Lilley

A well-constructed philosophy from an instructor with wide experience。 Well-written and thoughtful。 While no one in the industry can agree on the specifics of writing good software, Ousterhout offers yardsticks and advice that are thought-provoking and will challenge you to crystalize your own philosophy。 If nothing else, you will be more mindful about how you approach development。 It explicates without overly belaboring its point。

Prasil Koirala

Excellent book。 Recommend to everyone who develops software。 Contrary to other similar books where they distill general "rules", ideas presented here are more of "guidelines" and you're free to follow it at your ease。 Suits for beginners, doesn't translate well in enterprise scenarios where design is mostly constricted。 Excellent book。 Recommend to everyone who develops software。 Contrary to other similar books where they distill general "rules", ideas presented here are more of "guidelines" and you're free to follow it at your ease。 Suits for beginners, doesn't translate well in enterprise scenarios where design is mostly constricted。 。。。more

Ryan

Thoroughly engaging and profound ideas a about software designI enjoyed reading this book; that is not something I often say about a technical book。 This was well written, organized and the distribution of the complicated stuff rather followed the book's thesis - clearly a lot of energy was spent reducing unnecessary complexity in the concepts。 Thoroughly engaging and profound ideas a about software designI enjoyed reading this book; that is not something I often say about a technical book。 This was well written, organized and the distribution of the complicated stuff rather followed the book's thesis - clearly a lot of energy was spent reducing unnecessary complexity in the concepts。 。。。more

Marijn Meijles

The book is a good explanation of why writing software is hard。 It acknowledges the fact that one can rarely get away with just mentioning the theory in the field of software development and that real software development is not taught in a class。The more proficient one becomes in a field the less black and white things become。 While the author tried to convey this message, it could have been more clear, perhaps with more counter examples。 The other thing I missed was a discussion about the requ The book is a good explanation of why writing software is hard。 It acknowledges the fact that one can rarely get away with just mentioning the theory in the field of software development and that real software development is not taught in a class。The more proficient one becomes in a field the less black and white things become。 While the author tried to convey this message, it could have been more clear, perhaps with more counter examples。 The other thing I missed was a discussion about the required proficiency of the intended reader of the code。 One has to have a common understanding of the level of the people who are ever going to read the code。 Some parts of the code (or rather the problem that you try to solve) are just complex。 Juniors will struggle no matter how much you explain。 How does one navigate this issue ? 。。。more

Christoph Kappel

I really enjoyed reading this book, especially if you've read Clean Code: A Handbook of Agile Software Craftsmanship before。 This one isn't that religious, but certainly similar opinionated。In general most of the ideas felt more reasonable, like the points about shallow and deep modules or when to split classes。 Also I really like how essential code docs are for the author, because I feel the same。 Normally, business code rarely includes comments at all and I usually have to make my own, to avoi I really enjoyed reading this book, especially if you've read Clean Code: A Handbook of Agile Software Craftsmanship before。 This one isn't that religious, but certainly similar opinionated。In general most of the ideas felt more reasonable, like the points about shallow and deep modules or when to split classes。 Also I really like how essential code docs are for the author, because I feel the same。 Normally, business code rarely includes comments at all and I usually have to make my own, to avoid re-learning blocks I've already visited。 。。。more

Avraam Mavridis

Even after reading it I am not sure what is the goal of the book, anyway, it has some good parts like the chapter for the comments and about readability, it has some other parts that I dont much agree, but the main problem is that the book is very swallow, the author spends 2-3 pages trying to make a point for a subject but。。。 most of the times are simple not enough。 Also I dont get what was the point of the "Trends" chapter and how Design Patterns are fitting there as a trend Even after reading it I am not sure what is the goal of the book, anyway, it has some good parts like the chapter for the comments and about readability, it has some other parts that I dont much agree, but the main problem is that the book is very swallow, the author spends 2-3 pages trying to make a point for a subject but。。。 most of the times are simple not enough。 Also I dont get what was the point of the "Trends" chapter and how Design Patterns are fitting there as a trend 。。。more

Hugues Le Gendre

À la fois philosophique et en même temps très pratique, c’est un bon guide du design de systèmes。 Certains principes sont mêmes adaptables dans la vie courante…

Koh

This review has been hidden because it contains spoilers。 To view it, click here。 Summary of Design Principles1。 Complexity is incremental: you have to sweat the small stuff。2。 Working code isn't enough。3。 Make continual small investments to improve system design。4。 Modules should be deep。5。 Interfaces should be designed to make the most common usage as simple as possible6。 It's more important for a module to have a simple interface than a simple implementation 。7。 General-purpose modules are deeper。8。 Separate general-purpose and special-purpose code。9。 Different layers shou Summary of Design Principles1。 Complexity is incremental: you have to sweat the small stuff。2。 Working code isn't enough。3。 Make continual small investments to improve system design。4。 Modules should be deep。5。 Interfaces should be designed to make the most common usage as simple as possible6。 It's more important for a module to have a simple interface than a simple implementation 。7。 General-purpose modules are deeper。8。 Separate general-purpose and special-purpose code。9。 Different layers should have different abstractions。10。 Pull complexity downward。11。 Define errors and special cases) out of existence。12。 Design it twice。13。 Comments should describe things that are not obvious from the code。14。 Software should be designed for ease of reading, not ease of writing。15。 The increments of software development should be abstractions,。Summary of red flags- Shallow Module: the interface for a class or method isn't much simpler than its implementation 。- Information Leakage: a design decision is reflected in multiple modules。- Temporal Decomposition: the code structure is based on the order in which operations are executed, not on information hiding。- Overexposure: api forces callers to be aware of rarely used features in order to use commonly used feature。- Pass-through Method: a method does almost nothing except pass its arguments to another method with a similar signature。- Repetition: a nontrivial piece of code is repeated over and ove。- Special-general Mixture: special-purpose code is not cleanly separated from general purpose code。- Conjoined Methods: two methods have so many dependencies that its hard to understand the implementation of one without understanding the implementation of the othe。- Comment Repeats Code: all of the information in a comment is immediately obvious from the code next to the comment 。- Implementation Documentation Contaminates Interface: an interface comment describes implementation details not neexied by users of the thing being dwumented。- Vague Name: the name of a variable or method is so imprecise that it doesn't convey much useful information 。- Hard to Pick Name: it is difficult to come up with a precise and intuitive name for an entity 。- Hard to Describe: in order to be complete, the documentation for a variable or method must be long。- Nonobvious Code: the behavior or meaning of a piece of code cannot be understood easily。 。 。。。more

Daniela

Um dos melhores livros que já li referente a como escrever códigos bom para serem lidos。No final tem um sumário dos princípios。

J Balaji

A must read for any Software Engineer。 My advice is to read it with an open mind and form your own guidelines for software design rather than blindly accepting or rejecting the ideas laid out in the book。

Tyler

Must read for devs。

Henrik Warne

A short, compact book with many good ideas, even though I don't agree with everything in it。 The main idea in the book is that modules should be "deep", that is the implementation should be substantially bigger than its interface。 That way you reduce the complexity of the system, because you only need to know the interface to use the module。Another great idea is to "define errors out of existence"。 There are several good examples of where you can write your function in such a way that it need no A short, compact book with many good ideas, even though I don't agree with everything in it。 The main idea in the book is that modules should be "deep", that is the implementation should be substantially bigger than its interface。 That way you reduce the complexity of the system, because you only need to know the interface to use the module。Another great idea is to "define errors out of existence"。 There are several good examples of where you can write your function in such a way that it need not throw exceptions。 This too reduces the complexity of the system (by the way, the book starts with a great chapter defining complexity)。A big portion of the book is dedicated to comments。 The author wants more comments in code than I think is called for。 Towards the end, there is also a chapter on optimization that I liked。 It contains a good example of optimizing buffer allocation in a system called RAMCloud。 However, there are also a few weaker chapters towards the end。Overall though, I think this is a good addition to your library of programming books。There is a longer review of this book on my blog: https://henrikwarne。com/2021/07/12/bo。。。 。。。more

Thibault Martin-Lagardette

John's book is an incredible piece that all developers, junior or senior, should try to read。 John has obviously been bit by many design decisions over the years, and was able to come up with different suggestions and advice that help write good quality software that has as few bugs as possible and that remains maintainable over time。For years now I had been struggling to explain in code reviews or design sessions the reasons why I gave certain recommendations。 While I have learned over time to John's book is an incredible piece that all developers, junior or senior, should try to read。 John has obviously been bit by many design decisions over the years, and was able to come up with different suggestions and advice that help write good quality software that has as few bugs as possible and that remains maintainable over time。For years now I had been struggling to explain in code reviews or design sessions the reasons why I gave certain recommendations。 While I have learned over time to explain my decisions and design suggestions through what they help prevent/avoid or how they enable other developers, too many times still, all I had was an inkling, a feeling, an intuition。 Instead, John's book clearly lay out all those things I have learned the hard way, and explains them with ease and simple examples。This is the very first programming book where I agree with almost everything that is written。 I am looking forward to share this book with colleagues。 。。。more

Mario

it's phine (haha) it's phine (haha) 。。。more

Julien Sobczak

Much more insightful than the classic Clean Code。If Clean Code is about the obvious, A Philosophy of Software Design is about the subtle。 This short book goes deeper and is more insightful than its predecessor。 Writing clean code is great, but having a clean design is greater, and I would like more developers to read this book instead of the popular one written by Bob Martin。For many years, the author questioned if software design can be taught, and if design skill is what separates great progra Much more insightful than the classic Clean Code。If Clean Code is about the obvious, A Philosophy of Software Design is about the subtle。 This short book goes deeper and is more insightful than its predecessor。 Writing clean code is great, but having a clean design is greater, and I would like more developers to read this book instead of the popular one written by Bob Martin。For many years, the author questioned if software design can be taught, and if design skill is what separates great programmers from average ones。 The result was a new course at Stanford, and after three iterations, this book emerged。 A Philosophy of Software Design is clearly not the definitive book on the subject。 Only a few real-world projects, mostly written in OO languages, are used to illustrate the principles, and there is so much more to cover about good software design。 But as an introduction on the subject, the book is excellent, especially for students。I found many references to this book by researching about the perils of clean code。 A function is often more maintainable when the number of lines of code is small but sometimes, a longer function is preferable。 A class is often more maintainable when it has a single responsibility but sometimes, making the common case as simple as possible is preferable。 The book is filled with many examples like these。 The discussions about some principles like "Design it twice" or "General-purpose modules are deeper" are invaluable。 If you want to write clean code, you have to think, and this book will help you ask a lot of questions。If you read the reviews of any book about code design, you will have a lot of divergent opinions。 This book is no exception。 The best option is thus to read not just one book, but a lot。 Make sure to include this one in your reading list。 。。。more

Vasil Kolev

As usual with this kind of books, some of the advice needs to be taken with a grain of salt (others also have pointed the large emphasis on comments, which to me even seem to be the wrong word, and what the author means is code documentation, which should be a separate topic)。 But even with that taken into account, the advice in the book is solid and down-to-earth, and addresses a lot of the problems I've seen with production code。 This is a great read for pretty much any level of programmer, as As usual with this kind of books, some of the advice needs to be taken with a grain of salt (others also have pointed the large emphasis on comments, which to me even seem to be the wrong word, and what the author means is code documentation, which should be a separate topic)。 But even with that taken into account, the advice in the book is solid and down-to-earth, and addresses a lot of the problems I've seen with production code。 This is a great read for pretty much any level of programmer, as it not only has good advice but also some great examples and stories。(and I thought that there's no way I'd like anything from the author of tcl, but here we are :) ) 。。。more

Christian

some good points, but nothing really new or insightful。some points I disagree (about TDD)。some points I really would have liked included (FP, DevOps)。It's unfortunately very OOP centric, and very low code level。 some good points, but nothing really new or insightful。some points I disagree (about TDD)。some points I really would have liked included (FP, DevOps)。It's unfortunately very OOP centric, and very low code level。 。。。more

Marcin Czarkowski

Perełka wśród książek o tym jak pisać czysty kod i zarządzać złożonością oprogramowania。 Czym wyróżnia się na tle swojego najpopularniejszego konkurenta? Przystępnością, zwięzłością i doborem przykładów。 Niektóre opinie autora stoją w całkowitej opozycji do praktyk rekomendowanych przez Uncle Boba: krytyka krótkich metod, konieczność pisania dużej ilości komentarzy。 Mimo że nie przekonały mnie do zmiany nawyków, argumenty Ousterhouta w tych kwestiach były dobrze przemyślane i poszerzyły moją per Perełka wśród książek o tym jak pisać czysty kod i zarządzać złożonością oprogramowania。 Czym wyróżnia się na tle swojego najpopularniejszego konkurenta? Przystępnością, zwięzłością i doborem przykładów。 Niektóre opinie autora stoją w całkowitej opozycji do praktyk rekomendowanych przez Uncle Boba: krytyka krótkich metod, konieczność pisania dużej ilości komentarzy。 Mimo że nie przekonały mnie do zmiany nawyków, argumenty Ousterhouta w tych kwestiach były dobrze przemyślane i poszerzyły moją perspektywę。 。。。more

Natalie

The book I wish I had read when first began my career in software engineering。 Ousterhout makes a compelling, logical case for addressing complexity in software with simple designs augmented with clearly communicated documentation, rather than prioritizing getting something working as fast as possible。 A philosophy that may seem like common sense, but an important one that should be regularly reviewed by any dev, no matter what stage in their career。Linus Torvalds, on the beauty of programming: The book I wish I had read when first began my career in software engineering。 Ousterhout makes a compelling, logical case for addressing complexity in software with simple designs augmented with clearly communicated documentation, rather than prioritizing getting something working as fast as possible。 A philosophy that may seem like common sense, but an important one that should be regularly reviewed by any dev, no matter what stage in their career。Linus Torvalds, on the beauty of programming: "It’s still hard to explain what can be so fascinating about beating your head against the wall for three days, not knowing how to solve something the better way, the beautiful way。 But once you find that way, it’s the greatest feeling in the world。" 。。。more

Afrizal

The author successfully identified the main problem of software design that need to be tackled。 Something I haven't got from other similiar books。 I agree with most part with few concerns about comment and global variable usage。 So recommended as food of thought for all engineers。 The author successfully identified the main problem of software design that need to be tackled。 Something I haven't got from other similiar books。 I agree with most part with few concerns about comment and global variable usage。 So recommended as food of thought for all engineers。 。。。more

Claudio Rodrigues

That's a good book。 If you are a seasoned software designer you probably have already seen many of the issues discussed in the book and tried the solutions as well。 For those in the early stages of their careers, it's a great reference。I prefer the distinction that Don Norman does in his books between Complexity and Complicated。 In this book, though, the author uses the term Complexity very loosely, almost always meaning Complicated。 That's a good book。 If you are a seasoned software designer you probably have already seen many of the issues discussed in the book and tried the solutions as well。 For those in the early stages of their careers, it's a great reference。I prefer the distinction that Don Norman does in his books between Complexity and Complicated。 In this book, though, the author uses the term Complexity very loosely, almost always meaning Complicated。 。。。more

kevin

I like short software books like that with a clear theme。 It centers around how to deal with complexity through the right abstraction。 There quite a bit around comments and documentation which makes a lot of sense and are new to me。 There is a strong argument for having deep methods that do a lot rather than simplistic methods that are clean code style。 The examples are relevant and clear。 My only pity is I do not engage in much serious software engineering these days to see how it works when pr I like short software books like that with a clear theme。 It centers around how to deal with complexity through the right abstraction。 There quite a bit around comments and documentation which makes a lot of sense and are new to me。 There is a strong argument for having deep methods that do a lot rather than simplistic methods that are clean code style。 The examples are relevant and clear。 My only pity is I do not engage in much serious software engineering these days to see how it works when practiced。 Still it gives me idea on what to do in the programming-at-large, high-level architecture, and how to refactor abstraction rather than feature。 。。。more