Why it is hard for developers to learn another programming language and how a professional training can help - Part I
Being a major training provider in the Rust programming language, we are regularly confronted with the fact that experienced programmers find Rust a language hard to learn. As it turns out, research suggests that this is not only the case for Rust, but a general problem: If you already know one programming language, learning another comes with its own set of challenges.
In this blogpost I will discuss the findings of the article Here We Go Again: Why is it difficult for Developers to Learn Another Programming Language? in the context of how a professional training can help to overcome the issues the authors raise.
The article identified three major sources of problems that make switching to a new programming language difficult:
1. Interference when learning a new language
When learning something new, we try to connect the new information to similar information that we already have. Depending on how this internal process is done, the old information can help to integrate the new information, but it can also interfere with learning something new. This can be because the similarities are too superficial, or the new information contradicts the old information. While trying to connect new information to things we already know is not wrong, this process has to be done very consciously to avoid the negative impact it can have.
2. Programmers apply opportunistic learning strategies and learn on their own.
"Just in time learning" is described as a learning strategy that is based on a need to know basis. Instead of learning a new language systematically from the ground up with a broad horizon of applications in mind, the focus is often on a narrow skillset required to get a very specific task done. Programmers work alone and use resources that are available freely, such as documentation or tutorials.
3. Breaking of old habits and shifting mindsets becomes more difficult.
Learning a new language requires a mind shift, getting familiar with new tooling, possibly building a new mental model of what programming looks like in the new language. Using your old mental model as a sole guide to learning a new language can under circumstances make it very hard to get into a new mental model, which is necessary to be successful in the new language.
How can a professional training help to facilitate the mind shifts and avoid blocking interference?
There is a connection
These three main problems are not completely independent from each other. Interference stems from the intuitive learning process of connecting new information to similar information that we are already familiar with. Neither is this process in itself wrong, nor can it ever be completely avoided.
But when learning alone, a learner has only their own perspective on the subject, and this perspective is through the lens of their previously gained mental model. It takes a great deal of self awareness and the ability to question oneself, one's learning process and mental model to not let this become a blocker and make things unnecessary difficult.
The solution: Encouraging Dialogue
We work in smaller groups of 6-12 participants with at least one trainer. The group size itself makes asking questions to the trainers or other participants easy, even in an online environment.
But our didactic concept goes beyond that. From a formerly very lecture heavy training we have moved on to including more and more exercises and other methods that encourage more active participation, such as quizzes, mini-exercises and model-experiments.
The ability to ask questions to the trainer or to work on the exercises in the group is vital for developing the mental model and to minimize interference while learning!
Working on exercises spawns more questions than a lecture does, as more people are more actively involved with the topic at hand. Every individual benefits from every single question that is asked in the room!
On every new day, we provide quizzes for repetition and to encourage dialogue. This not only allows the participants to assess their mental model and develop it further, it also allows to practice the correct usage of vocabulary that is associated with the Rust programming language.
A common problem with the usage of vocabulary are false friends: The same words that have different meanings in different programming languages, for example reference in C++ is not the same as a reference in Rust!
The correct usage of words associated with a programming language is vital for further research and team work after completing the training.
The dialogue between participants and the trainer is crucial for developing the mental model of a new programming language. A professional training that includes varying teaching methods that encourage dialogue provides a short cut compared to opportunistic learning methods of individuals.