Cowboy Programming Game Development and General Hacking by the Old West

January 18, 2007

The Seven Stages of the Programmer

Filed under: Game Development — Mick West @ 11:05 am

Before Programming – Ignorant

Before he takes the first step, the programmer does not know that programming exists. He is aware of computers, but has never considered how they actually work. He feels the process of making a video game is somewhat akin to making a film, or perhaps writing a book. If someone were to ask him how that actually works, his brain would immediately shut down, as if you asked him why string theory requires ten dimensions.

Stage 1 – Awestruck

The programmer become aware that programmers exist. He is not entirely sure what they do, but he know it involves typing things in, and possibly moving a mouse. Somehow there are “programs”, or perhaps “code”, he is not sure. Regardless, for our stage 1 programmer, people who actually do these things seem like gods, omniscient in their mastery of impenetrable yet valuable and (finally) socially acceptable skills. While the nascent programmer feels some longing to achieve this mastery, it is as if he were longing to bend forks with the power of his mind – he’s seen it done, yet secretly believes it to be magic, inaccessible to mortals.

Stage 2 – Fumbling

The programmer writes his first program. In the olden days this would have been of the 10 print “hello”, 20 goto 10 variety, but in more modern times the possible starting points are varied. Perhaps Unreal Script, perhaps Dark Basic, perhaps JavaScript, perhaps even some master may initiate them directly into the dark arts of C++. How many roads may a programmer take? 101010.

Stage 3 – Discovery

A whole new world has opened up. Syntax becomes an enchanted garden, each new keyword hold mystery and delight. Wave of pleasure accompany the discovery of new powers like arrays, and subroutines. A whole new reality seems close at hand. The programmer seeks out others of his kind on the internet, discoveries are shared and wonders are related.

Stage 4 – Delusional

Intoxicated by his new power, suddenly the world is an oyster belonging our programmer. With the gradual appreciation of the power of programming, and the realization that code underpins everything, our programmer will feel limitless in power. All tasks see manageable and anything can be programed, for our programmer is now armed with the hammer of limited coding skills, and all problems look like the nail of N-Queens.

Stage 5 – Methodological

After perhaps years of delusion, some tragedy will befall our programmer. Perhaps he will get a job, and the skills he thought wondrous will prove to be of little worth. Or perhaps some personal project, such as a game engine, will be transformed by much sweat into a blob of worthless code, undeniably incorrect despite his seemingly god-like powers. Faced with this reality, one of three things happens: the programmer may give up in despair, they may lapse back into delusion, or finally they will discover “methodology”, and avidly begin to read books on this, and begin to “program” in UML. This stage is perilous, as the methodological world is similar to the mythological world, replete with Sirens, succubi, heroes and monsters.

Stage 6 – Pragmatic

More pain shall be endured. For, as the programmer will discover, there is no silver bullet. It’s complicated, and he’s beginning to realize this. An awareness emerges that the important things are getting the job done on time to a sufficient level of quality. He can now estimate projects reasonably well, not because of any methodology, but because he’s generally done something similar before. He’s got a lot of tools in his belt, and is suspicious of anything new. He may become curmudgeonly and bitter.

Stage 7 – Transcendent

The programmer finally becomes self aware. He now grasps how complicated it is, and recognizes the dimensions of the problem space. He realizes the bounds of his knowledge and experience. He is also fully aware of what efforts would be required to extend those bounds. He’s still suspicious of the new, but can now accommodate those new things into his arsenal. The programmer is at peace with himself, embracing the chaos of development as something as elemental and unchangeable as the weather. Canute cannot stop the tides, and not even the transcendent programmer can ship without bugs.

While all programmers may pass through the seven stages, not all will make it to transcendence. Many will become stuck at a lower stage, and either abandon their quest, or settle wherever they find themselves, churning away at what they know.

Not all programmers take the same path, and not all aspects of the programmer will proceed at the same rate, or even direction. With this unfortunate vagueness comes the observation that you can only recognize a stage when you are two stages above that stage. Thus, the transcendent programmer will never truly know he is transcendent (although he will suspect it) and must always be in doubt as to the pragmatism of his solutions, and the pragmatic programmer will be forever conflicted regarding his usage of methodology.

31 Comments »

  1. I must be methodological, because I constantly wonder if I’m just a sham or not. Will people notice that I’m just making stuff up? Will I be able to bring the stuff I make up into reallity so that nobody will notice that I just made it up? How much will TDD save my ass this time?

    Comment by capn_midnight — February 28, 2007 @ 10:45 am

  2. I sometime think I’m delusional. Which hopefully means that I’m not :)

    Comment by Mick West — February 28, 2007 @ 11:27 am

  3. Wow, I am amazed at how well you nailed this. Those are almost exactly the steps I went through, including the “blob of worthless code” phase. I feel that I have managed to get to the Pragmatic level, and it is refreshing to read and realize that others have a hard time too. I was really just starting to feel stupid. Things are no where near as black and white as I originally thought, and having no true ‘right’ way to do something is definitely frustrating. I’m just glad that obviously, I’m not the only one. Great article =)

    Comment by Andy Fulks — March 8, 2007 @ 7:55 pm

  4. These days, I see more and more young programmers jump in at the Delusional stage, assuming great powers before they’ve even typed a line of code. MMOs can’t be that difficult, after all!

    Comment by Ben Sizer — March 14, 2007 @ 3:13 am

  5. Being at the delusion stage, those programmers will generally assume they are “probably about stage six or seven”, especially if they have been “programming” for a few years. Tragedy will befall them, and they shall move on eventually.

    Comment by Mick West — April 2, 2007 @ 3:10 pm

  6. My Selflearned Programming experience was like finding a true god or belief for final satisfaction of my soul.

    Being a self learned programmer, currently 21, I started by journey when I was 15. I had no teachers and never went to computer science college. So I had to learn a lot of things since now THE HARD WAY. To increase the pain, for start I had a OO advocating C++ book…

    Finally when I got “internet” it really helped me a lot.

    I staretd to learn more about “paradigms & languages”, in my search for “the true paradigm & language” I lurked through every other website of languages and paradigms. I had a view that its the language & supported paradigms that can solve my problems. I was amazed by OCaml, D, Java, C#, Lisp etc (but really hated pascal and BASIC).

    Then came The Design Patterns, The Software Architecuring, The Process & The Methodology. In start everything started to fit like a jigsaw puzzle, It all made sense. I thought finally my soul has found the destination;

    Then I started studing lots of books and papers and spend more time in deep thinking before working on project. Most of the times I failed to even start the project and as I was exhausted in the design phase.

    After years of mostly failures, non-started, incomplete projects in my past. My ambition for the Ultimate Thruth has stalled.

    However the transition from Delusional was “extreemly horiffying”. Generally failures are more helpfull in this transition; The more beating you take the more you learn.

    Comment by ahmed ali — April 6, 2007 @ 3:16 am

  7. Maybe stage 0 to 2 can be replaced with delusional, in some cases (MMORPG wannabees).

    Being a self-learned programmer myself, I have went through alot of pain to get where I am today. I’ve also gone through a bit of conservative stage, where I thought “why would I want to learn OO programming? I’m doing fine with my functions and global variables.”. It could have been the delusional stage though.

    Comment by Zoulz — April 24, 2007 @ 4:30 am

  8. Part of being delusion is feeling you have learned everything you would need to know in order to program anything you wanted.

    I felt that way back in about 1988. But you eventually realize there is more to learn, and then you realize you will never stop learning.

    Comment by Mick West — April 24, 2007 @ 9:44 am

  9. Brilliant!

    Comment by Phred — May 1, 2007 @ 12:38 pm

  10. “Back in 1988?” How quaint. :-)

    They say that at first, “you don’t know what you don’t know.”

    Then, “you do know what you don’t know.” You feel like a fraud.

    Then, “you don’t know what you do know.” You don’t understand why they’re paying you money.

    But stop and think about it this way: most of the time, no one knows or cares “how” it works. (You do, of course, but most people don’t .. because you do, and for that they are very grateful.) What matters to them is that the system you built not only does the job but does it very well. What matters to them is .. the job that it does.

    Comment by Mike Robinson — June 8, 2007 @ 4:07 am

  11. True, but it’s not about “them”, it’s about “you” – the programmer.

    Comment by Mick West — June 8, 2007 @ 11:05 am

  12. Im an aspiring game programmer.

    i want to know what you mean by “you never stop learning”.Is that to say that the programming itself is upgrading constantly or what?

    also, is it me or are game-industry articles in general always bleak and uninspiring, like their entire purpose is to shoot down hopeful, and eager (albeit foolish) industry youth. i dunno i really enjoy programming, im 19 and ive just begun my journey to obtaining a BS in comp sci even though i plan to study it on my own until im able to goto school maybe in a year.I would appreciate any crucial advice i might need that would help, thanks.

    Comment by juan — August 6, 2007 @ 10:12 pm

  13. You never stop learning in part because the field is constantly expanding, but also because it’s so big to start off with.

    The bleakness in game-industry articles comes from the natural tendency of a software project to fail, combined with the market pressure of getting a game to market on time, leading to inevitable crunch towards the end of the project. This can be avoided with good management and some luck – but generally it is not, meaning there is often a lot of unhappy people in the industry, especially as people age and have families.

    When you are young though, crunch can actually seem like fun (depending on who is around you). Especially if it’s your own project.

    If you want to get into game programming, the best way is to program a game. You should be able to make several games while doing your BS. Start out duplicating some simple game, then have a look at the indy game scene.

    http://www.igf.com/02finalists.html

    Comment by Mick West — August 7, 2007 @ 7:20 am

  14. So when a title fails to ship what happens to the development team? do they lose a bonus or are they all fired?

    what i imagine the typical work day as would be in an office type envioronment but not so bland maybe with some arcade in the corner and assorted decorations in every work area. Working with the artists or whoever to formulate how a vison (the artist) will implement into code.I imagine it to be a cushy job maybe being a lead and promoting the title at events worldwide (lawl).

    I wonder if this was pretty accurate.

    Comment by juan — August 7, 2007 @ 11:21 am

  15. It varies a lot by the nature of the company, and the reasons for the project failing. Sometimes a lot of people will be fired, sometimes they all just move on to something new.

    The typical work day of a game programmers is generally fairly solitary, grinding away implementing features and fixing bugs. You don’t work with artists, maybe with designers. It takes a few years to become a lead. It’s not a cushy job, and you really have to enjoy that kind of thing for it to be worthwhile.

    Comment by Mick West — August 7, 2007 @ 11:43 am

  16. I see,

    well another thing i wonder is what kind of salary do programmers enjoy? Do programmers specialize in different areas (Graphics,UI, sound, AI,gameplay ect) and are payed differently depending on which it is?

    im not interested in making big money but id like to be comfortable. ive read that entry level programmers make around 50k/year which nearly doubles with enough experience.

    Comment by juan — August 7, 2007 @ 12:15 pm

  17. The average game programmer salary in 2006 was $80,886, according to game developer. Salary varies more based on experience than on specialty. Although in my experience, graphics and engine programmers tend to be slightly higher paid – but that may just because they need more experience.

    You should focus on doing what you enjoy most at this stage. If you get very good at something you really enjoy, you will make more money than if you follow something you enjoy less.

    Comment by Mick West — August 7, 2007 @ 12:35 pm

  18. You nailed it man. I believe I’ve made it to Transcendent. Unless of course I’m stuck on delusional!

    Comment by Chase Sechrist — August 10, 2007 @ 2:34 pm

  19. another question: i was listening to a podcast from bungie and they mentioned that most of their QA testers had BS in comp sci. Does that mean i need/should be do something extraordinary other than improve programming skills in order to get a job? is nailing a job difficult to do?

    at the moment im working to take care of a few things but which school would you recommend i attend when the time comes? would it be the same anywhere meaning i should study close to home?

    thanks alot.

    Comment by juan — August 12, 2007 @ 10:20 am

  20. sorry again but also but somtimes i hear about people doing consulting work as a programmer. Does that mean working independently?

    Comment by juan — August 12, 2007 @ 12:08 pm

  21. Testers with BS in CS – either did not do much programming in their own time, or they see testing as an entry level position. A BS in CS does not translate directly into game programming, and working as a tester is a good way of learning the ropes.

    I don’t know much about individual schools, but I’m sure they vary. If you really want to get into games, you should plan on doing some (fun) game projects on your own time. If being closer to home will help with this, then that’s a factor.

    There are obviously many factors to consider her though. Concentrate on what would make you happiest for now.

    Consulting work is where you are paid by the hour, usually for fairly short jobs. But it can be anything from having a discussion about the best way to do something, all the way up to basically being full time. You would not do that until you had significant experience, because nobody would hire a consultant with no experience.

    Comment by Mick West — August 12, 2007 @ 3:46 pm

  22. […] Link: The Seven Stages of the Programmer […]

    Pingback by Michael Battle - Work & Play » The 7 Stages of the Programmer - Flash and Actionscript Experiments! — January 10, 2009 @ 4:35 pm

  23. […] spent some more time googling game design and game development, until I came across this blog post, The Seven Stages of the Programmer, by Mick West.  This stage in particular caught my eye, simultaneously making me groan ( italics […]

    Pingback by Zombie Flambe » Blog Archive » 3 Lessons Learned in Noob Collaborative Game Development — April 23, 2009 @ 11:38 am

  24. You know you are Transcendent when you can work on others code the same as your own. You grok the yin and yang of it. Style matters not, language matters not, there is only the data and the algorithm.

    Comment by Doug — July 19, 2009 @ 7:28 am

  25. As a confirmed member of stage nine, I can say you have much to learn.

    Comment by Niner — July 19, 2009 @ 10:59 am

  26. Looks like TELCO stack
    From Logic point of view understanding of Level 1 is sufficient

    Comment by Dominique Rabeuf — July 19, 2009 @ 1:09 pm

  27. Horrendous bullshit

    Comment by Andy — July 19, 2009 @ 1:47 pm

  28. I’m definitely at stage 0 with every other commenter so far BTW.

    Comment by Andy — July 19, 2009 @ 1:48 pm

  29. I remain firmly on the delusional stage.

    Comment by Zed Shaw — July 19, 2009 @ 5:30 pm


  30. XD lmao… so true, so true..

    Comment by Brian — July 23, 2009 @ 11:51 am

  31. “After perhaps years of delusion, some tragedy will befall our programmer. Perhaps he will get a job”

    XD lmao… so true, so true..

    Comment by Brian — July 23, 2009 @ 11:52 am

RSS feed for comments on this post. TrackBack URL

Leave a comment

You must be logged in to post a comment.

Powered by WordPress