Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
amazon.com
Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
Every software system provides two different values to the stakeholders: behavior and structure. Software developers are responsible for ensuring that both those values remain high. Unfortunately, they often focus on one to the exclusion of the other. Even more unfortunately, they often focus on the lesser of the two values, leaving the software sy
... See moresoftware is like a science. We show correctness by failing to prove incorrectness, despite our best efforts. Such proofs of incorrectness can be applied only to provable programs. A program that is not provable—due to unrestrained use of goto, for example—cannot be deemed correct no matter how many tests are applied to it.
Structured programming imposes discipline on direct transfer of control.
Notice the pattern that I’ve quite deliberately set up in introducing these three programming paradigms: Each of the paradigms removes capabilities from the programmer. None of them adds new capabilities. Each imposes some kind of extra discipline that is negative in its intent. The paradigms tell us what not to do, more than they tell us what to d
... See moreDijkstra 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.
If you give me a program that works perfectly but is impossible to change, then it won’t work when the requirements change, and I won’t be able to make it work. Therefore the program will become useless. • If you give me a program that does not work but is easy to change, then I can make it work, and keep it working as requirements change. Therefor
... See moreThe first value of software is its behavior. Programmers are hired to make machines behave in a way that makes or saves money for the stakeholders.
When software is done right, it requires a fraction of the human resources to create and maintain. Changes are simple and rapid. Defects are few and far between. Effort is minimized, and functionality and flexibility are maximized.
Böhm and Jacopini, who proved that all programs can be constructed from just three structures: sequence, selection, and iteration.