Contents, Forward, Preface, Introduction, CH01, CH02
The TOC indicates that there are six broad sections to the book.
- Introduction: Martin defines software architecture and lays the case for his work.
- Programming Paradigms: Describes the different ways of programming (structured, functional, object oriented)
- Design Principles: The SOLID acronym is pretty famous, this section details each letter in detail.
- Component Principles: Looks like there's a step between principles and architecture... in the metaphor, perhaps these are bricks?
- Architecture: the reason we're here!
- Details: Interestingly, Uncle Bob separates a lot of stuff out from being classed as "architecture" chapter titles like "the database is a detail" or "the web is a detail" seems to indicate that they're in some ways irrelevant to the discussion of software design principles. Looking forward to reading his arguments here :)
- "Architecture" is a metaphor describing the structure of the code
- Software is made out of software, it is fractal and recursive in its nature
- Architecture represents the SIGNIFICANT decisions in software design where significant is a meaure of the cost of changing it
- If you think good architecture is expensive, try bad architecture
- How do we reduce future development costs without knowing what is going to happen?
- The author wrote his first line of code in 1964, this stuff is based on 50 years experience
- The rules of archtecture are the same across projects
- When software design is done right, it takes a fraction of the human resoruces to design and maintain
- There is no different between system design and system architecture. They refer to the same thing.
- The goal of architecture is to minimize the hhuman resources required to build and maintain the required system.
- Case study:
- As staff increases the product development speed slows and plateaus
- As is slows and plateaus the cost (per productivity) increases exponentially (eg: Phong Thieu tiktok )
- When little or no thought is given to the cleanliness of the code or the structure of the design, then development speed slows to a stop because of the complexity
- Well designed code matters
- "We can clean it up later" <-- but you never actually do. Don't feel bad, nobody ever actually does. Take the lesson though and do it cleanly the first time.
- Making messes is always slower than staying clean from the start.
- "Throw it out and start over" is also effectively BS because if you don't run aggressively "clean" you will just rebuild with a new mess
- "Their overconfidence will drive the redesign into the same mess as the original project"
- The best option for software development is to take the qulaity seriously from the start (later chapters define quality)
- on a long term the rules of architecture allow us to minmize effort and maximize productivity (eg: INTERFACES... )
- Two values of software are BEHAVIOR and STRUCTURE
- BEHAVIOR: does it do what the business needs it to do?
- STRUCTURE: how difficult is it to change?
- the SOFT in "software" must be changable, otherwise it would be HARD-ware.
- when stakeholders change their minds about what they want, it should be easy to adapt to their requirements.
- The reason costs grow out of proportion to the size of the requested changes is due to STRUCTURE
Eisenhower's Matrix | |
---|---|
important & urgent | important & not urgent |
unimportant & urgent | unimportant & not urgent |
- BEHAVIOR is often URGENT but not necessarily IMPORTANT
- discussion question: is this true?
- ARCHITECTURE is always IMPORTANT but not always URGENT
- Business managers are not equipped to evaluate the importance of structure
- This is what a software developer is hired to do
- It is the responsibility of the software development team to assert the imporance of architecture over the urgency of features
- discussion: what are some examples of this? How do we send up the warning that we need to "build it right?"
- discussion: is this always true? when do we prioritize a feature over long term maintainablity?
- Structure vs. Behavior is ALWAYS a struggle
- As a developer YOU ARE A STAKEHOLDER
- It is part of your duty to ensure code remains maintainable
- Note the Will Larson book "Staff Engineer" often refers to programmers as "the Lorax" in this case speaking for the long term structure of the code.
- Conclusion: If architecture comes last then the system will become ever more costly to develop