There has been a lot of introspection by programmers recently. One fascinating thread was kicked off by Ed Finkler, who wrote “The Developer’s Dystopian Future“. This resonated with Marco Arment and Matt Gemmel followed up both pieces with “Confessions of An Ex-Developer”. All three are accomplished developers and successful writers.
As a (cough) veteran programmer there are many feelings expressed by Ed, Marco and Matt that I recognize in myself. In particular, the fear of being left behind. I’ve been lucky enough to work on a wide variety of programming projects over the years. And whether it was specialized DSP engines for high speed image processing, simulations of neutron physics on UNIX workstations, apps on PCs, or experiences on the web, I never reached the point where I felt like I had completely mastered the science or the tools. There was always something new to learn, or someone else, somewhere in the world, who knew more than I did. As soon as I was getting close to mastery, the goalposts moved to some new technology or tool.
The more experience I had, the more I knew, and the more I knew that I didn’t know.
In 2002 I left hands on programming to get an MBA and then wield it in PowerPoint decks at Microsoft. For almost a decade I wasn’t a programmer. I managed teams that included developers, but I didn’t write a single line of shipping code.
At some point I started some after hours tinkering with the web and realized how much I missed the hands on experience of building something. Slowly it sucked me back in. By 2010 I had left Microsoft and was spending a lot of my time programming. Code is not all I do, but I do enough of it to call myself a programmer again.
This time round I still feel that same programmer angst, but with much less intensity. Yes, new tools and technologies are emerging every day, and yes, it is impossible to keep up with all of them. But here’s the thing I realized: you don’t need to. In fact, I think a large part of success is ignoring much of the cacophony about new new things, and focusing on the specific thing you are trying to achieve with the technology.
For evidence that you don’t need an encyclopedic knowledge of current programming technology to have impact, just look to some of the biggest programming success stories. In the early ’90s, in his early twenties, Marc Andreessen wrote the Mosaic web browser. In the early ’00s David Heinemeier Hansson created the Rails web framework. He was in his early twenties. At around the same time Matt Mullenweg released the first version of WordPress before he turned twenty. Mark Zuckerberg was about twenty when he founded Facebook in 2004.
I’m pretty sure that even as Marc, David, Matt and Mark were bringing these things into the world there were older developers somewhere talking about how hard it was to keep up with all the new developments in programming.
Hoodie Not Required
Many people see the success of young developers and draw the conclusion that youth is the essential ingredient. That a young mind, the absence of obligations, and the ability to spend every waking minute coding are prerequisites for success. This isn’t just the point of view of grumpy 30+ year old programmers like me, it is a pattern that has been embraced by prominent early stage investors. But like many patterns, it is one based on correlation, not causation.
The cause here has much more to do with the outdated expectations that programmers have about their career paths. The old model was that you focused on learning the basics in the beginning of your career and then over time transitioned to practicing your craft. Later in your career, your productivity and value lay in your experience.
But the days of earning some sort of tenure as a wise old programmer are gone. Whether you are 25 or 55, the playing field is pretty much level. Sure, older programmers have experience to draw on — inexperienced programmers sometimes look like cartoon characters with legs spinning wildly, but making no forward progress – but that knowledge based on experience is also a burden. It constrains your thinking, convincing you that things can’t be done. Young programmers don’t know what can’t be done. They just do it.
Programmer Half Full
Intellectual vocations with very little dependence on physical vitality are not new to modern civilization. What makes programming different is that the underlying practices and technologies are changing so fast that there is very little static foundation to speak of.
The reality, then, is that long term success as a programmer involves being focused on the task in front of you, but also aware of the changes taking place in your peripheral vision. You need the discipline to stay focused on being productive with your current toolset, often much longer than current vogue dictates. At the same time you need to have an open mind and sufficient awareness of new technologies to selectively and periodically start from scratch.
It is up to individuals to decide what this means for them. Do you enjoy reinventing yourself every few years? Are you comfortable in an environment where people 20 years younger than you are your technical peers? Is the idea of true, lifelong learning exciting, or is it exhausting? If not, then a lifetime spent programming is perhaps not for you.
The good news in all this is that you don’t need to spend a lifetime programming to be successful doing it. Take a decade off and do something else if you like. You can always return. If you do, it won’t take you long to get into the hot new programming language, framework and platform. Before long, you’ll know enough to change the world.