Step 1 • Foundations
Syntax, Variables, and Data Types beginner Learn the building blocks — let/const/var (and why var is problematic), primitive types (string, number, boolean, null, undefined, symbol, bigint), type coercion (== vs ===, truthy/falsy), and how typeof and instanceof work. Understand why null == undefined but null !== undefined.
Language JavaScript 6h Step 2 • Foundations
Control Flow and Operators beginner Master if/else, switch, for, while, do-while, for...of (iterables), for...in (object keys — and why to be careful), break/continue/return, the ternary operator, logical operators (&&, ||, ??), and short-circuit evaluation. Understand labeled statements and why nested loop breaks need labels.
Language JavaScript 5h Step 3 • Foundations
Functions, Scope, and Closures beginner Understand function declarations vs expressions vs arrow functions, parameter defaults, rest parameters, lexical scope, the scope chain, hoisting (variable and function), and closures — how inner functions retain access to outer variables even after the outer function returns. Closures power private state, memoization, and factory functions.
Language JavaScript 8h Step 4 • Foundations
Objects, Prototypes, and Classes beginner Learn object literals, computed property names, shorthand methods, getters/setters, property descriptors (writable, enumerable, configurable), the prototype chain (how [[Prototype]] links objects), Object.create(), this binding rules (implicit, explicit with call/apply/bind, new, arrow), and ES6 classes as syntactic sugar over prototypes.
Language JavaScript 8h Step 5 • Foundations
Modern JavaScript (ES6+) beginner Use the modern JavaScript features shipped since ES2015 — destructuring (arrays, objects, nested, default values), spread/rest operators, template literals, optional chaining (?.), nullish coalescing (??), logical assignment (&&=, ||=, ??=), Array methods (map, filter, reduce, find, flat, flatMap), Object.entries/keys/values/fromEntries, and dynamic imports.
Language JavaScript 6h Step 6 • Foundations
Arrays, Maps, Sets, and Iteration beginner Use arrays for ordered sequences and understand the full method suite (push/pop/shift/unshift, slice/splice, sort, indexOf/findIndex/includes). Use Map for key-value stores with non-string keys. Use Set for unique collections and deduplication. Know the iterable protocol (Symbol.iterator) and how for...of works with custom iterables.
Language JavaScript 6h Step 7 • Tooling
Modules and Code Organization intermediate Understand ES Modules (import/export, named vs default, re-exports, dynamic import()) vs CommonJS (require/module.exports), why you can't mix them, how bundlers resolve modules, barrel files (index.js) and their impact on tree-shaking, circular dependencies and how to avoid them, and organizing a large codebase into well-bounded modules.
Backend JavaScript 6h Step 8 • Async
Promises and Async/Await intermediate Master async JavaScript — the Promise constructor, then/catch/finally chaining, Promise.all (fail fast), Promise.allSettled (all results), Promise.race (first to settle), Promise.any (first success), and async/await as syntactic sugar. Understand error propagation, why unhandled promise rejections crash Node.js, and patterns for concurrent async workflows.
Language JavaScript 8h Step 9 • Async
Event Loop and Runtime Model intermediate Understand the JavaScript runtime — the call stack (synchronous execution), heap (object allocation), task queue (setTimeout, I/O callbacks), microtask queue (Promise callbacks, queueMicrotask — executes before next task), and the event loop that orchestrates them. Understand why long synchronous work blocks I/O and why Promise.resolve().then() fires before setTimeout(() =>{}, 0).
Language JavaScript 6h Step 10 • Async
Generators and Iterators intermediate Use generator functions (function*) to produce sequences lazily, understand yield, return, and throw in a generator, the iterator protocol (next(), done, value), and async generators (async function*) for async iteration with for await...of. Generators power infinite sequences, cancelable async operations, and stream processing.
Language JavaScript 5h Step 11 • Reliability
Error Handling and Defensive Patterns intermediate Handle errors correctly — try/catch/finally, rethrowing errors, custom Error subclasses (class ValidationError extends Error), error classification (operational vs programmer errors), async error propagation in Promises and async/await, the unhandledRejection event in Node.js, and the Fail Fast principle. Avoid swallowing errors silently.
Language JavaScript 5h Step 12 • Patterns
Functional Programming Patterns intermediate Apply functional programming ideas to JavaScript — pure functions and referential transparency, immutability (Object.freeze, spread for updates), higher-order functions, function composition (pipe/compose), partial application and currying, and why avoiding side effects in business logic makes code testable. Understand when to reach for libraries like Ramda.
Language JavaScript 6h Step 13 • Patterns
Design Patterns in JavaScript intermediate Apply classic design patterns idiomatically in JavaScript — Module pattern (IIFE, revealing module), Observer/EventEmitter, Strategy, Factory, Builder, Singleton (and why to avoid it), Decorator (stage 3 proposal), and Proxy for validation and reactive data. Know which patterns solve which problems and when they over-engineer.
Language JavaScript 7h Step 14 • Advanced
Proxies, Reflect, and Metaprogramming advanced Use Proxy to intercept object operations (get, set, has, deleteProperty, apply) for validation, logging, reactive data binding, and access control. Use Reflect as a safe complement for forwarding operations. Understand WeakRef, FinalizationRegistry for memory-sensitive caches, and Symbol for well-known protocols (Symbol.iterator, Symbol.toPrimitive).
Language JavaScript 6h Step 15 • Platform
Browser and Web APIs intermediate Use key browser APIs beyond the DOM — Fetch API with AbortController, Web Storage (localStorage, sessionStorage), IndexedDB, the History API for client-side navigation, Intersection Observer (lazy loading, infinite scroll), ResizeObserver, MutationObserver, the Clipboard API, the Geolocation API, Web Workers for off-thread computation, and the Web Share API.
Frontend JavaScript 7h Step 16 • Quality
Linting, Formatting, and TypeScript intermediate Keep JavaScript codebases consistent and type-safe — configure ESLint (rules, plugins, extends), Prettier for formatting, EditorConfig for cross-editor consistency, and JSDoc for inline type documentation. Understand when to migrate to TypeScript, how to use TypeScript's checkJs mode to typecheck JavaScript files, and how to write JSDoc types that TypeScript understands.
Testing JavaScript 6h Step 17 • Quality
Testing JavaScript intermediate Write reliable tests — unit tests for pure functions, integration tests for modules with I/O (using mocks/stubs), and snapshot tests for data transformations. Use Vitest (fast, ESM-native, compatible with Jest APIs), test doubles (fakes, stubs, mocks, spies), property-based testing for edge case discovery, and measure coverage without worshipping 100%.
Testing JavaScript 8h Step 18 • Advanced
Performance and Memory Management advanced Profile and optimize JavaScript — use Chrome DevTools Performance panel to identify long tasks, use Memory Profiler to find memory leaks (detached DOM nodes, closures holding references, forgotten event listeners), understand V8 JIT compilation hints (avoid hidden class changes), Big O analysis for algorithm choice, and benchmark with performance.now().
Language JavaScript 8h Step 19 • Advanced
Security in JavaScript advanced Write JavaScript that doesn't introduce security vulnerabilities — prevent XSS by using textContent instead of innerHTML for untrusted data, understand prototype pollution attacks (and how to prevent them with null-prototype objects), safe JSON parsing, avoiding eval(), securing postMessage origins, and auditing npm dependencies for known vulnerabilities.
Language JavaScript 5h Step 20 • Ship It
Packaging, Publishing, and Versioning advanced Publish reusable JavaScript packages to npm — configure package.json exports map for ESM/CJS dual-format packages, add TypeScript type declarations, write a CHANGELOG, use semantic versioning correctly (major for breaking changes, minor for features, patch for fixes), set up automated releases with semantic-release or changesets, and document the public API.
Backend JavaScript 7h