Learn to Code (for Free)
Tags: coding, python, webdev, free
Published: 2019-01-11 01:00:42

---
title: Learn to Code (for Free)
published: true
description: Looking to learn to code? Here is a free guide to learn how to!
tags: Coding, Python, Web Development, Free
cover_image: https://thepracticaldev.s3.amazonaws.com/i/fexyzhlmvuks970zhs8l.jpg
---

In the 21st century, the ability to code is one of the most valuable skills a person can have. A report from [Burning Glass](https://www.burning-glass.com/research-project/coding-skills/) states that more job openings are valuing coding, coding skills provide a road to high-income jobs, and coding jobs are growing faster than the job market. Learning the skill of coding has helped change people's lives and also provided them with a skill that is not only valuable but fun. 

However, many people face barriers when trying to learn to code, as college degrees specialized in coding are expensive and time consuming, coding bootcamps and online courses are pricey, and textbooks can also cost a fortune for people. But a college education, coding bootcamps, and expensive textbooks are not the only resources available, **as the internet has many high quality resources that are free**. 

Through this guide, you are going to learn about some high quality coding resources and some tips and recommendations on how to get the most out of your coding experience. I am not a spokesperson for any of these resources, and I am mentioning them because they are of high value and they will not cost you anything to learn from.

This post will be broken down into the following:
1. Coding Fundamentals
2. Web Development
3. Documentation and Tools
4. Places of Assistance
5. Mastering the Interview and Landing the Job

## Coding Fundamentals
![Hello World in Python](https://thepracticaldev.s3.amazonaws.com/i/qe3chzgrymhoxy0fc42t.png)
When you are learning how to play a game, it is important to know how the game works before diving straight into the game -- the same standards apply to learning how to code. Learning these fundamentals of coding will make you a better programmer overall. 

**[Khan Academy](https://www.khanacademy.org/computing/computer-science)** 
For this guide, there are two sections from Khan Academy I want to focus on most: Algorithms and How Computers Work. By going through the section on algorithms, you will be introduced to some basic algorithms that are common. In later resources mentioned, you will learn more about algorithms at a higher level, and it will be easier to understand the algorithms reintroduced from learning about them previously. In addition to learning algorithms, learning how computers work will provide you with an introduction to how computers function at a low level. When you learn later how certain parts of a computer work, it will be easier to understand how the computer performs certain tasks that may have been previously foreign to you. 

**[Think Python 2e](https://greenteapress.com/wp/think-python-2e/)**
Python is a great first language to teach people because of its readability and the usability of the language. For some people learning C++, Java, or JavaScript compared to Python at first can deter them away from learning to code. Not only will _Think Python_ teach you how to code in Python, it will also teach you the foundational pieces of a typical programming language and basic linear data structures. Once you complete _Think Python_, not only will you know Python at a basic level, but it will also be easier to learn any other coding language out there because you have already learned one programming language! 

**Disclaimer: The next two portions of this guide will probably be highly criticized by many, but I find learning discrete structures and data structures and algorithms important, because knowing those topics will make you a better programmer, and if you are looking to enter the job market, you will know the topics that many interviews test you on.**

**[Discrete Structures - Margaret Fleck](http://mfleck.cs.illinois.edu/building-blocks/)**
**Note: This book requires knowledge of college algebra. If you don't know college algebra, I suggest heading back to Khan Academy and going through the Precalculus section. Otherwise, you will struggle learning discrete structures.**

This source might be a little biased because it is a book written from a professor at my university (University of Illinois at Urbana-Champaign), but it is a magnificent resource for learning discrete structures. By reading and doing the exercises from Discrete Structures by Margaret Fleck, you will learn the building blocks to learning data structures and algorithms. You will thank me later for this one. 

**[Open Data Structures (Pseudocode Edition)](http://opendatastructures.org/)**
Learning Data Structures and Algorithms will not only help you learn how to improve the quality of your programs and pragmatic thinking, but also help you pass most coding interviews. I would suggest going through the pseudocode edition and use Python to code the examples and exercises in the book. After finishing this section, you will be ready to conquer anything programming-related and you will open doors for yourself. 

## Web Development 
![Free Code Camp Curriculum](https://thepracticaldev.s3.amazonaws.com/i/ythdok8c1a3z40qpqnu8.png)
Web Development is one of the hottest areas in software development right now, as one can learn to become a front-end developer, back-end developer, and even a full-stack developer. The resource we are going to focus on learning web development from is Free Code Camp, because it is arguably the best resource to learn web development and connect you with a warm-loving community of other coders (besides The DEV Community). 

**[Free Code Camp](https://www.freecodecamp.org/)**
Free Code Camp is the best free resource to learn how to code and web development from because it contains high-quality lessons, a community, Medium articles on coding topics, the ability to earn experience coding for nonprofits, 1049 coding challenges, 30 projects, and 6 well-respected certifications that can all advance your journey as a coder. 

All those things I asked you to learn in coding fundamentals will be helpful here, as you will learn another language called JavaScript, and since you already know Python, it will be easier to learn JavaScript. In addition, you will implement challenges in Free Code Camp regarding Data Structures and Algorithms, which are topics you learned from Open Data Structures. 

**If there was only one resource you took away from this guide, I would hope it is this one. Free Code Camp has changed so many people's lives and some people have even gotten jobs after completing Free Code Camp's curriculum.**

## Documentation and Tools
![Mozilla Developer Network](https://thepracticaldev.s3.amazonaws.com/i/icpb03p64xa0lgyw3t1b.png)

**Documentation**
Documentation is _so helpful_. Whenever you are stuck with a coding problem such as calling a function in JavaScript, documentation is there to help you. The best places to start regarding reading documentation to help solve your problem is the official documentation for the product you are using. If you need more documentation, some other good places to look are the following: [Mozilla Web Docs](https://developer.mozilla.org/en-US/), [W3Schools](https://www.w3schools.com/), and [Geeks for Geeks](https://www.geeksforgeeks.org/). 

**There are other resources that are good too, and when in doubt just Google/WhateverSearchEngineYouUse it and find the answer to your question!**

**Text Editors & IDEs**
Writing all your code in a notes application is not going to be a pleasant experience. Text editors provide an enhanced experience for writing code and saving the files. One text editor I have grown to adore is [Visual Studio Code](https://code.visualstudio.com/), which is an open-source text editor developed by Microsoft. IDE stands for Integrated Development Environment, and they are _extremely efficient_ regarding coding because IDEs allow you to have all the features of a text editor plus the ability to debug (find and fix errors), write unit tests and run them on code, and the accessibility to integrate frameworks and libraries to enhance your coding project. One downside I find to IDEs are that they make your computer run slower (large RAM usage occasionally), but they can really improve the programming experience depending on what the programmer is building. For the most part, many IDEs are based on certain programming languages, but I will include a link to [Visual Studio](https://visualstudio.microsoft.com/vs/) because there are plug-ins to integrate other languages in the IDE. 

**[Git and GitHub](https://guides.github.com/introduction/git-handbook/)**
Learning to code is a fun process, but sometimes it can be frustrating. Where can I save my files so they can be accessible anywhere, presentable to anybody, and also open for collaboration? Enter the solution: version control. Git is a version control system and GitHub is a hosting service for version control using Git. I recommend learning Git and GitHub because they will make your coding experience much more efficient, GitHub lets you revert to previous commits of your projects, GitHub allows you the ability to collaborate easily on projects, GitHub provides an easy location for employers to find your work, and GitHub also allows you to contribute to open-source! The link on "Git and GitHub" provides you a link to learning the basics of Git and GitHub. 

**Terminal**
Learning how to use a terminal can be very efficient and help aid you in your programming experience. If you are on macOS/Linux, you should have a shell probably installed on your machine that you can learn to use. [Here](http://www.linuxcommand.org/tlcl.php/) is a good resource to learn the terminal. Windows has a separate shell, but there is a way to install a virtual bash environment, and [here](https://docs.microsoft.com/en-us/windows/wsl/install-win10) is a link on how to. I believe that book above will also be helpful in learning the virtual terminal on Windows.

**Going through Free Code Camp, you learn how to use many other tools, so this concludes the documentation and tools section.**

## Places of Assistance
![Stacked Overflow Homepage](https://thepracticaldev.s3.amazonaws.com/i/hbyid3iktnbhmzsum5js.png)

**[Stack Overflow](https://thepracticaldev.s3.amazonaws.com/i/hbyid3iktnbhmzsum5js.png)**
If you ever need to find a quick answer to implementing something in code, Stack Overflow is the place to go! There is so many answered questions on there, and if your question has not been answered, you can ask it there!

**[Reddit: r/learnprogramming](https://www.reddit.com/r/learnprogramming/)**
The r/learnprogramming subreddit is another community where you can find answers to programming questions or ask questions if you are curious about something related to code or need help implementing code!

## Mastering the Interview and Landing the Job
As stated previously, programming is a field that is very lucrative and fun. Many people are interested in programming as a career, but the interview process can be difficult! These resources should help you navigate through the process and land that job you want!

**[LinkedIn](https://www.linkedin.com)**
LinkedIn is a social network for professionals. Make sure that you have an up-to-date profile on there! It is a great place to search for entry level jobs or internships. 

**[HackerRank](https://www.hackerrank.com)**
This is the area where your data structures and algorithms knowledge will come crucial, as HackerRank provides you coding challenges that you might see through the job interview process! I can tell you that I have had to complete coding challenges on HackerRank for job interviews for software development positions. It is a very popular site for coding challenges and a lot of employers utilize it as well!

**Portfolio**
A coding portfolio is important for any developer, and it is especially important for self-taught programmers! A portfolio contains personal coding projects you have worked on that you are passionate about! During the interview process, you can bring up projects that you are proud of, and it is good practice to have your two best/most relatable projects on your resume! Creating a personal site can even be a part of your portfolio! [Here](https://dannyddore.github.io/) is an example of a portfolio site. [Here](https://dev.to/emmawedekind/how-to-build-a-great-technical-portfolio-53bb) is a post from a fellow dev.to user on writing a great portfolio display site. 

**Solid Resume**
A solid resume will help you stand out. For tips, I recommend reading a fellow user's guide! [Here](https://dev.to/emmawedekind/how-to-write-a-kick-ass-technical-resume-3mb1) is a link to their post on technical resume writing. 

**Optional: Twitter and Slack**
Joining Twitter and following popular developers and companies can help get your foot in the door and learn more about coding. In addition, joining a tech-related Slack channel can also help get your foot in the door. I recommend joining both of these platforms and getting active, but social media is not for everybody I understand. 

## Final Notes
First of all, thank you all for reading this guide! I know it is long, but I _truly_ believe it can be helpful to any kind of programmer! I would also like to note that this is my first post on dev.to and I hope to make more! 

For new coders: I hope this guide gets you to where you want to get coding wise! If you don’t want to learn web development and are more focused on other areas, search for what you are interested in online, and you shall find tutorials to different areas of coding. I can also help if you ask a question about how to learn (fill in the topic) below in the comments section! Remember, there is always other resources to learn out there and there is many tools I did not discuss here. If you are interested in something, go learn about it! 

For established coders: Thank you so much for reading! I appreciate you taking the time to read this! 

To all: If you have any questions, comments, or feedback, please post them! I will respond to anything have to say! On GitHub, LinkedIn, and Twitter, you can find me @DannyDDore !