How I would learn to code in 2023 (If I could start over)

5 years ago, when I couldn’t get 
a job after graduating college,   I decided to learn coding. 2 years after 
writing my first hello world program,   I got into Amazon and last year, I joined Google 
as a Software Engineer. Even though I made a good   progress in the last 5 years and I am grateful 
to be where I am today, there’s a part of me   that still wonders if I could have done better. 
You see, I spent countless hours watching youtube   videos trying to figure out the best method to learn 
programming in a way that not only gets me a job,   but also sets me up for a great career as a 
Software Engineer. I could not find a single   comprehensive video that explained how to 
learn coding from scratch step by step. So,   I had to try out many different things that people 
were recommending on Youtube. As a result, I   started learning Python, Java, Javascript, React, 
Redux all at once. After learning all this, when I   looked behind to check where I had reached, I was 
in the exact same spot where I started: I was Jobless.   It took me many many months to climb out of that 

If only there was a video which gave me   all the steps I need to take to learn programming 
in a practical way, I would not only be in the   exact same place as today in much less time, 
I might have also become a better programmer.   What you’re watching right now is the video I 
wish I had when I started learning programming.

Before I get into the 4 step process and give 
you all the free resources I would use to learn   programming, let’s discuss what I would pick 
for my programming language. I want to talk about   3 popular options here. First and one of the most 
popular options is Javascript. Though Javascript   is used in the backend with the help of Node, 
most of its demand still comes from the   front end. So, I am going to assume that if I were 
to pick Javascript as my first language, I want to   do front end development.

If you don’t already 
know, HTML, CSS and JavaScript are the basic   building blocks of front end development. But, 
these 3 are not enough to become an employable   Software Engineer. You need to learn some more 
libraries or frameworks on top of these to be on   par with the industry. Some example frameworks for 
CSS that I learnt are Bootstrap and Tailwind but   there are many other options. For Javascript, you 
will need to learn React, Angular or Vue to land a   job. There are some other advanced technologies 
like Redux and NextJS that might be needed in   some cases.

As you might have already guessed, 
this path is long and hard for beginners. That’s   why I would not pick Javascript if I was just 
starting out. Next popular option is learning   Python which most people recommend. Python has 
many applications in backend, automation and   data science. Why most people recommend Python 
is because it’s one of the easiest language to learn.   Syntax of python is very simple and easy to pick. 
Python will also give you an advantage in coding   interviews because it requires less lines of 
code for the same amount of code.

Due to all these   advantages, I had recommended Python in my video 
on Fastest way to learn coding and get a job. But,   this video is not about taking shortcuts.
What we need to understand is that all this   ease of learning comes at the cost of 
performance. I don’t want to get into   too many details here but Python is slower than 
other programming languages like Java or C++.   That’s because it’s dynamically typed and it’s an 
interpreted language. If you don't know what that   is, that’s fine, don’t worry about it. Just know 
that Python is slower. Another issue with Python   is that it has limited support for concurrency. 
For these reasons, Python is rarely used to   build complex backend systems. If I look at my own 
experience, most of Amazon's backend is written in   Java and most of Google’s is in C++. And I have so 
many friends who work on the backends of companies   like Microsoft, Uber and Facebook and they don’t 
use Python in their services at all.

Since my goal   from day 1 was to become a good Software Engineer 
along with getting a job, I would actually pick   the third option which is Java. Along with the performance benefits I just mentioned,   Java has some other advantages for beginners. 
Java is a mature language and there’re a ton of   resources to learn Java. Because it’s a compiled 
language, errors in Java can be caught at the compile time   and are very descriptive. Since Java has been 
around for so long, you can find solutions to   most errors on Stack Overflow which makes it very 
easy to debug. And did I mention the amazing   documentation Oracle provides for Java. We’ll see 
how to use this documentation in a moment when I cover   how I would learn Java. But, I have 
still not told you the best part about learning   Java. And that is: Once you’ve learnt Java, you 
can pick up any other language very easily.

For me,   I started with learning Java. When I felt I needed 
Python to speed up my interview performance,   I picked it up in a couple of weeks. When 
I wanted to learn web development using   Javascript based React, that didn’t take me a 
long time either. And as I switched jobs,   I had to program in C++, Golang and some 
other languages and I never had any problems. Now that we have that out of the way, let’s talk about Step 1, which is: Learn Java. If you have watched any   of my previous videos before, you know that I 
am a strong believer in learning by doing. So,   instead of falling asleep while 
watching a long Java tutorial,   I would actually get to work and start coding. 
Let me show you some resources that I would use.   The best free resource to learn Java interactively 
is this aptly named course called “Learn Java” on   Codeacademy.

On top of covering basic concepts 
like variables, if else statements and loops,   this course also teaches slightly advanced 
concepts like Object Oriented Programming,   Encapsulation and Inheritance. I would pay special 
attention to these advanced concepts because these   are the fundamentals of Software Development. Each 
chapter comes with a free “Lesson” portion and   paid “Quiz” and “Project”. I would focus on the free
lesson part for now.

Each lesson introduces you to   a new concept, and guides you through an exercise 
at the end. It also provides you a way to write   and run all the code within the browser. If you’re 
stuck, you can also get a hint. Here are 2 things   I would not do while using Codecademy. Number one, 
I would not copy paste the code. When you write   the code yourself, you get used to the syntax. 
Number two, I would not use the hint before trying   to solve the problem myself. Another advantage of 
learning programming this way is that if I make   a mistake, I’ll have to debug the error myself. I can 
always google the error and look for the solution   on websites like Stack Overflow.

I can also try to debug the error using the Java   documentation. For example, in this error, I can 
see that the printline function doesn’t exist. So,   I can go to the documentation and figure out what 
functions are actually available to me. If I could   spend some money, I would do this course called “Learn 
Java from scratch” on Educative.

This course is   very comprehensive and also gives you challenges 
and quizzes at the end of every chapter. Now that I have learnt Java, I’ll move 
onto the next step, which is Step number 2:   Build Guided Projects. In this step, I will follow 
along with instructors as they build some cool   projects in Java. There are many options that I 
can choose from but here are a few examples. For   my first project, I would follow this tutorial 
from freecodecamp where the instructor builds   Sudoku from scratch. There are many things that I 
won’t understand in this tutorial at first but I   would google everything and use Java documentation 
to understand as much as I can. Once I am done   with the first project, I would move onto a 
slightly advanced project. For my second project,   I would build a snake game that I used to play 
on my dad’s Nokia 3315 back in the day. For that,   I would follow this fun tutorial from “bro 
code”. Even though bro explains everything very   well but if I still don’t understand something, 
I know that Java documentation is my friend. After following these tutorials, let’s move onto 
step 3, which is, Build your own projects.

To do  that, I would start with a small idea and keep 
expanding on it to build a bigger and better   project. Let me give you an example to show 
you what I mean by that. In the first 2 steps,   I would have already learnt the basics of Java. 
But, the elusive concepts like Polymorphism and   Inheritance are very easy to forget. So, I 
would build a program that helps me remember   the concepts that I have already learnt. This 
program gives me a random question to answer from   a pre-stored list of questions. To make it more 
interesting, I can make these questions multiple   choice and give the program ability to tell if 
I chose the right option. I can also make this   program send a question every day to my inbox to 
keep me on track with my learning.

If I am looking   for some more adventure, I can move this program 
to a server rather than using my own computer.   I will call this program from my computer and 
it will send back the question and the answer   options to me. By the way, this program would now be called 
an API. Instead of storing these questions in   an array or something similar, I would store them 
in a database on the server. If I want to take it   to the next level, I can use the Java that I have 
already learnt to make an Android app that calls   my API, shows the question and lets me select my answer on the app.

There's no end to it, I hope you got the point. After building my own projects, 
I would move onto the step 4,   which is, Learning Data Structures and Algorithms. 
When I was learning Java and building projects,   I would have come across many data structures 
like Array, ArrayLists and Maps etc. As a   Software Engineer, it’s very important to know 
when exactly to use these data structures. You   also need to know some algorithms that can help 
you do certain tasks efficiently. For example,   if you wanted to find the shortest path 
between point a and point b on the map,   like Google maps does, how would you do it? To 
learn Data Structures and Algorithms, I would   go to Coursera and look up this course called 
Algorithms by Princeton University.

This course   is taught in Java and comes in 2 parts. First part 
covers data structures like stacks, queues and   algorithms like MergeSort and Union Find. Second 
part covers advanced concepts like graphs, tries,   shortest path etc. I would implement some of 
these data structures and algorithms by myself   to further solidify my knowledge and improve 
my Java skills. This course also forms the basis of   most tech interviews that I will have to go through to get a job. 
So, I would pay special attention to this course.   I would also use resources like Geeksforgeeks 
and Leetcode to improve my interviewing skills. If you think that this entire path 
is too long and you are looking for   a shortcut to learn programming and get 
a job, you can watch this video at the   top.

I will see you in the next one..