This Father's day, give the gift of choice
Enjoy fast, free delivery, exclusive deals and award-winning movies and TV shows.
£18.12
FREE delivery Wednesday, 5 August. Details
Or fastest delivery Tuesday, 23 June. Details
Arrives after Father's Day. Need a gift sooner? Send an Amazon Gift Card today by email or text message.
In stock
££18.12 () Includes selected options. Includes initial monthly payment and selected options. Details
Price
Subtotal
££18.12
Subtotal
Initial payment breakdown
Delivery cost, delivery date and order total (including tax) shown at checkout.
Shipper / Seller
Amazon
Amazon
Shipper / Seller
Amazon
Returns
Returnable within 30 days of receipt
Returnable within 30 days of receipt
Item can be returned in its original condition for a full refund within 30 days of receipt
Payment
Secure transaction
Your transaction is secure
We work hard to protect your security and privacy. Our payment security system encrypts your information during transmission. We don’t share your credit card details with third-party sellers, and we don’t sell your information to others. Learn more
Gift options
Available at checkout
Available at checkout This item is a gift. Change
At checkout, you can add a custom message, a gift receipt for easy returns and have the item gift-wrapped
Added to

Sorry, there was a problem.

There was an error retrieving your Wish Lists. Please try again.

Sorry, there was a problem.

List unavailable.
Kindle app logo image

Download the free Kindle app and start reading Kindle books instantly on your smartphone, tablet or computer – no Kindle device required.

Read instantly on your browser with Kindle for Web.

Using your mobile phone camera - scan the code below and download the Kindle app.

QR code to download the Kindle App

  • A Philosophy of Software Design, 2nd Edition

Follow the author

Follow to get new release updates, special offers (including promotional offers), and improved recommendations.
Something went wrong. Please try your request again later.

A Philosophy of Software Design, 2nd Edition

4.4 out of 5 stars (2,692)

on any 4 qualifying items | Terms
{"desktop_buybox_group_1":[{"displayPrice":"£18.12","priceAmount":18.12,"currencySymbol":"£","integerValue":"18","decimalSeparator":".","fractionalValue":"12","symbolPosition":"left","hasSpace":false,"showFractionalPartIfEmpty":true,"offerListingId":"6168akwAwoqXTIZeIzU7QWIn58Lkv4laeIs5aTr%2BGDBEyGeuZk4M2DHlLlXOu03FawYLxIF3wCFGYKDAdBrdKwNlDIiZBYHRF2WnzNHSR%2BirIpRf3YxwvI6Hyr%2FXv2ce","locale":"en-GB","buyingOptionType":"NEW","aapiBuyingOptionIndex":0}]}

Purchase options and add-ons

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 and cheaply.

Frequently bought together

This item: A Philosophy of Software Design, 2nd Edition
£18.12
Get it as soon as Wednesday, Aug 5
In stock
Sent from and sold by Amazon.
+
£27.73
Get it as soon as Wednesday, Aug 5
In stock
Sent from and sold by Amazon.
+
£39.58
Get it as soon as Wednesday, Aug 5
In stock
Sent from and sold by Amazon.
Total price: $00
To see our price, add these items to your basket.
Details
Added to Basket
Choose items to buy together.
Popular highlights in this book

Product details

  • Publisher ‏ : ‎ Yaknyam Press
  • Publication date ‏ : ‎ 26 July 2021
  • Language ‏ : ‎ English
  • Print length ‏ : ‎ 196 pages
  • ISBN-10 ‏ : ‎ 173210221X
  • ISBN-13 ‏ : ‎ 978-1732102217
  • Item weight ‏ : ‎ 290 g
  • Dimensions ‏ : ‎ 16.51 x 1.14 x 20.32 cm
  • Best Sellers Rank: 15,351 in Books (See Top 100 in Books)
  • Customer reviews:
    4.4 out of 5 stars (2,692)

About the author

Follow authors to get new release updates, plus improved recommendations.
John K. Ousterhout
Brief content visible, double tap to read full content.
Full content visible, double tap to read brief content.

Discover more of the author’s books, see similar authors, read book recommendations and more.

Sponsored

Customer reviews

4.4 out of 5 stars
2,692 global ratings
Sponsored

Customers say

Customers find the book's content positive, with one noting it's an excellent guide for seasoned developers and architects. Moreover, the book receives praise for its design guidelines, with one customer highlighting its comprehensive coverage of key principles. Additionally, customers appreciate its short length and simple writing style. However, the writing style receives mixed feedback, with some finding it well written while others disagree. The examples section also receives mixed reviews, with one customer noting there are too few examples.
AI Generated from the text of customer reviews

Select to learn more

24 customers mention content, 20 positive, 4 negative
Customers find the book's content positive, with one customer noting that familiar ideas are exceptionally well explained, and another mentioning it serves as an excellent guide for seasoned developers and architects.
Amazing book, very concise and clear thoughts on software complexity , author thinks in first principles. I wish I had read this book 20 years ago.Read more
This is on the whole a good book with some useful guidelines....Read more
Great read.Read more
Very good book, dealing with a topic not touched by other authors. I believe that books of this kind are few.Read more
9 customers mention design, 9 positive, 0 negative
Customers find the book excellent for design guidelines, with one customer noting its refreshing absence of fashionable methodologies.
...There are some design principles that make a lot of sense and also, in retrospective, explain why some Java libraries are so bad...Read more
...text to refer to my mentees, and this book really encapsulates all the key design principles I have spent years fine tuning myself....Read more
I think this book is excellent for design guidelines, which is something I find scarce in many software books....Read more
Explains why it is a good thing to design the software and bad to just get the job done....Read more
5 customers mention length, 5 positive, 0 negative
Customers appreciate that the book is short in length.
As an experienced software engineer, I liked this book a lot. It's short, fairly general and high-level, much of the content seems like common sense...Read more
...because each chapter focuses on one design principle and is only a few pages long, and while there are small examples for everything, it is not...Read more
...The book is short in length, which means the good stuff isn't buried under bloat, and being well written is quick to read.Read more
I like this book as it is short and it goes to the point.Read more
5 customers mention simplicity, 5 positive, 0 negative
Customers appreciate the simplicity of the book, with one mentioning it provides clear thoughts on software complexity.
...Very simply and concisely written, it is definitely worth a read or three.Read more
...The Book is a print on demand book with a simple but effective design, printed on quality paper....Read more
Amazing book, very concise and clear thoughts on software complexity , author thinks in first principles. I wish I had read this book 20 years ago.Read more
...describes some different aspects of Software Engineering such as code complexity, TDD and Agile development, and many other topics.Read more
7 customers mention writing style, 4 positive, 3 negative
Customers have mixed opinions about the writing style of the book, with some finding it well written while others note it is not easy to read.
...which means the good stuff isn't buried under bloat, and being well written is quick to read.Read more
...Too much info on how to write good comments. I feel that a senior will get the idea, but a junior will not get to the point.Read more
...Very simply and concisely written, it is definitely worth a read or three.Read more
...It could also do with a good copy editor as the writing rambles a bit at times.Read more
6 customers mention examples, 2 positive, 4 negative
Customers have mixed opinions about the examples in the book, with some finding them well-chosen, while others note there are too few.
...Too much theory, too few examples.Read more
...you will come out with a different opinion on some topics, refreshed some good practices, and learn good terminology to describe difficult...Read more
...Comments in code are indispensable. Small methods aren't always good. Lots of very sound, carefully reasoned practical advice here....Read more
The book gives general advices without enough good examples. It could be helpful for very junior/intern developers....Read more

Top reviews from the United Kingdom

  • 5 out of 5 stars
    An excellent book about software design principles, a must read for all software engineers
    Reviewed in the United Kingdom on 20 December 2020
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    I discovered this work by first watching John present his material at a Google Talk series on software design. When he said he had tried for years to find a book that encapsulated key software design principles and failed, I really resonated with his approach. I have been looking for ages for a standard text to refer to my mentees, and this book really encapsulates all the key design principles I have spent years fine tuning myself. I wish I had had this book when I was starting out!

    I particularly like John's writing style, it is as clear and concise as the software design principles he advocates. The Book is a print on demand book with a simple but effective design, printed on quality paper. I read it from end to end in a week of lunchtimes, because each chapter focuses on one design principle and is only a few pages long, and while there are small examples for everything, it is not over cluttered with intricate detail. It is just the right level for a beginner or an expert to benefit from alike.

    The examples are well chosen from a knowledge-base of hundreds of student and industrial projects that John has direct involvement with, and every example clearly supports the principle being presented.

    I will be recommending this book to everyone that I mentor and support, and I recommend that you buy it too. If you are a beginner, it will give you much to think about and practice as you grow into your career. If you have been developing software for a few years, it will make you re think some of the things you do and adjust your style for the better. If you are experienced, it will encapsulate succinctly all the principles you have spent years perfecting, and give you an easy way to pass on these principles to those around you that you mentor.

    4 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Finally a clean code book that justifies itself.
    Reviewed in the United Kingdom on 8 June 2021
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    A book that falls in the same category as "clean code", except it gives better advice with actual justifications.

    Unlike "clean code", this book actually tells you why a certain way is better rather than just stating it as some biblical truth. It also presents overarching theory that all the concepts sit on and with which you can take to make actually day to day decisions that aren't based on hard rules. The main concept presented is the idea of complexity, reducing the complexity that is exposed to developers by abstracting it away into parts that can be used as a black box and is seen by few.

    The book is good for both junior and senior engineers and will make you rethink how you and your team work, in particular constantly improving the code base rather than just looking to address tech debt at some future point in time. At the very least you will come out with a different opinion on some topics, refreshed some good practices, and learn good terminology to describe difficult concepts.

    People who complain that this book encourages long functions and classes really miss the point. The point is that functions and classes should do one thing in isolation. That's the goal, not to make it short. A lot of the time functions are shorter as a result of following that objective, but you are optimizing for things doing one thing not shortness within itself. Separating functions out into blocks that do nott stand alone as independent units just makes things harder to understand and read as you have to jump about in the file, or into other files. If you look at some of the before and after examples that do this in clean code, they are actually worse a lot of the time after. If you have this opinion, when you read this book be open to changing your mind. If your argument is "functions should be 20 lines long at most because that's what I read in clean code and anything else is wrong" you are really limiting yourself and hurting the people who read your code.

    It was also very refreshing to finally hear a counter argument to the dogmatic application of TDD.

    To conclude, if you would like to learn how to write clean code with actual generalisable theory over using hard rules such as never comment, a function should be x lines long, and classes should be y lines long, then this is the book for you.

    18 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 4 out of 5 stars
    Not ground breaking , but definitely worth a read
    Reviewed in the United Kingdom on 31 December 2022
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    The book covers some good engineering practises for software design. It is refreshing to see that many views I have held for years is shared by the author as well. for e.g.: I always thought Java IO libraries were bit over engineered and could have been made simpler, glad to see author also shares the same view. Views on design patterns overuse or on TDD , I fully agree. I find it hard to go with the suggestion of designing general solution all the time. Though I agree with the overall concept, designing a generic solution first, will put too much burden on the engineer (who need not be domain expert), as result will end up with wrong or abstraction (most of the time!).

    2 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Very well thought out
    Reviewed in the United Kingdom on 6 March 2023
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    Probably the best general software design book I've ever read. Condenses everything I've been struggling to express about design over 35 years in the IT industry. I wish more junior developers would read this. Comments in code are indispensable. Small methods aren't always good. Lots of very sound, carefully reasoned practical advice here. Deep general purpose modules with small interfaces, well documented. Sadly most code is written once, quickly, in a tactical fashion, then ignored while people move on to newer things. A refreshing change from the "Uncle Bob " dogma. Thoroughly recommended.

    One person found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 3 out of 5 stars
    generic advice with too much emphasis on comments
    Reviewed in the United Kingdom on 27 April 2022
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    the advice presented in this book is generally good but its too generic.

    it feels like the author has a lot of academic experience and not as much real world (building real apps for production).

    the advice on comments its just bad. comments for every variable, method, class, module, etc is not realistic. and the examples given with a variable name having a 4 lines comment is something hope to never see on my projects.

    lastly, i wish he would have placed more emphasis on testing.

    10 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Excellent guide for the seasoned developer or architect.
    Reviewed in the United Kingdom on 13 August 2018
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    The author is not afraid to go against the common idioms of "good design" and he defines a new way to look at problem decomposition and abstractions. The way developers get thought to design systems in conjunction with software development trends too often leads to creating over-complicated software. Any software which is too complex to maintain will eventually be rewritten. The author explains a different approach on how to decompose problems and he defines a methodology to achieve optimal results over time. It also provides a list of red flags which, when found in a software project, enables the developer to timely recognize and correct design issues before they go out of hands.

    I'd recommend this book to the seasoned developer or software architect who has already seen a number of projects and designed a few systems. Which such experience the reader will quickly recognize many of the bad ways to design a system and the type of problems which bad design leads to.

    15 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Software should be designed for ease of reading, not ease of writing
    Reviewed in the United Kingdom on 4 November 2022
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    John writes about some of the software design principles that contradict with principles favoured by Robert C. Martin. Some principles may be an opposite to what we've been thought. e.g deep modules, general-purpose interfaces, TDD effecting design, comments etc.

    Many of his findings are based on teaching students at Stanford. However, does it still apply for experience engineers who can make special-purpose interfaces, they are used to high cognitive load, perform TDD and good design at the same time, design once, because they know this is the best approach beforehand etc?

    I think it does apply, because as John mentioned in his book, "software should be designed for ease of reading, not ease of writing".

    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 4 out of 5 stars
    Good engineering book
    Reviewed in the United Kingdom on 15 September 2019
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    I'm stuck between 3 and 4 stars.

    As others said, it's a good book overall.

    There are some design principles that make a lot of sense and also, in retrospective, explain why some Java libraries are so bad ( you can figure it out for yourself after reading it ).

    However, I couldn't get over the fact that a substantial part of this book is mostly about comments - got to a point where I was so fed up, I was legit skipping pages to get to more meaningful content.

    4 people found this helpful
    Sending feedback...
    Thank you for your feedback.
    Sending feedback...
    Thank you. We’ll investigate in the next few days.

Top reviews from other countries

  • 5 out of 5 stars
    strongly recommended and will read again.
    Reviewed in Brazil on 26 September 2025
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    Great book! Very clear and pragmatic explanation of what matters in Software Design. Also recommend the The Pragmatic Engineer podcast episode with John Ousterhout (author) for a great overview of some ideas in the book.

    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    A light switch for "clean code" concepts
    Reviewed in France on 8 August 2024
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    Possibly my favourite tech book ever.

    Unlike other "clean code" books, it's not just a collection of advice, it unfolds a real theoretical framework that embodies the perks it touts in good design: simplicity, concision, consistency and pragmatism.

    It felt like the author somehow found just the right abstractions to describe what we pursue in good code.

    All served by spot on mental models (deep modules, information leakage), simple yet precise language and telling examples.

    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Good book and not a heavy reading
    Reviewed in the Netherlands on 3 November 2024
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    It's an amazing book where you get insights about how to build and maintain a software design. It's technical, but not a heavy reading, which makes it even more enjoyable.

    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Spot on
    Reviewed in Australia on 19 February 2024
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    The book's examples are mostly from programs running on an OS, with significant iron underneath. I mostly work with embedded systems, which are severely resource contained, often running on bare metal with a limited thread scheduler. Still, I found the book being generic enough to be applicable for that niche as well.

    I completely agree with Prof Ousterhout regarding shallow methods, variable duplication and the like being red flags. He repeatedly re-iterates the importance of hiding implementation details, which is actually one of the stated goals of OOP,

    The book tries to drive a point through: your system's long-term manageability depends on its abstractions, how you partition the task at hand into self-contained chunks with minimum, or preferably no interdependence between them. Yes, it cost a a lot of design time without cranking out any code, but this investment will be paid back during the actual implementation, and, more importantly, during the lifetime of the project (which with embedded systems is often decades).

    I especially like his talking about commenting the code and how comments provide meta-information that the code does not convey. The code should be obvious, sure. You read it and should know what it does. But will you know why it does it the way it does? Often the code is written on a particular way to accommodate peculiarities of the underlying hardware, and it incorporates a lot of knowledge/mathematics of a completely different field that the device services. You might have it all in your head when working on the project, but expecting the next guy (or even yourself a few years later) to know it all is not realistic. Comments can point out all those externalities and provide a rational for particular, possibly counter-intuitive, design choices employed in the code.

    Overall, I think the book is an eye-opener, at least it should make you think about abstractions, interactions, separation, generalisation, and, the most important message of the book, minimising complexity.

    Sending feedback...
    Thank you. We’ll investigate in the next few days.
  • 5 out of 5 stars
    Really good for fundamentals. Would recommend for VibeCoders
    Reviewed in India on 18 April 2026
    Brief content visible, double tap to read full content.
    Full content visible, double tap to read brief content.

    Sometimes a little wordy, but great read for Developers or anyone building their own software

    Sending feedback...
    Thank you. We’ll investigate in the next few days.