Programmers: Are you really as good as you think?

The only sure thing in life is that things do change. Change requires us to learn. You have probably seen this picture of a T (below) where the horizontal line is your basic knowledge of many areas and the vertical line is the depth of your knowledge in your specific area. Say you are a Python programmer – the horizontal line is your knowledge of CPU-s, RAM, Computers, People skills, marketing, teamwork, UI, server administration. The vertical line of the T is your skill in solving problems with Python.

People with T-shaped knowledge are of high value. They are experts in their specific field but still understand many fields enough to communicate with other experts. This would mean you understand enough computers to talk to your system admin and explain to them why you might need more RAM on the server.

However this notion of a person’s knowledge/learning is very limited.

So… Enter The Four Stages of Learning

  1. Unconscious Incompetence
  2. Conscious Incompetence
  3. Conscious Competence
  4. Unconscious Competence

Those sound hard to understand but they are not in reality.

The first stage – Unconscious Incompetence – is the place where you don’t know that you don’t know (something). For example suppose that there are 3 more planets in the solar system that we don’t know of yet for some weird reason. Our scientists have not discovered them yet. We don’t even suspect there might be 3 more planets. So we don’t know that we don’t know.

Another example can be that you are using a technology to do something. Say you are using some programming language. There is another programming language that you could do your work in. It might be much simpler to do your project in that language because it fits the purpose much better. However you have not heard of that language. You don’t know that you don’t know that language. You are totally oblivious to its existence.

If you consider the T-shaped knowledge idea. Here the horizontal line does not include that area of knowledge at all. You don’t even have shallow knowledge of that domain.

The second stage is: Conscious Incompetence.

In this stage you know some area of knowledge or a skill exists but you have no idea how to perform that skill or what this area of knowledge holds. For example if you are a Python programmer, there is a a good chance you have pretty much no knowledge of astrophysics, except that you have heard of it.

So the question mark from the picture above will turn into an X. You know that field exists but you don’t really know much at all in that area.

Third stage: Conscious Competence.

Here comes the true learning experience. For some reason you are geeky enough and decide to take on astrophysics. Great! But it’s hard to grasp even when you are doing your best. Year after year. At some point you start being decently good at calculating the orbits and mass of planets or whatever astrophysics deals with. (From the last sentence you can easily conclude I am at stage two in learning astrophysics. I know it exists but not really much more. Nowhere near the you, who is already at stage three 🙂 )

Anyway. Stage three takes a lot of effort. Each time you perform the skill you need to concentrate and use willpower to go through it.

Fourth stage: Unconscious Competence

This is where true masters live. At that stage you don’t need to recall the equations to calculate a position of a planet’s orbit. You are so good that you don’t even notice how good you are because it takes pretty much no effort at all.

So here comes another thing about learning…

Have you heard of the Dunning–Kruger effect?

You probably have not. Even if you have… Here is a pretty picture of it


image source

Let me translate that chart for you. It says: “You have no idea how good you are. In the good way… and in the bad way too.”

On the vertical axis is your confidence level. On the horizontal axis is your experience and actual skill in the area. So what can easily be seen that at the very beginning you have zero experience. You have also zero confidence that you can perform the skill. Behold, a few hours/days/weeks/months later you can do some stuff in that new area of learning. You start rapidly gaining confidence.

At some point you are at your peak in confidence without pretty much any experience. How arrogant you are! But wait…

Surprise, surprise! Soon enough you realize that you are not even near the level you thought you are at! Obstacles get in the way, you meet other people in the area who are much better than you so your confidence drops and keeps dropping. You are still getting more experience but your confidence is low.

The most surprising thing is that when you are at the middle level of experience and skill your confidence is at it’s lowest. So if you overlay a simple bell curve with the Dunning-Krueger effect line you see that the lowest confidence is exactly in the middle of the bell curve. (If you are not familiar with bell curves – the idea is that the most people are in the middle, so if we speek of programmers – most programmers are probably in the middle of the programming knowledge spectrum)

This means that you might be an average programmer but you think you are way below average. If you have a few years of experience this is probably the case.


(excuse my photoshop skills – again, level two learning at learning it 🙂

In conclusion… if you are a seasoned programmer or a seasoned whatever-you-are: maybe, just maybe, you should have more confidence and see yourself for what your real skills are! 🙂