Have you ever been confused when something was explained in one way, but when explained in another way or by someone else, 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 or takes for granted that you have a certain understanding of the core prerequisite knowledge required to understand what is being taught. 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.
But, 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 to me. 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. They can almost 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 concepts 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 my journey in learning how to code as an example.
How I Learned How To Code
Almost every institution or training center will offer courses that teach programming languages in isolation.
What ends up happening is that students enroll in one of these courses, spend time to learn the language only to realize along the way that they still cannot build whatever project they had in mind when they signed up for the course. Then they give up, thinking that they are not cut out to learn how to code.
First, understand, in most contexts, learning a language in isolation will not get you 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 something called ‘Ruby on Rails’ when I was reading an article on how Twitter was built. I actually thought it was just another programming language. So 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. And I was very lucky that I did because that changed everything for me.
For once in my life, I had stumbled on something that went from the big picture to the smaller parts, which is the opposite of the way I’ve been taught programming my entire life.
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 to any project.
Now we have a system. Let’s break it down:
How To “REALLY” Learn Coding Step-By-Step
- 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. Look for books that are still 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 as well).
- 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 accessible 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 some of the concepts that I didn’t understand well. 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.
- 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. And if you come across is 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 will see quick wins and 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 learning how to code for the non-technically gifted.