Have you ever gotten that classic job interview question, "where do you see yourself in five years?" When asked, I'm always mentally transported back to a certain Twisted Sister video from 1984.
I want you to tell me -- no, better yet, stand up and tell the class --what do you wanna do with your life?
You want to rock, naturally! Or at least be a rockstar programmer. It's not a question that typically gets a serious answer -- sort of like that other old groan-inducing interview chestnut, "what's your greatest weakness?" It's that you sometimes rock too hard, right? Innocent bystanders could get hurt.
But I think this is a different and more serious class of question, one that deserves real consideration. Not for the interviewer's benefit, but for your own benefit.
The "where do you see yourself in five years" question is sort of glib, and most people have a pat answer they give to interviewers. But it does raise some deeper concerns: what is the potential career path for a software developer? Sure, we do this stuff because we love it, and we're very fortunate in that regard. But will you be sitting in front of your computer programming when you're 50? When you're 60? What is the best possible career outcome for a programmer who aspires to be.. well, a programmer?
What if I told you, with tongue firmly planted in cheek, that there were Eight Levels of Programmers?
This is the highest level. Your code has survived and transcended your death. You are a part of the permanent historical record of computing. Other programmers study your work and writing. You may have won a Turing Award, or written influential papers, or invented one or more pieces of fundamental technology that have affected the course of programming as we know it. You don't just have a wikipedia entry -- there are entire websites dedicated to studying your life and work.
Very few programmers ever achieve this level in their own lifetimes.
Examples: Dijkstra, Knuth, Kay
Programmers who are both well known and have created entire businesses -- perhaps even whole industries -- around their code. These programmers have given themselves the real freedom zero: the freedom to decide for themselves what they want to work on. And to share that freedom with their fellow programmers.
This is the level to which most programmers should aspire. Getting to this level often depends more on business skills than programming.
This is also a good place to be, but not unless you also have a day job.
You're famous in programming circles. But being famous doesn't necessarily mean you can turn a profit and support yourself. Famous is good, but successful is better. You probably work for a large, well known technology company, an influential small company, or you're a part of a modest startup team. Either way, other programmers have heard of you, and you're having a positive impact on the field.
You have a successful career as a software developer. Your skills are always in demand and you never have to look very long or hard to find a great job. Your peers respect you. Every company you work with is improved and enriched in some way by your presence.
But where do you go from there?
At this level you are a good enough programmer to realize that you're not a great programmer. And you might never be.
Talent often has little do do with success. You can be very successful if you have business and people skills. If you are an average programmer but manage to make a living at it then you are talented, just not necessarily at coding.
Don't knock the value of self-awareness. It's more rare than you realize. There's nothing wrong with lacking talent. Be bold. Figure out what you're good at, and pursue it. Aggressively.
An amateur programmer loves to code, and it shows: they might be a promising student or intern, or perhaps they're contributing to open source projects, or building interesting "just for fun" applications or websites in their spare time. Their code and ideas show promise and enthusiasm.
Being an amateur is a good thing; from this level one can rapidly rise to become a working programmer.
The proverbial typical programmer. Joe Coder. Competent (usually) but unremarkable. Probably works for a large, anonymous MegaCorp. It's just a job, not their entire life. Nothing wrong with that, either.
People who somehow fell into the programmer role without an iota of skill or ability. Everything they touch turns into pain and suffering for their fellow programmers -- with the possible exception of other Bad Programmers, who lack even the rudimentary skill required to tell that they're working with another Bad Programmer.
Which is, perhaps, the hallmark of all Bad Programmers. These people have no business writing code of any kind -- but they do, anyway.
These levels aren't entirely serious. Not every programmer aspires to the same things in their career. But it's illuminating to consider what a programmer could accomplish in ten years, twenty years, or thirty years -- perhaps even a lifetime. Which notable programmers do you admire the most? What did they accomplish to earn your admiration?
In short, what do you wanna do with your life?
@Sarah - Well, so this is the sad truth. Not sure I'll repeat that too much as it was a nice thing to believe :-)... To cope with this, I hope I'll be able to buid a small software company or be part of one with a flat decision process. It must be a an objective of the company to keep coders at coding, otherwise promote them to management would often look like the easiest solution sometimes...
Arnaud on April 3, 2009 2:06 AMUnfortunately, so many proggies fit in the lower of the first seven levels of programmer hell. But, it keeps the rest employed. ;-)
Gregory A. Beamer on April 3, 2009 2:12 AMCarmack arguably belongs under the dead programmer title as well.
Nicholas Wright on April 3, 2009 2:13 AMThis is a cute list but the inclusion of Gates is egregiously wrong. I cannot fathom what compelled you to even put him on the list, much less at such a high station.
Jenn on April 3, 2009 2:21 AMWe can always take comfort in that everyone's going to be a dead programmer at some point.
G-Man on April 3, 2009 2:34 AMSomewhere between 4 and 5... Hmm, not bad for someone of 17 years, or is it? :P
horsedrowner on April 3, 2009 2:35 AMSo, the 1 million question is... where are you Jeff? =D I would say... 7?
Nicolás Miyasato (miya) on April 3, 2009 2:38 AMI wanna be a Dinosaur! :)
Jax on April 3, 2009 2:39 AMThat was probably the most meaningless post I've seen on this blog. You don't HAVE to update just to update you know.
I wish I had learned Knuth was not dead BEFORE I sent flowers...
Steve on April 3, 2009 3:09 AMAfter 12 years I feel like I've finally reached 5 (within the last 2 years). What do they say? It takes 10 years to become truly proficient at anything... Oh how I'd like to get to 7 though! I can live without 6, and long ago accepted I don't have the conviction for an 8 :)
Fun article :D
Eagan on April 3, 2009 3:12 AMwhat do you wanna do with your life?
after 20 years, just like Twisted Sister's song I wanna rock 1984 that song ain't intended to the same audience, it would be kids stuff, renamed and used on a silly cartoon movie 2004 Spongebob Squarepants Movie. Goofy Goober Rock. The guitar riff is not played most likely on a real guitar with a fuzzy distortion and a loud Marshal Amp but on a silly piece of crappy lifeless game console that cannot wail.
So the same with the code of programmers. after 20 years the code and programming technique would just be kid's stuff.
carey on April 3, 2009 3:24 AMAre you trying to say that our goal is to do so well we make ourselves obsolete?
What about Woz, who still works at stuff? (Sorry for any slight gaps in comparison as I consider him more an engineer than programmer).
Allan on April 3, 2009 3:32 AMDude, I almost just shat a brick because you said Knuth was a Dead Programmer! REDACT IT!
Xyz on April 3, 2009 3:36 AMAnd the same goes for Kay!!
Xyz on April 3, 2009 3:37 AM... and Dijkstra is just frozen :(
Xyz on April 3, 2009 3:38 AMIf you think you're a number 4 and you don't understand why an Amateur Programmer is greater than the Unknown Programmer based on these descriptions you might actually be a number 2.
An amateur programmer loves to code, and it shows
beats
It's just a job, not their entire life.
ScottGu is an example of no. 6, the famous programmer. So are you by the way, Jeff.
Mike on April 3, 2009 3:45 AMYou've got to be kidding me. I mean, again, this isn't even your idea. Oddly enough the guy you link to begins counting from 0, which is a common CS convention and you start at 1. That's not a big deal, it's just sort ironic.
As for all you guys babbling about how people are missing the point of the post ... what is the point?
Charles on April 3, 2009 3:47 AM@Charles I think the point is that Rockhard Awesome is keeping the thread hating, Coding Horror up all night and he isn't paying down his sleep debt as fast as he likes to pay down is technical debt so this represents the interest charges.
Waiting for him to post, Get Off My Lawn!!!
CrashCodes on April 3, 2009 3:56 AMReally Jeff, I love your writing, but you should really correct level 8. It's not fair to the programmers you mention.
While it may be clear to you, like code, we write to be read, and naming level 8 'Dead Programmer' then listing people who are alive is just bad naming :).
Bill G wrote GWbasic which was on the origional Apple and Pet's amongst others.
and if you call you self a programmer and dont know that your not even a level 1 programmer - go back to working at macdonalds
Neuro on April 3, 2009 5:08 AMYour list is very subjective Jeff - both the definitions (I don't think anyone agrees with you that Dead was a good choice of word), and the rankings. I would have kept it more abstract than that.
Also putting an order in programming ability is sort of pointless. I doubt Knuth could out-program Carmack in every situation or vice versa. What's more to measure is the effect of their output. You don't have to be an algorithmic genius to help as many people as possible, and neither is all the business knowledge in the world going to help you assemble a team to write Windows.
Gaurav Sharma on April 3, 2009 5:52 AMI wanna rock! ahem, I mean I wanna be a dead programmer. Never thought I'd say that. Maybe @regis' suggestion of 9. Legendary Programmer is a better name for #8. I hate to knit-pick, but you know, we programmers are a picky lot.
~Lee
Lee Brandt on April 3, 2009 6:04 AMWell, still here at age 54, creating software for real-time/embedded systems, working as an independent contractor. I've always enjoyed writing code that interacts with the real world, making the lights blink and the motors turn. And I like learning new things (never an end to that!). Pretty sure I'm a 4, although I see myself as competent rather than average.
Allen Moore on April 3, 2009 6:27 AM@CrashCodes, probably so. He does like his technical debt. I think maybe it's time to declare bankruptcy
Charles on April 3, 2009 7:01 AMRe: In short, what do you wanna do with your life?
I want to be a damn good programmer, respected in my field and earn a little money.
I think -- within my niche -- I am there.
Emily -- not a spammer on April 3, 2009 7:22 AMDead programmer:
A programmer who you freak out due to seeing their names on the dead programmer list even if it is not the case.
Sry if this has been said already.
kpdecker on April 3, 2009 8:07 AMI'm a 3 and (i hope) a 5. I don't have my sights on 7 or 8, if i get there i get there, all i know is i keep coming back to 3.
Job on April 3, 2009 8:35 AMDid Knuth die? :(
Carra on April 3, 2009 8:48 AMThe hard part is getting from 'working' to 'famous' and beyond. If you are a working programmer when do you find the time to write that famous paper?
Gregor Brandt on April 3, 2009 8:48 AMShould I point out the fact that Knuth isn't dead yet?
Roberto Teixeira on April 3, 2009 8:49 AMKnuth is dead?
M on April 3, 2009 8:50 AMMmm, neither is Alan Kay.
Bit weird to put these two people on the dead programmer level.
Carra on April 3, 2009 8:52 AM9. Legendary Programmer
Legend tells of a legendary programmer whose coding skills were the stuff of legend. He develops only in his own languages, on machines he built running an OS he created. He writes code not for himself, or for humanity, but for God.
Regis on April 3, 2009 9:00 AMNot only are Knuth and Kay not dead, but Gates, unlike Carmack and DHH, didn't build a business on his code. He was a programmer, and he built a business around code, but it wasn't, at least primarily, HIS code that he built his business around.
Jeff LaMarche on April 3, 2009 9:00 AMIf you know you're a bad programmer... does that still make you a bad programmer?
John on April 3, 2009 9:03 AMI meant Dead Programmer figuratively, not literally.
As in people will remember you after you're..
Sheesh.
Jeff Atwood on April 3, 2009 9:03 AMRegarding Dijkstra, Knuth Kay:
quoteVery few programmers ever achieve this level in their own lifetimes./quote
Can Berk Güder on April 3, 2009 9:05 AMOh, and s/Gates/Torvalds/.
Can Berk Güder on April 3, 2009 9:06 AMThanks, I needed a label. Now I know my place in society. LOL
_ck_ on April 3, 2009 9:09 AMI hope this isn't a strict numerical progression, if 'average programmer' means GOTO SOME_OTHER_JOB as you are implying.
dtr on April 3, 2009 9:11 AMI'm probably 4 going 5 soon. But going to drop myself back to 3 this fall when i go back to school.
Ólafur Waage on April 3, 2009 9:12 AMI'd personally like to be successful, competent, and working - so far, so good. Even though I've written a book, I doubt I'll ever be famous. Besides, if I ever become famous, I'll have to start behaving badly and deal with the paparazzi, like all the other famous programmers. How do you and Joel live with that?
Wandercoder on April 3, 2009 9:12 AMHow exactly does an amateur programmer get a higher ranking than an unknown programmer. Wouldn't an amateur be trying to get a job in the programming field?
// Maybe not understanding this is why I'm only a #4
Clair on April 3, 2009 9:13 AMGates was a programmer? Whom are you kidding? What code did he actually wrote?
skfd on April 3, 2009 9:16 AMI would have put Torvalds and Stallman on the list at levels 7 and/or 8
colin on April 3, 2009 9:18 AMI'm at 5 bruteforcing my way to 6 ;)
Actually I feel like I've just touched a project that is useful to others, hasn't been done before and makes the _actual_ work I want to do a lot easier. If that isn't going to make me famous, I'm at least going to maintain a smoking cool library.
@Regis: 9. Legendary Programmer - see http://xkcd.com/224/ (tongue firmly planted in check).
gvb on April 3, 2009 9:19 AMMaybe not understanding this is why I'm only a #4
You say that as if it's a bad thing. Someone's got to be average otherwise there'd be nothing to measure by.
4 for life.
Tool on April 3, 2009 9:23 AMI like to think that I'm a number 3, and fear being a number 1.
Benjamin M. Strozykowski on April 3, 2009 9:23 AMJeff, where would you put David Caminer?
Eddie on April 3, 2009 9:26 AMI would bet most people at 5 are also at number 2. I'm a successful programmer, 17 years working at a high rate of pay. I keep my skills up to date and know I could have another job within a few days if I decided to leave where I am. What I do actually affects the bottom line of the company I'm with. That puts me in category 5 doesn't it? But at the same time, you don't know me, I'm not famous and I work for a Megacorp. So except for your Competent (usually) but unremarkable statement, that makes me number 2 as well.
Your levels 1-5 are all actually part of number 2. Number 6 defines what is not in group number 2 doesn't it? Oww my head hurts.
Kuerwen on April 3, 2009 9:27 AMI hope I'll still be programming when I'm 50. If I'm not, then I have less than 47 days to live. Until one of those days arrives, I think I must be some sort of #5...
Mike Woodhouse on April 3, 2009 9:28 AM@Jeff
“I meant Dead Programmer figuratively, not literally.”
I know you don’t like people taking your posts literally, but I do think in this case you should change the post to make it clear that Knuth is not dead. I suspect a lot of people do not read the comments, and will assume, as I did, that they’d missed some announcement.
How about the 'Woz? Or is he more of an electrical engineer then a programmer?
James on April 3, 2009 9:28 AMIf 2/3 of your dead programmers are not actually dead, you should probably pick a better name. Otherwise you're pulling a Humpty Dumpty.
+1 for missing the point.
I don't think Jeff was trying to make a list of famous programmers...sheesh.
Kuerwen on April 3, 2009 9:32 AM@John Bad programmers mostly likely dont read this blog and they dont even know it.
Terry on April 3, 2009 9:34 AM8. Dead Programmer
... Your code has survived and transcended your death.
...
Examples: Dijkstra, Knuth, Kay
Yes, you did kill Knuth and Kay. Stop whining and correct that. =)
Bruno Gomes on April 3, 2009 9:35 AMNot only is Alan Kay not dead, but he is still actively working and leading a team of researchers on a new project.
And Donald Knuth is active writing stuff programmers should probably be reading.
Less than a minute on Google gets you this.
Bonnie
Ooh. How many XP do we need to level up?
Practicality on April 3, 2009 9:40 AMWOW #t=2m34!
Thank you, i didn't know you could do that!
But will you be sitting in front of your computer programming when you're 50? When you're 60?
I'm 57. I work as a developer in a startup on a windows/mac desktop app, and I'm sitting in front of my computer programming. Ok, I should be programming, but I'm commenting here instead.
To be fair, this is a second career for me, I started professional programming in 1995.
I'm pretty happy to be sitting in front of my computer programming. It doesn't bother me too much that I'm much older than the other devs here, but the fact that I'm older than some of their parents does nag at me a bit.
Jim Howard on April 3, 2009 9:53 AMWhy not just rename Dead Programmer to Immortal Programmer. It's really what you are saying anyway.
puppet on April 3, 2009 9:54 AMI'm afraid 6 is the highest level I can achieve in my lifetime. I'm now between 5 and 6 though.
nobodynobodyghost on April 3, 2009 9:56 AMOh my gosh, did you guys hear that Knuth and Kay aren't dead?
The point was that if they were dead, died tomorrow, or quit everything and joined the circus (Do those exists anymore?) they have already guaranteed a spot in history beyond most people in computer science.
Tool on April 3, 2009 9:57 AMAlso missing Ritchie.
Doug B on April 3, 2009 9:58 AMWhere's Admiral Hopper?
jmags on April 3, 2009 9:59 AMAnother coder tries to impose computer science style grouping on real life. Rookie mistake...
Dirtnap on April 3, 2009 10:08 AMI feel bad for the programmers who think they're 4s or 5s but are actually 1s. I wonder how high one's self-perceived level could get with one's actual level remaining at 1. Are there any people who think they're 7s or 8s but are actually 1s?
Johnny on April 3, 2009 10:10 AMJoel is going to cut your pay again for not listing him as a Successful Programmer. It seems that Joel and FogCreek are an exact match to your definition of Successful.
Shawn Swaner on April 3, 2009 10:13 AMthe fact that I'm older than some of their parents does nag at me a bit.
Ouch that hit home g. Same thing here, second career I started when I was 45. And now I am mid fifties and still having a great time.
sponge bob on April 3, 2009 10:14 AMEveryone should strive for two and see if providence leads to anything above that.
john on April 3, 2009 10:14 AMYou think DHH is on the level of Gates and Carmack? There are a lot of examples you could have put on that category, but he isn't one of them. Making one web application framework in a sea of hundreds doesn't really elevate you past your famous programmer level. We'll have long forgotten about RoR, and we'll still be using Windows and playing FPSs.
GT on April 3, 2009 10:16 AMKnuth isn't dead.
Stewart on April 3, 2009 10:21 AMBut it’s not just that some programmers work faster; some programmers can do things that few other programmers can do. These are your visionaries and trailblazers. I call this sometimes-10X/sometimes-infinite advantage: The “Tenfinity Factor.”
This wide productivity gap results in five major classes of computer programmers:
1. Visionary/Artist Programmer
2. Trailblazer Programmer
3. Workhorse Programmer
4. Drone Programmer
5. Idiot Programmer
holy crap im a #2 (no phun intended)...
Kittens are evil on April 3, 2009 10:28 AMI know programmers, and Bill Gates is no programmer.
Chris Noe on April 3, 2009 10:28 AMJeff,
Please go back to the old font. Please god...
Jeremy on April 3, 2009 10:28 AMPerhaps you could replace Dead with Timeless?
Mark Ransom on April 3, 2009 10:29 AMI first got paid to program when I was 16 and I'm 42 now. After 25 years and numerous opportunities to become a manager or change careers entirely, I'm still programming and still loving it. Aside from needing a bigger monitor and a better chair, not seeing anything stopping me from coding into my 50s. Aside from the eyes, my memory is getting a little weaker, but with the internet and intellisense, I can more than compensate.
They key to keeping things interesting for me has been changing industries and platforms from time to time.
JohnOpincar on April 3, 2009 10:41 AMI want to be a billionair of course. I'm probably at the wrong time though, I should have been there in the 80s.
Hoffmann on April 3, 2009 10:43 AMwhat do you wanna do with your life
Make sure my kids grow up to remember me as a great dad. Programming has no bearing on my life goals, despite it being a passion of mine (along with music).
David Dawkins on April 3, 2009 10:43 AMYou forgot level 5.5: bburnt-out programmer/b:
- still coding at 51; reading blogs instead of producing product; worse still, commenting on blog posts...
Tim Dowty on April 3, 2009 10:45 AMwhat's the purpose of this blog? is this just a daily brain-fart thing or what?
Lxw on April 3, 2009 10:46 AMHere in France I often have the feeling that the career path for a programmer is to do not stay a programmer too long. Often programming is seen as an entry level position and there is a pressure to go towards project management or architect positions where you no longer code... Those of us who really enjoy programming and don't want to do something else often show the US as a counter-example : but is it true ?
Arnaud on April 3, 2009 11:11 AMDHH? From the fraction of programmers that are aware RoR exists, most of them don't even know who he is...
Carlos on April 3, 2009 11:13 AMMy classification of myself was corporate programmer(day job) and cowboy programmer(endless nights).
Biswanath on April 3, 2009 11:13 AMKlingon programmers aspire to die in a glorious battle with system bugs regardless of skill level.
Qapla'!
Charles on April 3, 2009 11:14 AM
You forgot programmer looking to be something else. Sometimes it's a means to an end, time spent in the trenches and all that.
Lets call it stepping stone programmer.
-dan on April 3, 2009 11:27 AMSo I wonder where the Code Monkey would fall?
chrispatterson on April 3, 2009 11:29 AM# Successful Programmer
# Famous Programmer
# Working Programmer
These are not 'true' levels because they are not distinct.
Nick on April 3, 2009 11:36 AMBill Gates built a nice business on code he was involved with writing. I used and bought stuff from Microsoft back then. Seriously. I used their BASIC a lot, and bought a Fortran compiler (that I wound up rarely using).
Then came the big MS-DOS opportunity, when he bought an OS cheap, made a few quick changes, and sold it to IBM on extremely favorable terms. Since then, his success has depended far more on business actions than technical ability, but the technical ability is what got him in position to do the business stuff.
However, my big complaint is the assumption that programming is intended to get rich. I use it as a way to do a job I really like while getting paid a nice, but not extravagant, salary. I don't want to get into management too far, and I don't care enough about getting rich to do the things it would take. There are various legitimate goals in the world of software, and using it as a satisfying way to make a comfortable living is one of them.
In other words, I'm probably a 5, and happy there. The other stuff I want to do with my life doesn't really involve software (although I wouldn't stop programming just because I'd retired). Where do I go from there? Somewhere off your numeric list.
David on April 3, 2009 11:40 AM@Arnaud - not really. Some larger companies (notably Microsoft) have a technical track that allows you to do more and more design without necessarily becoming a manager. Outside of that, the track is generally
developer - senior developer - development manager - ? - CTO
(I'm not super interested in this track, so I'm not sure of the exact progression.)
Alternate paths include
developer - senior developer*
and
developer - senior developer - CTO of a startup*
and
developer - senior developer - chief architect - hired by Google ;)
Well, as a 58-year old programmer, I can say that I spent an awful lot of my working life striving to get to the point where at least 80% of my working time could be spent actually coding. And I love it. In five years time (when I will be 63) I'd like to still be coding.
May I respectfully request you replace dead programmers with immortal programmers?
Terry Smith on April 3, 2009 11:59 AMWow, I am just impressed by the number of +50 year olds that still code and commented on this blog. I just turned 50 and still coding daily – and love it.
Kids, forget about the management track, you will just end up wiping other peoples bums ;-) Stick to coding and enjoy daily enlightenment - who needs levels!
This is only a preview. Your comment has not yet been posted.
As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.
Having trouble reading this image? View an alternate.
| Content (c) 2009 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved. |
Posted by: |