Are you a new developer just getting started? Or are you a seasoned developer looking to expand your skill set?

Either way, the freeCodeCamp community's got you covered.

A lot of the time, learning how to program is not so much a straight line as it is a vast flowchart, with lots of repeated sections and loops:

windows-system-calls
A flowchart for system calls in Windows Server Edition (source)

But it doesn't have to be that complicated.

I've gone through our vast catalog of tutorials and created a list of some of the best resources on how to learn pretty much everything you'd need to know as a developer.

The list is loosely organized into different sections and subsections. Feel free to browse the table of contents below and skip around to look for an article on whatever you're trying to learn.

Also, many things on this list require some prerequisite knowledge of another technology. Don't be surprised if you find yourself opening articles from multiple sections.

Finally, this is a living document, and will grow as we publish more helpful articles. Be sure to check back often, and share this with your friends if you find it helpful.

Table of Contents

How to Build a Website

To build a basic website, all you really need are HTML (Hypertext Markup Language) and CSS (Cascading Style Sheets). HTML provides the content and structure of the site, and CSS is used to style it.

Here are some of the best resources on HTML and CSS. Once you're familiar with these technologies, move on to the next section and learn JavaScript to make your web sites more interactive.

HTML

CSS

How to Learn Programming

In essence, programming is how humans tell computers what to do. Whether it's a laptop, a smartphone, or a browser, programming and programming languages give us a way to interact with those devices.

In this section, you'll learn the fundamentals of programming and the basics of some of the most popular programming languages today.

If you want to learn frontend and backend development, definitely learn JavaScript and Node.js. And once you're familiar with those, look into TypeScript.

If you're more interested in data science and machine learning, learn Python. For mobile apps, it helps to know Java. Game development? C++, C#, or even Java.

We've got a bit of everything, including newer programming languages like Go.

JavaScript

Node.js

TypeScript

Deno

Python

Java

Go (Golang)

Rust

C

C++

C#

How to Learn Linux

Whether you know it or not, you probably use Linux every day. Android is based on Linux, and macOS, which is based on Unix just like Linux, is a close cousin. And an estimated 74.2% (as of March, 2021) of all web servers run on Unix, the vast majority of which are probably Linux.

In short, if you work on the web, you should get comfortable with Linux and its default shell, Bash. And here are some of our best tutorials to get started:

How to Learn Git and Version Control

Once your programs start growing in size and complexity, you'll want a way to track your changes in case you need to roll back to an earlier version.

Git lets you do just that, and is the most popular version control software in use today. If you want to collaborate with other developers and get a job in the industry, it's important to know how Git works.

Some of our best articles on Git are listed below. Also, when you use Git it'll probably be through the command line, so make sure you know some basic Linux / Bash before diving in.

How to Learn a Frontend Framework / Library

Once you know how to build basic websites with HTML, CSS, and JavaScript, level up your skills by learning a frontend framework / library. Of these, the three most popular are React, Vue, and Angular.

Angular is considered a framework because it includes a lot of things like routing out of the box.

React, on the other hand, is usually referred to as a library because it doesn't come with a lot by default. Instead, you'll need to add some extra packages to handle routing and other things.

Vue falls somewhere in the middle in terms of functionality and weight.

Whatever you call them, each has its own strengths and weaknesses. There is no best framework / library – just choose one that seems the most interesting, or that companies in your area are hiring for, and go from there.

React

Vue

Angular

How to Learn Web Basics and Web Security

When you get familiar with building web sites and web applications in the framework / library of your choice, you'll want to deploy them. But before you put your work online, it helps to know how the web works and the basics of web security.

Web Basics

HTTPS

Cookies

How to Learn Databases

By this point you've probably built a bunch of websites and applications. You've likely used an API to get data on things like the weather, or to grab a random quote to display on the page.

But if you've ever wanted to create your own API, or store information from your users, you'll need to learn how to use a database.

Generally speaking, databases fall into two categories: relational, or SQL, and non-relational, or NoSQL. SQL stands for "structured query language", and is a broad term to refer to relational databases. NoSQL, or "not only SQL" refer to non-relational databases.

Neither type of database is better or worse than the other – it mostly comes down to the project you're working on, and the sort of data you'll be working with.

Here's a list of some of the best articles we have on databases. I'll make a note about whether the database system is relational (SQL) or non-relational (NoSQL) if it isn't clear:

SQL / MySQL

MongoDB / Mongoose (NoSQL)

Note: Mongoose is a tool for MongoDB that lets you do things like object data modeling (ODM) to create models or schemas for your data. A lot of people use Mongoose to interact with a MongoDB database, so I've combined them here.

Redis (NoSQL)

Postgres / PostgreSQL

How to Learn Backend Development

Similar to how frontend development is a broad subject, backend development can refer to many things, and encompasses a lot of different technologies.

Usually when you start working on the backend, which controls how sites and web apps work behind the scenes, you'll use a framework like Express, Flask, or Django.

Express

Flask

Django

How to Learn Static Site Generators

Static Site Generators were created to make development easy, and they represent the "M" in JAMstack (JavaScript, APIs, and Markup). With a static site generator, it's much easier to create a quick, scaleable website, blog, or web app with modern benefits like server-side rendering.

Gatsby

Next.js

Hugo

Nuxt.js

Vuepress

How to Learn Bundlers, Compilers, Dependency Managers, Task Runners, Formatters, and Linters

Once you start working with frontend frameworks / libraries, or your projects start to grow in size and complexity, things can quickly get out of hand.

To keep things organized and tidy, it helps to learn linting, especially if you work on large teams. With linting, you can catch errors before they happen, and with a formatter like prettier, you can enforce a code style guide for your entire team.

And though a lot of Angular, Vue, and React projects already include a bundler like Webpack, it's helpful to learn more about how it works in case you need to adjust its behavior later.

Webpack and Babel

ESLint and Prettier

Parcel

Gulp

npm Scripts

How to Learn Mobile Application Development

These days, a lot of mobile app development is done with a framework like React Native.

While in the past you had to know a specific language like Java to develop a mobile app, with a framework, a lot of your frontend framework / library knowledge can be used to develop a mobile app.

Also, if you use a framework, you can just build the app once, and create both iOS and Android versions from the same code base.

React Native

Ionic

Flutter

How to Learn Desktop Application Development

Similar to modern mobile app development, a lot of desktop apps these days are developed using a framework. This has a lot of the same advantages, and means that you can write your desktop app just once, and create Windows, macOS, and even Linux versions from the same code base.

Electron

Proton Native

How to Learn Data Science and Machine Learning

Data science and machine learning are all the rage, and the number of jobs in each field is growing every year.

Put simply, data science refers to a broad range of techniques used to analyze and make sense of vast amounts of data.

Machine learning falls under the umbrella of data science, and it employs techniques that data scientists use to enable computers to learn from all this data.

It's a lot to take in, but no worries – here are some of the best articles and courses we have on machine learning, and the different libraries and frameworks you'll use on the job.

General Machine Learning

Pandas

Numpy

Scikit-Learn

Seaborn

Matplotlib

TensorFlow

PyTorch

Keras

How to Learn Virtualization and Containerization

Once you learn the basics of Linux, you'll want to learn about virtual machines / virtualization, and containerization.

The main difference between the two is that virtualization is an abstraction on the hardware level, and allows multiple emulated machines to run on a single machine.

For example, with virtualization, you can split up a single machine's resources (CPU, SSD, RAM, and so on) into two smaller machines, with one running Windows server and another running Ubuntu.

On the other hand, containerization is emulation on the software level. This allows you to package applications and all their dependencies into a small, portable container that runs pretty much anywhere.

With containerization, you have a Node.js app that runs on Ubuntu. You can include your app, all its node_module files, and even the entire Ubuntu OS, in a small ~1 GB container. VMs are typically between 20 - 160 GB in size.

But both are useful, and serve different purposes. Check out our tutorials below to learn more about both virtualization and containerization.

Virtual Machines

Docker

Kubernetes

How to Learn Cloud Computing

Once you learn the basics about virtual machines, you'll want to learn about cloud computing.

Not too long ago, if a company wanted to run a server to host a website, they would have to build and maintain the server themselves.

With cloud computing, you can spin up virtual machine running your OS of choice in a few minutes. Better yet, the company hosting your VM will take care of the general maintenance for you, and ensure that the server is online and highly available.

And with cloud computing, you don't even have to have a server running 24/7 – with certain services, you can run a function and just pay for the milliseconds of time it took to complete.

Check out our tutorials below to learn more about cloud computing on the three big players in this space: Amazon Web Services, Google Cloud Platform, and Microsoft Azure.

Amazon Web Services (AWS)

Google Cloud Platform (GCP)

Microsoft Azure

How to Learn DevOps

Now that you know virtualization, containerization, and cloud computing, it's time to take things to the next level.

DevOps is equal parts software development and IT operations. If you're involved in DevOps, not only can you build an application, but you can spin up the VMs, deploy the app, monitor the servers, and scale the app and resources as more people start using it.

There's a lot to cover, and these articles should get you started on your DevOps path.

General DevOps

Travis CI

Jenkins

GoCD

Ansible

Chef

Kafka

Terraform

In Closing

Thanks for reading this far. If you found this compilation of resources helpful, share it with your friends so they can learn something, too.

Was there an article or video tutorial you liked? Did I miss anything? Let me know over on Twitter.