Five Things Old Programmers Should Remember
If you’ve been-there-done-that and you’re now building your dream home with your retirement fund, this post really isn’t for you. Congratulations are in order. But if, like me, you find yourself getting older and still can’t resist the desire to keep coding and building things, then read on.
For most of my life, I’ve been a systems software engineer, but at some point in my late 30's I was bitten by the entrepreneurial bug. I believed creating companies was the cool thing to do. I raised venture capital, had some fancy titles with some very small hungry startups. I became quite confident that I was a good CEO and not a bad manager, and that at least if I wasn’t coding anymore, I could hire some good programmers and manage-in some quality and innovation.
I resigned myself to the idea that my best efforts were in the past. I was 54, getting old, and probably couldn’t do things like I used to. Who knows, maybe my memory was failing, or I had just learned as much as I could handle.
My negative thinking was reinforced by what I saw. All of the new technologies looked like fads. I hated Node.js. I felt that web development frameworks were awful, and lamented the corruption of some of my sacred cows into cliche-ridden “movements” like Agile and Extreme Programming. I longed for the days when people did specs, coded and tested carefully, and didn’t have a thousand buzzwords in every article.
Then one night, we were watching a corny old Star Trek movie, and James T. Kirk was lamenting (quite credibly I might add) that he was feeling old and worn out. Without hesitation, Spock said in his confident and logical style:
If I may be so bold, it was a mistake for you to accept promotion. Commanding a starship is your first, best destiny; anything else is a waste of material. — Spock
I zoned-out for the rest of the movie. Had I done the same thing? Had I moved up to management (something I was only marginally good at), instead of sticking to my true best skill?
Luckily for me I soon realized the answer was “Yes”. I had forgotten that being a software engineer was my first, best destiny, and that nothing I had ever done had made as significant contribution as my coding. My first successful company was built upon a piece of software I wrote, and much of it is still in use today.
So, after a year of kicking myself in the behind, I started throwing away my pre-conceived ideas of what the industry was all about. I started learning new languages, and taking risks. I got lucky, and by the time I was 57, I ended up designing and building one of the best pieces of software I had ever written for a small local startup. It was big, bold, visionary, and made a difference.
So, for those of you in the same boat, I’ve tried to distill some conclusions I’ve reached after finally digging myself back out and finding my true calling again.
Here are five things to think about, and remember.
Thing 1: You Knew What You Signed Up For
As we get older, we all get tired of dealing with things. We get tired of endless time spent for little gain. We get tired of seeing the same mistakes made over and over again. We start saying things like “life is too short for this”, and as our friends near retirement, we often find ourselves envious of their safe, secure, and sometimes boring jobs that yielded such a nice nest egg.
The very idea of being entrepreneurial, starting from scratch, and going on another twenty year journey seems ludicrous, and our spouses usually reinforce this, especially if they are not also in the software world.
Yet, if most of us think back to when we first started writing software, there was an irresistible excitement. There were ever-changing technologies. So many problems were yet to be solved, and the challenges meant there was constant invention and re-invention. Software was a new frontier where there were new ideas and constantly emerging opportunities.
For many of us, being at the bleeding edge was the most exciting kind of work to do. It attracted us. And now, my friends, we’ve arrived. We older programmers have more experience, more failures, more successes, and more pure knowledge about how computers work than most people in the industry.
To stay relevant, you have to retrain yourself to think like you used to think. You can’t be intimidated by the need to throw away everything you know away and learn a new language like Swift, Python, or Go. Yes, it may take years! You’ll make mistakes you’ve never made before. You’ll stumble and struggle to figure out which toolkits are relevant. You’ll see younger people pass you by not because they are smarter or more agile, but because they didn’t have any hesitation and jumped in with both feet. That’s exactly what you need to do. Again. Just like you did at the beginning.
It’s what you signed up for, and if you really want to contribute, you need to rope in the demons of getting old and be different than most everybody you grew up with. Go out on a limb, and enjoy the fact that life is not ending, it is always just beginning.
Thing 2: Embrace The Chaos
It’s tempting believe the old adage “the more things change, the more they stay the same”. Programming is programming, right? In fact, things have changed less than many of us expected. We thought the programming process would be fully understood by now. It’s not. We thought that the days of bugs and errors would be gone. They’re not. And we expected that much less time would be spent experimenting and throwing things away. Wrong.
But in almost every other way, things are completely different today.
When I started programming it was on an HP scientific calculator, the only programmers I’d ever seen were on TV wearing lab coats, and Unix was just 6 years old with its kernel consisting of only 20,000 lines of code. Even by the mid-80’s, software development was an isolated activity. Home computers, while powerful enough for real programming, did not provide access to the toolsets and knowledge needed for the average person to learn coding effectively.
I have no idea how many programmers there were when I started out in 1980, but it wasn’t many. The Bureau of Labor Statistics didn’t even start making broad measurements until 1988. By then, there were about 100,000 professional programmers in the USA. Of those, less than 7000 of them were at the senior level.
The industry I joined was an industry of specialists. Commitment and discipline were a requirement.
Today, the latest IDC survey estimates that there are 18 million developers worldwide with nearly half of them non-professionals. The Linux Kernel github repository contains 9.8 million lines of code, and there are almost 6000 contributors. And, get ready for this, the Linux kernel is just one of the 10 million repositories on github. Google’s corporate codebase alone consists of over 2 billion lines of code.
There is a lot of code being written today.
An awful lot.
The numbers above, though staggering, underestimate the general level of interest in programming and overall computer literacy. Stackoverflow now has 32 million active users per month, with only 26 percent in the USA. And guess what? Less than 5 percent of those are 55 and over. Where once access to technology required discipline, commitment and expensive equipment, today 80 percent of Americans have everything they need right in their home. And it’s the kids who will start plowing into it before their parents.
The industry today is nothing like the one I remember.
Today, software is more like an extreme sport. Anybody can dive in, code, be careless, jump off cliffs, and cause disasters. It’s no accident that Agile programming uses terminology like sprints and scrums. You better get used to it, because coding is emerging as a primary literacy. When every school on the planet is teaching coding to 10 year olds, those 18 million developers will become a drop in the bucket.
For those of us with experience, it means that we witness one extremely large yarn-ball of crap when we start looking at software online. Just like any accessible sport, most people are amateurs, a few have promise, and very few reach the Olympics. To succeed today, you need to wipe every preconceived notion about software from your mind and embrace the chaos.
Because of this very chaos, the world of software is now a mixed bag. People are reinventing things we already knew how to do years ago. They are creating libraries that seem superfluous. They are creating new techniques that aren’t necessarily better, but are just easier than the older ways of doing things.
Alongside the mistakes are brilliant new ideas from people who think without biases. Languages like Go reject many of the complexities introduced in the OOP era and embrace a clean new simplicity. Co-routines are changing the very fabric of how people think about parallelism.
Truly, this is a golden age of software growth and invention and the tools are available to everybody.
To stay in the game, you need to jump onto the field, grab the ball, and engage with the other players, even if they’re 30 years younger. I dare say that we older programmers owe it to the younger generation to add our wisdom, experience and knowledge to these new codebases and teams. It can only reduce the chaos and increase the chance of new successes. Some may even be our own.
So instead of cringing every time you see a new buzzword, or a “eureka experience” from some young person who just re-invented the obvious — refine your filters. Learn to see the winners, and learn to help the potential Olympic stars that don’t have the benefit of your experience.
While I’m sure the folly of youth will be a hot topic at the annual Old Programmers Reunion Ball, I don’t plan on attending.
Neither should you.
Thing 3: What You Throw Away Is More Important Than What You Keep
One of my favorite programming adages is that “More software improvement is made by removing code than by adding it.” The same is true of life, especially the life of a coder. There is more to learn than you can possibly imagine. Anything that prevents you from doing so — whether it is an old program you should give up on, or an old idea — is blocking your progress.
As an experienced programmer, our toolkits consist of many tried-and-true techniques that are the foundation of our skills. This can be a blessing and a curse.
Often, I can code a parsing routine faster than importing a pre-written package. Then, before I do, I tend to want to be sure the package does it “right” (aka: the way I would do it). I have gradually learned that my instincts are outdated. I should import the open-source package and try it. If I learn that it’s not done “right”, I should help out and contribute so that good, reusable code trumps reinvention.
Most of the time, tried-and-true is the enemy of innovation. The only real way to move forward is to hold everything you know in suspicion. Only once you try a new way, and test it to know if it is better or worse, should you then decide to do it your way. This creates a filter which favors understanding-by-doing rather than understanding-by-inspection.
Often, this approach costs you time and it’s tempting to fall back on old habits. You end up trying something and discovering it isn’t very good, and need to do it your own way after all. But, as I said earlier, this is what you signed up for. In the end, you’ll find yourself adding a remarkable new set of tools to your toolkit, and discovering one-by-one which techniques are valuable and are worth keeping.
Making these choices is one of the most important skills, and intuition plays a critical role. Luckily for you, you have a couple of decades of experience, and a lot better intuition than most. Just don’t let your biases clog the pipe.
Thing 4: You’re Never Too Old
Imagine you’re twenty years old again. It’s your second year of college and you’ve discovered that you not only love writing software, but you’re good at it. All around you, you see people your age looking forward. Some are even starting little bare-bones software companies by creating apps or exploring online product ideas. Some even get started earlier. By the time John Meyer was nineteen, his app company TapMedia already had nearly forty apps on the Apple App Store!
What does that 20-year-old have that you don’t? Here’s what they have: no fear, and boundless enthusiasm. But what you have is far more important: experience, knowledge, and a few failures that have given you better filters and firmer footing.
If a 20-year-old can graduate and have a successful start-up company by the time they’re 25, you should be able to do it even faster! You don’t have to experiment so much. Plus, you hit the ground running with a vast array of skills, including some real maturity skills like sane management and the right expectations.
No matter how old you are, your next software success is only a couple years away if you aim properly and execute. Put your demons in the attic, and it’s easily within your grasp. You’re going to get old, there’s no stopping it. So why not get old and accomplish something at the same time? It’s got to feel better.
Achievement is not just for the young. Arthur Rubenstein, one of the world’s great pianists, played brilliantly to audiences for eight decades. Julia Child didn’t start cooking until she was 40. Roget, who invented the logarithmic slide-rule in his younger days, did not conceive of and create Roget’s Thesaurus until he was 73!
So, if you think creating companies and writing new software is only for younger people, it’s probably all in your head. Although, if you’re getting older, there are some things you can’t ignore. Which brings me to the next point…
Thing 5: Your Health Is Your New Business Partner
Remember the all-nighters and feeling so energized that sleep didn’t matter as much as getting that next release done? The headphones were blaring and being immersed in code was everything. There was the warm glow of the screen, and the overflowing waste basket full of Coke cans and crushed up pizza boxes.
Those days are gone. If you’re going to embark on a new project when you’re older, you don’t want to do it the way you did it then. It may have been exciting, but your body was more forgiving. Now, your body is more like a partner in your business, compromising sometimes, resisting other times. It’s a negotiation you need to factor into your business plan.
The signs are obvious to most of us. Muscles you never knew you had start to ache. The doctor keeps telling you to lose weight and get more exercise. And when the optometrist first utters the word “bifocals” everything goes silent and you see their lips moving in slow motion while it sinks in.
If you’re more or less healthy, it’s the symbolic nature of these messages more than the reality that starts changing the way you think about life. Any well-informed person realizes that there are ways to overcome most of the physical problems you have through exercise, discipline and making some lifestyle changes.
While getting older has many challenges, taking care of your health first will make all of them easier. It makes you feel capable, and every burden seems lighter and every risk seems easier.
Changes don’t happen by themselves. They require management and discipline. Often, this is the stumbling block for people who want to start taking risks again. So many responsibilities surround us. We care for our families, our children, and have important financial obligations. Most people take these more and more seriously as they get older. Taking risks and re-learning your craft can often seem irresponsible.
Dedicating yourself to being a programmer later in life might mean you never want to retire. It never gets old, and there are new things around every corner. The irresistible excitement that launched your career might still be there.
I hope the above is good food for thought and reminds you that it’s never too late. No matter what your background, there is important work yet to be done. If you’re a business programmer, the whole world of business is still in the throes of software disruption. If you’re a web designer, I’m sure that Web 8.0 still won’t get it right.
And, if you’re an iOS programmer, please write a good email app for me, OK? I could really use one.