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
darkness. 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.