I’m a big fan of JavaScript books. Being a long-time learner of JavaScript, I’ve had the pleasure of reading a great many of the popular JavaScript books on the market. These days I tend to skip the ones targeted to rank newbies, but I still read a lot of books intended for JavaScript developers with a little experience.

This is a strange time for JavaScript books. Because we just got a major update to the JavaScript language in ES6, today’s JavaScript syntax and style looks quite different from the ES3-ES5 style JavaScript you’ll see discussed in most books, but because ES6 is really just a superset of ES5, most of the old books have nuggets of learning that still apply.

In other words, the old books aren’t obsolete, they’re just showing their age a little — even the ones released only 2 years ago. It might seem like talking to a senior citizen who still uses slang from the 60’s. If you’re new to JavaScript, it might be fun to discover all the crazy hacks old-timers used to put up with just to use array methods on arguments. Enjoy the JS history lesson.

Some authors in the JavaScript community have written books intended to teach you ES6. I recommend reading them after you have a little familiarity with basic JavaScript. If you don’t know ES6 yet, read “How to Learn ES6”.

Eventually, all new JS book authors will take ES6 for granted, and then the JS book world will return to normal. I’ll list my recommendations roughly in learning order.

As with my other book posts, the Amazon links are affiliate links, and a portion of the money you spend will be used to fight homelessness with JSHomes.

Enough talk. Bring out the books!

The Books

True to the title, this book is a whimsical exploration of very basic programming concepts, but don’t let that fool you. Books for kids aren’t just for kids. If you have never touched code before, this is a good place to start, even if you’re all grown up. Diving in the deep end before you learn how to swim can be a frustrating experience. It’s better to start your practice with some easy wins.

2. “Composing Software” by Eric Elliott (disclaimer: That’s me) is an exploration of functional programming and object composition in JavaScript. All software design is composition: the act of breaking complex problems down into smaller problems and composing those solutions. Most developers have a limited understanding of compositional techniques. It’s time for that to change.

In “Composing Software”, Eric Elliott shares the fundamentals of composition, including both function composition and object composition, and explores them in the context of JavaScript. The book covers the foundations of both functional programming and object oriented programming to help the reader better understand how to build and structure complex applications using simple building blocks.

3. “Eloquent JavaScript: A Modern Introduction to Programming” by Marijn Haverbeke

This book is a work of art. It walks you through the essential concepts with a clear roadmap using clear language. It’s masterfully composed and edited, and unlike most programming books, it’s full of exercises for you to practice. If I were teaching the basics of programming in high school or college, I would use this as a text book.

4. “JavaScript: The Good Parts” by Douglas Crockford

It may seem absurd now, but when this book was written, JavaScript was still a young language which started life as a tiny scripting language in browsers. At the time, browsers were just beginning to be explored by serious application developers.

Prior to 2004, it was very rare to see real applications running in a browser. The browser was barely interactive. It required page reloads to transmit any data to the server, it didn’t have any storage capacity of its own worth talking about. JavaScript was primarily used to create trivial user interface effects like mouse hover states.

JavaScript was the target of many jokes from “real programmers” who wrote code in compiled languages like C/C++, C#, and Java. If you wanted to do any real programming for the browser, you used flash.

In those days, it was easy to ridicule JavaScript, and everybody seemed to do it, but Douglas Crockford recognized that Brendan Eich hid some nuggets in the language that are only now starting to be truly appreciated by the programming masses. This book explores the basics of those features, and may give you a new appreciation for how special and cool JavaScript really is.

5. “Programming JavaScript Applications: Robust Web Architecture with Node, HTML5, and Moderns JS Libraries” by Eric Elliott (that’s me)

When I started hiring JavaScript developers to build applications, it really struck me how few of them understood how to harness JavaScript to build robust application architecture. With that in mind, I decided to write a book that would cover some JavaScript best practices, introduce people to prototypes, object composition, and at least the basic concepts of functional programming (enough to understand how to build and maintain a typical JavaScript application), and then apply those concepts to building some of the common concerns that spring up in the majority of applications, regardless of the application business domain.

Lots of books answer the question, “how do I use JavaScript?” I wanted to answer the question, “how do I use JavaScript to build a real application?”

Technology changed a lot in the two years since we released the book, but in my honest opinion (as objective as the author can be), it’s still the best overview of JavaScript app architecture on the market today. In addition to deepening your understanding of JavaScript, you’ll learn about Node basics, RESTful APIs, authentication and authorization, feature toggle systems, logging, and more.

6. “Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript” by David Herman

After you’ve had some basic exposure to JavaScript, “Effective JavaScript” will take you on a guided tour of the language in more depth, showing by example lessons taught by a master programmer seasoned in his craft.

Right away you’ll be introduced to some of the quirks of JavaScript, from floating point number precision (because JavaScript only has one number type, and it’s a floating point type), to the oddities of type coercions and semicolon insertion. The rest of the book continues in the same style, exploring best practices for working with functions, objects, arrays, library and API design, and concurrency. Regardless of your skill level, I promise you will learn something new.

7. “JavaScript: The Definitive Guide” by David Flanagan

The Definitive Guide is a deep exploration of JavaScript and web platform API features from the perspective of somebody interested in building web applications. It is a fairly thorough overview of a lot of language features, sprinkled with warnings about old versions of IE that you can probably safely ignore at this point. There have been six editions of the book, and I hope there are many more editions to come. I have owned previous editions, and I always learn something new when a new one is released.

8. “You Don’t Know JS” by Kyle Simpson

This one is really a series of books — all of them similar in style and scope, some of them bigger than others, and all of them very good.

I have been programming in JavaScript for a long time. I have studied multiple versions of the JavaScript specifications, and followed the development of new versions of the specification closely, yet Kyle’s deep fascination with exploring all the little nooks and crannies managed to uncover many bits of the language that I had not yet discovered or explored.

If you thought “The Definitive Guide” was a deep dive, break out your scuba gear and prep your deep sea submersible ocean explorer. You’re about to see some JavaScript species no human has ever encountered before (well, before this series was written, anyway).

What you won’t find in this series is a lot of talk about software architecture, deep programmer wisdom, or an abundance of software design principles that will easily span many different languages. But it will certainly help you gain a new appreciation and a deeper understanding of JavaScript. Kyle’s singular focus on deep diving into language features is a rare treasure that I imagine even the TC39 team could learn something from.

9. “JavaScript Allongé: The Six Edition” by Reginald Braithwaite

JavaScript Allongé in its essence is a book about thinking in functions. Building flexible software from small, decoupled units.

That said, it tries not to be overly prescriptive or opinionated. To borrow from the introduction:

“JavaScript Allongé does not attempt to address the question of JavaScript best practices in the wider context of software development, because JavaScript Allongé isn’t a book about practicing, it’s a book about thinking.”

As you read the book, you’ll realize that the author keeps his promises. This should definitely not be the first JavaScript book you read. Reginald introduces simple concepts like `const` by slow building through intermediate function scope topics like IIFE and closures, after demonstrating partial applications and curried function expressions.

Most introductory JavaScript books wisely begin by talking about values and how to represent those values with bindings using `var`, `let`, or `const`. Reginald flips the beat for good reason — he’ll have your brain dancing. The book is trying to help you think differently and deeply about functions, and it works.

You should read it after you have a working familiarity with JavaScript, when you’re ready to start exploring how to combine functional and object oriented programming techniques to build JavaScript applications.

10. “Node.js in Action” by by Mike Cantelon, Marc Harter, TJ Holowaychuk, and Nathan Rajlich

“Node.js in Action” is a great introduction to basic Node application development covering essential topics like HTTP/HTTPS, Connect/Express middleware, realtime messaging with Socket.IO, using databases, and so on. If you’re new to Node, this is a great place to start.

11. “High Performance Browser Networking” by Ilya Grigorik

It is difficult to overstate the importance of great application performance. Shaving milliseconds off of page load times and reducing UI jank deliver investment returns that can only be rivaled by a great user interface design overhaul.

This book covers high-impact performance considerations such as HTTP2, data streaming, WebSockets, WebRTC, DataChannel, and so on.

In other words, this book is the definitive guide to building a more successful application by optimizing its performance profile.

12. “Web Audio API” by Boris Smus

Every true JavaScript Rock Star needs this book. After all, you’re not a real JS rock star until you plug your guitar into your web browser. I know I said these were books “every JavaScript developer should read”, but this one is only for JavaScript developers who love playing with sounds and music. Most JavaScript developers could get away with never learning this API, and it wouldn’t hurt them at all — but that’s boring.

This book is on my list primarily because I love music and audio engineering. The web audio API is actually a system of related APIs for generating and manipulating sound using web platform standards. You can use it in browsers and in Node.

To use the web audio API, you manipulate nodes in a graph. Normally, I’d just refer you to a handy reference, but unless you’re an audio engineer, you might feel a bit overwhelmed. This book guides you through the various types of audio nodes and teaches you how to weave them together, work with the timing API to precisely schedule sounds, manipulate parameters over time, apply audio effects, and even create audio visualizations.

In other words, it’s a whole lot of fun.