April 3, 2009
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?
- Dead Programmer
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
- Successful Programmer
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.
Examples: Gates, Carmack, DHH
- Famous Programmer
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.
- Working Programmer
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?
- Average Programmer
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.
- Amateur Programmer
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.
- Unknown 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.
- Bad Programmer
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?
Posted by Jeff Atwood
@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...
Unfortunately, so many proggies fit in the lower of the first seven levels of programmer hell. But, it keeps the rest employed. ;-)
Carmack arguably belongs under the dead programmer title as well.
This 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.
We can always take comfort in that everyone's going to be a dead programmer at some point.
Somewhere between 4 and 5... Hmm, not bad for someone of 17 years, or is it? :P
So, the 1 million question is... where are you Jeff? =D I would say... 7?
I wanna be a Dinosaur! :)
That 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...
After 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
what 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.
Are 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).
Dude, I almost just shat a brick because you said Knuth was a Dead Programmer! REDACT IT!
And the same goes for Kay!!
... and Dijkstra is just frozen :(
If 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
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.
You'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 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!!!
Really 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
Your 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.
I 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.
Well, 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.
@CrashCodes, probably so. He does like his technical debt. I think maybe it's time to declare bankruptcy
Re: 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.
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.
I'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.
The 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?
Should I point out the fact that Knuth isn't dead yet?
Mmm, neither is Alan Kay.
Bit weird to put these two people on the dead programmer level.
9. 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.
Not 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.
If you know you're a bad programmer... does that still make you a bad programmer?
I meant Dead Programmer figuratively, not literally.
As in people will remember you after you're..
Regarding Dijkstra, Knuth Kay:
quoteVery few programmers ever achieve this level in their own lifetimes./quote
Oh, and s/Gates/Torvalds/.
Thanks, I needed a label. Now I know my place in society. LOL
I hope this isn't a strict numerical progression, if 'average programmer' means GOTO SOME_OTHER_JOB as you are implying.
I'm probably 4 going 5 soon. But going to drop myself back to 3 this fall when i go back to school.
I'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?
How 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
Gates was a programmer? Whom are you kidding? What code did he actually wrote?
I would have put Torvalds and Stallman on the list at levels 7 and/or 8
I'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.
Maybe 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.
I like to think that I'm a number 3, and fear being a number 1.
Jeff, where would you put David Caminer?
I 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.
I 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...
“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?
If 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.
@John Bad programmers mostly likely dont read this blog and they dont even know it.
8. 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. =)
Not 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.
Ooh. How many XP do we need to level up?
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.
Why not just rename Dead Programmer to Immortal Programmer. It's really what you are saying anyway.
I'm afraid 6 is the highest level I can achieve in my lifetime. I'm now between 5 and 6 though.
Oh 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.
Another coder tries to impose computer science style grouping on real life. Rookie mistake...
I 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?
Joel 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.
the 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.
Everyone should strive for two and see if providence leads to anything above that.
You 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.
But 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)...
I know programmers, and Bill Gates is no programmer.
Please go back to the old font. Please god...
Perhaps you could replace Dead with Timeless?
I 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.
I want to be a billionair of course. I'm probably at the wrong time though, I should have been there in the 80s.
what 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).
You forgot level 5.5: bburnt-out programmer/b:
- still coding at 51; reading blogs instead of producing product; worse still, commenting on blog posts...
what's the purpose of this blog? is this just a daily brain-fart thing or what?
Here 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 ?
DHH? From the fraction of programmers that are aware RoR exists, most of them don't even know who he is...
My classification of myself was corporate programmer(day job) and cowboy programmer(endless nights).
Klingon programmers aspire to die in a glorious battle with system bugs regardless of skill level.
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.
So I wonder where the Code Monkey would fall?
# Successful Programmer
# Famous Programmer
# Working Programmer
These are not 'true' levels because they are not distinct.
Bill 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.
@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*
developer - senior developer - CTO of a startup*
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?
Wow, 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!