In this post we will see how one can learn anything quickly. And with anything, I really mean anything that involves cognition, for sports and physical activities this might also hold true in some sense, but I am not as experienced there.
Learning quickly is a skill everyone should have to get far in whatever industry you are working or whatever you want to achieve in your life and career. Also this skill is of particular interest with the ever changing aspects of the information age in general and the software industry in particular.
So to explore this topic we will look at three different aspects of this:
- General recommendations for learning success.
- Different techniques and their effectiveness as they are perceived by me.
- Apply different techniques in conjunction with a real world example for maximum effectiveness.
As with most of the topics I write about on this section of my blog, a lot of those techniques effectiveness comes down to how comfortable you are applying them and what kind of learner you are in this specific context.
I discovered these recommendations during my studies at university and my journey to become a freelancing software developer. I try to follow most of them on a regular basis and found that they served me well over the years. I also refine them on a regular basis so do realize that this is only a snapshot.
Combine something you already know with something you want to learn. In terms of software engineering this might be your web development skills in one language that can be transferred in the same context to another language and framework. An example might be to apply C# and Asp dotnet core skills to learn Python and a framework that also uses MVC like Django. This makes the whole process easier, because you simply need to focus on one thing at a time.
You can also apply this by building the same app over and over again with different frameworks. The best thing about this is that you know which high level concepts you will encounter during this process and can anticipate how you have to prepare for this task.
Avoid learning too much concepts at once, if possible. This also holds true for different theoretical concepts not only programming languages or frameworks. So try to put stuff in different mental boxes/treat them as black box and come back to them when appropriate.
As an example if you start with backend development, try to focus on request handling/response handling instead of all concepts at once. Sure at some point you will need all of it, but you can do this when the time comes.
Challenge yourself. It should be not too few, but also not too much of a challenge.
If you can reach this state you will not only get the most benefit for your effort, but from my personal experience will have the most enjoyment with the process of learning new stuff as well. It is not always possible to move all the time into this sweet spot, but you should aspire to reach this state and can do this by scheduling and selecting the way you learn, as we will soon see.
Flow – The Psychology of Optimal Experience this book talks a lot about how one can achieve this state. The author also states, that this is the state you should be looking for the most in life.
80% of the stuff you do all day is entirely possible when you know roughly 20% of the subject you try to learn. This is known as the law of Pareto and is applicable to many different scenarios in life and business as well.
I find it especially true for the work of programming. That is, if you understand the basic concepts of programming languages and higher level concepts of lets say object orientation for example, you can easily learn the rest.
It does not matter if what you want to learn is a programming language, how to administer a database or any other field related to computer science. It might still not be easy, but it is way easier if you know already a little. (thank you captain obvious)
Learning by doing is the classic recommendation, that also ought not to be missing from this list. I do not tell you anything new here, but as a reminder it is always helpful. You simply only truly learn something (especially in computer science) if you get down in the trenches.
Apply your knowledge or see it perish, beats the same bush but is exactly as intuitive as the advice above, only pointing more to the long run.
Realistic expectations for what you can reach in a given time frame is important for your long term motivation. (you will not be an opera star in one week, as well as you will not score a senior level job in software engineering in a month or two)
Schedule your learning. As you can tell from my other blog posts I am quite keen for making plans and defining goals. One of the reasons for this is that in my experience only the things that are getting scheduled are getting done. With scheduling your learning efforts, you also have several benefits:
- Tracking your progress becomes feasible
- See upfront what you will need to learn
- This gives you a sense of pressure and accomplishment
We look later in this post at an example how you can effectively schedule your learning process.
Emotions (positive as well as negative) can be used to multiply the effect of your learning results. This is because we learn best under pressure and discomfort. This has probably to do with our survival instincts, so try to utilize this as good as you can.
I personally apply this by working for clients that use technologies or domains I am not comfortable with…yet. The thing is will be highly proficient in this technology if I start there or at the very least when I need to accomplish a task in this domain or technology. In essence strive to be comfortable with being uncomfortable.
Watch your health. You cannot study, learn and improve if you are sick and tired. So exercise regularly, take a walk, eat healthy and get a good nights sleep for resting. You do not need to be a super pedantic health person to be fit. Neither do you not need to be a health guru, just make sure that for reaching your goals you will need to be healthy. Also you will enjoy the life more in general ;).
Follow another persons learning guide. This can simply mean sticking to the structure of a book or following along a video course on some topic. This is effective in some way, if you have absolutely no idea about a given topic and want to explore it in different directions. But this should not be the end all be all, because it can be dangerous for the simple reason, that you after following a book and learning all the things written there, may think you now know all this stuff. But in the end you still have to apply it.
Do follow other learning material, but do not let this be the only learning material you use.
Have a clear goal.This goal should define your what, when and most importantly the why of studying this topic. This will also have a huge effect on your long term motivation and help you to be consistent with your learning efforts. See my other post on how to find your why.
With this look at general recommendations we will now take a closer look at some of most effective learning techniques, as considered by a study and from my personal experiences
A word about learning techniques
As I said we will look at learning techniques that helped me as well as ones that are deemed highly effective from scientific studies. There might be some intersection there as I have improved my learning skills times and times over. Although these skills can always be improved, when I compare my learning speed to myself when I started out at university, I am quite a fast learner at this point.
The source to the study I will mostly refer to can be found here.
According to this study there are some highly effective and some less effective methods. I will not go into all of them, because in my personal experience this does not apply to everybody the same. So see for yourself what works for you. But at the very least you can be inspired by those ideas and try some of them out just to get more flexible in your mind.
In general it might be best to combine different of these mentioned techniques and also make use of them in the appropriate situations (theoretical knowledge, practical application and so on and so forth). In the upcoming section I will demonstrate how I apply those learning techniques to the current topic I am working on.
So with my 2 cents out of the way…
Lets see what there is
The techniques that are shown here, are not ordered like the effectiveness in the study suggests, but for the perceived effectiveness from my side. This might not be actually scientific, but what does those results help me if other techniques work better for me. In the end those results from the study simply do apply for average of all students of that study.
Pomodoro technique, which stands for the concept of slicing your learning sessions into small chunks, time wise speaking. This is also called the distributed practice learning technique.
On the one hand this means you should learn for a given period of time and then rest for a fraction of that. For example if you learn for an hour straight, you should at least have a 15 min break afterwards. You can still take longer learning sessions, but in the end this will not accelerate your learning progress, but actually slow it down.
This can also be used for the spacing effect. So if you have finished your learning session(s) for a day, wait at least 10-15 hours before starting the next one, also arrange it in a way that you sleep in between. This is how the learned stuff gets transported into the long term memory.
Let me tell you as a person that studies for countless tests in their life, that all this all nighters do not cut it. I know that sometimes in university or other education facilities it is not easy and there might be no other way than cramping everything you can into as small a time slot as possible. Yet in the long run you are always better of with a good schedule of learning as well as break sessions.
So if you choose to learn something and want to get the most out of it, apply spacing as much as possible to let your brain adjust to the new information.
Write down what you want to learn, as if you needed to explain it to someone that has absolutely no experience with this topic. When you do this you need to explain it as simple as possible but not simpler, and that is quite the task if you yourself do not know much about the topic.
Which in turn makes you look into it from different perspectives to ask different questions and so on. The question then becomes, how can one ask the right questions.
So this lets you naturally apply techniques that we will look at next.
Practice testing is a technique where you ask yourself questions about a topic. So this is twofold, first you need to determine what a good question in this topic is, which means you need to explore the topic in some detail.
And secondly you need to answer it in a satisfactory way. Which also is then quite challenging. This technique needs some discipline and is best combined with other techniques like spacing, self explanation and writing down as clear as possible. If you cannot come up with questions yourself, there are probably a lot of tests on the internet.
In the context of programming it can simply mean to take on some example projects and solve them or even write little scripts, console applications to do everyday stuff or something similar.
Self explanation ties right into this method. Here you record how you came up with a conclusion or an answer and reflect on it. This works well in a programming context, because often one finds solutions by trial and error. But when it then finally works we move on to the next problem. If you take a step back and document/write down how you solved the issue in the end, you will learn so much more even though it might be a little boring ;-).
Switch strains in terms of cognition. First start off with some theoretical stuff and understand it on a high level. Next up apply it in practice. After that get back to the theoretical part of the subject but this time look at it from a slightly different angle. This helps to broaden your view on the topic and make connections more easily and faster. Which in turn speeds up the memorization.
I for example first watch a video on the topic, build some program or script with it, then read a chapter in a book or a blog post on that topic and apply it to another example.
Ask why this works the way it does. This is an especially useful technique for something technical and factual like computer science topics. This technique is called ellaborative interrogation and comes in handy if you have problems in remembering the things you learn. This plays also well with writing down what you learn.
A usual way to apply this is asking yourself why and how for everything you come across for a given topic.
With a broad overview of different learning techniques you can then proceed with applying this principles. For this we will look at a simple example in the context of my recent learning project.
Actual application of those techniques
Learning how to learn stuff is a skill in itself and sort of a bootstrapping problem. For this to resolve itself there is only one advice I have to offer and that is: learn it by doing. That is try to learn new stuff, reflect what went good and where you got stuck, then improve the process.
We will now look at an example how to apply some of those aforementioned techniques in conjunction to get the best results possible.
Because while I am writing this post I am in the process of learning how to become a data scientist, I will use this example to demonstrate how I apply some of those techniques. So the roadmap in general looks like this:
- I started off with gathering material on the subject. For me this mostly are books, video courses (like udemy) and youtube videos. From this then I created a rough sketch of the skills that are teached in those different courses and books and from what I know already that I will need in the future. (like persistence, data structures, algorithms and so on and so forth)
- With this set up I then scheduled my learning. This was done by having a goal in the future, like for me it is the end of december (3 month from when I wrote this post) when I want to be proficient in the python standard library, syntax and the data science stack (pandas, scikit matplotlib and others). From this I did some backward scheduling, to see how much I need to learn in a month, a week and each day. This also incorporates spacing, but in a natural way, because I still have to do work for my clients.
- The actual learning then takes place like this
- Watch a lecture/ chapter as a video course and take notes
- do a challenge or an implementation
- Read about the same topic in a book
- Do another challenge/ test/ implementation
- An example:
- Chapter on Data structures in python basics course on udemy.
- Take a break for coffee or a cigarette or whatever. (why not both)
- Implement some of the well known algorithms and Data structures that are not in the standard library, like binary trees, graphs, different sorting algorithms by also using those data structures in the python library
- Take a break and surf the internet
- Get comfortable and read up on different aspects of the topic, or look at implementation by other people
- Take another break
- Write another implementation in the context of this topic
- rinse repeat
- After one of those learning sessions is completed, I try to understand what I did, by writing down what I wanted to accomplish, how I did accomplish it, or if not, what held me back from accomplishing it. So you could say I try to reflect on my learning process after each session or at least each week, if one topic needs more attention than one session.
- Something more on the meta cognition area is combining things I already know with the things I am learning. This mostly happens in a passive way, but from time to time I try to actively pursue those thoughts that connect something I am learning to something I have already learned.
I know this sounds like way too much effort, but it will pay you well over the long run. In the end you will have to put in the effort to learn it, why not do this in a planned manner with actual guarantee of success?
If you can establish a similar process to learning that works for yourself you will become a learning power house. So I’d recommend trying out this workflow and adjusting it to your needs if necessary.
In this post we looked at general recommendations for learning anything quickly and actual techniques to approach material.
We saw that again your goals and the reason why you want to learn something are of high significance to the learning success.
This will push you even though you might not feel like it on some days.
The learning techniques we saw in this post give you different persepectives on tackling huge and daunting material, but if you find those that work for you and combine several of them, give yourself enough breaks and define clear deadlines you will eventually get there.
At last we looked at an example how a you can apply this abstract learning concepts to a real world example in terms of learning a programming skill.