The short answer
Web development has a well-worn path, and the order is the important part. Learn HTML and CSS first so you can build and style a page. Then learn JavaScript so the page can do something. Then pick one framework, almost always React, and build a few real projects with it. That is the whole map.
The realistic timeline: 6 to 12 months of consistent study at roughly an hour a day to reach the level where you can apply for junior frontend roles. Some people move faster, some slower, and the number depends far more on how consistently you show up than on which course you choose. The path costs nothing. freeCodeCamp and The Odin Project both take you from zero to full-stack for free, and this guide points you at the right free resource for each step.
The part most free guides skip: what "done" actually looks like at each stage. A list of topics does not tell you when to move on. So each step below ends with a concrete outcome, the thing you should be able to build before you continue. If you cannot build it yet, stay on the step. That single habit prevents the most common way beginners stall.
Step 1: HTML and CSS (4 to 6 weeks)
Start here, always. HTML is the structure of a page: headings, paragraphs, links, images, forms, and the layout boxes that hold them. CSS is the appearance: colours, spacing, fonts, and how the layout rearranges itself on a phone versus a laptop. Every web developer, frontend or full-stack, learned these first, and you will use them every working day for the rest of your career. They are not a warm-up you graduate out of.
You do not need to be a designer. You need to be able to take a plain idea and turn it into a page that holds together and works on small screens. That means understanding the box model (how padding, borders, and margins stack), how Flexbox and CSS Grid position things, and how to make a layout responsive so it does not break on a phone.
Good free resources: freeCodeCamp's Responsive Web Design certification runs entirely in the browser, so there is nothing to install, and it walks you from basic tags through Grid and responsive layouts. The Odin Project's Foundations covers the same ground with more emphasis on setting up a real editor and using Git early. For a ranked list with the tradeoffs of each option, see /guides/best-free-css-courses-2026, and /languages/html-css lists the free courses in our catalog.
Estimated time: 4 to 6 weeks at an hour a day. What "done" looks like: you can build a static page from scratch, no template, with a working navigation bar, a main content section, and a footer, and it stays readable on a phone. The most common mistake here is rushing to JavaScript because CSS feels fiddly. Resist that. Weak CSS foundations make every later step harder, because you will spend your framework time fighting layouts instead of learning the framework.
Step 2: JavaScript (2 to 4 months)
JavaScript is the language of the web. Every browser runs it, with no plugin and no setup, which is true of no other programming language. It is what turns a static page into something that reacts: menus that open, forms that check themselves before submitting, content that updates without a full reload, and data pulled live from an API.
This is the biggest step, and it is where the real programming starts. Up to now you were describing a page. Now you are writing logic. Expect it to feel harder than HTML and CSS, and expect that to be normal rather than a sign you are not cut out for it.
What to actually learn: variables and functions, arrays and objects, loops and conditionals, then the browser-specific skills that make JavaScript useful on a page. Those are DOM manipulation (finding and changing elements), event handling (responding to clicks and typing), and fetch (requesting data from a server and doing something with the response). Async code, promises, and async/await come in around here too, and they trip almost everyone up at first.
Free resources worth your time: freeCodeCamp's JavaScript Algorithms and Data Structures certification covers the language itself through hundreds of small exercises. Scrimba's Learn JavaScript is a better fit if you learn from interactive video where you can pause and edit the instructor's code directly. For a side-by-side comparison of the best free options, see /guides/best-free-javascript-course-2026, and /languages/javascript lists the full set.
Estimated time: 2 to 4 months. What "done" looks like: you can write your own functions, select and change elements on a page, handle a click or a form submission, and fetch data from a public API and show it. If you can build a page that fetches something and displays it without copying the code line by line, you are ready for the next step.
Step 3: Choose a path (before you finish JavaScript)
Here is the counterintuitive advice, and it is the most useful thing in this guide: pick your path before you have mastered JavaScript, not after. Most people wait until they feel "done" with JavaScript to decide between frontend, backend, or full-stack. But you never feel done with JavaScript, so waiting turns into months of drifting through more tutorials without direction. Pick a lane while you are still learning the language, and let that choice give your practice a target.
The three common paths: Frontend means you build what users see, using a framework like React (dominant in the job market) or Vue. Frontend jobs are the largest category and the most common first role. Backend means you build the server side: APIs, databases, and the logic behind the scenes, usually with Node.js so you stay in JavaScript. Full-stack means both, which is common at smaller companies and startups where one person covers the whole app.
For most beginners, frontend is the clearest first target. It builds directly on the HTML, CSS, and JavaScript you already have, and the job market for junior frontend roles is the deepest. You can widen into backend or full-stack later; the skills stack, they do not replace each other. To see the shape of each path with recommended free courses, look at /learn/frontend and /learn/backend. If you want the deeper career breakdowns, /guides/how-to-become-a-frontend-developer and /guides/how-to-become-a-backend-developer walk through what each job involves day to day and the skills each one needs. Choose one, point your projects at it, and stop keeping every door open.
Step 4: Build real projects (ongoing)
You do not learn to code by watching. You learn by building things that break and fixing them. At some point, usually earlier than feels comfortable, you have to close the tutorial and build something with no one walking you through it. That gap between following along and building alone is exactly the skill employers are paying for, so the sooner you practice it, the better.
Three projects that show real range, in increasing difficulty. First, a personal portfolio site built with plain HTML, CSS, and JavaScript, no site builder, which doubles as the thing you send to employers. Second, a weather app that fetches from a free public API and displays the results, which proves you can handle real data and async code. Third, a full-stack to-do app with a backend that saves your tasks, which pulls the whole stack together.
Deploy every one of them to a public URL. A project on your laptop does not exist as far as an employer is concerned. Put the code on GitHub with a README that explains what it does and how to run it. Building beats tutorial-watching because it forces the messy, real skills (reading docs, debugging, making decisions) that no tutorial can hand you. For a guided first build, /guides/how-to-build-your-first-website-for-free walks through shipping a real page end to end.
There is no single best platform, and the honest answer is that the right one depends on how you learn. Here is our read on the major free options so you can pick without second-guessing.
freeCodeCamp is the gentlest start. Everything runs in the browser, the steps are small and checked, and you earn free verifiable certificates you can add to LinkedIn. Best if you want structure and quick wins early. See /platforms/freecodecamp.
The Odin Project is more demanding and project-heavy. It makes you set up a real development environment and use Git from week one, with little hand-holding, which is the point: it teaches you to work like a real developer. Best if you want the full picture and do not mind a steeper climb. See /platforms/the-odin-project. For a direct comparison of these two, /guides/freecodecamp-vs-the-odin-project goes deeper.
Scrimba uses interactive video where you pause and edit the instructor's code inside the lesson. Best if passive video bores you but reading docs feels dry. MDN Web Docs is not a course; it is the reference the whole industry uses, and you should get comfortable searching it from day one rather than treating it as advanced. Many people mix platforms: freeCodeCamp or Scrimba to learn a concept, The Odin Project for depth and real projects, MDN whenever you need the authoritative answer. That is a feature, not indecision.
Common mistakes to avoid
Four mistakes stall most self-taught learners, and all four are avoidable once you can name them.
Tutorial hell: finishing course after course without ever building something alone. The cure is Step 4, build before you feel ready. Skipping CSS: rushing past layout because JavaScript looks more exciting, then spending your framework months fighting broken layouts. Give CSS its 4 to 6 weeks. Jumping to a framework before JavaScript is solid: React will not make sense if you do not understand functions, arrays, and the DOM first, and you will end up memorising patterns you cannot debug. And waiting until you feel "ready" to apply for jobs. You will not feel ready; almost no one does. Apply when you have three deployed projects and can talk through how you built them, not when the impostor feeling goes away, because it does not.