Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
Robert C. Martinamazon.com
Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
“A way to model the real world.” This is an evasive answer at best. What does “modeling the real world” actually mean, and why is it something we would want to do? Perhaps this statement is intended to imply that OO makes software easier to understand because it has a closer relationship to the real world—but even that statement is evasive and too
... See moreBöhm and Jacopini, who proved that all programs can be constructed from just three structures: sequence, selection, and iteration.
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.
software 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.
A foundational notion of l-calculus is immutability—that is, the notion that the values of symbols do not change. This effectively means that a functional language has no assignment statement. Most functional languages do, in fact, have some means to alter the value of a variable, but only under very strict discipline.
Getting software right is hard. It takes knowledge and skills that most young programmers haven’t yet acquired. It requires thought and insight that most programmers don’t take the time to develop. It requires a level of discipline and dedication that most programmers never dreamed they’d need. Mostly, it takes a passion for the craft and the desir
... See moreUltimately, we can arrange these four couplets into priorities: 1. Urgent and important 2. Not urgent and important 3. Urgent and not important 4. Not urgent and not important Note that the architecture of the code—the important stuff—is in the top two positions of this list, whereas the behavior of the code occupies the first and third positions.
Functional programming imposes discipline upon assignment.
The 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.