{
"$type": "site.standard.document",
"description": "docs: review of Eloquent JavaScript by Marijn Haverbeke",
"path": "/posts/eloquent-javascript-by-marijn-haverbeke/",
"publishedAt": "2025-02-14T00:00:00.000Z",
"site": "https://read.ryancowl.es",
"tags": [
"Reviews"
],
"textContent": "Eloquent JavaScript by Marijn Haverbeke sits somewhere between introductory and intermediate, which makes it a good fit if you know some JavaScript but want to understand it more deeply. I just finished it and came away impressed with how much ground it covers without ever feeling rushed.\n\nThe writing style is what kept me going. Haverbeke reaches for metaphors that actually clarify things rather than just decorating them. On variable bindings:\n\n\"You should imagine bindings as tentacles rather than boxes. They do not contain values; they grasp them — two bindings can refer to the same value. A program can access only the values to which it still has a reference. When you need to remember something, you either grow a tentacle to hold on to it or reattach one of your existing tentacles to it.\"\n\nThat kind of framing makes abstract concepts stick in a way that technical definitions don't always manage.\n\nThe book progresses from values, types, and control flow through higher-order functions, object-oriented and functional patterns, modules, async programming, and eventually into building small projects (a robot, a programming language, a pixel art editor). The project chapters were some of my favorites because they tie earlier concepts together into something tangible. Each chapter also includes exercises, which I'd recommend actually doing rather than skipping over.\n\nThe entire book is available online for free (and as an epub). The online version includes a built-in code sandbox so you can run and modify examples right in the browser, which is a nice touch. That said, I preferred the hardcopy when working through code examples. Something about flipping back and forth between pages beats scrolling.",
"title": "Eloquent JavaScript by Marijn Haverbeke"
}