Have you ever been confused when something was explained in one way, but when it was explained in another way it just clicked?
One of my biggest frustrations is trying to learn something from someone who does not make an effort to reach you at your level of pre-requisite knowledge. Someone who assumes that you have a certain understanding of the core prerequisite knowledge required to understand what is being taught. And they just take that for granted. They don’t make an effort to asses your building blocks.
I think this is the biggest problem in teaching and it has terrible effects on the learner who is not aware of the problem.
If you are conscious of this, you will be able to learn anything.
I’ve always been lucky to have the worst instructors, in university, and in almost every job I had. A lot of the new concepts I was trying to figure out were already extremely abstract, to begin with, and my instructors made them even worse with the way they explained them. They meant well (most of the time). They were just very bad teachers.
In my career, I noticed that those who were very experienced and very technical had a very hard time explaining concepts to those who weren’t at their same level of expertise. almost can never transfer the technical information in their heads in a coherent way to others. I thought it was either because they did not understand those concepts well themselves, or because they assumed their audience had some background knowledge necessary for understanding the concept being explained.
I was right, it was the second reason. And later on, I learned that this was known as Cognitive Bias (aka the curse of knowledge). It’s very common when someone has a deep understanding of a topic to assume that other people know the things that they do. It can cause them to think that people understand them a lot better than they actually do.
And because my teachers were not aware of Cognitive Bias, it made it hard for them to realize that there may be several foundational concepts missing in their explanations to someone who was not at the same mastery level as they were. They were not aware of what fundamental building blocks their audience needed. And those building blocks are necessary to convey the information. They start at step 5 when the student is missing step 1 or 2. So without that foundation, nothing they explain will make sense to the student. It’s like trying to explain calculus to someone who doesn’t know basic algebra.
Everyone has gaps in their fundamentals and the key to teaching someone is to understand first what those gaps are and start from there. That’s how one can be good at explaining things. That’s what great teachers excel at.
But from the students’ perspective, they are not completely stuck.
Given that most people are really bad at teaching things, the best approach that one can take while trying to learn something new and technical is to try different methods, different authors, different instructors until settling on a source that resonates with their learning style, and is at the right technical level that matches their background and skills. This is huge!
Let’s take learning how to code as an example.
Almost every institution or training center will offer courses that teach programming languages in isolation.
First, understand, in most contexts, learning a language in isolation will not get you too far in building anything useful. It will only teach you language syntax and programming concepts common to many languages. That’s it.
Programming languages in isolation don’t work. How frustrating is it to spend two months to learn a language and discover later that you cannot build anything useful with it.
When I was a kid, I learned Basic. When I was in university I learned Pascal, Turing, and Lisp (God knows why they taught these languages). When I started working I learned C++ and Java (by taking night courses). Then I learned HTML (also by taking night courses). Then I learned Flash and Action Script (because I liked the idea of animation on websites). I couldn’t do anything useful with all that I learned, with the exception of HTML and Flash because I could at least build ugly web pages with HTML then make them nice using Flash. Still, those websites didn’t do anything useful.
So what was missing?
I sincerely wish I’d discovered this ten years earlier. Because it changed everything for me.
Don’t look for the right language. Look for the right framework. That’s it. It’s that simple.
Find out and lay down the components of what you want to accomplish first. e.g. I want to build Web Application that does X.
A few years back I didn’t even know the term Web Application. I thought everything I interacted with online was just a website. I knew the term e-commerce. I had heard of PHP and MySQL and that they are somewhat related to making websites that contain Forms. That’s it.
But a few years ago, I had stumbled on the terms ‘Ruby on Rails’ when I was reading an article on how Twitter was built. I actually thought it was just another programming language. So recently, I decided to explore it a little bit more. I went on Amazon and searched for books on Ruby on Rails. There weren’t that many, but one book that people were recommending was the Ruby on Rails Tutorial. So I bought it.
I was very lucky that I did.
WHY DOESN’T EVERYONE TEACH PROGRAMMING THIS WAY??
I was completely hooked.
It wasn’t until after finishing the Ruby on Rails Tutorial that I went back to Codecademy.com and started taking the individual programming courses. Only then did I really understand why I was learning each individual component and how to apply it immediately.
Now we have a system. Let’s break it down:
Introducing The How To Learn Anything Method
(using the example of how I learned how to code)
- Get the right tools.
e.g. Install ruby, rails, sublime text, an IDE for practicing the language.
- Find online courses.
e.g. codeacademy.com, teamtreehouse.com
- Find the right books.
Use Amazon to find out about all the books available on the topic. When it comes to programming, you need to look for:
Recent titles from the current or previous year. More than two years old is stretching it.
Books that are in their second or third edition.
If the latest edition is more than two years ago, chances are there is an updated edition coming soon to match the latest version of the language.
Look at reviews. Read the one-star reviews first. See why it is so bad. Some of those reviews will be from haters or people just complaining about the price of the Kindle edition versus the paperback, ignore those.
Make sure to pick at least two or three books (again, different learning styles).
Get at least one book on code interviews (you learn so much from reading those).
- Remove barriers and obstacles.
This allows you to practice more frequently.
Have an IDE on your laptop so you are ready to code whenever you get a chance.
I created a file and pasted all the code snippets from examples I learned in course and books to have them quickly available so I don’t have to remember the syntax, structures, etc.
- Find a framework for what you are trying to build.
e.g.For Web Apps, I picked Rails.
- Practice as often as you can. In short bursts. Emphasize quantity and speed.
- If you get blocked by a topic or a concept. Push on. Keep moving.
e.g. While going through the Rails Tutorial, there were still many vague concepts that were not explained well. But my goal was to complete the tutorial so I just pushed through it. I only understood everything after reading another book called ‘The Rails Way’ where they go into more depth about the concepts. But because I had already done the tutorial, I was having a lot of those A-HA moments. If I had started with this book I would’ve been totally lost.
- Divide and conquer. Deconstruct the skill into subskills. Focus on one subskill at a time.
- Create checklists and diagrams.
- Create spaced repetition (re-watched some tutorials, etc).
- Identify mental models and frameworks and shortcuts.
This comes from trying several sources. If you stick to one source you end up missing some shortcuts.
- Don’t learn how to code in thin air.
Pick an interesting project. Apply what you are learning to what you want to do. This allows you to shorten the learning curve. If what you come across a topic that doesn’t fit into your project, you can skip it. Picking an interesting project will also keep you motivated to see it through. You are less likely to quit along the way.
- Find out what are the hardest aspects of the current language or framework. Do more research and look for more resources to learn them.
Remember the most important key. If you can’t understand it, it’s because whoever is explaining it is doing a bad job at explaining it. Look for another resource. It’s that simple.
So here you go. This is the biggest secret of how to learn anything (including learning how to code for the non-technically gifted).
Join the newsletter
Subscribe to get the latest content by email.