Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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 moreRobert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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 moreRobert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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.
Robert C. Martin • 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 moreRobert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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.
Robert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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.
Robert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
The second value of software has to do with the word “software”—a compound word composed of “soft” and “ware.” The word “ware” means “product”; the word “soft”… Well, that’s where the second value lies.
Robert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
Object-oriented programming imposes discipline on indirect transfer of control.
Robert C. Martin • 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 moreRobert C. Martin • Clean Architecture: A Craftsman's Guide to Software Structure and Design (Robert C. Martin Series)
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 more