Book Review – Eloquent JavaScript

Eloquent Javascript - 3rd Edition - A Modern Introduction to Programming - Marjin Haverbeke

Eloquent JavaScript

A Modern Introduction to Programming

Marjin Haverbeke
3rd edition

I’ll admit it, I love programming books. Online tutorial videos and articles are great, but nothing beats the deep dive and focused attention that reading a book offers. I guess that’s why they still get published in the internet age.

In Eloquent Javascript – A Modern Introduction to Programming, Marjin Haverbeke attempts to cover many Javascript concepts and does so in a sort of a skewed way. I’ve read many programming books over the years and this one is unique in it’s approach. This does not, in my opinion, yield great results in this case.

Further, I think that calling this a an “introduction to programming” is incorrect. The book is neither an introduction to Javascript nor to programming in general. The author’s approach tends towards getting into the weeds and staying there.

There are some positives. however, relating to format. The book is available is multiple formats including HTML. The author put a tremendous amount of effort in to providing code files and a way to test your solutions to the exercises. It;s a long one too, as the ePub is about 500 pages.

When you are struggling to follow the book, do not jump to any conclusions about your own capabilities.

from the book’s introduction

In reference to the quote above, I’d ask you consider the possibility that struggling to follow the book could be pinned to the author.

The issue that I had with this book is that it does a poor job of teaching. Like the smartest kid in the class Marijin is dedicated to showing you how clever he is by crafting code examples that are dense and hard to follow. My approach has always been to write clean, simple, we commented code. Marjin seems to take the “the code is self explanatory, who needs comments?” approach.

He seems revel in tossing obscure syntax into his examples. While he does identify some example as edge conditions or a sort of Javascript lore, but doing so seems out of place for readers of an “introduction”.

Code blocks are presented, often with a new concept added, before there is an explanation of what the code does, which comes after you’ve read the code with a tenuous understanding of what’s going on.

As someone who has written JavaScript code for years, I can see how this methodology will have a reverse effect on someone trying to enhance their skills, making them feel like the kid in the bottom third of Marijin’s class.

His explanation of an advanced concept like a async await is not only inadequate but later used in contexts that you’ll be challenged to understand.

The serial use of recursive functions and objects just makes the code more difficult to understand without offering any stated advantages. Note also that the code is seldom commented inline, which would greatly help his readers to understand.

Scenarios used to illustrate programming concepts in books like this are often cute and trivial yet simple enough to relate to and help to set the stage for the programming tasks. The author’s scenarios start out this way but get more obtuse and confounding as the increase in absurdity. These are the hardest parts of the book to get through and I suspect a good many readers will skip these sections after a time or put the book down altogether.

The section that I found most valuable was the one on regular expressions, which he does a great job of explaining. In this case his unorthodox style works well and offers a different perspective on the topic.

I wish I could like this book considering the time I spent reading it, but alas, I’d advise you to avoid it.

2 thoughts on “Book Review – Eloquent JavaScript

  1. One year ago when I started my journey learning web development, I felt totally confused and discouraged half way into reading this book. I don’t understand why others would recommend it for beginners. Excellent review though!

Leave a Reply

Your email address will not be published. Required fields are marked *