Clean Architecture: A Craftsman's Guide to Software Structure and Design
Rate it:
Open Preview
5%
Flag icon
getting something to work—once—just isn’t that hard.
5%
Flag icon
Getting software right is hard.
6%
Flag icon
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
7%
Flag icon
“The race is not to the swift, nor the battle to the strong.”
7%
Flag icon
“We can clean it up later; we just have to get to market first!” Of course, things never do get cleaned up later, because market pressures never abate.
7%
Flag icon
The bigger lie that developers buy into is the notion that writing messy code makes them go fast in the short term, and just slows them down in the long term.
7%
Flag icon
making messes is always slower than staying clean,
7%
Flag icon
The only way to go fast, is to go well.
7%
Flag icon
the best option is for the development organization to recognize and avoid its own overconfidence and to start taking the quality of its software architecture seriously.
8%
Flag icon
Every software system provides two different values to the stakeholders: behavior and structure. Software developers
8%
Flag icon
are responsible for ensuring that both those values remain high.
8%
Flag icon
Software was invented to be “soft.” It was intended to be a way to easily change the behavior of machines. If we’d wanted the behavior of machines to be hard to change, we would have called it hardware.
8%
Flag icon
When the stakeholders change their minds about a feature, that change should be simple and easy to make. The difficulty in making such a change should be proportional only to the scope of the change, and not to the shape of the change.
8%
Flag icon
I have two kinds of problems, the urgent and the important. The urgent are not important, and the important are never urgent.1
9%
Flag icon
The mistake that business managers and developers often make is to elevate items in position 3 to position 1. In other words, they fail to separate those features that are urgent but not important from those features that truly are urgent
9%
Flag icon
and important. This failure then leads to ignoring the important architecture of the system in favor of the unimportant features of the system.
9%
Flag icon
it is the responsibility of the software development team to assert the importance of architecture over the urgency of features.
9%
Flag icon
The development team has to struggle for what they believe to be best for the company,
9%
Flag icon
Effective software development teams tackle that struggle head on. They unabashedly squabble with all the other stakeholders as equals.
9%
Flag icon
Remember, as a software developer, you are a stakeholder. You have a stake in the software that
9%
Flag icon
you need to safeguard. That’s part of your role, and part of your duty. And it’s a big p...
This highlight has been truncated due to consecutive passage length restrictions.
9%
Flag icon
If architecture comes last, then the system will become ever more costly to develop, and eventually change will become practically impossible for part or all of the system.
9%
Flag icon
In 1951, Grace Hopper invented A0, the first compiler. In fact, she coined the term compiler.
9%
Flag icon
Paradigms are ways of programming, relatively unrelated to languages. A paradigm tells you which programming structures to use, and when to use them.
9%
Flag icon
structured programming, which was discovered by Edsger Wybe Dijkstra in 1968.
9%
Flag icon
Structured programming imposes discipline on direct transfer of control.
9%
Flag icon
Object-oriented programming imposes discipline on indirect transfer of control.
9%
Flag icon
Functional programming imposes discipline upon assignment.
11%
Flag icon
Eventually
11%
Flag icon
petered out.
11%
Flag icon
moved ever rearward,
11%
Flag icon
empirical
11%
Flag icon
nature of scientific theories and laws: They are falsifiable but not provable.
11%
Flag icon
bet
11%
Flag icon
we can say that mathematics is the discipline of proving provable statements true. Science, in contrast, is the discipline of proving provable statements false.
11%
Flag icon
“Testing shows the presence, not the absence, of bugs.” In other words, a program can be proven incorrect by a test, but it cannot be proven correct.
11%
Flag icon
implications
11%
Flag icon
stunning.
11%
Flag icon
ende...
This highlight has been truncated due to consecutive passage length restrictions.
11%
Flag icon
software is like a science. We show correctness by failing to prove incorrectness, ...
This highlight has been truncated due to consecutive passage length restrictions.
11%
Flag icon
unrestrained
11%
Flag icon
falsifiable
11%
Flag icon
we still consider
11%
Flag icon
functional decomposition
11%
Flag icon
to be one of our best ...
This highlight has been truncated due to consecutive passage length restrictions.
11%
Flag icon
falsifiability.
11%
Flag icon
Software architects strive to define modules, components, and services that are easily falsifiable (testable). To do so, they employ restrictive disciplines similar to structured programming,
11%
Flag icon
a...
This highlight has been truncated due to consecutive passage length restrictions.
12%
Flag icon
admixture