Software developers are constantly learning new languages, frameworks, tools, and techniques. It can be challenging to decide which topic to learn, estimate our competence level, prevent becoming overwhelmed, and keep our learning effective.
Tav Herzlich will give a talk about learning for software developers at NDC Oslo 2023. This conference is held May 22-26 in Oslo, Norway.
According to Herzlich, the AI revolution that we’re going through is going to accelerate the rate of change in the industry. This is expected to make learning and adapting to new circumstances an even more important skill.
Challenges software developers face when trying to learn new things are figuring out which topics are actually worth our time and estimating our true level of competence.
To make better decisions on what to learn, Herzlich points out that theoretical concepts stick with us way longer than tools:
Every tool we will encounter is based on deeper patterns. For example, spending time on learning about relational databases will make it much easier to learn how to work popular tools such as: PostgreSQL, SQLite, MySQL, etc…
Herzlich suggests using the "Dreyfus model" for estimating your level of competence:
It’s a model that pinpoints what makes one competent at a certain topic by asking questions like "How much can you keep focus on what matters?" or "How strictly do I need to follow well defined rules to complete a task?".
For better learning, Herzlich suggests breaking down our learning to realistically sized phases, and allowing ourselves to repeat the same topic several times to really get to experience it properly.
InfoQ interviewed Tav Herzlich about learning.
InfoQ: What does your philosophy on learning look like?
Tav Herzlich: The same as the philosophy I try to follow around any other area of life: being aware of my own limitations as a human being. When we’re aware of our weaknesses, we become less frustrated, more eager to learn from others and realise that the only person we can compare ourselves to is who we were a week ago.
InfoQ: How can developers identify their level of knowledge of a topic or technology?
Herzlich: The "Dreyfus model" model suggests that a junior will have a need to follow rigid and definitive rules, which might lead them to come to dichotomic conclusions that will often hinder their progress, while a senior will be able to ask relevant questions and understand that different solutions fit different problems.
An example would be programming languages. A novice might declare "Python is always the best" while a senior will address the topic of which language is right for a project only when it’s the right question to ask.
InfoQ: What about cognitive load, how can we prevent becoming overwhelmed and keep our learning effective?
Herzlich: Circling back to understanding our limitations, being aware that some forces can affect our ingestion of information is crucial to our learning process. Examples of this are: identifying quality information, making sure we’re well rested and calm, and of course being in a quiet and friendly environment.
However, we should also remember that perfect conditions are too rare to rely on and that there are always trade-offs we have to make. A good example would be the recent trend of remote work as it offers a peaceful environment but on the other hand, has made learning from our peers more difficult.
InfoQ: What suggestions do you have for managing our time and energy when learning new things?
Herzlich: Remembering that while learning is important, we have duties to ourselves and other people to attend to. Trying to spend all our time on learning and improving our career is great, but it shouldn’t cost us our relationships, mental health and hobbies.
A great approach that worked for me is working in the evenings as a programming course instructor. Being an instructor includes a fair share of learning, and the nature of the role made it so that I could socialise, give back to the industry and earn some extra cash along with that.
Sometimes we should allow ourselves to learn less in favour of quality of learning and keeping our precious sanity.
I learned to make compromises when I figured out how difficult it was to master a language like C++. I wanted to play around with computer graphics but getting familiar with such complex technology was just too taxing on my time. This made me stick with good old Java to achieve the same goal (Even though C++ is the industry standard when it comes to developing graphics).