IT IS HERE! Get Smashing Node.JS on Amazon Kindle today!
Show Posts
← Back to homepage

One of the basic pillars of the study of human psychology is the analysis of the subconscious and conscious mind. Sigmund Freud was one of the first to clearly identify and characterize the ‘areas’ where our psychic energy flows. During the first part of his notable life he stated that these were the ‘subconscious’, ‘preconscious’ and ‘conscious’ mind.

If we wanted to get an idea of how each of them is involved in our ideas, feelings, thoughts, decisions and motivation (which are key in our daily and professional lives), we should picture ourselves as an iceberg. The tip of the iceberg, the only part we see from the surface, is the conscious mind. It’s logical, organized, and we can control it, but still small. The vast and voluminous underlying mass is the unconscious mind. It’s disorganized, illogical, irrational, but defining in how we act.

Modern psychology has attempted to classify how good we are at a certain skill by observing how deep it perforates that iceberg. It thus describes four stages of competence an individual can achieve. In this article I’ll try to apply this simple scheme to the skill we practice everyday: programming.

Stage 1: Unconscious incompetence

John is a young web developer. He used to be a law student, but he thought that wasn’t where the money’s at, so in the blink of an eye he made the switch. He was always good at fixing his buddies computers, so he figured it would be easy. He quickly looked up a few places (near his home, naturally) where he could learn the job. After six months he claims to be a Web Development expert, and his resume lists every programming language, software application and platform known to man.

John, in reality, is a ruthless copypaster. He thinks succeeding at displaying an alert window is all there’s to Javascript. PHP? Piece of cake: he installed WordPress. Linux? He booted an Ubuntu LiveCD, he could surely set up a cluster of load-balanced Apache web servers. His knowledge knows no frontiers.

The problem here is that John is unaware of all he could learn, so he simply doesn’t. He’s in a bubble that no one at the online forums or mailing lists he usually visits can burst, when they try to gently explain the root of his problems is his superficial knowledge. And sadly, his hourly rate is bigger than yours and mine combined.

John is unconsciously incompetent.

Stage 2: Conscious incompetence

Mark is a math teacher. He works at a small downtown university which he wishes had at least five times the resources it currently has. He believes they’re a few steps back from other institutions when it comes to technology, so he decides to get hands to work. He wants to build an online platform to share the material of the courses with the community.

Mark has a naturally logical mind. He knows that in order to execute that task he’ll need to do his research, get information. His quest starts in Wikipedia, but at the end of a long browsing session, he’s learned that a few groups of people around the world offer Open Source solutions to his problem.

He picks the project he thinks best suits his needs. He proceeds to read the documentation and tutorials he finds on the website, and finally downloads the program. All his excitement fades away when he sees that ‘Database connection error’ issue. He tries and tries, even triple-checks his steps, to no avail. Mark is not irritated, he knows it’s not his field of expertise.

He heads to the mailing list and describes his problem with all the exactitude his knowledge allows, which is little. He warns everyone that he’s not exactly sure of what he’s doing, so he’ll welcome more documentation to read, or any tips people can spare. He won’t have to wait long for a solution, because he’s doing the right thing.

Mark is consciously incompetent.

Stage 3: Conscious competence

It’s been two years since Adrian picked up his first HTML book. It clearly has been a one-way ride, for all Adrian thinks about every day is how to improve at what he loves. A few months ago he picked up his first freelance jobs in a website, which he executes passionately despite how low the pay and how basic the task is, even to him.

Of one thing he’s convinced: the best way to learn is to persevere, try and fail, and try again. He always researches how to best execute a task, since it doesn’t come naturally to him. He has to try hard to produce secure code, so he audits it time after time. He fixes it time after time.

The other day he wrote 30 or 40 lines of code for a personal project of his. He can’t help but feel a little disappointed when, browsing the net a few days later, he sees an effortless and much more elegant execution in half as many lines. He wonders when he’ll be able to write solutions of that quality on his own, straightforwardly. However, after a bit of thought, he’s searching his files. He knows he has to rewrite that piece or he won’t sleep well that night. He won’t be copypasting it.

Adrian’s on his way to become an excellent professional, but he’s not giving himself titles, he can wait.
Adrian is consciously competent.

Stage 4: Unconscious competence

This is the ultimate stage of programming mastery. It’s not only the result of accumulated knowledge, but the result of a set of logic rules that have been slowly imprinted on the individual’s mind through the years.

We know we’re dealing with such a person when one cannot help but admire the ease with which extremely complex solutions are provided. This type of programmer seems to smell, not think, his way to a solution.

Writing optimized, maintainable and secure code, applying design patterns and picking the right set of tools he’ll be working with come naturally. This guy can work with ease on multiple languages and platforms.

Closing thoughts

After reading these examples I hope you’re as convinced as me of the validity of applying this model of thought to this particular field.

It’s worth mentioning that some authors suggest a fifth stage, which is reflective competence, described as the ability to teach and convey that what was learned and now is known unconsciously. We may see this in talented individuals who can teach and explain (even in front of crowds) as an apparent second-nature (John Resig quickly comes to mind).

You’re welcome to share your thoughts by leaving a comment below.


Rexxars said

I just wanted to compliment you on a very well written article. Good read!

    Zach Gambino said

    I laughed when I read the first stage. I think we’ve all worked with a few of those in stage 1.
    What comes to mind when I read that is how dangerous a little knowledge can really be.

    Love the new design btw. Kudos.

nfq said

Great post man, starting to enjoy your new site more and more!

Absolutely love it :)

dan said

Indeed… I’ve often theorized that there comes a point when everyone learns a little, and they develop a false sense of self righteous omnipotence. After learning just a little more they understand how deep it all really goes and the bottom drops out.

Thats when the learning process expands from the pedagogy of copying/pasting to over arching theoretical understanding of well implemented code.

Most web developers I see coming out of step 1 seem to have “learner” companies sometimes cringing when they think of the code they’ve wrtten thats been in production.

Adam Moore said

I feel like I fit in to all the categories (even #5), which probably means I’m the first one, but it may be a product of surrounding myself with both vastly more experienced and vastly less experienced programmers everyday. I have opportunity to look like a total noob, then teach be the wise teacher to my peers.

I think of myself as a beginner, I am very guilt of copy-pasty habits. I am eager to learn more, but I feel like there is too broad of a field and I need to find a niche first. I always try things my own way before finding it online.

Excellent Read

    Logi said

    That sounds like step 2 going to step 3 to me. You’re not the guy who knows nothing but thinks he knows it all, and you’re not the guy who just instinctively knows what to do with each particular problem. You’re somewhere between the other two.

    Matt said

    I think it just means you have multiple skills with multiple levels. In HTML I’m a 4 (but no one cares), in Perl I’m a 2 but in assembly I’m a 1 because I don’t even know what I don’t know.

george said

interesting ,,,,,,
am reading this n thinking to myself …

G O O D ************** READ

Scott Brady said

CRM wants their lesson back.

Naproxen said

You forgot the fifth stage: Unconscious Stubbornness

You see this a lot in “experienced” developers. They refuse to learn about new platforms and constantly think of new things in terms of old. They map new concepts to what they know and only learn as much about the new as they need to map to the old.

A concrete example would be former C++ programmers trying to apply C++ habits to C#. Without getting into a religious war about languages, that’s usually a bad idea in C#. I’ve seen horror shows of people byte shifting and doing other byte level manipulation just so they can save on the use of an integer.

If you’re moving to a new platform, language, or framework, try to be open minded and give up your own concepts about what your already know. I’m sure a ton of us have made this mistake before.

As my boss once remarked “Experience can become a liability”. To stay active and good in the field, you always have to keep an open mind. I don’t think anyone really reach a state of competence. If you think you’re there, think again and see what else is out there.

Borat said

Very nice, I like!

Cracker said

You’re an idiot. Go hang yourself.

Matt said

How the Fvck do I get out of stage #2?

BRB, awaiting replies to my inflammatory comments on Digg & 4Chan.

Ripper said

Cracker’s got it. You’re an idiot. Living in the biggest bubble of them all. To think you wasted time masturbating through this article. HTML and PHP programming? That’s an oxymoron. HTML and PHP have to run on computers and you can’t write the code to make the computers themselves work. You’re a jerk-off. Go get a job, stop playing chicken hawk online with all these wannabes.

    seventoes said

    Can someone interpret this comment for me? I can’t make sense of it…

    dbg said

    i think he means to say that html and php are not languages that really have much to do with running the machinery of a computer. they aren’t even compiled, but rather are just interpreted by yet another program that somebody else wrote (a web browser for html, a server OS for php).

    its a rather ingracious comment but there’s a point to it. a more fully trained computer scientist might be able to write something in assembly, or if not, at least write some applications in a more powerful language such as C++.

    Tom said

    It’s mostly gibberish, but the essence of the rest is: “Oh doggonit, I tried to troll as Cracker before, but y’all found me out, so now I’m being implausibly clever by trying again but *under a different name(!)*.”

    Tom said


Brian said

There’s another stage where most come to a screeching stop – blissful incompetence…

Mike said

Take a look at the dreyfus scale. It’s pretty much what you’ve described except on a more generalized level (and has 5 steps).

    If you look for a book that puts the Dreyfus model in relation to programming, checkout “Pragmatic Thinking and Learning” by Andy Hunt (yeah, the one of Pragmatic Programmer fame).

Armand said

I think I started the career without the first stage, but the second stage is really frustrating.
it’s exactly the same stages to many other professionals and sports. I know this because my kendo teacher says pretty much the same thing and claim the same stages exist, but they believe it’s never possible to reach the ultimate perfection or competence, only competence in trying to reach it.

Great article. Enjoyed reading it

“Hello World”
Change that to “Hello Suckers!”

MB said

Stage 1: Procedural Code
Stage 2: Objects? I can use them, but I just don’t get when or how to create one.
Stage 3: Ah ha! Objects! Encapsulation! Polymorphism!
Stage 4: Design Patterns

That seems to be how I judge programmers around me and their experience level. If they think objects are stupid and see no use … goto stage 1, do not pass go, don’t collect $200.

    Though I don’t think I’d ever go so far as to say that objects are stupid, there’s nothing wrong with not using objects in some circumstances. Be careful you don’t find yourself too far on the OO bandwagon else you may never realize why the OO approach is an improvement in certain circumstances.

    Great post, you could definitely post the 5th stage on there!

me said

1. html programmer
2. php programmer
3. js programmer (maybe c++ lives here too)
4. smalltalk programmer (possibly ruby programmer, jury is out)
5. lisp (1958): programmer

john said

My resemblence to stage 3 is eery!

Joe Blow said

An enjoyable read. Thanks

Bryce said

“This type of programmer seems to smell”

But it’s a bit impolite to mention it.

cptHotkeys said

Good article.
I think I not long ago left stage 1, Dan is right, once you get a little more knowledge you realize how deep it goes and that your knowledge is totally superficial. I’m sure I have left stage 2, if not I must be close…

Rone di Kristu said

This is a wonderful essay. I second your article and the voice with which it is written.

It kinda reminds me of my 1st programming language I learned, machine code on my Commodore 64 back in the 80th. I still know and feel how to code. Every now and then I get back to a C64 emulator and code a little. At first I was astonished to see that I am still able to kick some serious butt in the coding world while writing very decent code just by using my brain and no external coding reference at all.

Maybe this also shows true mastery. Top notch experts do not really get rusty even after being absent for many years while amateurs and intermediates need to re-learn their once established wisdom. They know what they do not know anymore while true experts are only sleeping but not forgetting. Programming language are a way of expression for them.

For n00bs coding means fixing a specific problem while experts enjoy the language itself. 1kb contest or 100 lines of code proof this. There is no other sense in doing that then fun itself.

ramon sacnaja said

This is a very well-written article if you ask me. It draws a fine line
among the different stages of programming mastery. The different
profiles and personality types of programmers are described well
enough to fully understand the implications and consequences of such
varying subconscious awareness.

Keep up the good job!

aljuk said


I think you mean “persevere”.

    Bored said

    “I think you mean “persevere”.

    I think you mean, “I have nothing better to do than spell check other people’s content as I have nothing creative to offer the world.”

vedavis said

Those flamers (e.g. Ripper) are obviously ego-centric a-holes who make it tough for people to work with them just to show how good they are; they are a dying breed. I belong to the group that has grown into selfless masters that would rather help someone else succeed.

Dave said

This can be summarised very quickly but with an added step of Apathy ! See how it forms a nice cycle

1) Unconsciously Incompetent – You cant know what you don’t know
2) Consciously Incompetent – You know what you cant do but still cant do it.
3) Consciously Competent – you have learnt what to do step by step through time and repetition
4) Unconsciously Competent – It becomes second nature like walking
5) Time and Apathy – you become lazy and apathetic to the task eventually ending up doing something completely different even though you think you are doing it right which takes you right back to unconsciously incompetent – you don’t know you are doing it wrong.

I use this method time and time again during training sessions but somehow after a few weeks they all end up at stage 5 and we have to start again :)

Neil said

The article is basically correct, I mostly agree with these classifications.

However, the article is unfinished. You don’t do anything with this model you’ve created.

You need to actually put some value in it by offering some advice to developers on how to recognise which stage they are at, and how to move from one stage to the next.

Or give employers some advice on how to recognize and manage the different types of developer.

Or do both, whatever. But you need to make a part 2 to this cos on it’s own it feels unfinished.

Moved on said

Let me tell you what happens after stage 4. You move on.

Once you easily master programming, you realize that this skill is simply not very respected in this world. You’re still treated like a commodity. You see for 99.9% of the people its not a creative art form anymore, its just line of code(or features)/hour.

Billy said

Programming languages, concepts, and all that good stuff are a means to an end.

They are TOOLS.

IMHO, this article is written in reverse. I don’t study a language until I am competent. I don’t read through a book on C++ cover to cover, read up on all the hacks, workarounds, get my degree, whatever and only then become “competent” …

I am presented with the problem. The solution is conceptualized. If necessary, tools are researched and selected. If necessary, knowledge is acquired. The solution is then written. Doing this repeatedly expands my knowledge and I can then go back and make optimizations. And so continues the endless journey to “competence” … ;)

    Guillermo Rauch said

    Reasoning like this is very welcome, unlike some of the ‘trolling’ comments. The article as well is also an idea, a conceptual scheme, a way of looking at things. It’s not meant to be definite nor absolute, and other points of view like yours are enriching to the subject.

    I might take this into a consideration, as well as others’ opinions, for a followup article sometime.

I agree about the teaching one. I try to teach with my code, write it in such a way as people of less experience could make sense of it rather than trying to be cute or clever by taking less lines of code but obfuscating it a bit more.

IE: var vM3_1s=[“jack,bill,sam”]; vs the more readable var myNameArray=new Array(); myNameArray[0]=”jack”;myNameArray[1]=”bill”;myNameArray[2]=”sam”;

Not only solving problems but always thinking of how your code will be reused, and who will come behind you to read it (possibly even you), is, to me, a sign of a seasoned coder. Of course, the best sign of a code guru is someone who doesnt talk down to anyone, and carefully considers and responds patiently to even the “dumbest” question, trying to extract or simply remind oneself of best practices.

Jamie said

I will say the only thing I do not agree with is pigeon-holing copy/pasting into a newb category. While I view myself as a proficient programming in stage 4 (I have my BS in CS), I find that often times others out there have dedicated far more time to solving a problem that may be a SMALL part of my current project. As such I will use their code (with credit of course) to make better use of my coding time. I merely view others code as “tools” that can be used in my code, all puzzled together to create a complex yet efficient piece of code. For example….I use fckeditor as a rich text editor for any CMS I am programming…..why reinvent the wheel?

    Guillermo Rauch said

    That’s of course not what I meant by copypasting… When I talk about copypasting it’s when the person does it and at the same time doesn’t know what the code is doing or understand its implications.

    It’s really part of being a great coder to make decisions like what components to reuse and what to write :)

Mark Johnson said

The problem with copy-pasting isn’t that the ideas aren’t yours, or that you don’t understand the solution. I use library functions in my daily work that i didn’t write, and i don’t know how they work. So do you–so does everybody.

Copying and pasting the first time isn’t the problem. it’s when you copy, paste, and hack that you get in trouble. The problem with copy-pasting is that it creates maintenance points, and almost always violates the DRY principle. And, of course, you always end up hacking both copies of what you copied and pasted, and end up creating a phylogenetic tree of unmaintainable code.

That’s why c/p/h is for noobs.

Aathif said

I bet that half of the developers (especially in the Indian cos.) fall in stage 1 (Unconcious Incompetence). It is really frustrating when they try to “prove” whatever code they’ve written is absolutely cool :( . I loved the article.

    sorna said

    I don’t think that developers from Indian cos fall in stage 1. I guess most of them fall in 3rd stage. I mean conscious competence. Me too loved this article.
    I don’t know why Aathif has such as Idea on developers from Indian companies…may be he is.

Owen said

Enjoyed this article….thank you.

Good article, quite thought-provoking.

Perhaps it’s different for a purely back-end programmer in a given language, but as a full-cycle web developer, I’d be tempted to replace step 4 with an endless state of concious incompetence!

They say that the more you know, the more you realise how little you know – personally I don’t think this is more true anywhere than in the field of web development; there’s always something new to learn or more to learn on existing topics.

Hence the need for a specialism – your knowledge can be narrow and deep rather than broad and shallow. I think that’s something everyone should be awayre of from stage 1.


    Guillermo Rauch said

    Interesting observation. It’s important to consider the dynamism of the field to assert one’s competence.

I’ve been in and out of programming for about 15-17 years (I’m 32 now) and even now, I’m at stage 3. The jump from 3 to 4 is massive experience and working only on your craft, so I’m not sure I’d ever hit that plateau, but can always try.

I love the article, linked back to it from my blog. I’ll definitely spread this around to my programmer community!

LJ said

First, Good Article – got me thinking…

I think having considered the article in full, aren’t all master programmers in stages 3 & 4 at once?

Let’s take a simple example of web development. For an ecommerce site you would probably make use of some if not all of the following methodologies/languages Javascript, HTML, CSS, AJAX, PHP MySQL, Flash Actionscript. Then you have the infrastucture to consider. On top of all this there is new technology/ updated languages and web standards to take into account. And that could be one job, the next job, who knows what languages/technologies you will be faced with?

I think it is unlikely many people have the ability to retain all facts about those technologies at once. I think many people effortlessly write code, swapping languages as needed, but are conscious of the lack of knowledge and will only find success by perservering.

Doesn’t that suggest that 3 & 4 are actually part of the same stage?

mark spring said

I think this is a good write up. I find it humorous but truthful since I’ve walked through a few stages(not being a professor that doesn’t know much in a middle age in the wrong profession(hah)). BUT, i think if you are a master you’ve been on a forum/list saying SOMEBODY HELP ME since you think it’s right and you try to downplay yourself by saying..i don’t really know much, only to chuckle at that very same thing later. However, I know I’m far beyond Adrian but I certainly don’t sit at stage 4. Some people suggest a 5th stage while I think there are many people between 3 and 4, or I’m completely alone…

Aman said

I m a CS grad student and still somewhere between 2-3 though my resume boasts of all programming languages known to mankind :P

    Matthew Puglisi said

    I think you can credit yourself for a bit higher than that if you’re a grad student. Even I as an undergrad feel that I’m a fairly solid 3. I’m not the most proficient coder because that comes with experience, however, with the concepts and process of code design I feel that I’m rather savvy.

Erich said

A few people describe themselves as in stage 4… Wouldn’t thinking you’re in stage 4 make you not in stage 4?

William said

I agree that there is a 5th stage that could be added to the concept, but I would not use ‘teaching’ and put it at the end. Teaching is something that ‘some’ people do naturally, and will do at almost any stage of their development. (ever listened to a newb teach a newb ? :> )

I would add the 5th stage between stage 3 and stage 4. I don’t know what to call it, but it seems that there are gaps is a ‘gaps’ in knowledge area of the system, where a developer ‘knows what they know’ and what they don’t know, they know how to figure it out (find out).

I also would not administer this system to an industry like ‘web development’. I think that allows you to run into issues. For example, you may be stage 4 in HTML, but stage 1 in PHP. Also, you may consider yourself a stage 4 in Web Development, but you are do not know how to use the full potential of CSS or JavaScript.

Just my 3 cents.

Daniel said

Excellent article.

Are they stages or states? Stage 1 & 2 people may well stay there- for different reasons of course.

Zach said

This post was very informative to me i would have to say i fit into stage 3 but cant wait to want to move to stage 4 it just shows though that i am at stage 3. Any how it was a nice read. I always want to learn more

Thanks for the informative post.
Just stumbled it.

Rob said

An interesting article and some interesting comments. I have seen and know people who are in all four stages. I think there is something missing at the top end. There are people who are quite a way from stage 4 but way past stage 3. Maybe it is just that the jump from 3 to 4 is large where as 1-2-3 is not *that* far.

gaster said

i would you for stages and i rearly appliciate for the tremanderous effort yuo put in to resource becouse thats agreat job,but i prefer always to lean more of what i do not know and thats why, i will go with stage four and i advise for the fifth stage cos its so educative.

Thomas said

I would like to think that I am a stage 2, but I am probably a 1.5. My million dollar question is:

1) Since a majority of the web is in a state of flux, what route should I take to move closer to step three? I have read 3-4 books about basic programming, but I am in awe of some of the projects that are produced even in my little town. Is there a recommended “amateur” syllabus that someone might recommend? I love working online and building sites, but I don’t want to waste my time reading a C++ book when projects like Joomlah and wordpress keep getting better and more idiot friendly. Any responses would be greatly appreciated :)

    Matt said


    The fact that you are interested and thirsting for more knowledge is already a great sign that you are well on your way to stage 3. After reading this article I couldn’t help but laugh because it made me reflect my own journey to becoming a “stage 4″ and how accurate some of the descriptions are.

    I have been doing web programming for the last 2 years professionally, and I would consider myself a solid stage 3 with a good view of 4 on the horizon. The most important thing I can share with you is that it’s not going to happen overnight. Just as the article explains, it’s all about experience. Programming is about solving the problems in front of you. Your solutions are almost never going to be the best possible one the first time around. Each project you complete you will start to notice more and more patterns and say to yourself, “Hey, I’ve seen this before. Last time I did x,y and z. This time I think I’m going to do it a little differently because…”. Eventually you’ll pick up a book about design patterns and realize that there are names to the solutions you’ve come up with by yourself. It’s pretty cool.

    Hope this helps with your million dollar question, Thomas. Have a good one.

BK said

What’s wrong with Copy-Paste? INTERNET knows everything~!

    Şahap Aşçı said

    so, you are at stage I

Joseph Ryan said

I notice there is not even a named example of the forth stage.

Many approach but quite reach perfection. Let’s keep trying though.

Thanks for the insightful read.

AVinash said

just awesome..

Andrew S. said

Thank you Guillermo
As a starting developer, i enjoyed this read, could you fellow readers please visit and rate my site. I created this ‘on my own’ using webx 5 evolution but feel like a cheat due to my inability to create a similar site on programs without as much ready done work such as dreamweaver or even something as basic as a text file. The height of my talent there is copy/ pasting codes and adding the occasional sentence, etc. Can any reader/ passing developer spare a few tips on how i could create a multi-language, appealing, website without need of such off-line programs, it would be very greatly appreciated, I sorely wish to rise above fellow commenter dans description to that dreamy level of being someone who is recognized for what he can do.

unfortunately the team i created this website for has failed in a competition for which one part was my poor website. Despite this, I am soldiering on with this website and hope to improve it or even start afresh. I am also considering constructing my own personal website, so the better armed I am going in, the better the finished product will be.

For Guillermo, could you possibly setup a ‘test’ to see where the readers mind sits? I hope to be ‘conscious-competent’ but am wholly unsure.

This seems related to the Dunning-Kruger effect and second-order incompetence. I’ve blogged about these topics and how they relate to programmers in my articles Mediocrity and Genius and On Learning. Some of your readers may be interested.

mrJey said

HTML, CSS and PHP i’m probally stage 3…

At least thats how I feel about it

With Javascript its still at stage 2

Genjo said

I think you have a small error:

He heads to the mailing list and describes his solution with all the exactitude his knowledge allows, which is little.

Did you not mean:

He heads to the mailing list and describes his *problem* with all the exactitude his knowledge allows, which is little.

    Guillermo Rauch said

    Heh, true. Thanks!

Bruno said

I consider myself a solid level 3, but lets be honest to ourselves,. all of us who work on web programming everyday reuse a lot of code. That can be considered copy-paste, right?

Enzo said

I remember my first breakout clone I was so confidant that it was just as good as any other. Today I would die if anyone I knew saw that crap. I was certainly stage 1. Learning recursion on my own changed my mind a lot. Thanks for the post.

Yaakov Relkin said

Hi, I’m 19 and I have been doing web programming for a little while now, with a huge passion for programming. I have read over 30 books on programming, including most of the Java Series and some C books (K&R of course). I consider myself a level 3.3 . I haven’t exactly had enough experience to set up distributed, load-balanced systems, but I am very comfortable with design patterns and code re-use. One thing i will stress is this: If you don’t have a PASSION for programming, then i wouldn’t bother going any further. Reason is, in programming you will encounter situations where you need to do the hard stuff, like debugging a corporate billing system. which i tell you, is not that fun………unless you have a true passion for it.

Thanks Guillermo for the wonderful post!
Happy coding!

Havvy said

This applies to any field of science….

davee said

How about this for a fifth stage: completely understands the application under development, the platforms and languages involved and knows how to find out those things that are unknown before he/she needs to know it.

I must add that I think that anyone who thinks that they are a 4 after 2 years are likely candidates for management. I’ve been a professional programmer for 32 years and have yet to see a truly competent programmer with less than 5 years on the job experience. There is a reason that the term ‘rookie mistake’ exists and programmers are no exception. There is just too much to learn to get to the of being competent. I know a lot of people think they are competent but it IS like any other true profession. It takes practice and lots of it. You have to come up against your own limitations to grow and you can’t do that without putting in the time. You would not expect competence from a 2 year med student or second year law student. Computer programming is at least as sophisticated as medicine or law. It’s a sad truth that most programmers ever make the five year mark, opting for management at the first opportunity. Look around you. How many 4s do you know? How long have they been programming?

I’ve found that I and a couple other programmers I know tend to regard our programmer “intuition” where we realize when we’re coding something out in a way that just isn’t quite the “right” way, without necessarily knowing what way that is (sort of smelling our way to the solution).

Great post, thanks.

Gidsnoips said

I’m the only one in this world. Can please someone join me in this life? Or maybe death…

    Infrawhite said

    No dude you’re late, that’s my seat. Feel free to join me though.

Marcus said

Although, as mentioned in the comments applicable to all sciences, nice to see a connection to the world of a programmer. Great post!


Юрий said

Спасибочки за информацию, буду использовать. :)

Travis said

I’m not really sure where I lie… but I’ve had my fair share of running into each of these 4 types. I like to think I’m decently competent, but by no means a master.

Svertikall said

Привет. Подскажите, как перевести блог с бесплатного хостинга, вот мой блог жизнь
Вроде как wordpress обязан легко двигаться на новую площадку, хотя у меня все время ошибки в базе данных. Я глянул там, но в php ничего не знаю как говорится и привлекать сторонних разработчиков программного обеспечения то же не хочется. Имеет возможность подскажите, как безболезненно перенести блог?

Привет. Возникла проблема – купил я электродрель на магазин ру
А она сломалась у меня в тот ведь день – гарантии практически никакой не дали. Просто почта пришла с коробкой, а там все на китайском. Прописал в торговый центр этот, дали ответ, что обращайтесь в сервис центр, но у меня ни документов на руках нет, ничего. Как можно приструнить данный онлайн магазин? Есть ли некие компетентные органы, что писать. Куда писать, кому писать. Сделал ошибку, да, нужно было в торговом центре нормальном купить, но нужной мне модели просто не было, да и дешевле в интернет-магазине. А вот и уже сижу у разбитого корыта. Подскажите, что делать.

Mwa said

Stage 1 is spot on in my case. I’m actually a law graduate, closely fitting your profile.

However, your article may be discouraging for anyone who dares to move on to the next best thing (in this case, programming) – not a ‘bad’ or ‘good’ thing in itself.
Since you’re writing about ‘stages’, it’d be worth better highlighting the fact that all those stages are part of one’s personal evolution. We do, typically, start with a fair share of “incompetence”. As we learn stuff and have various experiences, we tend (well, at least some of us) to progressively reduce that incompetence, stepping further in your paradigm of programming competence stages.

Right now, I’m at Stage 1. Reading various stuff about PHP/MySQL, design patterns, OOP, database design, toying with stuff like WordPress, MediaWiki, OpenGoo etc., trying to learn as much as I can. All these while dreaming about and conceiving step-by-step my own HR management software, that would supposedly bring more cash into my pockets. I happen to have a clue about how terrifyingly huge is this world I’m stepping in, but at least for now my naivete rules.

Nice article, though.

hosterzru said

I am really empress with your post review.It’s really awesome idea to share the thoughts you like.

matovnet said

Занятно-занятно, нигде раньше на такое не натыкался

cauna said

Though I haven’t been blogging much successfully.. but to be honest, what I learned from blogging is Content is King, Custom Looking Template is sure the Queen ! Your Unique Looks (Template & Logo) makes your blog seperate, different and memorable plus brandable. Then it comes to your content, depending how well and good you provide content. Visitors stay or leave ! :)

    Guillermo Rauch said

    Thanks for the kind words. My theme will be open source *very* shortly, so stay tuned!

Attitude is no substitute for competence. The basic skills as well as programming skills are required .

Your thoughts?

About Guillermo Rauch:

CTO and co-founder of LearnBoost / Cloudup (acquired by Automattic in 2013). Argentine living in SF.