When I was in my teens I could think of little more that I'd ever want to do but program computers for a living.<p>Over the years I found myself presented with two possible upwardly mobile career paths.<p>1) Stay programming: every year or two increment the Roman numeral after my title until that got old, then start appending senior, principle or whatever to it: Programmer, Programmer II, Programmer III, Programmer IV, Programmer V, Senior Programmer, Principle Programmer, Principle Senior Programmer, etc.<p>Along the way I expected to learn the deep magic of the innermost workings of these beguiling machines, to use them to bend the course of rivers of electrons to my will.<p>2) Start managing programmers: Somewhere around Programmer III, turn into a "Lead", then a "Manager", then a "Director", "then a Managing Director", then a "VP", then an "President" then a "CTO".<p>Testing the waters for this career path showed me that it had little to do with the technical stuff I was really interested in, and more to do with mind-numbing bureaucracy and paper pushing. I stuck with option 1 for a few years. It didn't last, I ended up in option 2.<p>In my experience there are things that conspire against older programmers:<p>- The management trackers emphasized that they only had to learn their job and learn it once, with refreshers every few years. Being a programmer for your career means non-stop, life-long learning. This sounded awesome when I was in my early 20s. It sucks when I got to my 30s. Spending all night learning yet another framework for pushing bits out a network interface in some language almost exactly like the last 8 languages I learned but with slightly different libraries instead of going out and experiencing life, or just chilling in front of the TV sucked hard. My friends on the management track seemed to have unbelievable amounts of free-time. They constantly wanted to chat about the latest TV show they watched, went to the Gym 4 times a week, trained for marathons (dedicating hours each day), took cooking classes, spent weekends out doing stuff...all at the same time while I was stuck at home reading up on something. My free-time was stuck at about 30 minutes a day, and all I wanted to do was turn off the world for that half hour. Looking forward, there seemed no escape from this 7-day grind.<p>- People think that anything that has electricity flowing through it is something that you'll be an expert at. Before long the number of completely different disciplines that you're expected to have some level of mastery is at is bewildering. From telecom systems to embedded controllers to dozens of complex third party libraries each requiring a Master's level understanding of some non-software discipline like tax law or physics. Having the same discussion for the tenth time a week, every week, that just because you're a decent programmer, doesn't mean you have the domain expertise in everybody else's domain. You end up feeling like, and often end up doing, everybody else's work in every other department.<p>- The money in the management track can be much better. Even if the base salary at the same level isn't as good, you get opportunities for bonuses, commission etc. In some companies you get travel opportunities and other perks that are awesome as well. Travelling a week a month, with your company footing three meals a day, saves you lots of money.<p>- Your boss, who went management track, gets the credit from senior management track for your work. If he's cool he'll pass it down. One guy I worked for took that credit in the form of a fat bonus and bought himself a 40' boat. We got an email attachment showing us a picture of the boat he bought with our work. A late addition to the team, who was brought in to build the presentation slides our boss used during delivery of the software got a small bonus and a promotion. Collectively our team put in 7 day weeks and 12 hour days for a couple months and got squat. That sucks going through it one time, now imagine that happens every few years for the entirety of your career.<p>- If you end up in a company where software isn't the main focus of the company, but a cost center. You feel like, and are often treated like, a janitor. Sure you're a highly paid, highly educated janitor with multiple degrees and an IQ that's at least the double of the room temperature in whatever room you're in. But some new kid fresh out of his undergrad at Harvard Business school will get hired into his first job as your boss and will want to leave his "thumbprint" on his team by making sure all the "clutter in the development pen is cleaned up". He'll be introduced to you as a super sharp new hire who speaks 3 languages (you'll later find out not all that well). He'll need you to reset his network password every two weeks because he can't remember it, it's the only password he has to remember anywhere in his life. And of course, when he fucks up, and some project plan he wrote up wasn't correct, you get blamed since you're more "senior" than him and should have been mentoring him in the copious free time you have between deadlines.<p>- It just simply gets harder to learn new stuff the older you get. It sounded stupid to me when I was 20 and could pick up a new language in a week of off-work study. I'm not even all that old yet and I can feel the gears in my brain grinding to a halt. I finally understand the old greybeards stuck writing COBOL for 30 years.<p>- Along with that, the young kids come out of school knowing a lot more that's relevant to <i>today's</i> environment then you did. Your self directed study may not cover lots of what they take for granted. I'm blown away by what new grads are coming out of school knowing. You end up playing a game of catch up, only as the game goes on, the hill you're running on gets steeper and you become less able to run anyway.<p>I've met lots of old programmers outside of the field. Running bakeries, renting scuba gear, selling cars, fixing motorcycles.<p>Tired of all this, and not wanting to go management track at that time, I did a 10 year stint in another career.<p>While doing that I ended up at a startup, in a non-programmer job. A few years later and some attrition from the top, I found myself helping out with programming again, then helping out with sales, then with management until I finally found myself running it. During all this, I realized that the boring bureaucratic bits were <i>still</i> boring, but that was only a small piece of what was involved on that track. There's actually quite a bit of enjoyable intellectual challenge involved in running all the bits and pieces of a company. And it was true, after learning the basics of each piece, you really don't have to study more.<p>Sure you have to read a lot, but it's more like keeping on top of what the latest car models are instead of having to learn all about a new mode of transport and how that works. It's car and driver instead of mechanical engineering.<p>The main difference though is that it can be really stressful on the management track if you care about it. There's an incredible amount riding on your ability to organize a group of people to get something done, and you are responsible for their paychecks and keeping them fed. You learn quickly how limited your powers are, and how much you have to depend on the willingness of your employees to do good work.<p>It's hard to say what anybody should do. But this is what I ended up doing. In many ways I'm jealous of the old greybeards because in many ways they're living the dream I always had. At least I think it's important to not make the same mistakes my managers made with me.