Preface
Welcome to the 2nd edition of the widely acclaimed You Don’t Know JS (YDKJS) book series: You Don’t Know JS Yet (YDKJSY). If you’ve read any of the 1st edition books, you can expect a refreshed approach in these new ones, with plenty of updated coverage of what’s changed in JS over the last five years. But what I hope and believe you’ll still get is the same commitment to respecting JS and digging into what really makes it tick. If this is your first time reading these books, I’m glad you’re here. Prepare for a deep and extensive journey into all the corners of JavaScript.The Parts
These books approach JavaScript intentionally opposite of how The Good Parts treats the language. No, that doesn’t mean we’re looking at the bad parts, but rather, exploring all the parts. You may have been told, or felt yourself, that JS is a deeply flawed language that was poorly designed and inconsistently implemented. Many have asserted that it’s the worst most popular language in the world; that nobody writes JS because they want to, only because they have to given its place at the center of the web. That’s a ridiculous, unhealthy, and wholly condescending claim.Millions of developers write JavaScript every day, and many of them appreciate and respect the language.
Embrace All of JavaScript
Don’t buy the lie that you should only learn and use a small collection of good parts while avoiding all the bad stuff. Don’t buy the “X is the new Y” snake oil, that some new feature of the language instantly relegates all usage of a previous feature as obsolete and ignorant. Don’t listen when someone says your code isn’t “modern” because it isn’t yet using a stage-0 feature that was only proposed a few weeks ago! Every part of JS is useful. Some parts are more useful than others. Some parts require you to be more careful and intentional.The Toolbox Analogy
I find it absurd to try to be a truly effective JavaScript developer while only using a small sliver of what the language has to offer. Can you imagine a construction worker with a toolbox full of tools, who only uses their hammer and scoffs at the screwdriver or tape measure as inferior? That’s just silly.
The Title?
So what’s the title of the series all about? I’m not trying to insult you with criticism about your current lack of knowledge or understanding of JavaScript. I’m not suggesting you can’t or won’t be able to learn JavaScript. I’m not boasting about secret advanced insider wisdom that I and only a select few possess.Seriously, all those were real reactions to the original series title before folks even read the books. And they’re baseless.
A Gentle Challenge
I’m presenting a gentle but earnest challenge to you the reader, to set aside the assumptions you have about JS, and approach it with fresh eyes and an invigorated curiosity that leads you to ask why for every line of code you write.- Why does it do what it does?
- Why is one way better or more appropriate than the other half-dozen ways you could have accomplished it?
- Why do all the “popular kids” say to do X with your code, but it turns out that Y might be a better choice?
The Mission
The case doesn’t really need to be made for why developers should take JS seriously—I think it’s already more than proven worthy of first-class status among the world’s programming languages. But a different, more important case still needs to be made, and these books rise to that challenge. I’ve taught more than 5,000 developers from teams and companies all over the world, in more than 25 countries on six continents. And what I’ve seen is that far too often, what counts is generally just the result of the program, not how the program is written or how/why it works.Core Philosophy
My experience not only as a developer but in teaching many other developers tells me: you will always be more effective in your development work if you more completely understand how your code works than you are solely just getting it to produce a desired outcome.In other words, good enough to work is not, and should not be, good enough.
The Path
Some of you have started reading this book with the goal of completing all six books, back to back. I would like to caution you to consider changing that plan.Recommended Approach
My suggestion is you take your time going through YDKJSY:- Take one chapter - Read it completely through start to finish
- Go back and re-read it section by section
- Practice - Stop between each section and practice the code or ideas from that section
- Digest - For larger concepts, expect to spend several days digesting, re-reading, practicing, then digesting some more
You could spend a week or two on each chapter, and a month or two on each book, and a year or more on the whole series, and you would still not be squeezing every ounce of YDKJSY out.
Don’t Binge - Engage!
Don’t binge these books; be patient and spread out your reading. Here are some ways to engage more deeply:- Interleave reading with lots of practice on real code in your job or on projects you participate in
- Wrestle with the opinions I’ve presented along the way
- Debate with others, and most of all, disagree with me!
- Run a study group or book club
- Teach mini-workshops at your office
- Write blog posts on what you’ve learned
- Speak about these topics at local JS meetups
Own Your Opinions
It’s never my goal to convince you to agree with my opinion, but to encourage you to own and be able to defend your opinions. You can’t get there with an expedient read-through of these books. That’s something that takes a long while to emerge, little by little, as you study and ponder and re-visit.

