Learning to code quickly17th Aug 2016
“How do you learn and remember all that stuff so quickly?”, I get one of these questions now and then from well-meaning individuals who seek more knowledge. It’s a common thing for all of us. We want to learn fast, do things fast, get more things done.
However, I never managed to answer the question properly. I always winged it because It triggers a complex mix of emotions within me. Sometimes, I get arrogant. Others, I stay humbled and state the truth: I’m slow. And I want to be faster.
The poor person on the other side of the computer only has half answer, depending on which side I sway towards.
Today, I’d like to challenge this question seriously, both for my future benefit and for countless other ambitious individuals who feel like they need to conquer a never-ending mountain of knowledge.
The relativity of fast
What is fast?
How do you measure if you are learning quickly?
If you’re anything like me, you’ll benchmark yourself against two things: (1) people around you and (2) yourself. Most of the time, this benchmarking process occurs unconsciously, so you don’t even know when it’s happening. Except you do. You feel proud that you’re fast. You feel shitty when you’re extremely slow.
If you surround yourself with brilliant individuals who seem to learn things much quicker than you, you’ll feel you’re a snail. Sometimes, you’ll feel so slow that you’re worthless in this particular field.
On the contrary, if you compare yourself with those who are slower than you, you feel invincible. You’re like the best designer / coder / <insert-your-title-here>. You’re the king fish in a small pond, a frog in the well. You bask in your prowess, and you stop learning entirely.
Although these two states aren’t the best you can be in, it’s still not the worst.
The worst possible benchmark you can use is yourself. When you benchmark yourself against yourself, you tend to compare the speed at which you learn new things vs. the speed you learn something you already excel at. For me, I always compare my level of proficiency while learning backend, database, how to cook etc. against how fast I pick up more frontend stuff. As a result, I feel slower than a snail. I feel that I don’t have the talent for whatever I’m trying to learn, and I give up.
It’s stupid. You can’t compare apples to oranges. But it happens. It happens so often that people overlook the silliness of such a comparison because it happens without conscious thought. It’s irrational.
Fast is just a relative term. You will feel that you’re fast sometimes. You’ll feel you’re slow at times too… But does it matter?
Instead of trying to be fast, we should be concerned with learning something well instead.
Learning well instead of learning fast
Have you experienced the frustration when something should work, but it didn’t?
This happens very often whenever I try to learn things quickly. Instead of learning I find myself hypothesizing the solution with the knowledge I have swimming in my brain.
If my hypothesis doesn’t work, I’ll turn to Google to seek out the answer. I scan through articles and documentations quickly, but I wouldn’t find the information I’m expecting to find. I get frustrated, and I keep searching for more.
In short, whenever I try to learn fast, I don’t learn at all. I’m just trying to confirm my biases.
So, instead of trying to learn fast, I remind myself to learn well. Learning well means you slow down. You read the documentations, internalize fundamentals, take apart principles, explore possible ways of integrating, experiment and become creative.
(Josh Waitzkin has a book called “The Art of Learning” that speaks about this. I cannot recommend it enough).
How? Code from scratch
“Don’t reinvent the wheel!”
Use what others have made!
These are the worst advice you can give a beginner. It tells them to seek for answers outside. It stops them from exploring the solution, being creative, and it creates a false sense of mastery. Unfortunately, this phrase is present everywhere in our industry.
“Want to build responsive websites? Use Bootstrap or Foundation. Choose either one!”, they say.
“Want a specific functionality? You’ve got Bootstrap or Foundation to provide you with almost everything you need too! If you can’t find what you’re looking for, how about some jQuery plugins instead?”
“Learning React, Node, and Express? Here’s a starter kit. Don’t waste time creating your own. You’ll never get something as good as this!”
So beginners master the art of Googling for plugins. They build their confidence on a false ground where solutions to all their problems are already out there on the web.
Except it’s not. There are times where you have to create your solution. But will you be ready if such a situation comes your way?
To learn something well, you have to discard the notion that reinventing the wheel is bad. I implore you to try your hand at building the functionality you need instead of jumping straight towards libraries that others have built. Try it out, but it yourself, at least. So you know the inner workings of what you’re using.
Want to make responsive websites? It’s not that hard. The fundamentals to excellent responsive websites are (1) relative units and (2) media queries. Master them both, and you’ll build something without Bootstrap or Foundation any day.
Want to learn React? Then learn React. Don’t complicate yourself with all the other baggage that comes together with it. Learn Redux, webpack, etc., later. You can pick them up slowly, one by one, after you internalize the fundamentals.
Want to build a blog? Decide which platform you want to build it on. WordPress? Great! Learn WordPress. A static site generator instead? Also great! Learn that.
Sure, you will not build something as magnificent as what there is out there in 2 days. Your code is going to be shitty. I guarantee that.
But as you continue to code from scratch things, you’ll learn to recognize principles, patterns, and logic. You learn what to do and what not to do. You’ll get better. Your code will improve.
Over time, everything you learned will sink into your unconsciousness. You’ll use the knowledge without even thinking about them while the rest still search mindlessly on Google for answers.
In short, forget about learning fast. Speed is just a relative factor that inflates or kills our ego. Learn well instead.
Take your time. Learn the fundamentals. Break apart everything you’re curious about, then, piece it back together yourself.
Finally, go out there and find a project you resonate with. Build it. It can be a silly side project that has nothing to do with your life, or it can be a client project where you have to put everything in, and ensure the quality is there. Every project is a chance to learn.
Learn well. Not fast.