The terms “learning curve” and “steep learning curve” are often talked and written in Computer Science. At the time I could not understand deeply those terms, every time I found them I felt like I was missing something that all programmers except me already knew. After, I realised that there are a lot of people that misused them in discussions and forum and this fact created a clutter. In this article I’ll explain what these terms means and how they can be applied to IT.
The term “learning curve” has been created by Hermann Ebbinghaus, a German psychologist, during his research on memory and memorization at the end of 1800. In detail, he talked about learning curve in his work called Memory: A Contribution to Experimental Psychology.
The learning curve is a concept that measures how an average person can learn something or achieve a task. This fact implies that some people may learn faster or slower than others depending on their different backgrounds and attitudes. In the IT field, the term usually refers to the ability to learn and master a new technology or a programming language. This concept leads to a graphical representation that has Time and Proficiency on the X and Y axes respectively. As I said before, the concept is often misused. Infact, since in most cases a steep line means something that is hard, many people believe that a steep learning curve means that the technology or the programming language is more difficult to learn. This is wrong. If you see a graph, you’ll soon understand that a steep curve means that a beginner can gain knowledge quickly and that his required resource investment is initially low. How quickly may vary from minutes to days or even months; it really depends on the topic taken into account. However, the point here is to understand that a steep learning curve means that the time-to-learn is restricted and the person involved can quickly use his acquired knowledge.
Just to be less abstract, I’ll show you an example which uses the famous game Tic-Tac-Toe. All of you have played this game at least once in life and, more probably than not, most of you learned to play it during the childhood. This fact already says a lot about what is the learning curve of this game. However, to keep it simple, I have fixed the stages of this game in just three steps: learn rules, play like a beginner and play like a pro. In conclusion, the graph that represents the learning curve resembles to the following.
From another point of view, the learning curve can be seen as the representation of the initial difficulty of learning something and how many notions are to be learned after the beginning. To understand this sentence, take into account two Windows visual editor: Notepad and Notepad++. The first is very easy to understand and master. However, once you have learned the basics, there is nothing more you can do with it. Conversely, Notepad++ is a little bit more complicated to start with but it has a lot of features you have to learn before you can really master it after starting to use it.
In general, the learning curve can be summarized by the following image.
The Boston Consulting Group conducted some empirical studies and, in their publication Competitive cost dynamics: the experience curve (Hax, Arnoldo C.; Majluf, Nicolas S. – October 1982) asserted, among other interesting conclusions, that
the time required to perform a task decreases as the task is repeated. What seems to come out from this statement is that an experienced developer can write more code than a beginner due to his experience and his repeated tasks. Although I think this is true, I just look at the fact that a pro doesn’t repeatedly search for functions that fit his needs or read about a function signature to look at the accepted parameters; I think the main lesson that could be extracted is that an experienced developer can write better code than the beginner. With the term better, I mean both with less bugs and that can achieve the same goal with fewer lines of code.
Another interesting discussion is about the learning curve of programming languages. Each of us, for different reasons, has dealt with learning a new programming language and felt that there are some languages more “easy” to learn than others. That was not just a feeling, actually they are easier. However, chances there are that it was not easier itself but you felt it because you were really interested in and motivated and this influenced your learning performance. In the following list I’ll show some of the most famous programming languages and their learning curve.
- PHP: It has a very steep curve. In few time a programmer is able to write code and with little more study he’s able to build a medium-level website. It’s very recommended for those who want to start programming for the web. Its learning curve is one of the main reasons that explains why PHP has ~79% market share.
- C++: it has a flat learning curve. The main “problem” of C++ is that it has both high-level abstraction mechanisms such as Classes and Interfaces and low-level memory management mechanisms such as pointers. So, it isn’t easy to master it.
- Java: It has a medium curve at the beginning but it becomes more flat as the programmer advances in topics. A programmer can start writing a basic program in few times also because, unlike C++, he hasn’t managed the memory himself. However, to master the language he has to learn a lot of stuff like Generics and Reflection.
- C#: This language has, more or less, the same learning curve of Java since they have a lot in common. However, one advantage of C# is in its main IDE, Visual Studio. The latter makes the learning curve for C# a little more steep because it provides great features to the programmer and allows him to write the code faster.
Throughout this article you learned what is a learning curve and what parameters determine it. Learning curve theory is present in every task of our life, software development too. Remember that those curves are calculated on the average user so you can be faster or slower depending on your smartness, background or willingness. Moreover, I showed which are the misconceptions about a steep learning curve and how they apply to IT, especially in learning a new programming language.