No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
1-deliberate-practice.md
2-visualize-behavior.md
3-self-assessment.md
4-javascript.md
LICENSE
README.md

README.md

JS Fundamentals

The first step towards becoming a code master is to become JavaScript.

  1. Memorize the basic language features in JS.
  2. Step through simple scripts exactly like the computer does.

Neither of these skills are as easy as the sound, and both of them are the foundation for everything else to come. Your end goal is to write applications large and small that provide practical solutions to real-world problems, but this is for later. You won't be able to do this until you've mastered your primary tool - the JavaScript language.

No matter how smart you are, or how good you are at what you did before learning to code, be prepared to struggle. This is totally normal. Being good at programming (or learning it quickly) are not indicators of how intelligent you are. They are indicators of how close your thinking style is to that of a computer programmer.

Don't be discouraged! If you master these fundamentals now, you will be prepared to learn the principles of software development and real-world problem solving.

So study hard! Dig in now, and keep at it every day. The more you prepare, the more everyone will benefit.


  1. JS Notional Machine: The code you read and write is really just a text-based UI for the JS compiler and runtime. Your goal in this introduction to JavaScript is to learn how the machine behind the code interprets and executes the commands you write.
  2. Deliberate Practice: It's not enough to complete exercises and make your code work, every exercise is an opportunity to learn. Learning to code will be very different from anything else you've learned before so take a look through these tips specifically for learning how to program.
  3. Visualize Behavior: The primary learning objective for this Fundamentals series is to learn how JavaScript works behind the scenes. There is no better way to do this than by visualizing your code's behavior with specialized softwares, pencil and paper. (Except maybe to write your own JS compiler.)
  4. Self Assessment: Learning to assess your own knowledge and performance are indispensable skills for a software developer. Here we'll introduce you to a few concepts and techniques you can use to assess your understanding of JavaScript (and more generally, software development) as you work your way through this curriculum.
  5. JavaScript:
    1. Variables & Types: Learn to diagram variables and their values. This covers: hoisting, let, var, Primitives vs. Objects, objects without methods, arrays, garbage collection.
    2. Scope & Control Flow: Learn to diagram block scope as it's implemented in code containing control flow operations. This covers: block scope, conditionals, loops, error handling, evaluating operations by hand.
    3. Scope & Context: Learn to diagram execution context. This covers: the call stack, context, lexical scope, functions, return values, closure.
    4. Objects with Methods: Learn to diagram the peculiarities of context & lexical scope in object methods. This covers: _this, object methods (w/ inheritance), method closure.
    5. Prototypical Inheritance: Learn to diagram inheritance chains and the JavaScript object/type system. This covers: the lookup chain, __proto__, .prototype, native js types & objects.
    6. Asynchronous Behavior: Learn to diagram asynchronous behavior. This covers: callbacks, promises, the event loop.