what it feels like to learn js
this is a syllabus of everything i either used or didnt use to learn front end js to a decent level. it's based on a hellish trello board i kept that rapidly grew out of my control.
i've rated everything from 1-5 burritos (π―) depending on the skill level required to understand the concepts. i've also treated ES2015 as something that should be used from the start, rather than a separate section.
- the basics
- in-built methods & objects
- intermediate js concepts
- passing by value/reference
- recursive functions
- callbacks
- the event loop
- dom & events (aka makin' websites)
- dom
- events
- advanced js concepts
4.
this
5. prototypes 6. closures 8. namespacing & modules - object oriented js + mvc
- tdd
- node.js & npm
- common.js & amd
- gulp & webpack
- design patterns
- functional js
- react & redux
// the different data types, how they're written, and how they work.
// - values (booleans, numbers, strings)
// - operators
// - other values (null, undefined, NaN)
// - arrays
// - functions
// - objects
// - control flow (if, else if, else)
// - loops (for, while, do-while)
- [mooc] Codecademy - Learn JavaScript π―
- [book] Eloquent JS - Chs. 1-4 π―
- [mooc] FreeCodeCamp - Basic JavaScript
- [reference] Babel ES2015 Features
- let is the new var, const π―
- template strings π―
- arrow functions π―
- default, rest, spread π―π―
- [reference] conditional (ternary) operator π―
- [training] Codewars (8kyu & 7kyu) π―
// the most useful/interesting ones:
// - number - isNan, toFixed
// - string - split, join, toLowerCase, toUpperCase, indexOf, search, match, replace, repeat
// - array - pop/push/shift/unshift, forEach, map, filter, reduce, sort, concat, every, some, from (loads!)
// - object - hasOwnProperty, Object.create, Object.assign, Object.keys
// - function - apply, call, bind
// - regexp, math + date
- [book] Eloquent JS - Ch. 5: Higher-Order Functions π―π―
- [mooc] FreeCodeCamp - the rest of the Frontend Certificate π―π―
- [reference] MDN π―π―
- [training] Codewars (6kyu & 5kyu) π―π―
- [article] JavaScriptβs Apply, Call, and Bind Methods are Essential for JavaScript Professionals π―π―π― (requires understanding of
this
, see ch 3)
-
passing by value/reference
- [article] JavaScriptβ - βcall-by-sharing π―π―
-
recursive functions
- [mooc] Codeacademy - Recursion in JavaScript π―π―
-
callbacks
- [article] Understand JavaScript Callback Functions and Use Them π―π―
-
the event loop
- [video] Philip Roberts: What the heck is the event loop anyway? π―π―π―
- dom
- [book] Eloquent JavaScript - ch 13 The Document Object Model π―π―
- events
// i recommend reading the entirety of You Don't Know JS (YDKJS) by Kyle Simpson if you can
// the full book is online: https://github.com/getify/You-Dont-Know-JS
this
- [mooc] Udacity - Object Oriented JavaScript π―π―π― (has a good bit on
this
) - [book] YDKJS - this & object prototypes ch 1+2 π―π―π―
- [mooc] Udacity - Object Oriented JavaScript π―π―π― (has a good bit on
- prototypes & inheritance
- [book] Stoyan Stefanov - Object-Oriented JavaScript ch 5+6 π―π―π―π―
- [book] YDKJS - this & object prototypes ch 5 π―π―π―π―
- closures
- [book] YDKJS - scope & closures ch 5 π―π―π―π―
- namespacing & modules
- [mooc] Watch And Code - Practical JS π―π― (make a todo app with OOJS)
- [mooc] Udacity - Object Oriented JavaScript π―π―π―
- [mooc] Udacity - JavaScript Design Patterns π―π―π― (OOJS is technically a design pattern, hence the title of this. See ch 10 for extra design patterns)
- [book] YDKJS - this & object prototypes ch 4 π―π―π―
- [$$$ mooc] Watch And Code Premium - Test Driven Development π―π―π― (just vanilla js)
- [mooc] Udacity - JavaScript Testing π―π―π― (vanilla + jasmine)
// the only things you'll really need to know about npm are that it's where modules other people have
// written are stored and you can install them on your computer like this:
npm i dependency-name
// to install locally in your project, do:
npm i -D dependency-name
// learning node at at least some level is good, even if you don't plan to use it. it'll help you understand
// npm, modules and web tooling a bit better
- [mooc] nodeschool.io learn-you-node π―π―π―
- [mooc] FreeCodeCamp - Backend Certificate (includes learn-you-node) π―π―π―
- [further reading] node-for-beginners π―π―π― - π―π―π―π―π―
// tldr: both are ways to load modules.
// amd (see require.js) is ugly as hell, but asynchronous
define([moduleToImport], function () {
return somethingToExport
});
// commonjs (used by node.js) is synchronous as hell, but pretty
require('./moduleToImport');
exports.thing = somethingToExport;
// but you should use es2015 modules anyway
import {module} from 'moduleToImport';
export somethingToExport;
- [article] ES6 Modules: The End of Civilization As We Know It? π―π―π―π―
- [article] Addy Osmani - Writing Modular JS π―π―π―π―
// i learned gulp first, which i thought was useful (and fun! i recommend it!). but then i learned webpack and it is
// a great replacement for gulp. you should definitely learn webpack.
gulp
- [mooc] Udacity - Web Tooling & Automation π―π―π―
webpack
- [article] Beginner's guide to Webpack π―π―π―
- [article] webpack-howto π―π―π―π―
- [book] SurviveJS - Become a Webpack Master π―π―π―π―
// MVC, OOJS and modules are actually design patterns that help keep your code maintainable.
// some other key design patterns to learn are:
// - getters & setters
// - singleton
// - pub-sub / observer
// - mixin
// - factory
// - decorator
// the resources below individually cover all of these
- [$$$ mooc] Mastering JS Design Patterns π―π―π―π―
- [book] Addy Osmani - Learning JavaScript Design Patterns π―π―π―π―π―
- currying
- monads
- [mooc] Codeacademy - Learn ReactJS: Part I π―π―π―
- [book] SurviveJS - Become a React Master π―π―π―π―π―
- [mooc] React Fundamentals π―π―π―π―π―
- [mooc] Codeacademy - Learn ReactJS: Part II π―π―π―π―π―