Clean Architecture: A Craftsman's Guide to Software Structure and Design
Rate it:
Open Preview
3%
Flag icon
Processor speed and network bandwidth can deliver a harsh verdict on a system’s performance.
4%
Flag icon
Architecture represents the significant design decisions that shape a system, where significant is measured by cost of change.
4%
Flag icon
If you think good architecture is expensive, try bad architecture.
4%
Flag icon
The only way to go fast, is to go well.
4%
Flag icon
The architecture rules are the same!
5%
Flag icon
The code just hasn’t changed that much.
5%
Flag icon
The rules of software architecture are the rules of ordering and assembling the building blocks of programs.
5%
Flag icon
It doesn’t take a huge amount of knowledge and skill to get a program working.
5%
Flag icon
Getting software right is hard.
6%
Flag icon
When software is done right, it requires a fraction of the human resources to create and maintain.
6%
Flag icon
It is far more common to fight your way through terrible software designs than it is to enjoy the pleasure of working with a good one.
6%
Flag icon
The low-level details and the high-level structure are all part of the same whole.
6%
Flag icon
The goal of software architecture is to minimize the human resources required to build and maintain the required system.
6%
Flag icon
The measure of design quality is simply the measure of the effort required to meet the needs of the customer.
7%
Flag icon
Most modern developers work their butts off.
7%
Flag icon
Of course, things never do get cleaned up later, because market pressures never abate.
7%
Flag icon
Just as the Hare was overconfident in its speed, so the developers are overconfident in their ability to remain productive.
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
The fact is that making messes is always slower than staying clean, no matter which time scale you are using.
7%
Flag icon
The only way to go fast, is to go well.
7%
Flag icon
To take software architecture seriously, you need to know what good software architecture is.
8%
Flag icon
Every software system provides two different values to the stakeholders: behavior and structure.
8%
Flag icon
To fulfill its purpose, software must be soft—that is, it must be easy to 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.
8%
Flag icon
Those things that are urgent are rarely of great importance, and those things that are important are seldom of great urgency.
8%
Flag icon
The first value of software—behavior—is urgent but not always particularly important.
8%
Flag icon
The second value of software—architecture—is important but never ...
This highlight has been truncated due to consecutive passage length restrictions.
9%
Flag icon
Software architects are, by virtue of their job description, more focused on the structure of the system than on its features and functions.
9%
Flag icon
Paradigms are ways of programming, relatively unrelated to languages.
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.
10%
Flag icon
The paradigms tell us what not to do, more than they tell us what to do.
11%
Flag icon
Science does not work by proving statements true, but rather by proving statements false.
11%
Flag icon
Those statements that we cannot prove false, after much effort, we deem to be true enough for our purposes.
11%
Flag icon
Ultimately, 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
Dijkstra once said, “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. All that tests can do, after sufficient testing effort, is allow us to deem a program to be correct enough for our purposes.
12%
Flag icon
The reason encapsulation is cited as part of the definition of OO is that OO languages provide easy and effective encapsulation of data and function.
12%
Flag icon
OO certainly does depend on the idea that programmers are well-behaved enough to not circumvent encapsulated data.
12%
Flag icon
Inheritance is simply the redeclaration of a group of variables and functions within an enclosing scope.
13%
Flag icon
It’s fair to say that while OO languages did not give us something completely brand new, it did make the masquerading of data structures significantly more convenient.
13%
Flag icon
The bottom line is that polymorphism is an application of pointers to functions.
13%
Flag icon
OO languages may not have given us polymorphism, but they have made it much safer and much more convenient.
13%
Flag icon
The problem with explicitly using pointers to functions to create polymorphic behavior is that pointers to functions are dangerous.
14%
Flag icon
The fact that OO languages provide safe and convenient polymorphism means that any source code dependency, no matter where it is, can be inverted.
14%
Flag icon
If the modules in your system can be deployed independently, then they can be developed independently by different teams. That’s independent developability.
15%
Flag icon
OO is the ability, through the use of polymorphism, to gain absolute control over every source code dependency in the system. It allows the architect to create a plugin architecture, in which modules that contain high-level policies are independent of modules that contain low-level details.
15%
Flag icon
The low-level details are relegated to plugin modules that can be deployed and developed independently from the modules that contain high-level policies.
15%
Flag icon
Variables in functional languages do not vary.
15%
Flag icon
All race conditions, deadlock conditions, and concurrent update problems are due to mutable variables.
« Prev 1 3 4