One of the most valuable skills to learn in 2019 is learning how to code. Since the hardest part to any change you want to make in your life is usually starting, here is a very detailed step-by-step guide that teaches you exactly how to start learning how to code.
In this tutorial I will walk through the foundations of how to learn front end development, backend development and data science.
Table of Contents:
- Introduction [0:29]
- Why Coding is Important [0:45]
- Understanding How You Learn and Why You Might Quit [2:55]
- What Tools Should You Use To Code [4:20]
- Types of Coding [5:20]
- What Languages Should You Learn [6:50]
- Front End Development [7:55]
- Back End Development [13:00]
- Data Science [18:30]
- Putting it All Together [23:50]
- General Advice [26:00]
- Conclusion [28:10]
Coding is a large field that entails many different things and it can be overwhelming to know what branch to start with and what to learn next. So in addition to teaching how to start coding, I will also talk about what you should learn first, in what order should you learn things like frontend, backend and data science. How to learn in a way that you actually remember and understand what you’re doing and don’t lose motivation and quit.
Note, there is no one right way to do anything. But I’ve learnt that it’s annoying when you ask someone how to do X and they give you 3 different alternatives, but don’t commit and make a recommendation on which one to do. So I am going to write this article in an opinionated way by showing you different alternatives and telling you which one to pick. Again, there is no right way but at least we can spend less time debating between X and Y and spend more time actually building cool stuff.
Why Coding is Important
Software engineering is one of the few jobs I can think of that has both a good quality of life and it pays well. Most well paying jobs like investment banking or working on an oilfield, usually require you to work long hours in a high-stress environment. While jobs that typically have better work-life balance, like a teacher or accountant, also typically have modest salaires.
If you get a software engineering job at a big tech company like Google, you can make about $120K base salary and $16k bonus with 0-1 years of experience. That means, straight out of university you can be making a six-figure salary! There are actually quite a few jobs where you can make six figures out of university but few companies offer the same work life balance, low stress environment as a software engineer at a big tech company.
We all know that money isn’t everything, allegedly. But programming can improve the quality of your life in a lot of other ways. Most importantly, it can give you a lot of freedom. You can learn how to use or write software that can make your life easier, ranging from gmail extensions to automate your email to scripts to help you get data on something you find interesting.
Even if you aren’t working at a big tech company. Learning programming can allow you to travel the world and work from anywhere while still writing code as a full time remote worker or a freelance developer.
If you have an idea for a software or service you want to build, instead of trying to convince or pay someone to help you build it, you can just go ahead and build it yourself.
Understanding How You Learn and Why You Might Quit
One of the biggest roadblocks for me when I first started programming was figuring out the best way to learn. I think the best way to learn coding and almost anything is by doing. Basically this means, thinking of something you want to build, finding a tutorial on how to do it then just follow the tutorial word for word. Once you feel comfortable with how things are working, you can start gradually adding more and more variations until you feel comfortable with what you have built.
Most problem solving nowadays is basically just thinking of a clever way to translate your problem into a google query that returns a useful result. You should also experiment and see if you learn better through written blog posts, books or videos. I recommend trying all three and see which method helps you learn new concepts the quickest.
A big part of learning how to learn, is understanding what prevents you from learning new things. A big part of this is losing motivation. A lot of my tips will have strategies that will keep you motivated and trick yourself into keep on learning, even (especially) when you feel like quitting.
What Tools Should You Use To Code
I think the best development machine is a Macbook Air. I myself have a 15 inch Macbook Pro because that’s what I had at my last internship and really enjoyed using it. But at my internship last summer, they gave me a Macbook Air, which is surprisingly quite powerful for development and very light so I recommend getting a 13 inch Macbook Air.
Now some of you already think I’m being very elitist/ blasé for suggesting you buy a $1200 laptop, which is obviously very expensive. Fortunately, for less than a quarter of the price of a Macbook, you can get this wonderful laptop called a Chromebook. Chromebooks are basically laptops running Chrome OS so most of the applications are running in the cloud via a web browser and you can use online IDEs like Cloud 9 to write code. I found one for $285 on Amazon and even a fancy touch screen one only costs $649. Even, if you don’t get a Chromebook. Check out cloud 9, it’s a very powerful tool.
Other than that, any laptop should be fine. I personally prefer unix based machines as I find Windows difficult to work with but to each their own, so just pick a laptop and get to work.
Types of Coding
There are many types of coding: web development, mobile app development, hardware programming etc. If you are a beginner, then you should probably start with either web development or mobile app development. I think you should start with web development because when you are just starting the most important thing is shipping quickly.
When you first start coding, it is very easy to get discouraged, distracted by installation and setup or be overwhelmed with all the different options. With web development you can write a simple web app and deploy it to a live url within minutes. You can also update very frequently, don’t have to worry about device specific features and can share what you’ve made with friends and family very quickly. This allows you to try new things quicker, thus learning quicker and see the fruits of your labor before you get discouraged.
I also think that we are moving from a mobile app world to a web app world. People don’t want to install another app, it’s hard to get discovered through app stores, you have to build for two devices etc. You can see this article for why web is better than mobile for most applications.
What Languages Should You Learn
I generally break down software development into three phases. Front end, backend and data science. Two years ago, I would have just said frontend and backend engineering but I’ve noticed that data science is becoming an increasingly important part of every application we interact with. If you are just starting out I think the best place to start is by focusing on front end web development. By creating something that you can easily deploy, play with and show others, this will keep you motivated to keep learning more. There are also less set up steps and a lower learning curve than backend or data science.
Front End Development:
I learnt the hard way that the best way to start building is by taking something that already works and add your own modification instead of reinventing the wheel. So when building websites, I recommend using an existing framework/library such as Angular, React, Vue.js etc. See one of my first websites which I made in pure html/css/js and PHP, making my life harder for NO reason.
I started using Angular because we used that at a course at my university. I still like Angular as they have a very well defined way of doing things. I even wrote an entire article for why I chose to build my startup using Angular. With all that being said, I think you should start learning how to build websites using React.
The best way to learn React is to build projects in React. The best way to build projects in React is to find tutorials of things you want to build, follow it word for word and just copy and paste. Don’t worry if you don’t understand what you are copy and pasting. You will gradually learn the theory behind the WHY of how things work when you encounter a bug or decide to add a modification. This might be an unorthodox way of learning but I have found that for me this is fastest way to learn new ideas, ship products with the most SPEED and I think it might work for you as well.
- Simple To-do List
- Dave Ceddia’s Practice Projects
- Serverless Stack React – A bit more advance, full stack web app, build this after completing 3 other tutorials
The most important skill you need to learn at this stage is problem solving and persistence. Or as I like it “how to effectively type things into Google”. If you are a complete beginner, there is a high chance that you might literally get stuck on step one. Don’t get discouraged, just copy and paste whatever they ask you to do that doesn’t make sense into Google and add a “How to”. For example, if a tutorial says “clone the tutorial from Github” just Google “how to clone from Github” or even “what is Github”. Another piece of advice is that if you get an error and you don’t know what it means, just copy the first 5-10 words of the error message, into Google and remove project-specific nouns.
The important thing is that when you are first starting out, every problem you are about to face has likely already been encountered before and because the internet is so awesome, the answer is probably on the internet somewhere. You just need to be clever about how to ask good questions. Incidentally, asking good questions is in my opinion a top 3 life skill (charisma and drive/optimism are the other 2) but I digress.
When you have finished making a project, I recommend you do two things: One, share it with the world ( or just friends and family) and two, teach people how you made it. There are two reasons for this. We are social creatures and the idea of showing people what you’ve built will motivate you to make sure you produce something that is good quality. Secondly, if you have supportive friends and family, they will react positively to what you made, motivating you to make more cool things to get that feeling again.
I recommend teaching other people what you’ve just learnt because by teaching other people, you find the gaps in your own knowledge which helps you understand the concept better and you can do something nice for other people. Note that teaching doesn’t necessarily mean literally teaching someone by tutoring them one-on-one or giving a lecture. Simply writing a blog post, making a slide deck on how you built something or recording a video of yourself while you explain how you built something, will still have the same effect and is less socially demanding and time consuming.
Save all your work to Github. For the first 1 or 2 projects I will allow you to cheat and not use Github as the learning curve will discourage a lot of people to quit before they even start. But once you have built one or 2 projects, you NEED to start using Github. Learning it is a bit annoying at first, but it will make your life so much easier in the long run.
Here are 3 resources you can use to start learning Git:
- Official Github Hello World Guide
- An Intro to Git and GitHub for Beginners (Tutorial)
- GitHub For Beginners: Don’t Get Scared, Get Started
Back End Engineering
Back end engineering is a very interesting space as this is where a lot of the business value and technologies really start to differentiate themselves. For example, Google and Bing’s homepage (front end) look relatively similar,their backend infrastructure is vastly different. That backend is why Google search is a $59 billion/year (2013) product compared to Bing’s $3.2 billion/year (2013).
The best way to start with backend development is by building a REST API server that can send data to various clients based on their actions. For example, here is a simple REST API I built for serving scholarships information and here is some of the source code.
I recommend you start by learning python and you use a framework like Django to help speed up your learning process. I recommend python because:
- Python is one of the most popular programming languages
- You can start coding right away from the command line
- The syntax is very intuitive and matches speaking english
- Python is used extensively in data science so if you decided to do more ML projects, the learning curve will b easier
The two frameworks I recommend for learning python are Flask and Django. I recommend building your first 1 or 2 python projects in Flask, then as you feel more comfortable start building apps with Django. The Django Rest Framework is an excellent framework that can then be used to build REST APIs. Ruby on Rails is another popular choice.
Start by building a very simple REST API server, which takes some information from the user and sends some information back. For example, the demo API has 2 functions: Display a list of scholarships and search for scholarships based on the user query. You can then gradually add more complex functionality.
To keep you engaged, I recommend building a REST API that serves data on a topic which you are interested in. For example, if you are interested in basketball you can build an API that displays the 5 starters in every NBA team and their points, rebound and assists per game. Then allow users to query the API by position or points per game. You can use the NBA API to get stats for the NBA or just google “X api” to find data on whatever topic interests you.
You can then combine that with the front end development skills to make a mobile web app to allow users to research NBA players. Then you can use your data science skills and Tensorflow image recognition so if you take a picture of an NBA player, it tells you who the player is and the statistics for that player.
Here are five great tutorials to start learning, Flask, Django and Django Rest Framework:
- Official Flask Tutorial
- Miguel Grinberg’s Flask Tutorial – absolutely amazing! One of the best tutorials I have ever done and extremely detailed
- Official Django Tutorial & Official Django Rest Framework Tutorial
- Tango with Django – This one brings back memories, slightly outdated but this covers a wide array of topics as well
- Django Girls Tutorial – I like this because it shows you how to install on a Chromebook and a cool section on how the internet works
I made the realization in 2017/2018 that as more and more people enter coding, the basic front end development and even some back end development skills will be commoditized. The really great opportunities will be available to people who are solving the most complex, business value-add problems. I think that the most complex problems that have the highest ROI are in the field of data science.
This is also the least beginner friendly topic as most people in this industry have at least a Master’s or PhD. However, one of my role models, Benjamin Franklin, finished his schooling at age 10, didn’t even graduate high school and he invented the lightning rod, bifocals and other cool stuff. So if you are willing to learn, and experiment you can do very well in this field.
My preferred method of learning primarily involves blindly copy and pasting machine learning tutorials. Then I gradually modify and mix different tutorials together until I actually understand what I’m doing and what is happening at a deeper level. Once I understand a machine learning concept I also try to write about it or give a short talk about what I learnt, this helps me crystallize my knowledge and other people can learn something useful as well.
A good website to start with that I really like is pythonprogramming.net. Follow one of those tutorials and once you have completed the tutorial, try to make a slight modification to the final project. Keep doing this for various tutorials and try to read wikipedia or google interesting concepts you come across. This way the concepts and science and math you learn are more likely to be remembered by your brain as you would have applied them to create a practical project.
Another site that you can checkout out is Machine Learning Mastery. That site can also be a bit overwhelming at first so I recommend starting with Your First Machine Learning Project in Python Step-By-Step. I also gave a talk on an introduction to machine learning aimed at both beginners and relative experts, which you can check out (slides, blog post).
Here are 3 machine learning tutorials that are good:
- Intro to Machine Learning with Scikit Learn and Python
- Practical Machine Learning (I made my own tutorial based on this)
- Your First Machine Learning Project in Python Step-By-Step
Putting it all Together
Ideally, this is how your programming journey should go:
- Build 3 projects using React or Angular tutorials
- Build 3 REST APIs using python and Django (or Ruby on Rails)
- Create a data science project that takes an input, processes the input using machine learning and generates an output
Here is an example of how all three elements can tie in together:
- User opens your web app and takes a picture of two basketball players.
- Your data science function runs some analysis on the image and detects that its a picture of Lebron James and Michael Jordan.
- Your REST API backend server returns some data back to your web app comparing the two players’ career statistics to each other.
In addition to coding I recommend some best practices that will make it easier for people to keep up with what you are doing.
- Create a personal webpage so people can learn more about you and you can put all your links in one place. I recommend github pages or squarespace
- Add a well-documented README.md to all your projects on Github so people looking can understand how you made it and how they can run your project on their local machine. Here is a good README.md example for atila-tech-landing.
- Pick the projects which you are most proud of and write a blog post and make a video explaining how you built the project. Even if you never show the blog post or video to anyone, the process of recording your thought process will help you understand what you are doing even better.
The internet is amazing and companies like Google, Amazon, Facebook etc. have given us tremendous tools with tremendous leverage. But in order for you to take advantage of these opportunities you need to learn and apply the things you’ve learnt.
There’s a lot of stuff in this article, so just pick the easiest one and start working to get it done. Try to be the person in 2019, that you in 2020 will be proud of. What a time to be alive!