Most software developers realize that learning comes with the job. They spend hours every week learning new programming languages, new frameworks, new libraries, new concepts, and so on. It's both fun and arduous.
Fun, because you feel intelligent, capable, and powerful when learning something new. Arduous, because the pace of change in the tech industry can be exhausting.
That's why all developers should spend some time learning how to learn. Think of what you're trying to learn as an app running on an operating system, your brain. The better programmed and more capable the OS, the faster the app will boot and run.
Understanding how to best learn something is an incredibly valuable meta-skill. It can turn you into a learning machine; someone whose knowledge people admire and turn to. Learning more triggers a compound effect too, as you'll find that you can lay connections between topics that will further deepen your general knowledge.
So it's time to dig a little deeper into the world of learning how to learn. Let's shed the deeply flawed learning techniques we've been carrying along since we graduated and upgrade our learning OS.
Before we dive into the learning framework that will accelerate your ability to learn efficiently, there are a few things you'll need. I warn you: some of the following points will seem self-evident and you'll feel an urge to skim over them. Don't. Each of these points is important and merits at least some thought before you adopt the learning framework.
You'll be learning by yourself. There's no external framework that forces you to learn something by a certain date. The onus is on you. Whatever it is you're looking to learn, you'll need to want it badly enough.
If you're only half-motivated, or if your motivation was a flash in the pan because you saw someone skilled do it, then you won't succeed. You'll find excuses not to learn, subtle ways to cheat, reasons to avoid the difficult exercises. If you're not entirely convinced of the need to learn your new skill, you will eventually fail.
That's why, ideally, you want to learn something that you'll have a use for. Learn C++ because you're applying for AAA game developers. Learn front-end web development because you want to program a website for your side project. Learn Agile because you eventually want to become a team lead.
Find the reason why you want to learn something. Make it practical.
It also helps if you have something that inspires you to learn. Something that you can turn to when you're feeling less motivated. I'll give an example of my own: I'm learning to play the piano. Watching YouTube videos of Thom Yorke of Radiohead and Matt Bellamy of Muse playing the piano inspires me. I think "One day, I want to play the piano like that" when I watch those videos.
Find your "One day, I want to ____ like that."
Set goals for your learning projects and make them SMART: specific, measurable, actionable, relevant, and time-bound. I say goals and not goal, because you don't just want a single, big goal to achieve a few months down the line.
You also want to break down your big goal into smaller goals that are easier to accomplish. This will help mentally too, as you'll be able to accomplish smaller goals much more frequently, which will feel good and spur you onward.
The above being said, don't think of your goals as set in stone. The goals you set before you start learning are estimates. They're your best guesses. As you go through the learning process, you'll probably want to adjust your goals.
For example, you might realize that, in order to deeply understand something, you need at least a basic understanding of some other thing. So you'll need to adjust your deadlines and shift around a few of your smaller goals to accommodate for that.
This is inevitable and entirely okay. Adjust your goals as you gain a better understanding of what's needed to accomplish your ultimate goal.
Some people say you need goals, others say you're better off with habits. I say you need both. Once you've come up with your goals, make learning a habit. Daily, if possible. Block a slot in your calendar that you dedicate to learning and stick to it.
If you struggle to find the time to learn or struggle to block out a chunk of time on your calendar, you might want to question whether you're motivated enough to learn whatever it is you want to learn. You'll want to feel eager and excited to learn.
Learning something effectively means that you deeply understand important and useful knowledge, which you can connect to existing knowledge. Your newly acquired knowledge will exist as a valuable node in the interweb of your brain (or your second brain).
Learning something efficiently means that you can do the above as fast as possible, without wasting excess resources.
Before you can dive into whatever it is you're trying to learn, you need to select the materials that you want to learn it from. It's worth spending some time on this, as the quality of these materials will greatly impact how effective and efficient your learning will be. Collect the best available sources of information. Use online reviews and recommendations to guide your choices.
This stage will allow you to come up with your first goals. You'll be able to understand the scope of your learning project and come up with an estimate of how long it will take and how much it will cost you (if anything at all).
Next, it's time to make your way through the material. But don't dive into it too deeply. Many people make the mistake of wanting to understand everything before they move on to the next thing. If you don't understand a concept, skip it. It's quite possible you'll understand it later on by reading through the rest of the material. Never stop your progress to fully understand something.
Instead, try to get through this stage quickly. The idea is to get a basic grasp of what's going on. Take a few notes here and there and write down the questions that you come up with. You'll come back to them later. The main thing is to get through this stage with a rough idea of the material.
Whether this is solving math problems or writing code, you'll want to spend most of your time practicing. Practice isn't necessarily the third stage of the learning framework. You should be practicing from the moment you dive into the learning material all the way through to the end.
There's little point practicing the problems that you don't struggle with. Pick problems that are challenging, but not impossible. What's important, however, is that you get immediate feedback on the problems you're solving.
If you have a solution key, consult it right after you've solved a problem. Don't wait. If you've coded something, compare it with similar code to see where the differences are and where you could've improved. Don't wait.
The point of the Explore and Practice stage is to uncover what you don't know or understand yet. Now, it's time to fill in those gaps too. There are several techniques to help you do so.
For one, it can help to visualize abstract problems. What does your problem look like? Visualize it in your mind, even if the picture is an incomplete representation of the entire problem. Twist it around and look at it from different angles. It can spark surprising insights.
It's also worth finding an analogy between the concept you're struggling with and a simpler, easier-to-understand concept. For example, APIs are like waiters, taking your order, relaying it to the kitchen, and returning with your food.
You can also use the Feynman Technique: collect all the essential info on a subject, write down what you'd like to understand, and explain the separate components of the subject as if you're teaching it to a child.
Software developers spend a lot of time learning. Improving the way you learn can yield significant benefits on an almost immediate basis. In order to learn effectively and efficiently, you'll need to find your why, set goals, and create a learning habit.
Next, you should divide the learning process into 4 stages: Prepare, where you gather the best material you can find. Explore, where you go through that material to roughly understand the ideas. Practice, where you get your hands dirty and apply your newly acquired knowledge. Understand, where you fixate on what you struggle with until you understand it.
There's much more to be said on learning how to learn. If you want to dive deeper, consult the work of Cal Newport and Scott Young, both of whom are ultra-learners with plenty of experience learning how to learn.