Whether it’s learning a new programming language, a new source control system, setting up a build server or the newest JavaScript framework, you’ll find yourself unproductive more often than not in the early stage of this process.

I’ve encountered this for the first time when I came from classic ASP (VBScript) and started to learn VB.NET. Coming from a scripting language, I couldn’t figure out what I needed to do to get something working. While I just needed an HelloWorld.asp page on a web server before, I now had to create 2 files (HelloWorld.aspx & HelloWorld.aspx.vb), compile my code (how??), make sure all *.dll’s were deployed to the web server,… At that time, none of it made sense to me and I dropped out several times since I couldn’t find a decent reason why I needed to jump through all this hoops compared to VBScript.

So, the canonical example of a learning curve (*)

Curve

Orange: you’re putting effort in this new thing but you have little success and you’re making little or no progress. You may find yourself wondering why someone made this stupid decision.

Green: you’re comfortable with this new thing and you’re most of the time productive with it. You’re happy with this new knowledge and motivated to learn more.

Yellow: you know everything there is to know so you’re knowledge is decelerating. You might get bored after a while.
That’s why I think it very important to support co-workers while they’re climbing the steep hill of the learning curve. I’ve learned that change will come more easily if they know they won’t have to battle that hill alone.

(*) In real life this curve will have some bumps where moments of success will go along with setbacks, like: “YES, got it, I rock! Fuck, why isn’t this working? What am I doing, thought I understood?!”