The difference between a bad programmer and a good programmer is understanding.
That is, bad programmers don’t understand what they are doing, and good programmers
do. Believe it or not, it really is that simple.
This book exists to help all programmers understand software development on a very
broad level that can be applied to any programming language or project from here to
eternity. It lays out scientific laws for software development, in a simple form that
anybody can read.
If you are a programmer, these laws will help explain why certain software development
methods work and why some don’t. They will help guide you in making software development
decisions on a day-to-day basis, and they will help your team have intelligent
conversations that lead to sensible plans.
Written for every programmer working in any language, on any type of system, at all skill levels, this book details a series of principles designed to bring sanity, order, and simplicity to software projects across the board. Non-technical managers of software teams could also use it to gain an understanding of what the "right way" and the "wrong way" are (and why they are right and wrong) when it comes to developing software. The focus of the book is primarily on "software design," the process of creating a plan for a software project and making technical decisions about the pattern and structure of a system. Every programmer working on a software project is involved in design, no matter how large or small their responsibility is in the code base. Learn the laws of software design, and understand not just what decisions to make, but how and why to make them.