The Intern & New Hire Summer Reading List

Series: growth May 31, 2013

The Pragmatic Programmer
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
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)

Practical Object-Oriented Design in Ruby
Practical Object-Oriented Design in Ruby: An Agile Primer
Sandi Metz

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)

built with , Jekyll, and GitHub Pages — read the fine print