Learning to learn. Part 2 - a three-step framework for learning new technical topics
Tags: career, learn, productivity, beginners
Published: 2020-01-10 20:20:16


In the first article of this series, I gave some general advice on learning technical topics(especially new programming languages). This piece of writing tries to go more specific by demonstrating a framework I've used to acquire new development knowledge.

## Find your favourite way of learning

People are different. Some of us grasp new concepts quickly whereas others need time to process what they hear. Some of us prefer to see animated videos with analogies, others retrieve all there is from one complex wording. This is why it's important to understand your capabilities and preferred learning styles.

If you're reading this article then you've probably also read technical books, followed blog articles and video courses as tutorials. If you haven't done that, then at least you've written some lines of code, using knowledge from official documentations.

> What is my preferred way of learning?

The aforementioned resources all represent different kinds of learning and it's important to ask from yourself: what is my preferred way of learning? Just think about it - which of the following statements describe you (when trying to learn a new programming language):

- I dive into coding right away
- I prefer to read books to get the theoretical foundation
- I like watching video tutorials when someone else explains the concepts and does the coding
- I enjoy acquiring knowledge from short, straight-to-the-point blog articles
- Usually, I head straight to the documentation
- I find a nice boilerplate and see what's been done there

All of the aforementioned approaches are cool. Depending on how much you know about the topics and what your end goal is, different ways of learning may apply.

## My framework for learning technical materials

Now that you've analyzed which kind of learning styles you prefer, I've got another exercise for you. Think about one technical topic you'd like to learn. Ask yourself:

- What's my goal with learning this topic?
- How much do I know about the topic or anything related to it?

> Mixing ways of acquiring knowledge contributes to creating different kind of connections related to the subject.

Based on the answers, I usually create a list of resource types to acquire the necessary knowledge. It includes at least two different types of learning for the topics + practical part. Why two? Because mixing ways of acquiring knowledge contributes to creating a different kind of connections related to the subject. Also, from different sources, you may learn different things. And practical part...well - I (and hopefully You too) learn those topics in order to put them to use.

![Three simple steps to learn any technical topic](https://thepracticaldev.s3.amazonaws.com/i/z0tzxkvek5xr9keu1bt7.png)

#### Example 1

**Goal:** Learn React to understand how it works and be able to write an SSR React website from scratch.

**How much do I know:** I know Javascript and VueJS which supposedly is quite similar to React

**How to acquire knowledge:** As I know the language React is written in and a framework similar to it, I'm confident some easy __boilerplate__ will do to understand the syntax and basics. In order to get a deeper understanding, I'll also __read some book__. I will start building the website based on the knowledge from boilerplates. While building the project, I'll also read the book.

#### Example 2

**Goal:** Learn GoLang in order to be able to create a simple REST API based on Go

**How much do I know:** Server-client communication, how to write Node and PHP

**How to acquire knowledge:** This time my goal is to get hang of the syntax and get the API working. For that, a more practical type of learning can be used. I will find some nice article about creating REST APIs in GoLang which is short and straight to the point. After finishing with the tutorial and understanding the very basics, I'll take a look at example boilerplates in Github and build on top of them.

Obviously, it does not have to be that strict and even I don't always follow the plan, but it's the framework I've been using for a while and so far, it's helped. Also, an important part here is the quality of resources - prefer quality resources and adapt to them, even if you'd like to use some other way of learning. It's better to learn slowly but correctly.


## Advice

#### Don't use learning for procrastination
When learning, please always include some active part. When reading, take notes. When watching videos, follow along by writing code etc. I know from my own experience that learning is a great form of procrastination - You think to be learning but actually forget everything a week later.

#### Do not forget to mix a different kind of learning
When you like to read (whether they're books or articles), also try watching videos. On the other hand, if you prefer just hands-on coding, find time to get theoretical. Different ways of learning help you better understand and acquire new topics. Plus, as you have different resources, you may obtain various approaches to your goal.

#### Always have a pet project to utilize the new learnings
I'm not tired of repeating - practical part is vital. When you learn something, implement it. And what could be a better way of practising than actually building something you like.

## Bonus - pair programming

![Apples](https://thepracticaldev.s3.amazonaws.com/i/io0awsph7t53sed2niq3.jpg)

If you have this opportunity, try pair-programming with a person already familiar with the topic. It gives you a chance to follow along, ask questions and code under positive observation. Also, the other person can improve his knowledge by teaching. Win-win!

----

That's it for this time. I hope you got something useful out from this article. In the next article, I'll be sharing some tips on how to validate the resources I use for learning.

Oh, and please do share your own ways of learning!