How to Use Objects: Code and Concepts (2016)
In roughly 15 years of teaching software engineering subjects at the University of Tübingen, from introductory programming courses through software engineering to software architecture, with a sideline on formal software verification, I have learned one thing: It is incredibly hard for those with basic—and even advanced—programming skills to become professional developers.
A professional developer is expected to deliver workable solutions in a predictable and dependable fashion, meeting deadlines and budgets, fulfilling customer expectations, and all the while writing code that is easy to maintain, even after the original project has long been declared finished.
To achieve all of this, the professional developer has to know both concepts and code. The concepts of software engineering, software design, and software architecture give high-level direction toward the goal and provide guidelines toward achieving it. Above all, they provide recurring solution patterns that are known to work and that other professionals will recognize. The concrete coding techniques must complement this knowledge to create good software. The guidelines come with many pitfalls and easy misconceptions, and the patterns must be put into a concrete shape that follows implicit conventions to be recognized. This is the second thing I have learned: It is incredibly hard to translate good concepts to good code.
I have written this book to present professional strategies and patterns side by side with professional code, in the hope of providing precisely the links and insights that it takes to become a professional developer. Rather than using classroom-sized toy examples and leaving the remainder to the reader’s imagination, I select and analyze snippets from the code base of the Eclipse IDE. In many cases, it is the context of the nontrivial application that explains why one code structure is good, while a very similar structure fails.