Derek Sivers

How to learn JavaScript


Since I mentioned that I learned JavaScript, people have asked me how and what I recommend. So here’s my experience and best advice for 2024.

Learn plain JavaScript

First, it’s important to learn plain JavaScript.

Don’t depend on a library of shortcuts. JavaScript will be around for many years, while libraries and frameworks come and go every year.

How to begin

Don’t just learn from little bits of tutorials, tips, or tricks online. Instead, you want a real foundation and solid understanding. Then all your future learning will be so much faster.

Start with the book: “Eloquent JavaScript”. It’s free to read there on his website. It’s deep and thorough. A great start-to-finish JavaScript tutorial. Relax. Focus. Do it in order. You’ll know more than most once you get to the end.

Do Free Code Camp. Someone who had 600 JavaScript learners said Free Code Camp had the best results. Do it at the same time as you’re reading books and articles. Learning sticks better when coming through different senses.

Make it stick

I highly recommend you write down every new thing you learn, ideally into a flashcard program, like this. It’s a lot to digest, so you’ll have to remind yourself of what you’ve learned, or you’ll immediately forget.

Avoid the shortcuts

When solving a problem, everyone will point you to some pre-made solution. “Use jQuery! Use React! Use this library and save yourself some typing!”

But no! Not yet! Do it the hard way. Solve everything yourself with plain JavaScript. It’s the best way to learn.

What next?

If you had a web app in mind, start building it now. After you wrestle with using plain “vanilla” JavaScript, then learn React to see the shortcuts it gives you.

If you want a good-paying job, you can get hired almost anywhere. Since you know the real JavaScript foundations more than most people, you’re very valuable. You can quickly learn whatever framework they’re using.

Any other suggestions? What worked for you?

Please share any other suggestions or experiences, here: