Reflections of an “Old” Programmer

If I were to graph an average programmer’s knowledge over the course of their career, keeping in mind knowledge decay and accumulation rate, I think it might look like something this:

In the beginning of our careers, in what we could call the eager apprentice stage, accumulating knowledge is relatively easy. Everything is new, and so each experience is a vehicle to gain more knowledge. Moreover, since we’re younger, we often have fewer hard obligations, and so we probably don’t mind spending a few nights and weekends picking up new languages and frameworks. Lastly, and importantly, the expectations on us from our employers is lower. Everyone understands that we’re junior, and so more easily than our colleagues, we can carve out a little time during the work day to fill in holes in our knowledge. This is a fun stage, but there’s this persistent feeling that there’s so much we don’t know.

At some point though we cease to be novices, and we establish ourselves as productive, self-sufficient developers. For the first time, the gap between us and our colleagues (even the ones 10 years our senior!) does not seem so large. This fills us with vim and vigor, and so this is the rising star stage. The investment we made in learning has paid off, and just about everything we know is still useful – i.e. none of our knowledge has noticeably decayed. With this reservoir full of relevant knowledge, we begin to earn the respect of clients, peers, and managers, and with this respect comes titles, salary, and opportunities. Though we don’t necessarily see it at the time, this is also an important point of inflection.

It’s at this point that two things happen. First, that promotion to “senior” comes with something more than just money: greater expectations. Employers need their star programmers to be leaders – to help junior developers, review code, perform interviews, attend more meetings, and in many cases to help maintain the complex legacy software we helped build. All of this is eminently reasonable, but it comes, subtly, at the expense of our knowledge accumulation rate. The time we used to have to read tech blogs: gone. Second, it’s also at this point that we first experience (or at least recognize) a little knowledge decay. Some of what we learned early in our career is now out-dated. All that time “we” (read: I) spent learning GWT? Lost! Essentially, both forces, knowledge decay and knowledge accumulation rate, begin to work against us.

It’s at this point where we enter the third and final stage, the ebb-and-flow of the stable veteran. We are knowledgeable and productive, yes, but we also understand that we may actually know fewer (useful) things than we did at a prior point in our career. A non-trivial amount of our knowledge has decayed, and we may not have had the time to accumulate enough new knowledge to compensate. This can be frustrating, and I think it’s why it’s at this point that so many of us bail for other pastures – management, sales, testing, or (my dream) farming. We realize that it’ll require real effort to just maintain our level proficiency – and without that effort, we could be worse at our jobs in 5 years than we are today. There is no coasting.