Developer Learning Strategies

Jakob Jenkov
Last update: 2022-04-03

As a developer you will continuously have to learn new technologies, techniques, processes, business areas etc. I started learning to program around age 12 (1987-ish) and started working as a developer in 1998. I still have to learn new technologies etc. on a regular basis, and keep up with the changes in existing ones too. And the pace of change only seems to have increased.

Keeping up with the rapid pace of changes in our industry is challenging - to put it mildly. It requires us to spend a lot of time learning. The process of learning can be exciting, interesting, but also frustrating and stressful - even after many years of learning and experience. It still is to me sometimes, at least. I am still swinging between feeling smart and feeling dumb when either understand, or don't understand, something that I am studying.

In this text I will outline some of the learning strategies I have picked up over the years to help me deal with the situations where learning is hard - so I don't feel as frustrated or stressed, and don't give up so easily.

Accepting That Learning is Hard

At some point in my life I realized that a lot of my negative perception of a given situation often came from having high expectations that were not met for that situation.

The way I realized it was when watching movies that was so-so - meaning not a bad movie, but not a super-good movie either. Sometimes I had kind of low expectations for a movie - and then when it was so-so instead of bad, I got positively surprised and thought of the experience as reasonably good all-in-all. Other times I had high expectations for a movie, and then I got disappointed when it was only so-so - and thought of the experience as disappointing.

After a few such experiences I started realizing that my expectations of any situation very much impacted my perception of that situation.

With this realization - my mind hack has been to just expect a lot of situations to be hard. That way - if it is hard, I don't get as disappointed with how it goes - because I expected it to be hard, right? And if the situation then turns out to be easier than expected - I get positively surprised. So - accepting that learning is hard - can be a useful mind hack to mitigate the negative emotions attached to struggling with learning.

In short - if you expect life to be hard - life will feel easier.

Reasons Why Learning is Hard - That Are Not Your Fault

Accepting that learning is hard - is not just a mind trick. Learning really is hard sometimes. There are many reasons for that - some of which are not your fault. Once you realize that the reasons learning can be hard are not all your fault - you will tend to not blame yourself so much when experiencing learning difficulties.

In the following sections I will explain some of these reasons - as well as some solutions I am applying in order to try to counter these causes.

Problem: Bad Learning Materials

Bad learning materials are one of the key reasons that learning can be hard. I have seen my share of academic text books during my university studies, and it is surprising how hard to read their academic writing style are able to make these books. It's almost like these books are written to show off their academic rhetorical skills to their peers - other professors - rather than being written for students.

To be fair - it's not just academic text books that are hard to read. Lots of technical books could be written in a more understandable fashion. Similarly, lots of open source projects could have more easily understandable documentation. The same is true of online tutorials and videos. That is not to say that all learning materials are bad. Just - that a significant amount of learning material is.

This realization is actually one of the reasons I started writing technical tutorials back in 2006. I did that to provide some learning materials in the form I would prefer them to have when I am learning.

Solution: Switch Learning Materials

One work-around I have found for bad learning materials is - to accept that not all learning materials are equally good. Therefore, if I don't understand everything in a given book, I often switch to reading another book on the same topic, to see if that book better explains the part I am struggling with. Sometimes it does. Or - I search for tutorials on that specific topic on Google, DuckDuckGo, search.brave.com, YouTube, Odysee, Udemy, Coursera, edX etc.

Quite often, learning materials explain different parts better or worse than other learning materials. By switching learning material when I find the current hard to understand - I find that I am often able to understand the given subtopic better from another source. Thus, I often find that I am able to understand e.g. 50% of a topic from one book / course, another 25% from another source, another 10% from a third source etc. In the end, I get a better and better understanding of the total topic, but I have to patch that understanding together from different learning materials.

Solution: Come Back to the Topic Later

If the technology is new, and there is not yet a lot of learning material available, I tend to wait some time - maybe 6 - 12 - 18 - 24 months, and then I come back to the topic to search for new learning materials. Quite often, you can find newer learning materials that can explain parts of the technology you were not able to understand the firs time around.

Problem: Studying to "Cover the Material"

Sometimes during university I was given large amounts of material to read over before before the next lecture. Often, I found myself just reading quickly over the material to be able to say that I had actually read the material. But I had not always fully understood what I had read. I was reading to "cover the material" as required - not to actually "understand the material".

Solution: Study to Understand

A solution I have found is to "study to understand" - meaning I don't just study to be able to say that I have been through the material. I read and re-read the material until I understand it. I switch learning materials if I don't understand parts of the material provided by the course / book (as outligned above) etc. Understanding is what matters - not having flipped through the material.

Problem: Memory Matters

When learning a topic where understanding the later parts rely heavily on understanding the earlier parts, your memory of the earlier parts really matter.

I have often been in learning situations where I had dragged the learning out over too long a period of time, so that I had forgotten parts of the earlier chapters of the material - when getting to the later chapters. That made learning the later parts very challenging.

Solution: Repeat Until You Remember

A solution I have found to work against forgetting earlier parts of a topic is simply to go back and repeat it. It may feel like a waste of time at the time - but it is also a waste of time trying to understand something later in a topic that requires you to understand and remember that earlier part. In the end, I have not found any way around going back and repeating the earlier, forgotten part.

Our memories are not perfect. We have short term memory and long term memory. Even if you understand a given topic when studying it the first time, that understanding may not have been stored in long term memory.

One of the simplest ways to remember better is to repeat. The way our memory works, the more you repeat a given topic, the higher the chance is that it becomes stored in the long term memory. It can take up to 6 repetitions (or even more), before it really gets stored effectively in your long term memory.

Solution: Use Memory Techniques

Another solution I have found to work is to use memory techniques that makes storing of information in memory faster, easier, and more durable.

Once such technique is to draw mind maps that provide an overview of the different parts of a topic that I am learning. Sometimes I draw technical diagrams too.

Drawing the mind maps or technical diagrams helps me remember them better, as I am then tapping into my visual memory which seem to be more durable (according to research too). Additionally, the mind maps and diagrams are good to have if / when I later have to go back and repeat the topic. They help me recollect faster what the main points of the topic.

Problem: Being Tired or Stressed

If I am tired or stressed, my learning is most definitely impaired. A little pressure can actually sometimes be helpful, but too much pressure and my learning ability falls apart.

Solution: Rest and Calm Down

The best solution I have found to tiredness and stress is rest and trying to calm down. There isn't really a whole lot of magic to it - although you could probably benefit from mindfulness techniques, meditation etc.

Solution: Learn to Work When Tired

There was one time when I was doing some polyphasic sleep experiments where I cut sleep down to 4 hours per day (2 hours, 1 hour, 1 hour) - where I somehow learned to be able to keep working even when I was tired. I think ended up opening my eyes just to put the cursor in the right place, then closed my eyes while typing, and then opened them again to correct any errors, and put the cursor at the right position on the next line. Somehow the closed eyes periods helped rest both my eyes and my brain. However, it's probably better to get some real sleep ;-)

Solution: Focus one One Thing at a Time

Sometimes I get stressed over having too many things going on at the same time. That type of stress unfortunately impairs my ability to learn. My solution to that problem is to try to focus on one small thing at a time. The next small thing to learn. That's maybe the next 15 minutes to 2 hours. Then ignore everything else in that time.

When cutting out a shorter amount of time for focused learning - I don't stress myself over my learning session potentially taking up the whole day. I focus on that one learning session - that one topic. And when finished I reassess what time I have left, my motivation, what else I need to get done that day etc.

Solution: Focus on the Here and Now

Another solution against stress for me has been to try to focus on the here and now, and forget about the future a bit. Just the next task. And after that, the next task. The next thing to learn etc. This often helps me focus, and as I start to get things done (e.g. learn stuff), I start to feel less stressed as I am actually making progress.

Problem: Wrong Learning Speed

A big problem I have encountered when learning is the learning speed. If a course is progressing faster than I can internalize the material, or if I have too many courses going on at the same time, it impairs my learning ability.

I have tried a few times now, to "feel dumb" during a course because I could not keep up - meaning I could not understand the last parts as well as I ought to. At first I thought maybe I simply did not have the ability to understand the topic. But a few times I had to re-visit the material later for projects not connected to the course, and because I could work my way through the material (e.g. text book, slides etc.) in my own speed, and had the time to use alternative learning materials, I experienced that I was all of a sudden able to understand the topic much more easily!

These experiences have led me to believe there is such a thing as your personal, ideal learning speed, which may vary for different topics depending on your preexisting knowledge of the topic, your motivation, energy and stress levels, the quality of the learning materials and instructor etc.

If you are forced to learn at a higher or lower learning speed than your ideal - it may impair your learning ability. I have actually tried feeling a course was too slow - only to dose off a bit - and later in the course realize that I had missed something important. When learning too slow - I lost focus - and then also fell behind later in the course!

Solution: Finding Your Ideal Learning Speed

When you feel you are forced to learn at a speed that feels either too fast or too slow, the only solution I know of, is to try to stay as focused as you can during the sessions where you do not control the learning speed. Then, in your spare time you have to compensate for the learning speed yourself. Whether the speed is too fast or too slow, you will have to compensate on your own time. Go home and study that which you did not understand during session (if the pace is too high), or go home and study that which you would have liked to learn (if the pace was too low).

If possible you can ask the instructor to either slow down or speed up, but the more people that are in the same course, the harder that is, as changes in learning speed affects everyone in the course.

Solution: Meeting People Where They Are

Now that I am more often (but not always) one of the more experienced persons on the projects I participate in, I sometimes have to help others learn what is already familiar to me.

When doing that - I try to meet people where they actually are - and not where I believe they ought to be. I try to figure out what they already know, and what they don't yet know, in order to find the right place to continue their learning from. I also try to figure out their learning speed, so I don't push them faster than they are able to keep up with. Usually, as they get a firmer grasp of the basics, their learning speed increases.

Problem: Not Knowing Where to Start Learning

Sometimes a topic is so large and possibly the subtopics so intertwined, that you don't know where to start learning! That can be a big problem - especially with new technologies with lacking or poor documentation.

Solution: Use Overview-Detail Style Learning

If the documentation is decent, but the topic is just overwhelmingly large, one solution can be to use an "overview-detail" style learning - as explained later in this text. I use that quite often, even with smaller topics.

Solution: Ask a Person That Knows The Topic

If you don't know where to start learning a big, new technology, a solution can be to find a person that knows the topic already, and ask them either where to start - or what they did to learn the technology when they started out. Getting tips from an insider can really help guide you in your learning journey.

Additional Learning Strategies

Finding Your Preferred Learning Style

Different people have different learning styles. Some people prefer to get a deeper theoretical understanding of a technology before they start learning how to use it in practice. Other people prefer to start playing with the technology immediately, to get a feel for how the technology works and what you can do with it. Such people tend to build up the theoretical understanding over time via practical experience.

Whatever your preferred learning style is, it is beneficial to at least be aware of what it is. Aware of what learning style and learning strategies that work best for you. You may not always be able to adapt the learning sessions to your style - but you might be better able to compensate for learning style mismatches.

Make Exercises

Another solution that I benefit a lot from is to make practical exercises for topics I am learning. Practical exercises verify that I have actually understood what I was just studying.

Exercises also slow down the learning process, and forces you to focus on the part of the topic related to that specific exercise.

Exercises can also be good to go back to when you need to repeat / refresh a part of a topic, or when you actually need what you do in the exercise in a real life project.

Make Bigger Projects on Your Own

It can also be useful to make a bigger project with a technology you are learning - in order to verify that you know how to put all the individual parts together into something larger. You learn a lot that way, and you will often be forced to solve problems the course or text book might not have prepared you for - but which you will have to find solutions for yourself.

Bigger projects can also function as showcases for job interviews, by the way.

Use the Overview-Detail Learning Style

A learning strategy I am often using is what I call the Overview-Detail learning style. I don't think I have invented that style - but I also don't know where I read about it first, nor what it was called there, so I just refer to it as the Overview-Detail learning style.

First, I scan through the material more quickly and loosely to get an overview of the major subtopics within the larger topic, and get an idea of how they interrelate etc. I write down this overview as either a bullet list of subtopics, or maybe draw a mind map or some technical diagrams.

Second, I dive into the individual subtopics one by one, starting with the subtopic I believe to be the most central. From there, I move towards the more and more edge subtopics - until I have finally covered the whole larger topic.

The overview really helps anchor the knowledge better - and helps guiding the study of the individual subtopics. The overview is also great for later revisits of the topic. Plus, an overview can be shared with other students of that topic in the future.

This process of visiting all the subtopics can span over months and years even. This is often the case for me.

Don't Give Up

I guess the overall theme running through all the strategies mentioned above is:

Learning is hard - but don't give up!

Accept that learning is hard - and that your knowledge will often come in small pieces - small steps of progress. Try another way, another time, apply more time and effort etc. and see if you cannot keep increasing your understanding of the topic bit by bit.

I have books I had to read 5 times before I finally felt I understood it all well! I have had topics I have been visiting again and again over the last 20+ years of development.

That's my learning strategy - my learning style. I hope parts of it can be useful to you too!

Jakob Jenkov

Featured Videos

Java Generics

Java ForkJoinPool

P2P Networks Introduction



















Close TOC
All Tutorial Trails
All Trails
Table of contents (TOC) for this tutorial trail
Trail TOC
Table of contents (TOC) for this tutorial
Page TOC
Previous tutorial in this tutorial trail
Previous
Next tutorial in this tutorial trail
Next