About This Book

This is not a textbook. It is a collection of short stories meant to help you refine your way of thinking about and working on software projects.

You won’t find any neatly packaged prescriptive advice within these pages. Instead, you will see example after example of the many problems we encounter as practicing developers, and the thought process involved in discovering how to solve them.

To encourage you to read this work in a way that brings out your creative side, I made you the main character in each of its stories. This will undoubtedly feel a bit weird to you, and even as I write this introduction, it feels weird to me, too!

My hope is that by embedding you in the work, this book can be more than just another stream of stern admonitions flowing down from the hilltops where Expert Programmers live. Instead, I want you to ask questions like, “If I were in this situation, would I really do things this way? If not, why not?”

As you read this book, I invite you to shine the light inward and question your own practices, habits, and perspectives at a deeper level. For best results, keep a journal nearby while reading and then share whatever ideas you jot down with your friends and coworkers. The concepts in this work are meant to be thought about and discussed, not just consumed.

In each story, you’ll wear a different hat as you navigate your way through imaginary worlds that have been carefully constructed to teach you useful lessons. But the most important lesson of all will come from noticing the friction points and meaningful differences between the real you and the characters I’ve written for you.

Yes, that sounds a bit ambitious. But the entire point of reading or writing a book is to stretch ourselves a little bit, to become better at what we do. We’re in this together, and with your help, I think we’ll do just fine.

Buckle up, friend. It’s time for our journey to begin.

The Journey

The story arc of this book covers a full career in software development, condensed down into a quick read that is meant to be accessible to all practicing developers.

Chapter 1: You are a competent programmer, and you are putting your skills to good use by helping people explore new product ideas through rapid prototyping.

Chapter 2: Your work becomes more complicated. You need to incrementally grow existing systems and you have many active customers to support. There’s a feeling of conflict between what you think is the right way to work, and the pressure around you to ship new features quickly.

Chapter 3: You gain a deeper understanding of the costs of rushed decision making, especially at the integration points between your own code and the outside world. You’ve learned a great deal from past mistakes, and have started to focus on the complex relationships between business, customer service, and technical work.

Chapter 4: You are now a highly experienced developer. You are capable of helping others understand how to think about programming and problem solving, and have started to mentor a friend who is new to the field.

Chapter 5: You’ve become an effective teacher, and your development experience is strong enough that you’re able to think on your feet, even in the context of live demonstrations. You use these skills to help students bridge the gap between theory and practice in a classroom setting.

Chapter 6: You are starting to progress down the path to mastery. You’re able to pinpoint the weak spots of legacy software systems and design proper replacements for them, optimizing for both business outcomes and human-friendly workflows.

Chapter 7: You now have enough familiarity with the whole business of software that you’re capable of working within an organization to identify and fix problems at every level. Your core competency is still in software development, but you’ve gained enough experience to communicate well at many levels.

Chapter 8: You start to wonder about the future of the computing industry as a whole. At this point, you’re free to pick your own career path, so figuring out where you’re going and why starts to be the most important question.

Because the career of a software developer is more like a spiral than a line, I encourage you to read through all of these chapters, no matter what your current skill level is.

I’ve written these stories to work at many levels, and there’s no dividing line between the “basic” and “advanced” topics in this book. Each chapter is self-contained, so jumping around is alright...but for best results, read from cover to cover.

Get Programming Beyond Practices now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.