How I would learn to code in 2023 (If I could start over)
How I would learn to code in 2023 (If I could start over)
Today I will share how I would learn coding step by step if I had to start from ZERO again. This video will answer following questions: 1. How to become a Software Engineer? 2. Which programming language should you learn? 3. How to learn data structures and algorithms? 4. What coding projects should you build? 5. How to crack coding interviews?
DISCLAIMER: All opinions shared on this channel are our own and don’t express views or opinions of our employers. We only use our experiences and public knowledge to make our content. NO CONFIDENTIAL INFORMATION of our employers is used or shared on this channel. This is not a Professional Coaching channel, it only highlights the public resources that have worked for our careers.
Content
0 -> 5 years ago, when I couldn’t get
a job after graduating college,
3.36 -> I decided to learn coding. 2 years after
writing my first hello world program,
7.28 -> I got into Amazon and last year, I joined Google
as a Software Engineer. Even though I made a good
11.92 -> progress in the last 5 years and I am grateful
to be where I am today, there’s a part of me
15.68 -> that still wonders if I could have done better.
You see, I spent countless hours watching youtube
20.16 -> videos trying to figure out the best method to learn
programming in a way that not only gets me a job,
24.56 -> but also sets me up for a great career as a
Software Engineer. I could not find a single
28.48 -> comprehensive video that explained how to
learn coding from scratch step by step. So,
32.32 -> I had to try out many different things that people
were recommending on Youtube. As a result, I
36.88 -> started learning Python, Java, Javascript, React,
Redux all at once. After learning all this, when I
42.16 -> looked behind to check where I had reached, I was
in the exact same spot where I started: I was Jobless.
47.36 -> It took me many many months to climb out of that
darkness. If only there was a video which gave me
51.84 -> all the steps I need to take to learn programming
in a practical way, I would not only be in the
55.76 -> exact same place as today in much less time,
I might have also become a better programmer.
60.08 -> What you’re watching right now is the video I
wish I had when I started learning programming.
64.4 -> Before I get into the 4 step process and give
you all the free resources I would use to learn
68.56 -> programming, let’s discuss what I would pick
for my programming language. I want to talk about
72.72 -> 3 popular options here. First and one of the most
popular options is Javascript. Though Javascript
77.28 -> is used in the backend with the help of Node,
most of its demand still comes from the
81.36 -> front end. So, I am going to assume that if I were
to pick Javascript as my first language, I want to
85.84 -> do front end development. If you don’t already
know, HTML, CSS and JavaScript are the basic
90.72 -> building blocks of front end development. But,
these 3 are not enough to become an employable
94.64 -> Software Engineer. You need to learn some more
libraries or frameworks on top of these to be on
99.36 -> par with the industry. Some example frameworks for
CSS that I learnt are Bootstrap and Tailwind but
104.16 -> there are many other options. For Javascript, you
will need to learn React, Angular or Vue to land a
108.64 -> job. There are some other advanced technologies
like Redux and NextJS that might be needed in
113.28 -> some cases. As you might have already guessed,
this path is long and hard for beginners. That’s
117.84 -> why I would not pick Javascript if I was just
starting out. Next popular option is learning
121.68 -> Python which most people recommend. Python has
many applications in backend, automation and
126.08 -> data science. Why most people recommend Python
is because it’s one of the easiest language to learn.
130.64 -> Syntax of python is very simple and easy to pick.
Python will also give you an advantage in coding
135.36 -> interviews because it requires less lines of
code for the same amount of code. Due to all these
139.36 -> advantages, I had recommended Python in my video
on Fastest way to learn coding and get a job. But,
144.24 -> this video is not about taking shortcuts.
What we need to understand is that all this
148.32 -> ease of learning comes at the cost of
performance. I don’t want to get into
151.52 -> too many details here but Python is slower than
other programming languages like Java or C++.
156.8 -> That’s because it’s dynamically typed and it’s an
interpreted language. If you don't know what that
161.04 -> is, that’s fine, don’t worry about it. Just know
that Python is slower. Another issue with Python
166.08 -> is that it has limited support for concurrency.
For these reasons, Python is rarely used to
170.4 -> build complex backend systems. If I look at my own
experience, most of Amazon's backend is written in
175.6 -> Java and most of Google’s is in C++. And I have so
many friends who work on the backends of companies
180.88 -> like Microsoft, Uber and Facebook and they don’t
use Python in their services at all. Since my goal
185.84 -> from day 1 was to become a good Software Engineer
along with getting a job, I would actually pick
190.16 -> the third option which is Java. Along with the performance benefits I just mentioned,
194.48 -> Java has some other advantages for beginners.
Java is a mature language and there’re a ton of
199.2 -> resources to learn Java. Because it’s a compiled
language, errors in Java can be caught at the compile time
204.48 -> and are very descriptive. Since Java has been
around for so long, you can find solutions to
209.04 -> most errors on Stack Overflow which makes it very
easy to debug. And did I mention the amazing
213.92 -> documentation Oracle provides for Java. We’ll see
how to use this documentation in a moment when I cover
218.56 -> how I would learn Java. But, I have
still not told you the best part about learning
222.08 -> Java. And that is: Once you’ve learnt Java, you
can pick up any other language very easily. For me,
227.28 -> I started with learning Java. When I felt I needed
Python to speed up my interview performance,
231.76 -> I picked it up in a couple of weeks. When
I wanted to learn web development using
235.28 -> Javascript based React, that didn’t take me a
long time either. And as I switched jobs,
239.92 -> I had to program in C++, Golang and some
other languages and I never had any problems.
244.88 -> Now that we have that out of the way, let’s talk about Step 1, which is: Learn Java. If you have watched any
250.16 -> of my previous videos before, you know that I
am a strong believer in learning by doing. So,
254.16 -> instead of falling asleep while
watching a long Java tutorial,
257.12 -> I would actually get to work and start coding.
Let me show you some resources that I would use.
261.44 -> The best free resource to learn Java interactively
is this aptly named course called “Learn Java” on
266 -> Codeacademy. On top of covering basic concepts
like variables, if else statements and loops,
271.36 -> this course also teaches slightly advanced
concepts like Object Oriented Programming,
275.68 -> Encapsulation and Inheritance. I would pay special
attention to these advanced concepts because these
281.2 -> are the fundamentals of Software Development. Each
chapter comes with a free “Lesson” portion and
285.6 -> paid “Quiz” and “Project”. I would focus on the free
lesson part for now. Each lesson introduces you to
290.32 -> a new concept, and guides you through an exercise
at the end. It also provides you a way to write
294.72 -> and run all the code within the browser. If you’re
stuck, you can also get a hint. Here are 2 things
299.44 -> I would not do while using Codecademy. Number one,
I would not copy paste the code. When you write
304.32 -> the code yourself, you get used to the syntax.
Number two, I would not use the hint before trying
309.36 -> to solve the problem myself. Another advantage of
learning programming this way is that if I make
313.44 -> a mistake, I’ll have to debug the error myself. I can
always google the error and look for the solution
318.08 -> on websites like Stack Overflow.
I can also try to debug the error using the Java
321.92 -> documentation. For example, in this error, I can
see that the printline function doesn’t exist. So,
327.2 -> I can go to the documentation and figure out what
functions are actually available to me. If I could
331.84 -> spend some money, I would do this course called “Learn
Java from scratch” on Educative. This course is
336.64 -> very comprehensive and also gives you challenges
and quizzes at the end of every chapter.
340.56 -> Now that I have learnt Java, I’ll move
onto the next step, which is Step number 2:
345.12 -> Build Guided Projects. In this step, I will follow
along with instructors as they build some cool
349.84 -> projects in Java. There are many options that I
can choose from but here are a few examples. For
354.64 -> my first project, I would follow this tutorial
from freecodecamp where the instructor builds
359.04 -> Sudoku from scratch. There are many things that I
won’t understand in this tutorial at first but I
363.76 -> would google everything and use Java documentation
to understand as much as I can. Once I am done
368.4 -> with the first project, I would move onto a
slightly advanced project. For my second project,
372.88 -> I would build a snake game that I used to play
on my dad’s Nokia 3315 back in the day. For that,
378.16 -> I would follow this fun tutorial from “bro
code”. Even though bro explains everything very
382.16 -> well but if I still don’t understand something,
I know that Java documentation is my friend.
386.96 -> After following these tutorials, let’s move onto
step 3, which is, Build your own projects. To do
392.32 -> that, I would start with a small idea and keep
expanding on it to build a bigger and better
396.48 -> project. Let me give you an example to show
you what I mean by that. In the first 2 steps,
400.88 -> I would have already learnt the basics of Java.
But, the elusive concepts like Polymorphism and
405.04 -> Inheritance are very easy to forget. So, I
would build a program that helps me remember
408.88 -> the concepts that I have already learnt. This
program gives me a random question to answer from
413.12 -> a pre-stored list of questions. To make it more
interesting, I can make these questions multiple
417.84 -> choice and give the program ability to tell if
I chose the right option. I can also make this
422.32 -> program send a question every day to my inbox to
keep me on track with my learning. If I am looking
426.72 -> for some more adventure, I can move this program
to a server rather than using my own computer.
431.36 -> I will call this program from my computer and
it will send back the question and the answer
435.28 -> options to me. By the way, this program would now be called
an API. Instead of storing these questions in
440.24 -> an array or something similar, I would store them
in a database on the server. If I want to take it
444.64 -> to the next level, I can use the Java that I have
already learnt to make an Android app that calls
449.44 -> 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.
455.84 -> After building my own projects,
I would move onto the step 4,
459.12 -> which is, Learning Data Structures and Algorithms.
When I was learning Java and building projects,
463.6 -> I would have come across many data structures
like Array, ArrayLists and Maps etc. As a
468.32 -> Software Engineer, it’s very important to know
when exactly to use these data structures. You
472.72 -> also need to know some algorithms that can help
you do certain tasks efficiently. For example,
477.04 -> if you wanted to find the shortest path
between point a and point b on the map,
480.88 -> like Google maps does, how would you do it? To
learn Data Structures and Algorithms, I would
485.6 -> go to Coursera and look up this course called
Algorithms by Princeton University. This course
489.92 -> is taught in Java and comes in 2 parts. First part
covers data structures like stacks, queues and
494.88 -> algorithms like MergeSort and Union Find. Second
part covers advanced concepts like graphs, tries,
500.4 -> shortest path etc. I would implement some of
these data structures and algorithms by myself
505.04 -> to further solidify my knowledge and improve
my Java skills. This course also forms the basis of
509.76 -> most tech interviews that I will have to go through to get a job.
So, I would pay special attention to this course.
514.72 -> I would also use resources like Geeksforgeeks
and Leetcode to improve my interviewing skills.
519.44 -> If you think that this entire path
is too long and you are looking for
522.32 -> a shortcut to learn programming and get
a job, you can watch this video at the