The Pragmatic Programmer: From Journeyman to Master
Andrew Hunt, David Thomas
The Pragmatic Programmer is widely considered as one of the most important books for developers. Even though it was written over 10 years ago, it holds up extremely well over time because it focuses less of specific technologies and more on solid methodologies and fundamental skills.
For a new developer, this book is a whirlwind tour that — in a manageable 250 pages — covers everything from getting the most out of your development tools to software design principles to career development and how to work in a team environment.
Sections to pay close attention to: * Communicate!: a crash course in technical communications * Tracer Bullets: write a barebones, end-to-end skeleton * Decoupling and the Law of Demeter: smaller modules with minimal dependencies are good * Programming by Coincidence: learn to program deliberately
Alternative: Clean Code (more focused on the mechanics of writing good code)
Apprenticeship Patterns: Guidance for Aspiring Software Craftsman
Dave Hoover, Adewale Oshineye
Following the Pattern Language format, this book focuses on the journey from beginner developer to journeyman to master and introduces the concept of Software Craftsmanship. I was a little worried that the authors were stalking me because so many of the "Context" sections captured exactly with how I felt during my first six months as a professional developer.
This book is less popular than others, but it has been the most impactful book I've found for starting a career in software. There is so much fantastic advice in this book that it deserves to be more known.
Sections to pay close attention to: * The Long Road: keep your focus on the long term, value growth over salary * Find Mentors: seek out and learn from those that are ahead of you * Create Feedback Loops: how to get useful feedback * Confront your Ignorance: what to do when you identify a skill gap that you need for daily work
Alternative: The Passionate Programmer (more story/interview based)
Don't let the
in Ruby part of the title scare you off if you are in a .NET shop — there is plenty
of general purpose advice for designing software that is a joy to work with and easy to modify. Metz
has a very friendly writing style and this book explains concepts with an ease that is lacking in other
books on the subject of design (I'm looking at you Gang of Four...).
This book is a great introduction to some more advanced design concepts — dependency injection, Tell Don't Ask, role behavior, object composition — that doesn't feel overwhelming. A new developer won't pick up and master every concept the first time, but it is good to get exposure as early as possible.
Sections to pay close attention to: * Deciding What Belongs in a Class: introduction to SRP, code that is easy to change * Writing Loosely Coupled Code: managing dependencies and choosing dependency direction * Creating Flexible Interfaces: thinking about Messages * Designing Cost-Effective Tests: a gentle introduction to testing and TDD
Alternative: Growing Object Oriented Software, Guided by Tests (more advanced with heavy emphasis on TDD)
Disclaimer: Matt Swanson is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to amazon.com