yield thought

it's not as hard as you think

5 Stages of Programmer Incompetence

with 169 comments

Every now and again I see glimpses of myself in ‘younger’ programmers as they struggle with the same concepts I did, fall into the same mental traps and generally make similar mistakes. Writing the 4 wrong ways post made me wonder how common these phases really are and whether we could categorize them.

You too? Well wonder no longer, for I have completed this herculean task! I’ve found myself in each of these traps at least once – some of them several times – and have seen them in others too. Are there more out there?

The Enthusiastic Newbie

The newbie is full of passion and excitement for her one and only language, which is undoubtedly VB, PHP or actionscript. Having finally got to grips with the syntax of said language she feels she’s completely mastered it in all its forms. The newbie writes astonishingly quickly, but everything ends up in one big file full of global variables. This is a very productive stage, if little worm games and random utilities / replacement shells are what you want produced.

Distinguishing code features: Each program is exactly one file, containing a hundred global variables, none of which has more than four letters in the name.
Mistaken belief: Programming’s pretty easy, really.
Most endearing quality: Her little shiver of excitement every time she opens her IDE and gazes at a blank project, full of potential.
Reads: Firefly fanfics.
Most likely to say: “Come and look at this cool flash game I just finished!”

The Budding Genius

Having programmed for a few years and learnt a second language, the budding genius is firmly convinced that he is the Messiah of the programming world. He reinforces this world view with his conviction that anything he doesn’t understand (i.e. almost everything) is pointless, old-fashioned and a waste of time.

Distinguishing code features: Uses his own vector class implementation. Always starts class names with his own initial.
Mistaken belief: The programming world has more to learn from him than he does from it.
Most endearing quality: How easy it is to make him defensive and huffy by mentioning anything outside his cabbage patch of experience.
Reads: His own blog.
Most likely to say: “Huh, yeah well everyone knows functional languages are no use for *real* programming *anyhow*”

The Abstraction Freak

After a while all new programmers being to realize they start each new flash game by copying 90% of the old one. Suddenly it occurs to them that they could write one ‘super’ game engine to make writing a new game as simple as finding the sprites and writing a config file containing the rules! Flushed with this success, the wannabe abstraction freak begins to believe all programs should be generalized, generalized, generalized… unfortunately, holding on to this belief too long turns them into the Abstraction Freak.

Distinguishing code features: Adds five new classes every time he implements a new feature, all of which are named after design patterns and give no clue whatsoever as to the feature they’re supposed to implement. Any actual business logic is hidden in an xml-based config file somewhere else in the repository.
Mistaken belief: Writing a program to interpret a set of config files containing an awkwardly-phrased, buggy description of the program he wants to write is better than writing the program he wants to write.
Most endearing quality: The expression of painful concentration on his face while battling his analysis paralysis before starting to reimplement the login feature for the fourth time that month.
Reads: Design Patterns, cover to cover, during his lunch break every day.
Most likely to say: “So I think we should start the new time scheduling project by writing a generic application framework…”

The Veteran

Any programmer exposed to the bitter realities of working in a soulless commercial software company, shuffling bits on a hard disk for the same salary every month eventually develops a certain protective shell. Neither speed nor genius are rewarded, so often a professional developer begin to develop a very careful, measured style that ensures he’s never caught out by either bugs or management, which he considers to be pretty much the same thing.

Distinguishing code features: The first ten lines of any function, even an accessor, are all assert statements. All the error conditions for each function are dutifully checked and handled and comments are liberally scattered throughout.
Mistaken belief: Doing things ‘properly’ is the same as getting things done, but better.
Most endearing quality: His aura of measured, unflappable calm that makes it clear that even the direst emergency won’t make him work any faster, leaving one with the impression he might be better suited to a career in the bonsai industry.
Reads: joelonsoftware.com (yes, even though Joel’s stopped posting)
Most likely to say: “Well, I won’t be able to say until doing a proper estimate next week, but it’s going to be at least *sucks air in through pursed lips* at least four man-months to add a print preview, plus testing and documentation of course.”

The ‘Guru’

After a decade or so of bouncing from one stereotype to the next, our newbie is all grown up, yet she feels like a hollow shell of the enthusiast she once was. One morning, she wakes up and realizes that the unwieldy crust of unit tests, assertions, error-checking and class-design that have built up around her programming style are just crutches, crutches that are dragging her down and that she no longer needs! She casts them off and begins writing the simplest, barest code she can think of to do what she needs! Free the features! Free the code! Freedom!

Distinguishing code features: Only writes in dynamically-typed languages with a strong functional component. At first glance her code looks remarkably similar to the newbie’s, except there’s less of it and the variable names make sense.
Mistaken belief: That her enlightenment makes her a guru without the quotation marks.
Most endearing quality: Her little shiver of excitement every time she sees an interesting problem she could solve with ‘just half a dozen lines’ of code.
Reads: news.ycombinator.com/newest
Most likely to say: “You know, polymorphic inheritance is really just a poor-man’s substitute for first-class functions and dynamic typing…”


So there you have it, my career as a programmer laid bare. I’m curious; does everyone go through these phases?

If I’ve missed any great ones, add your own in the comments and I’ll either update the article or collect them for a Part II…

Note: Yield Thought has moved to http://yieldthought.com – check there for the latest posts!


Written by coderoom

March 19, 2010 at 3:25 pm

Posted in Uncategorized

169 Responses

Subscribe to comments with RSS.

  1. Spot-on. I just replied my boss with *sucks-air-in* estimate and wanted to check out what’s the fuss about hackernews website.


    March 19, 2010 at 4:48 pm

  2. yep..that pretty much sums it up for me.


    March 19, 2010 at 6:01 pm

    • Anyone who has been in this business over 10 years WORKING, have lived, practiced and suffer. 😀


      ninel conde

      July 6, 2010 at 2:16 am

  3. I checked all the checkboxes. Assuming you mean, “Which stages of programmer incompetence have you been through today?”


    March 19, 2010 at 6:05 pm

    • I’m becoming a veteran 😛 NO MORE BUGS FOR YOU


      March 21, 2010 at 11:14 pm

  4. Here’s a great comment from knight666 in the reddit comment thread, it’s a crime if more people don’t see it:

    At school (game programming), we have three programming teachers:

    Jacco – the ex-demoscener
    Defining features: Doesn’t like abstraction. Everything should be crammed in a single file if possible. Code should be fast. Provides a framework, but it’s absolutely barebones (renders a buffer to a window, provides a vector2, vector3 and matrix4x4 class)
    Mayor annoyance: Lack of abstraction causes inflexible code. Single-letter variable names.

    Dino – the veteran abstractionist
    Defining features: Abstract everythiiiiiiing. Member data should be in pimp’s. Hates headers and considers them “archaic”. Always codes platform agnostic. Because of his abundance of abstraction, the program code is separated from the rendering code.
    Mayor annoyance: Puts everything in .cpp’s instead of headers, which causes linking nightmares. Ridiculously convulated coding style and variable naming. Abstraction where none is required (I’m pretty sure my Vec3 is always going to use either float’s or fixed point, I have no need for a Vec3)

    Nils – the chilled out dude
    Defining features: Features before speed. Get it running, then get it fast. Abstract things only when required. Gets shit done.
    Mayor annoyance: None really.

    The past year, I’ve been agreeing with Jacco, then with Dino and now with Nils. However, it’s a balance. When you code for speed, your shit will break when you want to add new stuff. When you abstract everything, nothing will ever get done!
    It’s a veeeeery delicate balance. How much abstraction do I really need and how important is speed right now?


    March 19, 2010 at 6:11 pm

    • small world, those are my teachers (knight being my senior)

      And that absolutely sums them up !

      awesome article 🙂


      June 24, 2010 at 11:08 am

  5. After pounding out code for 25 years, ‘Guru’ is the best fit.


    March 19, 2010 at 6:23 pm

    • And this is why you are not one. It asked you which stages you went through, not which one you think you are….


      March 21, 2010 at 11:48 pm

      • Also, he put quotes around guru.


        April 19, 2010 at 2:00 pm

  6. This would explain why so many people i consider ‘Guru’ programmers have fallen in love with Haskell and Prolog


    March 19, 2010 at 6:33 pm

  7. Great read, lots of truth, but switching genders of the programmer every paragraph is tremendously annoying.


    March 19, 2010 at 6:35 pm

    • Maybe you’re right about that. They/their/them is less immediate, less personal. Perhaps one she and the rest he would’ve been more representative (although all ‘he’ would’ve been even more so). We’ll see.


      March 19, 2010 at 7:15 pm

      • Gender doesn’t matter. Choose “he” or “she” and stick with it. I don’t think anyone is keeping score of your pronouns, and if they are, then they’re probably worth pissing off.


        March 25, 2010 at 9:50 pm

    • So gender abstraction is now required? 🙂


      March 19, 2010 at 9:09 pm

    • the author said he/she has experienced all those stages, perhaps changing gender between each of them?


      March 20, 2010 at 1:02 am

    • I agree. When I read a ‘she’ my instinct is that I have missed something and I start looking back to find out who this ‘she’ is. Please people, ‘he’ can be used to mean ‘he or she’.


      March 20, 2010 at 12:58 pm

    • I actually enjoyed the gender switching. Made it less about the specific person.


      March 20, 2010 at 2:10 pm

      • Of the five types, the “guru” is the one most likely to be a she. She probably started her career in the early 1980s, which was the last time there was something approaching gender equality.

        BTW, I must be ready for some transcendent stage of programmer incompetence, because the only code that doesn’t seem fussy and precious to me these days is assembly language.


        March 20, 2010 at 8:39 pm

    • That’s because the article has dynamic gendering.


      March 21, 2010 at 6:23 am

      • 🙂


        September 20, 2010 at 9:54 pm

  8. First class functions are a good substitute for a single polymorphic function, until you need to pass/return multiple polymorphic functions and some data all at once and then you have an ADT again.


    March 19, 2010 at 6:39 pm

  9. This blog post follows a pattern I have been noticing lately in programmer blogs. I believe that one could abstract out several pieces of it to create a rudimentary framework…


    March 19, 2010 at 6:39 pm

    • There was an excellent post on HN along those lines a month or so ago, something like “This is the title of a generic blog post”. I tried searching for it but found so many that it didn’t seem funny any more…


      March 19, 2010 at 7:11 pm

  10. Hit the nail on the head and hammered home.


    March 19, 2010 at 6:40 pm

  11. This is brilliant – its not only funny, it’s simply the truth, and funny because it’s the truth 🙂

    Thanks, it made my day 🙂

    Roland Bouman

    March 19, 2010 at 6:50 pm

  12. Hilarious and so true. Bravo.


    March 19, 2010 at 7:45 pm

  13. […] 5 Stages of Programmer Incompetence « yield thought […]

  14. Veteren, sigh…

    Very accurate!


    March 19, 2010 at 9:46 pm

  15. ‘guru’ for new projects, ‘veteran’ when maintaining.

    But ‘guru’ couldn’t be more apt… my language choice, that I checked HN 10 times today, my belief that the most crucial part of programming is choosing the right names for things, what I was talking about last weekend… the only mischaracterization is that I think all my programs are shit, and I’d rather have a seizure than try to add features to a 10k+ line python project.


    March 19, 2010 at 10:12 pm

  16. You’re not a competent programmer until you care more about the solution than the tools. Anyone that proselytizes a language or tool outside the context of addressing a particular problem is not yet a competent programmer.

    my arse

    March 19, 2010 at 10:22 pm

  17. I love them! It’s just… well, aren’t these really the evolutionary stages for a developer? So many of us identify with them, I’m not sure it’s fair to label them as stages of incompetence. I think we all go through them. They are stages of growth.


    March 19, 2010 at 10:41 pm

    • This is true, but as Jeff Atwood says, recognizing our own incompetence is the key to growth 🙂


      March 20, 2010 at 7:26 am

  18. So… What’s after guru?

    And while authoring your memoirs of a career in code, you’ve forgotten a few friends along the way…

    Remember: “The Technical Project Manager” — for whom there isn’t any coding problem that a Gantt chart couldn’t fix, and who had some mystical understanding of what “percent complete” means. This guy left the coding path somewhere between newbie and abstractionist…

    And Recall: “The UI/HF Engineer” — for whom the holy grail is the ultimate human-understandable representation of system state. For whom the invention of the drop-down combo-box is a major historical milestone…

    Brian Maso

    March 19, 2010 at 10:48 pm

  19. How nice for you that you imagine you’re a guru.

    Won’t it be fun when you make this table again, assign your current position to being a relative novice, and wherever you are then is now the guru step?

    Maybe you should stop fellating your own skill level in public.

    John Haugeland

    March 19, 2010 at 11:10 pm

    • Heh, a ‘guru’ isn’t a guru. They just think, act and talk as if they are…


      March 20, 2010 at 7:27 am

  20. Guru should be in double quotes (“guru”) as it is a string and not a char, usually in single quotes. Just throwing that out there.


    March 19, 2010 at 11:12 pm

    • Ah, but in python you can use either 😉


      March 20, 2010 at 7:27 am

      • And in PHP as well..

        Thomas Lukasik

        March 20, 2010 at 6:55 pm

      • Works in C++ too – gives you an int


        June 25, 2010 at 7:12 am

  21. While everyone knows the steps in your 5 stages are ‘spectrums’ not ‘quantum’ jumps, they are indeed very fair. And it’s important to remember there are little tidbits of all 5 that SHOULD be another level.

    However once you work for a company whose job is it to make money selling not supporting, you do indeed get beaten down. Time to market, visual appeal, marketing, all trump (most of the time), elegance in software engineering. Still you have to admit, it’s not a bad way to make a living if you are still enthusiastic about writing code. Even if has to be your code, not you employers you are enthusiastic about.


    March 19, 2010 at 11:36 pm

  22. […] 5 Stages of Programmer Incompetence Every now and again I see glimpses of myself in ‘younger’ programmers as they struggle with the same […] […]

  23. The Budding Genius is the best, not only for programmers 🙂 You are still at the stage when you don’t know if those are illusions or premonitions.

    Stephana Nikolova

    March 20, 2010 at 12:12 am

  24. Any chance you can do “5 Stages of Programmer Competency” next? Oh and btw, you can trade object for closure.
    (you can but, hey lol)


    March 20, 2010 at 12:48 am

    • If I ever reach a level of competency in programming I surely shall!


      March 20, 2010 at 7:28 am

  25. The post seems to describe folks who start working at 18-20 knowing only one programming language, as opposed to growing up loving the programming experience while being language-agnostic. The abstraction step makes sense, but even that can be justified for pragmatic reasons when you have to do the same thing but configured differently for the 2nd or 3rd time. I don’t consider it a step in a natural evolution.
    What really stands out from this post is the lack of business sense and pragmatism from the personalities described. Is it what working as software engineer in a large corporation does to you? And what with the ego-driven need to accomplish or showcase, as opposed to simply perform the task at hand, whether it be self-assigned or handed down – many mature (and some immature) programmers don’t have so much an ego problem that they should prove themselves better somehow via one of the described idiosyncrasies.
    Finally, a true programming in my opinion is equally comfortable with assembly language as with Lisp or Java, has nothing to prove the world and just enjoys what he does. He doesn’t seem to fit the profiles listed. And to boot, none of these profiles has much to do with ‘competence’ – competence is getting the right things done properly in a sturdy and scalable way, then being able to smoothly hand it over and move on. Frankly all the profiles fit the “newbie” attitude to me.


    March 20, 2010 at 1:12 am

    • My thoughts exactly. Great programmers –

      * See the expanded problem space, which includes organisational objectives, culture, practice, existing code, people, materials and budget, as well as stated objectives and technical issues.

      * Are usually geniuses with loads of experience. They seek and find major technical shortcuts to deliver solutions across the expanded problem landscape. This is the Great Programmer’s X factor. You can’t teach it.

      * Improve processes where possible, but are never process junkies. Particularly they eschew the semblance of process.

      * Are probably aware of tool and language trends, but are never fashion victims.


      March 20, 2010 at 8:25 am

      • right on. this cannot be said better.


        March 7, 2012 at 2:30 am

  26. You left out my programming position The Grunt. The one that is assigned to finalize the genius code and design the Guru has created and bring it to production. In my experience the Guru does the design according to whatever fancy new design pattern or technique his last conference got him to believe in. I as a multitasking robot am assigned to deliver his genious to production. What I get is a proof of concept that has been carefully demonstrated to the company management. The big bosses believe the product is 90% ready but the truth is that it’s barely 20% ready. So in my the management eyes I am always underperforming and the Guru is overperforming, he gets the big salary check and I get the scraps for finishing his constantly changing design patterns and whimsy designs and have to support the stuff as well and meanwhile the “Guru” moves on to design some new stuff with Windows 7 features everywhere but our customers are still sticking to Win Xp and Server 2000. I agree with DreamT the profiles are describing naive “newbie” programmers and as fun as this posting is it would be great get a more thorough analysis of programmers, but I know a blog is not the place 🙂


    March 20, 2010 at 2:48 am

  27. stop blogging and go back to work!


    March 20, 2010 at 2:56 am

  28. Distinguishing code features:

    Mistaken belief:

    Most endearing quality:


    Most likely to say:


    March 20, 2010 at 3:35 am

  29. The Metamorphized Solution Engineer:

    This person, preferably prior to Guru, but after Abstractionist, decides to change careers and go into Enterprise level Solution development.

    This guy remembers all his code kata, but has lost track of most languages, thinks in objects and ERD, but also speaks hardware and network. He fails to remember the pain that general programming causes the heart — but has mastered the task of communicating between the “regular human” and the “programming team” — usually using the most dangerous and powerful language of all: pseudocode.

    He is known for writing things on the board like:

    if (data returns ok) then (do second process) else (throw error)…

    and then consider that a viable spec.

    At his best, this man gets the bills paid and keeps everyone happy in plushies and nerfguns, at his worst, he promises things to customers that can’t exist anywhere besides the pliable 4-dimensional fantasy land of his own mind — but you have to code it.

    Love this man, and fear him — he’s likely your boss.

    Distinguishing code features: completes it all in dry erase marker, and considers color coding the extent of his responsibility.

    Mistaken belief: if he can dream it, you will build it

    Most endearing quality: willing to stand between you and “the suits” and actually truly “gets it” even though he doesn’t code anymore

    Reads: The Robb Report (because he’s making more money than you are)

    Most likely to say: Yes, we can do that — no worries.


    March 20, 2010 at 3:54 am

  30. Script kiddie?


    March 20, 2010 at 5:39 am

  31. I haver been through all of them and I am now in a state of enlightened ignorance wrt software development.


    March 20, 2010 at 6:07 am

  32. You forgot one of the most important ones: “Real Programmer”.

    Distinguishing code features: Self-modifying code. No comments anywhere. He refuses to write code in anything other than assembly, C or FORTRAN – or use the words “web” and “programming” in the same sentence. His code is impossible for any other programmer to understand, a fact that ensures him job security for life.

    Mistaken belief: Comments are for sissies. “If it was hard to write”, says the Real Programmer, it should be hard to understand”.

    Most endearing quality: He likes to entertain other programmers at parties by reciting the binary opcodes for every machine he has ever programmed.

    Reads: “Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide Part 2.”, open to a particularly interesting page about the subtle nuances of Virtual 8086 Mode.

    Most likely to say: “If a program can’t rewrite its own code, what good is it?”


    March 20, 2010 at 6:38 am

    • Nice article, thanks for the link!

      “Since Mel knew the numerical value of every operation code, and assigned his own drum addresses, every instruction he wrote could also be considered a numerical constant. He could pick up an earlier “add” instruction, say, and multiply by it, if it had the right numeric value. His code was not easy for someone else to modify.”

      Understatement make coderoom happy!


      March 20, 2010 at 7:37 am

      • Haha glad you like it… The Story of Mel’s a classic piece of hacker folklore 😉

        Kind of fascinating too. Makes me wish I had an old mainframe just to see what it was like…


        March 20, 2010 at 9:39 am

  33. Damn got me at Abstraction Freak. Thanks for the heads up! 😀


    March 20, 2010 at 9:06 am

  34. I’d be possibly another sort of incompetent programmer – “Man” (as in “Manual”). Man makes sure that each and every programmer in his team can code the way they want and produce results in the way they prefer.
    Every single update needs to go through Man so he can make sure it doesn’t affect any other dev’s way of life. As a result no one ever improves, Man is the only one who knows what’s going on and is *litterally* the manual. If Man ever happens to take a day off, nothing will happen on that day.

    Note that no one else knows what man does, or how man does it. Not that it matters much, since man can only write a couple lines per day due to all that time spent listening to other people and answering questions.

    Damn, I’d looooove to find decent a way out of it, help me please 😦


    March 20, 2010 at 9:55 am

  35. After spending some time as VETERAN, I went back to ABSTRACTION FREAK and branched towards modeling instead.

    A MODELER is an ABSTRACTION FREAK in heaven!


    March 20, 2010 at 10:30 am

  36. hell yeah, spot on. i’ve been in the first and second stages, and now i’m at the veteran stage 😀

    although the “i don’t give a fuck” may vary from person to person. you’ve seen your share of “emergencies”, and this stage is about getting shit done and covering your ass. also, having a bit of knowledge allows you to slack 2 days and work one on a three day deadline


    March 20, 2010 at 10:52 am

  37. This is frighteningly good. I would like to offer a new class of programming

    The Delusional Attention Deficit Programmer.
    Distinguishing Code feature: Writes alot of non-readable code that does alot stuff, but doesn’t solve the actual problem. No comments, thinks as he/she codes. No concept of knowing how to focus on a specific task at any one time. Constantly flittering between mini-projects, leaving a half done solution that are hard to pickup.

    Mistaken Belief: Thinks that taking on a few problems at a time is ok. Falsely believes that their approach is agil in order to quickly code and design on the fly to get results. But its not, just burying themselves under a mountain of spagehtti code that is unmaintainable.Doesn’t see that it’s really the PITOOMA methodology. (Pulled it out of my a$$).

    Most endearing quality. Whines about not having time to take on tasks, but is too busy yabbering/procrastinating to get stuff done.

    Reads : whatever is the latest trick/technique in design.

    Most likely to say : “I’m too busy, I’m stretched sooo thinly I don’t have time to sleep….”


    March 20, 2010 at 11:07 am

  38. Oh yeah, Guru reads news.ycombinator and then clicking on links there gets to this site ;D


    March 20, 2010 at 11:46 am

  39. […] full post on Hacker News If you enjoyed this article, please consider sharing it! Tagged with: Incompetence […]

  40. I’m convinced there are only 5 people writing code in the world. The rest of us Google and copy and paste really well.

    And I’m changing my name to Nils.


    March 20, 2010 at 1:19 pm

  41. Definitely not. Some people just fall in love with computers, then fall out of love with computers & fall in love with something else. At some point they fall out of love with the something else & fall in love with computers once more, then they fall out of love with computers one more time & discover that machines in general are nice & just let it be.


    March 20, 2010 at 1:34 pm

  42. Ouch. The truth hurts, man.


    March 20, 2010 at 2:16 pm

  43. 🙂


    March 20, 2010 at 4:15 pm

  44. Good One


    March 20, 2010 at 4:26 pm

  45. wonderful! so true!

    Harold Ship

    March 20, 2010 at 5:20 pm

  46. Haha, very humorous, I like it. (:


    March 20, 2010 at 5:57 pm

  47. This is hilarious but very true.

    Seif Sallam

    March 20, 2010 at 6:20 pm

  48. Great article, funny but true 😉

    Jane Adams

    March 20, 2010 at 6:31 pm

  49. Great peice of writing. Not sure where I would sit as there are times a bit of each comes into play. But certainly the Verteran seems to fit the best as the ‘sucks in air’ has happened often but I think that is more due to the fear that mangement thinks its a hard timeline not a blasted estimate.

    Keith Chadwick

    March 20, 2010 at 6:33 pm

  50. This is so FULL OF EPIC WIN..I figured I would probably be the Enthusiastic Newbie, but after reading I found out that I was a cross between a Veteran and a ‘Guru’ *COMMENTS AND FREEDOM!!* even though I have ZERO programming experience in an actual job. I went O: O: O:

    But yeah, funny entry..and it’s pretty realistic in every way. You deserve the Badge of EPIC WIN. x3


    March 20, 2010 at 6:42 pm

  51. Ha ha… Good read!!


    March 20, 2010 at 7:19 pm

  52. Veteran.

    My stuff ships.
    My stuff works.
    My contracts keep getting extended.

    Java rocks!

    Great post.
    Gonna put it in the hall at work.

    John Bannick

    March 20, 2010 at 7:21 pm

  53. […] 5 Stages of Programmer Incompetence « yield thought […]

  54. get over yourselves


    March 20, 2010 at 9:09 pm

  55. out of scope of the post:
    Why abstract “users” and “programmers” in English texts mentioned as “she” predominantly? Is it a some kind of courtesy? Because, if we speak about programmers out there, 20 to 1 is a good aproximation of sex proportion in our profession (whatever the reason for that), and instead of “political correct” equalization of sexes, usage of “she” just accents that disproportion in a strange way, no?

    I was unable to find any ethymology of such a tradition, but maybe you know, why?


    March 21, 2010 at 1:31 am

    • I think it might be part of some unspoken effort to help change that predominance in some small way. There’s no physiological reason the ratio should be so high, which means the profession is missing out on almost 50% of the potential van Rossums, Knuths and, yes, Spolskys and Grahams.

      There are better ways than occasionally using the pronoun ‘she’ as well as ‘he’, but hey, not all technical writers are political activists or revolutionaries.

      Personally, I throw it in there for a bit of variety; I’m surprised it bothered such a high percentage of you, dear readers.


      March 21, 2010 at 7:13 am

  56. As a female programmer, I agree with codenik. It’s nice for us girls to be included, but I feel it’s OK to treat the noun programmer with the male gender. 🙂


    March 21, 2010 at 2:50 am

  57. The enlightened one. the day he got interested in programming and read a book, he realized he already knew how to program, and quickly put the book away. the only use he has for man files is to get the correct argument list that the previous enlightened one created. there is no code, only language.

    distinguishing code features: simple, elegant, easy to read. maybe a bit complicated for others, but with a little investment most can figure it out.
    mistaken belief: programming is easy, every programmer is like himself.
    most endearing quality: the little eyebrow raise when another programmer says ~”it can’t be done”
    reads: anything not related to programming. history of russia? that sounds interesting.
    most likely to say: “Yes, it’s finished.”


    March 21, 2010 at 3:01 am

    • This would be a nice stage of programming competence 🙂 Sadly I couldn’t honestly claim to have ever reached or even seen it!


      March 21, 2010 at 7:14 am

    • The description for “The Enlightened One” sounds very much like what the Budding Genius would say if you ask him to describe himself.


      March 21, 2010 at 10:22 pm

  58. I agree with codenik


    March 21, 2010 at 5:32 am

  59. it wasn’t a rant. It was just a question. I’ve seen usage of “she” pronoun in tech docs many times before, I just want to know, why and when it started.

    and, damn, it’s “codeSnik”! 🙂


    March 21, 2010 at 5:35 am

  60. […] came along a post describing five stages of programmer incompetence. I highly recommend you to go read the article and see if you identify yourself with any of these tongue-in-the-cheek […]

  61. A good read with some good comments. I added your blog in my bookmarks.


    March 21, 2010 at 9:54 am

  62. Spot on! And I liked the one comment “all in one day!”… great observations.


    March 21, 2010 at 11:29 am

  63. I had to check all boxes!!
    Got the feeling that somehow, at some time, I went trough all stages. Never named classes with my initial though (…do they exist??).
    For the rest … yes your honor, I confess…
    If, and after have read this, I would still dare to make any kind of self-evaluation on my competences, a sixth-stage would surely worth to be mentioned: ‘the procrastinator type’.

    Great article.


    March 21, 2010 at 2:10 pm

  64. This is funny- I think- I don’t any language but briefly 20 years ago worked with Focus… and was pretty proud of myself.
    Now I just depend on you folks.. thankfully.


    March 21, 2010 at 5:56 pm

  65. […] 5 Stages of Programmer Incompetence Amusing… […]

  66. Great Article! Loved every bit of it

    Atul Kash

    March 22, 2010 at 1:47 am

  67. uhaehuaeea yes, i have found myself in all stages besides the guru stage… hahaha it is interesting, i develop my own application http://www.archiveclipboard.com/ it is not more than the best Clipboard tool i have found, believe me, i tried to use the available tools, all of them suck… anyway my projects only have get out of my IDE to others computers after almos two years, and now it is happy, i’m happy, people using it are happey, since jan07, i have owned more than 4k users, it is cool isn’t ?? check out softpedia! softoxi! googleit =D

    this projects has faced some stages here described, until i get mature enough to make this shit work! huahahaha

    hope you enjoy!

    Rafael Karst

    March 22, 2010 at 5:14 am

    • Glad you enjoyed it and good luck with ArchiveClipboard! Yes, getting the first users is really exciting! I hope you mean owned as in ‘have’ and not as in ‘with a rootkit’ 😉

      You’d get even more users if you added two or three screenshots to your home page telling a little story about what ArchiveClipboard does and why that’s awesome. A single sentence describing why a visitor should care, in a nice big font, and a nice big download button would help, too. Quotes from happy users, too!


      March 22, 2010 at 9:01 am

      • you damn right coderoom, i’m lasy about the site, basicly the massive downloads come from review sites like, softpedia redirects and others reviewers… i guess i’m going to do something… thanks for the advice!

        Rafael Karst

        March 22, 2010 at 2:20 pm

  68. I am at the veteran level … and am showing promise of graduating to the guru level very soon 🙂

    Very nicely put. And yes, I think everyone goes through the same cycle. You forgot the last phase though … The Lead/Manager 🙂 I think you have yet to reach there, else it would have been in the list!

  69. Hmmmm…
    A very interesting way to look at how one matures as a pragmatic programmer. 🙂

    A challenge to the programmer in U…



    …can U code it??


    March 22, 2010 at 10:49 am

    • What’s the mystery? The algorithm is clear: make an NxN array, start in the top left, wind in to the middle decrementing as you go, print said array.


      March 22, 2010 at 11:26 am

  70. I’m at the “mad man” stage for which you kindly left out an option. I see programming patterns in the world around us, in social networks, and I see natural patterns in programs.

    Just started learning “web programming” languages in the second half of last year. From a strict diet of c for 13 years hitting the wall of a couple dozen languages and databases formats at once was pretty radical. I’ve just started to get comfortable with ruby on rails, and JavaScript. I’m still not “proficient” but I’ve learned enough about how information flows through rails structures to be capable of breaking our web app. Me and a better suited rails hacker are working on a social reader/filter that just dove into the deep end (web) from Twitterville.

    Mark Essel

    March 22, 2010 at 12:30 pm

  71. The only thing that I would add is that every “Budding Genius” would categorize themselves as a “Guru” having magically skipped the “Veteran” stage.


    March 22, 2010 at 12:56 pm

  72. First up – kudos for allow me to be a she. When I tweet / reply on forums, the assumption that I must have a y chromosome is pretty much universal. Makes me realise why bitchwhocodes chose that name…

    I’m cringing at the way I behaved in stage 2 – I remember once telling an HTML dev that all sites would be built in flash one day. But as a newbie I sure got a lot done – built some proper apps in AS1 that took forever to debug but would never have been attempted by the stage 3 me…

    Currently I’m easing into Veteran mode. The more I test the more I realise how fundamentally stupid I am – there is no limit to the simplicity of the code I can screw up. TDD is currently my safety net – it’s not that it’s better for the client, it just that it’s better for my brain.

    What you’re really talking about though is the cycle from unconscious-incompetence, through conscious-incompetence, conscious-competence, unconscious-competence and all the way back around to begin again. The great thing about this industry is that there’s only the journey – the destination is on a moving platform…


    March 22, 2010 at 2:44 pm

    • You’re welcome – the unconscious-incompetence => unconscious-competence cycle is an interesting way of looking at it, although in my experience despite being much more competent than a newbie, the air-quoted “guru” is still a lot less enlightened than she likes to think… maybe it’s a spiral of incompetence? 🙂


      March 22, 2010 at 3:16 pm

      • Ah yes – that’s exactly what I meant by ‘… and all the way back around to begin again.’

        There’s no staying still – if you’re not learning then you’re simply sliding backwards with your eyes closed… but charging more per hour for each cycle you’ve completed!


        March 22, 2010 at 4:54 pm

    • Interestingly I have seen that ‘she’ is the prevalent term in programming literature (for both users and developers) – at least literature written by better programmers/writers (have a look at MSDN magazine to see what I mean).

      Jonathan Dickinson

      March 23, 2010 at 7:36 am

  73. […] 5 States of Programmer Incompetence […]

  74. Quite interesting, but I wouldn’t classify a dynamic language as most definitely the tool of choice for the ‘Guru’.

    She would rather use the correct tool for the job.

    Writing a socket server that can handle 100s of thousands of connections – use a statically typed language. Maybe even what could be argued as too much procedural code.

    Writing a desktop client for twitter? A garbage collected dynamic language would be best. Heavy OOP or functional style depending on what is being accomplished.

    The internet is just currently going through a ‘dynamic language for everything fad’, the old tools (OOP and static language) still work just as well.

    I work with one of these people – the type of person who has gone far past ‘Guru’ (I would happily admit that I am stuck somewhere in between Abstraction Freak and Veteran 🙂 ).

    Jonathan Dickinson

    March 22, 2010 at 4:55 pm

    • Have you missed the significance of the air quotes around ‘guru’? A true guru would use whatever works, but the hyper-fashionable ‘guru’ is most definitely a dynamic typing convert. She thinks she’s a true guru and has the answer to the world’s programming, but she isn’t and hasn’t – not yet, anyway.


      March 22, 2010 at 7:13 pm

  75. Thanks for the excellent post. It gave me a few chuckles. I felt a little compelled to respond, although I am not sure why. I think the most important thing is recognizing these levels…and having the humility to acknowledge that you travel in and out of each depending on multiple factors…not just length of time in the profession.

    I’ve been programming since I was 8, and working professionally for 15 years. I have experienced each level, but shy away from using the term ‘guru’. To me it suggests reaching some plateau of knowledge, and the negative connotation of an ego to go with it.

    In reality, ‘guru’ is fairly accurate for its reference to attainment of knowledge and teaching others…both keys for programming success and longevity.

    Constant, rapid change is a force to reckon with in this industry…and makes us all newbies at some level, some more enthusiastic than others. Keep your eyes open and mouth shut, learn from and teach those around you, use the most appropriate tool for the job, and you will be happy and successful.


    March 22, 2010 at 9:11 pm

  76. ^ lol @ the people who wrote comments to assert themselves.

    good read though, gave me a few laughs with the guys, it would be funny if someone profiled management styles from developer perspective.


    March 23, 2010 at 2:45 am

  77. After guru, you might considered “ascended” mode, taken directly from the Stargate series. (Also called Daniel Jackson mode.) Ascended programmers appear at odd moments, smile knowingly, give hints and then tell you they can’t tell you the answer because then you wouldn’t learn the truth of your work.

    These people can caused incredible office rage. 😉


    March 23, 2010 at 1:15 pm

  78. I mind be qualified as “Guru”, but I prefer statically typed languages, Haskell for instance. Probably I’m lazy veteran – to careful to use dynamic languages and lazy to put assertions by hand.


    March 23, 2010 at 1:47 pm

  79. Spot on 🙂

    And I’m amazed at how seriously some people take this post – there’s some comments on here that I swear they didn’t have any sense of humor about themselves / us in general.

    Me – I’m definitely a ‘”guru”‘ !! lol


    March 24, 2010 at 7:00 am

  80. Not a programmer myself but do get to sit down and speak with them often. Amazing how well your categories generally fit those I’ve had the chance to meet.

    Fun read.


    March 24, 2010 at 1:55 pm

  81. Well this is quite condescending…
    I think you should not categorize what should not be.

    Some programmers out there (as in other jobs) are just humble and try to learn and practice, getting better every day. And I’m proud of being (or at least trying to be) one of them.

    I have never been through one of these stages (except maybe the newbie, but only for the Enthusiastic part).

    I don’t know where you work, but if it is your point of view for this job, I surely don’t want to work there…


    March 24, 2010 at 3:49 pm

  82. I really enjoyed the whole …. The text, the comments…
    And what I feel to be very important is actually that Your article and this marvelous discussion are TEACHING all of us of our individual and collective mistakes. Just recognising yourself in any of the “stages” is an eye opening experience!!!

    I myself program computers for 36 years, so, from that point of view I am a veteran (I even programmed the LGP-21, the little brother of LGP-30! – see MEL’s story), and yes, probably, in my own idiom, passed many of the mentioned stages.

    However, it is always wise to be humble. It is easier on yourself, and on the others.


    March 24, 2010 at 6:55 pm

  83. I was once working for a company which was FULLY into the “The Abstraction Freak” stage.
    They never finished the project, the company got bust, the investors lost money, I lost some earned income… and the job 🙂
    However, I still, 20 years later, have a very expensive robot motor and encoder they wanted to trow away with the rest of garbish 🙂


    March 24, 2010 at 7:05 pm

  84. […] 5 Stages of Programmer Incompetence « yield thought. Share and Enjoy: […]

  85. Since when Javascript and PHP are programming languages ?

    Just being mean, even PHP is OO now 🙂


    March 24, 2010 at 9:12 pm

  86. Amazing post!
    I would like to think I am past the newbie phase but every new bug sometimes makes me scared – what if it all comes crumbling down? But then a new issue also brings up new solutions, new ideas and new things learnt. I guess the phases aren’t separated by walls of stone after all.

    I’m going to bookmark this and come back to check… 🙂


    March 25, 2010 at 8:56 am

  87. I LOL’d at – “His aura of measured, unflappable calm that makes it clear that even the direst emergency won’t make him work any faster”
    Wow, this is ME!


    March 25, 2010 at 5:16 pm

  88. Having read all your comments, a thought comes to mind… Programmers are the wind beneath our wings.
    Sure, I want the best vehicle on the market; but I just want to get in it, drive it, and enjoy it without having to think about what all it took to build it… the same way kids want to eat their favorite meal without giving thought to what all went into its preparation.
    So I guess this makes y’all the road for our rubber? Or masochistic perfectionists operating on Bloom’s six levels all at once, if that’s possible? Octopus mode does come to mind. Plus, y’all’s perception of the world is so unique that you use your own language to communicate.
    Bottom line? Your programming genius… regardless of the level you’re on… gives my creativity freedom of expression. So thanks!

    Deli Lanoux, Ed.D.

    March 26, 2010 at 11:56 am

  89. […] I was learning to program someone told me that I should try to read as much code as possible. Budding genius that I was, I thought this was advice for stupid people who needed to learn from their betters. I […]

  90. […] Five stages of programmer incompetence Interviews with average programmers Software Engineering Radio episode on Clojure […]

  91. A good breakdown. As opposed to a purely linear progression, I find these to be cyclical. I come round based on the company that I am at, learning a new language, working on a new project or just the seasons. “I recognize that tree”

    Amber Shah

    March 26, 2010 at 11:33 pm

  92. […] 5 Stages of Programmer Incompetence […]

  93. nice site.. very interesting!! i need updates from you.


    March 29, 2010 at 8:54 am

    • Thank You!!!

      I’m not at profi… 😉 but i’m learning to be some kind of…

      …”white Hacker”

      usually I know where may be error… in the developers tools…


      have a nice days



      March 29, 2010 at 8:56 am

  94. Loved reading it man! Good write indeed. So no matter what stage you’re at, you still remain incompetent in some way or other, that is the beauty of it – being incompetent and working towards competence and then realizing another level of incompetence in the midst of freshly achieved competence! Abstract..hmm!? 🙂

    Umesh Adtani

    March 30, 2010 at 4:33 am

  95. […] I was learning to program someone told me that I should try to read as much code as possible. Budding genius that I was, I thought this was advice for stupid people who needed to learn from their betters. I […]

  96. […] The 5 Stages of Programmer Incompetence from: Hacker News on 26 Mar 2010 […]

  97. […] } This description isn’t only apt for programmers, I would apply it to engineers who regularly write […]

  98. […] 2010 in Programowanie, Przemyślenia Regedit na swoim blogu napisał notkę, w której podał adres ciekawego artykułu na temat etapów przejściowych dotyczących każdego […]

  99. […] 5 Stages of Programmer Incompetence « yield thought […]

  100. Nod at all.

    Olaf Doschke

    June 24, 2010 at 10:35 am

  101. […] https://coderoom.wordpress.com/2010/03/19/5-stages-of-programmer-incompetence/ var a2a_config = a2a_config || {}; a2a_config.linkname="5 Stages of Programmer Incompetence"; a2a_config.linkurl="http://aronze.com/2010/06/28/5-stages-of-programmer-incompetence/"; Filed under: blahblah, dev Leave a comment Comments (0) Trackbacks (0) ( subscribe to comments on this post ) […]

  102. That’s a great breakdown. I am just a newbie…. =)

    Tom Welling

    July 6, 2010 at 2:36 am

  103. […] made it right was my innocence – back when I knew nothing about programming (i.e. when I thought I knew everything) longer-lived programs started accruing odd if-statements and shoe-horned additional functionality […]

  104. According to your divisions, I belong to the veteran class right now. I went through the enthusiastic newbie and abstraction freak.

    Koutheir Attouchi

    July 30, 2010 at 8:39 am

  105. […] 5 Stages of Programmer Incompetence « yield thought […]

    Daily Digest September 4th

    September 4, 2010 at 6:11 pm

  106. Wow! Realy cool.
    It made me remember the “How to kill a dragon and save the damsel the programmer’s way”.

    I find this link with the (maybe the original from the brazilian version was translated) English version:


    September 12, 2010 at 5:16 pm

  107. You also forgot the framework-dude.

    Distinguishing code features:
    Adds lots of frameworks to his/her project to solve simple problems. The project is overloaded with cool opensource projects downloaded from an open repositories.

    Mistaken belief:
    You don’t have to spend your time creating own stuff; others did already created this and those people always code better + more optimized. He tries thousands of plugins, addons and frameworks. He also spends extra time to figure out how to get the most out of the framework, even if it is not needed ‘yet’. He need to read the full documentation before he can decide if the framework really fit his needs. After half a day googling; he has got a great new framework which he probably could use ‘in the future’ too, but for the next project there is another framework waiting.

    Most likely to say: Oh-No you create that code yourself? Everything is already created. There must be a framework for that. Wait; let me Google that for you.


    September 20, 2010 at 8:43 pm

  108. I recall another aspect of the Budding Genius stage (so long ago): enthusiastically starting and running lunch n’ learn groups to tackle new languages and tools we were discouraged from using in our legacy shops until we were abruptly laid off for being old language coders and replaced with a new generation. Always a slow learner, I did that three times at three different companies! hee hee good times…


    September 20, 2010 at 10:04 pm

    • Argh! Hope you’ve found a class place to work now, at last!


      September 21, 2010 at 7:16 am

  109. I don’t think that I passed one of those stages.
    Coz, I really don’t like programming its just that, I really need to love it, to challenge myself and to prove that I can also be a good programmer one of this days. I’m an Oracle Developer by profession today. Because, “Programming is a PRACTICE, not just a JOB”
    bad thing, the author of that saying is unknown.


    February 25, 2011 at 5:59 am

  110. So true ! I’m on programming for about 5 years. Heading to Veteran after going through newbie, budding and abstract

    Thiên Hạ

    July 15, 2011 at 4:21 am

  111. […] the idea that building the next flash site should be easier and quicker. This project lead me to my Abstraction Freak Phase as a programmer as I was quickly overwhelmed with abstraction. The latest version found on GitHub […]

  112. i’ve been in this mess since 1989 — what i’d like to know is when did you hit your burnouts?

    Robin Gist

    September 2, 2012 at 4:31 pm

    • I’ve been programming for a touch over 20 years, professionally for more than a decade. I haven’t hit any burnouts (yet!); I think that says more about my employer and environment than me personally though.


      September 8, 2012 at 5:24 am

  113. […] 5 Stages of Programmer Incompetence […]

  114. […] most amazing iPhone yet 5 Stages of Programmer Incompetence « yield thought Coiling Unattached Rope | How to Coil Unattached Rope | Rope Care Knots Tweet !function (d, s, […]

  115. Very similar to the Hindu Vedas. Ooops, I guess that reveals which stage I am at.

    Shelton Smith

    June 6, 2014 at 1:18 pm

  116. […] here’s something I can relate to: 5 Stages of Programmer Incompetence. I’d put myself in the “Veteran” […]

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: