As an unemployed 25 year old university graduate,
when I decided to learn coding for a career change, I had no clue it was going to be so
hard. I was spending countless hours in front of
my laptop trying to learn programming. But, no matter how hard I worked, I was not
able to remember anything that I learnt. And whenever I tried to build something on
my own, I would fail every single time. That’s when I turned towards the time tested
learning techniques that are backed by scientific evidence. After a little bit of tweaking, I was able
to apply these methods for learning coding. As a result, not only did I manage to learn
programming, I also succeeded in getting job offers from companies like Amazon and Facebook. All of this was possible because I managed to find ways to hack my
mind to remember everything that I was learning. Many of my methods might seem counterintuitive
at first but hear me out because they might prove to be a game changer for your coding
journey. If you stick with me until the end, I’ll
also share a technique that single handedly doubled my learning speed. First method that proved vital to learn coding
was repetition. If English is not your first language, you
would know that you can’t remember the meaning of a new word just by encountering it once. More often than not, you come across a word
2 or 3 times before you actually remember it forever. The same is true for coding and there’s
a reason for this. It’s well known in the scientific community
that repetition causes strong chemical interactions at places where the neurons in our brain connect
with each other and this helps with learning. So, how can we use this information to learn
programming efficiently? Should we keep doing the same tutorials again
and again? The answer is “No”. That’s because coding is more complex than
just memorizing through repetition. For coding, you need what I call “Repetition
by Application”. What this means in practice is that instead
of doing the same lessons again and again, we apply what we learnt to a real world problem. In the process, we repeat what we just learnt
and this helps with retaining the concepts for a long period of time. So, how did I achieve this? When I was a complete beginner and I had just
learnt my first programming language which was Java, I would follow along with someone
as they built something fun in Java and this helped me repeat and apply what I had just
learnt. As my programming skills improved, I would
come up with my own projects and build them from scratch. Doing this over and over again helped internalize
complex ideas like inheritance, polymorphism and encapsulation in Java. “Repetition by Application” along with
the last method that I will discuss today were the 2 biggest reasons why I was able
to learn programming. So, do give it a try. When I first started out, I would spend at
least 5-6 hours learning programming every day. The second thing I did to improve my learning
was to study less. I know how absurd it sounds but there’s scientific
evidence to back it. You see, in today's day and age, when we have
all the content available on demand and Netflix has already primed us to binge watch stuff, we tend
to think that we can learn programming fast by binging tutorials on Youtube or Udemy. At least, that’s what I thought when I was
spending all that time learning coding. But, in reality, doing short focused sessions
over a longer period of time is a much better way to retain what you have learnt. In scientific literature, this is called “Spaced
Learning”. “Spaced Learning” is what universities
try to achieve by having only 2 or 3 short sessions per week for every subject. To drive the point home, I want you to remember
all the 8-10 hour cramming sessions you have done just before an exam. How much of what you learnt during those sessions
did you really remember a couple of months after the exam? If your answer to the question is the same
as mine, which is “Nothing" or "Not much”, then you would benefit from studying less. In my case, I switched to doing a 2 hour coding
session every morning and that completely changed the trajectory of
my programming journey. But when I switched to using smaller sessions,
I quickly realized that 2 hours passed really fast if I was not thoughtful about
what I wanted to achieve in those hours. That’s when I came across Parkinson’s
law. Parkinson’s law states that your work will
expand to fill the time you allot for it. That’s because when you have more time to
complete something, you reduce your effort and fill the entire time with the task at
hand. So, to make the most out of my two hour session,
I started focusing on efficient time boxing of my tasks. For example, If I was learning a particular chapter in the morning, I would have a quick look at the lesson the night before. I would assess the difficulty level of the
lesson and set a clear target for how much I want to accomplish in my 2 hour session next morning. By doing this, not only did I start making
faster progress, I also felt more motivated because I had a sense of purpose now. On most days, I would just finish the tasks
I had set for myself. On some days however, I would finish all my
tasks before the end of 2 hours. On those days, I had to decide whether I want
to fill the rest of my time with more tasks or I want to call it a day. I decided not to add any new tasks on my plate
on the day. I took inspiration from the race to the South
pole that took place between British and Norwegian teams. The British team chose the brute force approach
to cover as much distance as possible whereas the Norwegian team was more measured in their
approach and didn’t go beyond the set target for the day. In the end, the entire British team died because
they pushed themselves too hard. I know that learning coding is not as difficult
as making the arduous journey to the South Pole but this story had a profound impact
on me and I wanted to be more calculated in my approach. Another technique that completely transformed
my learning experience was giving up watching video tutorials to learn new tech skills. I have already covered in my other videos
how watching others code doesn’t take you very far in terms of learning programming. Watching tutorials is ok for advanced concepts
but for the basics, one should focus on doing actual coding. Coding to learn programming is similar to
taking notes in the class. When you code it up yourself, you are more
focused and better understand the main concepts. You also break things and end up fixing them
yourself which is an essential part of a Software Engineer’s job. So, if you want to learn Python, instead of
sitting through a long, uninspired tutorial, you can go to learnpython.org and write some
code. For Java, you can do this course by Codeacademy. And for Javascript, you can learn it at W3
schools. All these resources provide you an interactive
playground where you can play with the code and also do some exercises on your own. I don’t even remember how many times I have
revisited a concept that I learnt months ago and had that “Wow!” moment where I said “Oh! That’s what it meant”. That’s because many times, my understanding
was incomplete or simply wrong. To limit the number of such instances, I looked
at the way universities teach programming to the students. In a university, the professor is not the
only person who helps you learn new skills. Discussions that you have with your classmates
are equally important. That’s because when you combine the incomplete
understanding of multiple people, you can still actually have the complete picture. According to me, this is the biggest disadvantage
self taught programmers have. To eliminate this issue, many people join
some bootcamp and surround themselves with like minded people. But just because you are not doing formal
training for coding doesn’t mean you can not emulate this. In my case, I made a small “Code club”
with 4 of my friends. The group met weekly to discuss what they
learnt in the past week and agree on the targets for the next week. This served 3 purposes. Number one, it helped to fill the knowledge
gaps. If one person did not understand something
fully, others would chip in to add the missing pieces. Two, it held us accountable towards making
progress. If you did not complete your tasks for one
week, you would have to catch up fast. Otherwise, you will fall behind the rest of
the group. Lastly, if you ever felt demotivated because
you couldn’t understand some new concept, the group was always there to support you
and help you stay motivated. The “Code club” was very successful and
most of the people in the group are now working at some of the best tech companies. And I’m still in touch with all the members
of the club. I mean, we don’t discuss the knapsack problem
anymore but the drive of collective learning is still there. Last method I used to fastrack my coding journey
was to do what I call “Utility based learning”. Let me explain what I mean by that. How many times have you watched a long 10-15
hour tutorial and within a few days of finishing it, you forget everything? This is a well known phenomenon and in the
scientific literature, it’s captured in the form of The Ebbinghaus forgetting curve. So, why even learn all these things in the
first place when we are going to forget them anyway? To solve this issue, I used “Utility based
learning” which means that we learn something new only when we need it. So, how did I really apply this to learning
coding? It’s very simple. Whenever learning a new tech skill, I do some
hands-on tutorials to learn the basics first. And for the advanced concepts, I just
skip them in the beginning. I learn all advanced concepts when I actually need them for my projects. Simply put, “Don’t try to learn everything”. I have been working in the tech industry for
about 5 years now and I still don’t know everything about anything. And that’s perfectly fine. Now that you know how to hack your mind to
learn coding, all you need is a clear step by step path and free resources to learn
programming. Watch this video at the top for that. I’ll see you in the next one.