The core idea of this book is to convey the mindset of an experienced developer by comparing and contrasting different code qualities (aka nonfunctional requirements).
The figure inside the front cover relates the content of this book to the wider landscape of the knowledge required of professional developers. First, you start by learning the basics of a programming language. In Java, that entails knowing about classes, methods, fields, and so on. This book won’t teach you those basics. Then, you should ideally follow three paths:
- The programming language path— Learn about the more advanced language features, such as generics and multithreading.
- The algorithmic path— Learn about solid theoretical principles, standard algorithms and data structures, and ways to measure their performance.
- The software engineering path— Learn about design principles, methodologies, and best practices that help manage complexity, especially in large projects.
This book covers all of these areas, with a twist. Rather than teaching these different aspects separately, I’ll mix and match them according to the needs of each chapter.