Table Of ContentProgramming Beyond Practices
Be More Than Just a Code Monkey
Gregory T. Brown
Programming Beyond Practices
by Gregory T. Brown
Copyright © 2017 Gregory Brown. All rights reserved.
Printed in the United States of America.
Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA
95472.
O’Reilly books may be purchased for educational, business, or sales promotional use.
Online editions are also available for most titles (http://safaribooksonline.com). For more
information, contact our corporate/institutional sales department: 800-998-9938 or
[email protected].
Editors: Mike Loukides and Jeff Bleiel
Production Editor: Kristen Brown
Copyeditor: Stephanie Morillo
Proofreader: Rachel Monaghan
Indexer: WordCo Indexing Services, Inc.
Interior Designer: David Futato
Cover Designer: Karen Montgomery
Illustrator: Rebecca Demarest
October 2016: First Edition
Revision History for the First Edition
2016-10-04: First Release
See http://oreilly.com/catalog/errata.csp?isbn=9781491943823 for release details.
The O’Reilly logo is a registered trademark of O’Reilly Media, Inc. Programming Beyond
Practices, the cover image, and related trade dress are trademarks of O’Reilly Media, Inc.
While the publisher and the author have used good faith efforts to ensure that the
information and instructions contained in this work are accurate, the publisher and the
author disclaim all responsibility for errors or omissions, including without limitation
responsibility for damages resulting from the use of or reliance on this work. Use of the
information and instructions contained in this work is at your own risk. If any code
samples or other technology this work contains or describes is subject to open source
licenses or the intellectual property rights of others, it is your responsibility to ensure that
your use thereof complies with such licenses and/or rights.
978-1-491-94382-3
[LSI]
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.
Description:Writing code is the easy part of your work as a software developer. This practical book lets you explore the other 90%—everything from requirements discovery and rapid prototyping to business analysis and designing for maintainability. Instead of providing neatly packaged advice from on high, auth