Wednesday, October 24, 2012

On the "Do you want to be a programmer at fifty?" thing.

"When I was still a professional programmer, my office-mate once asked out of the blue, "Do you really want to be doing this kind of work when you're fifty?"

James went on to identify two kinds of programming

Type A "work(ing) out the solutions to difficult problems. That takes careful thought, but it's the same kind of thought a novelist uses to organize a story or to write dialog that rings true. That kind of problem-solving is satisfying, even fun."

Type B "what most programming is about - trying to come up with a working solution in a problem domain that you don't fully understand and don't have time to understand... skimming great oceans of APIs that you could spend years studying and learning, but the market will have moved on by then ... reading between the lines of documentation and guessing at how edge cases are handled and whether or not your assumptions will still hold true two months or two years from now.. the constant evolutionary changes that occur in the language definition, the compiler, the libraries, the application framework, and the underlying operating system, that all snowball together and keep you in maintenance mode instead of making real improvements."

He went on to state that while he'll continue doing Type A programming, he isn't particularly interested in Type B, (presumably at fifty).

I was looking forward to some good discussion on this, but HackerNews (which, in spite of its flaws still has no competition) went off into some tangents primarily about ageism in the software industry and there was surprisingly little discussion about what James actually said.

Now, is ageism a problem? Yes, it is. As people grow older, they are expected to do anything but programming. It is a cultural thing and not necessarily logical. I know someone who is a good programmer, but left Bangalore for a decade (programming all the while) and now can't get an interview (let alone a job)because "oh you have 18 years experience, we are looking for people with two years of experience.Sorry".

So, yes ageism is a problem, even in Outsourcing Land, and there is plenty to be discussed, and action to be taken, with respect to ageism.But that is a topic for another day and isn't quite the problem addressed by James Hague in his blog post.

In this post, I'll try to explain what I think (and it is just that, my opinion ymmv etc etc) about "Do you really want to be doing this at fifty?"

The essence of the question is "Do you want to be doing this(at a future time point)". The question addresses the (evolution of) motivation to program, and James goes on to state that his motivation to do a certain type of programming (unfortunately this is the more dominant type of programming worldwide) decreases with increasing age.

The question of motivation with respect to career activities has been discussed by a wide variety of people and a lot of research has been conducted. One interesting insight has been articulated by Dan Pink - in his book "Drive - The Surprising Truth About What Motivates Us" he identifies 3 factors that motivate us (or demotivate us) to undertake and pursue any activity.

(1) Mastery - getting better at what you are doing

(2) Autonomy - the degree to which you can direct your activity.

(3) Purpose (or meaning) - doing something that really matters.

If you get high scores in any of the above, ideally all three, and more importantly get more and more of all the above as your programming career progresses, of *course* you'll be programming at 50. Or 60. Why wouldn't you?

The problem of course, is that in most programming jobs you either hit a declining slope or at best, plateau, with respect to one or more of the above as you age. If you are on a team of 50 people, maintaining some legacy leasing system written in Java, with business analysts doing the business thinking and you are converting their thoughts into code you are being a scribe for other people's ideas in a rigid and ageing language, in a context where you are an expensive 'resource'.

In general , even at many product (vs services) companies, a 'line programmer' has low levels of autonomy - other people - product managers, business analysts etc etc - tell him what to do. Legacy codebases constrain technology choices. His 'mastery', while not non existent, is of a shallow and frothy kind (hey I use Rails today instead of J2EE yesterday! Node.js vs rails blah) and writing the n-th business app pulling data off a database and putting it on a web page for some corporate drone to use to update his TPS reports crushes 'being part of a higher purpose'. Little autonomy, modest mastery, non existent purpose. No wonder few people want to be doing this kind of programming at fifty.

Thankfully, other kinds of programming do exist. John Carmack of Id Software is still programming in his forties because programming (and till recently, being a majority shareholder of a cutting edge games company!) helps him in maximizing all three attributes.

Programming is a skill, like writing. Unlike writing, we live in a society where most people are code illiterate. And coding ability has (some) economic value. "Software is eating the world" etc, and so anyone who is comfortable with coding can exchange that skill for money. The deeper question is whether you can trade increasing experience in the skill of programming for increasing amounts of money (and mastery and autonomy and purpose) as time passes. For most people that function plateaus and then stays steady or declines.

If you were someone who knew how to write, but lived in an illiterate society you could exchange that skill for money, by being a scribe at so many cents per word. You write people's letters and wills etc and you get paid for it by word count. But if you did it for thirty years, and you are still writing letters for people when you are fifty, would you be satisified with your career? What about when your customers move to that desperate youngster who offers a lesser rate per written word?

A novelist uses writing in a different manner than someone who sets up as a letter writer for illiterate people. A novelist is trying to do something that uses writing grammatically correct sentences as a base skill, but the core of his work, plotting, characterization, dialogue, world building, etc lie on a plane well above deciding whether to put an i before an e, or vice versa. And you don't even need much base skill. Many people are pretty bad at grammar and still write best selling or world changing books.

Generalizing, the (conceptually) shortest step to getting away from the 'path to ageist irrelevancy' for programmers is to find a way to make money by transcribing your own ideas to code. This might involve, for example, stepping away from time and materials services types of programming to product development. If not by yourself, then as a part of a small team. Even if you are still technically an employee, your are much more autonomous in small teams and companies (and codebases).

A secondway out of a programming career deadpool track is to move to something related where programming skill actually helps in a major way, but it isn't the core of your job.

If you are a Computer Science researcher who is also an excellent programmer, your primary job is the creation of new knowledge (aka research, embodied in published papers) but your programming skills will help.

If you are a (technical) startup founder using cutting edge languages and algorithms to build a superior product, your primary job is to satisfy users and pull your company ahead of the competition, then superior programming ability can help.

If you are a finance expert who can also code, you probably have a significant edge over your competitors who have to depend on the software people to come in after the weekend to prototype your idea.

Programming skill amplifies effectiveness in almost everything you can do.

Of course you could find yourself in the same situation in your new career. If you still lack money, autonomy, mastery and purpose, you are back at square one. That said, being "an excellent programmer and a good X" seems like a decent plan.

The idea that a programmer
always has to work in a half understood domain transforming some one
else's ideas into code is just that, an idea. It is a dominant idea, but
nothing really stops anyone from mastering an interesting domain or acquiring a complementary skill in
addition to programming.

That gets me to what I think is the right way to go about 'career planning'.

Decide what increased levels of autonomy, mastery and purpose mean to you. Figure out what you need to do to get to that point. Then do whatever it takes.

If increased programming skill will move you towards increasing one or more of the three attributes, work on it. If something else (like writing skill, or knowing a domain, or getting good at sales, or going to medical school) looks more promising, work on that. Assembly line programming inside 'the industry', converting other people's thoughts into code in stone age languages, is a beginning. It need not be the end.

To conclude, will I be programming at fifty? I think so (these days I do as much maths and stats as programming, and everything feeds very nicely into everything else), but at fifty, I'll be writing novels, not scribing letters.

13 comments:

Your works and words are ever-glowing inspiraton. True, the 3 aspects u mention are the necessary parameters to attain fulfilment in any active pursuit, the factor of money often doesn't go hand in hand with that. Say a "enterprise" dev wants/loves to pick up a new "prog" skill, may end up not be able to sell it. The reward , of course, is in learning but beyond that nothing much. I guess the trick is to hang on , keep learning, until u get lucky, or discover ur calling. You end up a happy, fulfilled man if not always successful.

Successfully developing a product (and monetizing it) is easier said than done, but definitely not impossible. It also potentially requires 3-5 years of pure sacrifice or super late nights to build such a product while you go back to earning nothing, or work part time, or burn the midnight oil to get it going. So best to recognise this early on and take a hit when yuo are very young, with top skills you can always get a high paying job again later as a fallback.

Another path is management. You get greater autonomy, guaranteed solid/big income and your ex-technical skills can mentor/guide others and help you understand the teams you are managing. Not the ideal long term solution, but surely beats coding until you're 50 in a regular/mundane type of corporate coding gig.

For me, the corporate management gig is a great fallback/interim gig while I develop my own products on the side. The income also helps fund parts of the product development and some advertising and running costs, servers etc. Things that you could never pay for without either raising investment if you were completely bumming it or living at home with Mummy and Daddy to get a product business going...

I face this dilemma on a regular basis, especially when all my peers have new designations or new startups and I'm more comfortable being just a "developer" albeit someone who gets a kick out of the product-customer-feedback loop.

What I'm trying to say is that perhaps the novelist kind of programming necessitates a startup or developing an own product, and that's more of entrepreneurial skills than math or programming abilities. Are the two necessarily correlated? Does the latter imply the person will necessarily have the former?

This is a great viewpoint on the "Programming at 50" discussion. Two things I would like to add that are very important are self fulfillment and money. Self fulfillment comes from inside you, not outside. If you are unhappy with what your doing its important to name if your unhappy because of the job or because of you. Too many people confuse the two and never find happiness. When it comes to money, I think some of you out there need to get a hold on reality. I went to auto tech school, spent $40,000 on an education and $10,000 on tools, just to get a job making $9/hour. The ceiling on most auto tech jobs is around $25-$30/hour. That's barely $50k take home money. My best friend went to a video game school in Texas for two years and just landed a job with Epic. He's making more at the start of his career than I'll make at the end of mine. Even if you are putting someone else's ideas into code and not loving it, at least you are most likely making more than enough money to have a lot of fun outside of work. This is why I'm learning how to program.

No math has (almost) nothing to do with startups or products. Just used it as an indicator that my work has changed for 'pure', programming. If you notice, it was in the last line of the post and not elaborated upon.

I left 'moving to management' out of the post, because that is worthy of a separate post. Nutshell: (excluding the highest levels) the autonomy of management is often an illusion, and meanwhile your skills rust *frighteningly* fast.

Excellent post. The clear distinction between mindlessly building other people's thoughts and crafting something grand is compelling. I totally agree that working in smaller shops helps avoid the problem of BAs dictating precisely what is built.

I found "Drive" a compelling read, especially the discussion on Goldilocks tasks that are attainable but hard enough to stretch you. I suspect this is why coding at 50 is hard. It gets increasingly difficult to find interesting work that feels just beyond your grasp.

I am not sure (probably because I haven't thought about it ;)) but I suspect that it takes more of an entrepreneurial *attitude* - ie seize the world by the horns and make things happen vs passively waiting for stuff to happen.

Cal Newport, for example seems to be working within a system, (the academic research ladder) but he does many 'non standard' things. Once you have that attitude, then the specifics become details.

I think many pioneering social change creators also have the 'entrepreneur' *attitude* and have high levels of M + A + R, without running businesses, consulting etc.

The biggest change in *my* life came when I decided to stop complaining and whining and jump off some cliffs. I plan to do that more in the future.

Personally, the 'consulting' phase is coming to an end. It got me out of enterprise software services. Mission accomplished. Now I want to do something a bit larger in scale. I think I've extracted as much learning as I can from that phase for now.

I'm 46 and have been working on the same software I started in 1985, changing as the operating systems, hardware, and users have evolved over the decades. It is very satisfying, for precisely the factors you list. http://www.PacificT.com/Story

Perhaps it's because English is not my mother tongue. But working on other people thoughts sounds to me very different from being micromanaged or being told what to do. The latter doesn't motivate anyone I guess.

Said that, I'd like to add a comment in the "career dead-pool track" area.

The world is full of problems, and people with money wanting software to solve their problems. It can be difficult to find the right people, but that's how I feel you should find your path/track in your career.

And much better if you don't do it alone. This doesn't mean that you have to be hired in a company, or that you have to build your company to have some mates to work with.

Companies will always need CRMs, ERPs, and all that stuff. Even doing that you can train your mastery with enough autonomy if the purpose is good. Of course that you can get bored (lose the meaning) of it, but there are hundreds or thousands of problems that need to be solved.