Over 20 Resources to Advance Your JavaScript Skills
Tags: javascript, webdev
Published: 2020-05-04 16:39:55

JavaScript has never been more used than today. It's a real asset to get good at it. When discovering JavaScript, you first learn variables, if statements, loops, arrays, objects, functions! Maybe you even know what is `this` and how to use `async/await`.
But that's just the tip of the iceberg. There's more to JavaScript you need to learn.

To better understand JavaScript, you need to deeply understand its foundations and how it works under the hood. That can be a daunting task. But don't worry, I got your back!
I read and watched many resources to get better at JavaScript, and I want to share that with you today.

## Topics to learn

To level-up your JavaScript skills, you'll need to know:

### What is JavaScript

Multi-paradigm, dynamically typed, single-threaded, ECMAScript specification. You need to know what makes JS JS. Kyle Simpson explained it in the [first chapter](https://github.com/getify/You-Dont-Know-JS/blob/2nd-ed/get-started/ch1.md) of You Don't Know JS Yet.

### How the JavaScript engine works

To run code, you need an engine to run it. Lydia Hallie explained it well in this post about the [JavaScript engine](https://dev.to/lydiahallie/javascript-visualized-the-javascript-engine-4cdf). You'll realize how typing JavaScript can make it more performant for v8.

### The dreaded event loop

Did you know that JavaScript executes synchronously? But then how can you make API calls and still not block the page? Introducing the event loop and browser APIs. There are two excellent videos on that: [In The Loop](https://www.youtube.com/watch?v=cCOL7MC4Pl0) from Jake Archibald and [What the heck is the event loop anyway](https://www.youtube.com/watch?v=8aGhZQkoFbQ) from Philip Roberts.

### Execution context, hoisting, scopes and closures

You need to know what JavaScript actually does when running a program. For that Tyler Mc Ginnis got your back with an awesome post on [execution context, hoisting, scopes and closures](https://tylermcginnis.com/ultimate-guide-to-execution-contexts-hoisting-scopes-and-closures-in-javascript/).

### Coercion

What actually happens when JavaScript interprets `"1" == 1`? Hint: coercion. Alexey Samoshkin wrote a [guide on JavaScript coercion](https://www.freecodecamp.org/news/js-type-coercion-explained-27ba3d9a2839/) that's really interesting!

### Prototypes in JavaScript

This is a JavaScript pillar that you can't escape, so you better learn what it means. I found two useful posts on that: [Prototypes in JavaScript](https://medium.com/better-programming/prototypes-in-javascript-5bba2990e04b) from Rupesh Mishra and [A Beginner's Guide to JavaScript's Prototype](https://tylermcginnis.com/beginners-guide-to-javascript-prototype/) from Tyler McGinnis. Hopefully, with these articles, the prototype chain, `__proto__` and objects won't be scary anymore.

### This, call, apply and bind

Ah, `this`. With a misunderstanding of `this`, you can often get common errors like `Cannot read property 'name' of undefined` or `greet is not a function` in your programs. Tania Rascia broke down these concepts for you in her post [Understanding This, Bind, Call, and Apply in JavaScript](https://www.taniarascia.com/this-bind-call-apply-javascript/).

### Promises and async/await

ES2015 made JavaScript developers' lives more comfortable by bringing promises that allowed you to write simpler asynchronous code. Learn what they mean by reading [What is a Promise?](https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-promise-27fc71e77261) from Eric Elliott or [JavaScript Promises for Dummies](https://scotch.io/tutorials/javascript-promises-for-dummies) on Scotch.io. You can also watch a great talk from Wes Bos on [Async/Await](https://www.youtube.com/watch?v=DwQJ_NPQWWo).

### Modules

What are ECMAScript modules? Common JS? A module bundler? Find the answers in yet another post from Tyler Mc Ginnis on [JavaScript Modules](https://tylermcginnis.com/javascript-modules-iifes-commonjs-esmodules/). I also highly recommend that you check out [this course on Webpack 4 fundamentals](https://frontendmasters.com/courses/webpack-fundamentals/) from Sean Larkin.

### Functional programming

We already know that JavaScript is a multi-paradigm language. One paradigm supported in JavaScript is functional programming since functions are first-class citizens. Andrea Bertoli made an excellent post on [the basics of functional programming](https://dev.to/mr_bertoli/an-adequate-introduction-to-functional-programming-1gcl). You'll see the power of composition.

## Courses

There are many resources for learning JavaScript, as you saw above, and it may be overwhelming. Don't worry. If you prefer to get a single course, I got your back too:

- [Advanced JavaScript](https://tylermcginnis.com/courses/advanced-javascript/) from Tyler Mc Ginnis: I used many resources from him previously. That's because he has a whole course on that. It'll make you, for sure, a more proficient JavaScript developer.
- [Advanced JavaScript Concepts](https://www.udemy.com/course/advanced-javascript-concepts/) from Andrei Neagoie: he has released many popular courses before this one. You'll find anything you need to know to become an advanced JS developer.
- [JavaScript Visualized](https://dev.to/lydiahallie/javascript-visualized-event-loop-3dif) from Lydia Hallie: she wrote many posts on JavaScript concepts with remarkable visual explanations. I highly recommend it.
- [JavaScript: the Hard Parts](https://frontendmasters.com/courses/javascript-hard-parts-v2/) from Will Sentance. This great workshop will make the hard parts of JavaScript easier for you. To go further, you can watch the following two workshops from Will too: [JavaScript: The Hard Parts of Object-Oriented JavaScript](https://frontendmasters.com/courses/object-oriented-js/) and [JavaScript: The New Hard Parts](https://frontendmasters.com/courses/javascript-new-hard-parts/)

When you have to learn new concepts, you need to space your learning in time, read or watch different resources and practice a lot. Using this strategy allows you to truly master a topic. That's why I recommended various posts and courses. Don't wait and start to get better at JavaScript!