Eloquent JavaScript: A Modern Introduction to Programming
Marijn Haverbeke
Copyright Year:
ISBN 13: 9781593275846
Publisher: No Starch Press
Language: English
Formats Available
Conditions of Use
Attribution-NonCommercial
CC BY-NC
Reviews
The book is divided into three parts, with each part building upon the concepts covered in the previous one. The first part focuses on the basics of JavaScript, including variables, data types, and control structures. The second part covers... read more
The book is divided into three parts, with each part building upon the concepts covered in the previous one. The first part focuses on the basics of JavaScript, including variables, data types, and control structures. The second part covers JavaScript for web development, including the DOM and event handlers. The final part of the book covers Node.js and includes a project chapter for building a web site.
The author used terms that are not commonly used in JavaScript (i.e., "binding" instead of the more commonly used "variable"). Also, the author often uses let statements where the cay keyword would have been a more appropriate choice.
By their very nature, books about scripting and coding languages will necessarily be obsolete in a short time. This is because coding standards are always evolving.
This book would be appropriate for a beginning coding class, as the author explains basic terms which may be unfamiliar to new developers.
The book is certainly consistent in structure and voice.
Chapters are an appropriate length—not too long—and are structured for easy navigation. However, they are not modular in the sense that they could be taught in a different order than presented by the author.
The book is organized with each chapter building upon the previous ones. This approach allows readers to learn JavaScript in a logical and progressive manner.
I appreciated the use of the monospace font and color-coding in the code examples. This helps to distinguish the code from the surrounding text.
I did not notice any grammatical errors.
I found nothing inappropriate in the text.
As an introduction to JavaScript, this book hits all the basics: variables, functions, arrays/objects, classes, etc. In addition, there are chapters on regular expressions, error handling, and Node JS. (The latter is curious, though, because it... read more
As an introduction to JavaScript, this book hits all the basics: variables, functions, arrays/objects, classes, etc. In addition, there are chapters on regular expressions, error handling, and Node JS. (The latter is curious, though, because it only goes over Node commands strictly, and doesn't discuss NPM or popular frameworks beyond a fleeting mention.) The book goes through all these topics pretty efficiently without becoming too much of a thick 'door-stopper' manual.
After repeated readings, I've found no inaccuracies or errors in Eloquent JavaScript, 3rd Edition.
With regard to syntax, the author prefers using arrow functions, which may be more challenging to introductory-level readers rather than misleading.
The book is very up-to-date, and uses newer aspects of JavaScript such as arrow functions, fetch, and "let" (for assigning variables within a function scope, as opposed to "var" or "const").
The chapter on Node JS also adds timely relevance, but it could have gone farther to discuss the popular use of frameworks like Express, React, Vue, etc.
One omission is that the book doesn't address the concept of Ajax. While the "fetch" command is used to make HTTP requests, it could have gone farther to explain how it is related (or, depending on your view, synonymous with) Ajax.
Clarity is a weak point for Eloquent JavaScript. While some of the chapters are more straightforward and easy to understand, many of them become quickly dense and difficult. Once readers have grasped a basic understanding of core concepts, Haverbeke ramps up the skill level at too quick a pace. For example, in Chapter 11, we have barely understood the concepts of callbacks and promises when we get the advanced concepts of network flooding and message routing.
The examples, exercises, and Project chapters are too densely written and challenging for beginner or even intermediate readers. (Advanced readers, readers with a computer science background, or readers with intermediate experience in other programming languages may have a slightly less frustrating experience.) These should be opportunities to use practical, real-life scenarios, but (in addition to being too cryptically written), they are impractical (creating your *own* pixel art application from scratch) or even fantastic (i.e. the 'crow grid,' or 'observing the "wererabbit"'). This is a lost opportunity, but instructors using the textbook can easily use their own imagination to come up with exercises of their own. Unfortunately, it does come at a cost to the flow of the text for readers.
As stated earlier, this book is inconsistent in its skill level. Instructors can likely adapt to this (as I have) by picking and choosing which chapters or selections to assign to students.
Another strategy for managing the inconsistency is by paying attention to the short, useful chapter summaries at the end of each chapter.
Each chapter is a consistent (and appropriate) length. Each chapter has consistent, well-organized subheadings. It's easy to assign chapters or sections to students.
The organization of the text obeys its own internal logic, even if it is not the logical series of topics that I use in my class. The book starts with values, operators, and variables, then functions, etc. HTML, web browsers, and HTTP isn't discussed until halfway through the book. This differs from my course, where I discuss the web at the beginning.
As long as instructors are up-front about this editorial decision, it won't throw off students very much.
The web and print version of this book are both beautiful. The web version is readable and even elegant. The example interface works like a true browser console (even better, in fact), and is a valuable tool. The print version is sturdy; the weight is perfect and the paper stock is smooth but durable.
As of this review, I have not seen the e-book version.
I have not seen any grammatical errors in Eloquent JavaScript.
There are no direct cultural issues with Eloquent JavaScript. However, I do fear that the inconsistent difficulty level inserts a barrier to entry with this resource. I emphasize to my students that JavaScript is a great first programming to learn because you don't need to buy and install special software on your computer (your browser already has it installed!) and there are already free videos and resources out there to help you. When Haverbeke uses jargon or arcane examples, or ramps up the difficulty level, this could make students feel that *they* are incapable of grasping concepts that should, in fact, be accessible and within reach. Again, while this is not specifically a cultural issue, I do worry that it could affect women or minorities who are already at a disadvantage in a field dominated by white and Asian men.
I have taught an introductory JavaScript course with this textbook twice. Regardless of price, I believe this is the best single book on the market to teach JS. It's the most up-to-date and the least gimmicky. I love that there are chapters on regular expressions and the DOM, too, as those are particular interests of mine.
As noted above, however, this book is not without major flaws. Some of the chapters (in addition to the basics, they include the chapters on HTML forms, events, and the Document Object Model) are strong or even great. Others are just simply too difficult. The chapters on classes, debugging, for example, are strong but needlessly complicated. Entire chapters are dedicated to project examples that are completely incomprehensible to novices.
This inconsistency can be managed, especially when complemented with other course readings. I find that the strengths outweigh the weaknesses. I might even have assigned this book even if it didn't have a free online version, but that simply seals the deal for me.
Hopefully the author (or other publishers) will receive similar feedback and resolve the current edition's problems in subsequent editions.
Eloquent JavaScript provides a thorough walkthrough of the core aspects of JavaScript as a coding language. Divided into three sections, the book sets a goal for each section to give the reader an understanding of what material, skills, and... read more
Eloquent JavaScript provides a thorough walkthrough of the core aspects of JavaScript as a coding language. Divided into three sections, the book sets a goal for each section to give the reader an understanding of what material, skills, and examples will be featured in each section. This helps to cover as much ground within a select subject as possible without becoming repetitive and diverting off into topics that are interesting but may not be essential for learning core coding procedures.
This book—both in the explanatory, text portions and in the code examples—portrays accurate approaches to developing web applications and common computer science concepts through JavaScript. There are no errors that I noticed in either content or grammar throughout the book.
This book provides what can sorely be missing from programming textbooks: a focus on the up-to-date, contemporary syntax for JavaScript. While many techniques for achieving goals through programming do not go out of date, the new advances of ES6 are covered in this book, allowing brand-new web developers to hit the ground running with a modern resource to work with.
The book is also available as an interactive webpage, a format that would allow the author to make edits and updates as new JavaScript conventions become standardized.
This book is well written with both beginners and intermediary programmers in mind. It does not assume any previous computer science or programming experience and gradually builds on core concepts with each new chapter. New concepts and skillsets are introduced through references to the real world, which is crucial for beginning coders. Any sections that focus on terms or "jargon" are left for the later units, and chapters in those sections still make an effort to draw connections back to previous subjects and examples.
The book does an excellent job of tying together examples and concepts across all units in the text.
This book does a great job of making it easy to dive into one self-contained concept at a time, as it is well structured into large units focusing on the Language of JavaScript, how the Web Browser reacts to and translates JavaScript, and finally how networked web apps can communicate and share data using Node.js and client-server architecture. While the book makes it easy to choose which unit an instructor may want to tackle first in their class (say, covering the Web Browser unit before covering the in-depth aspects of the JavaScript language in Unit 1), the inter-unit chapters are organized in a more progressive liner manner. It would be difficult (but not impossible, due to the beginning "recap" text in each chapter) to cover the concepts of Objects and Classes in JavaScript without having covered the chapters on Data Types and Program Structure first. This issue has more to do with the intricacies of learning any new language than it does with the formatting of this textbook, but it does impact the pure modularity of the resource.
The organization of material, concepts, and larger units are well thought out and presented.
The textbook, particularly the interactive web version, is well designed and includes interactive code blocks where readers can edit and run the code directly inline with the text.
No grammatical issues were found in either the written text or the code examples.
This book includes multiple translation options through its web version, providing a contemporary resource to web development for non-English speakers.
The book contains a comprehensive and very detailed explanation of most of the fundamental concepts of Javascript. The author covers almost all the aspects of the language, from data types to asynchronous programming and promises. In addition to... read more
The book contains a comprehensive and very detailed explanation of most of the fundamental concepts of Javascript. The author covers almost all the aspects of the language, from data types to asynchronous programming and promises. In addition to detailing how Javascript can be utilized in front-end design, the book introduces elements of server-side programming using NodeJS. Moreover, code snippets, examples, and projects help understand concepts and complete the theoretical overview.
However, despite its comprehensiveness, the book could be more detailed regarding topics, such as, responsive design and front-end routing (e.g., using fragments). Moreover, it does not contain any reference to libraries, such as, jQuery, and to APIs.
Every topic in the book is discussed accurately and appears error-free. Moreover, most of the code attached to the book is well-indented and contains comments that increase its readability. In addition to being accurate and well-formatted, the code can be executed without any issues. The book is primarily available in many digital formats and the author appears to be very active and attentive in regard to fixing inaccuracies. Moreover, the website associated with the book contains a section that lists the errata and corrections for previous (printed) editions.
As “Eloquent Javascript” contains a thorough overview of the fundamentals of the language, the core of its content is not expected to significantly change over the next years, which makes the book a durable resource for both students and instructors. However, as in the case of many programming languages, given the pace at which innovation happens in this domain, the longevity of the book could be affected by updates and by the development of new resources and libraries. Nevertheless, as the book received support from multiple backers, including the Mozilla foundation, the author appears to be continuously improving the content and the code: the book is already at its third edition.
The book introduces and explains concepts concisely albeit very clearly. In addition to the multiple examples given every time a new argument is presented, the author included images that help grasp topics, though a richer use of figures would help. The presence of scripts and code snippets for almost every topic discussed in the book helps understand the theory and provides the reader with a boilerplate that can be utilized to get started and tinker with the tangible application of each concept. Furthermore, the author included complete projects, which create a framework that help realize how all the pieces come together.
The book has good internal consistency overall, and its organization and content are in line with other books about Javascript, and programming languages, in general. This makes it easy to adopt the book even with a basic knowledge of programming, or to use it as an additional learning material, in combination with other resources. Concepts that are often referred to with multiple terms are clearly defined, and the presence of jargon is appropriately addressed using explanations that are consistent with other programming languages. As a result, the book can be utilized by readers who are already familiar with software development, as well as by individuals who are just starting.
The modular organization of the book makes it easy to jump to a specific chapter and topic when needed, as topics have very little dependencies. Despite requiring knowledge of the basic aspects, every concept is designed as self-contained and, simultaneously, it is well-link to other arguments. As a result, the book is a great resource for the novice as well as for expert programmers.
The structure of the book is consistent with the way programming languages are typically taught, and the organization of the chapters helps the reader absorb concepts and use them as building blocks. Numerous internal references help readers navigate the content and jump to definitions, when needed.
The text is free of significant interface issues, including navigation problems, distortion of images/charts, and any other display features that may distract or confuse the reader.
The book structure is clear and easy to navigate, and the text does not contain any interface issues or elements that might distract the reader. Images are relevant, clear, and well organized, though they could be organized better.
The source code lacks syntax highlighting, which could improve code readability and, thus, increase the overall usability of the book. However, this is a minor flaw considering the abundance of online resources associated with the book.
I didn’t find any grammatical errors or typos in the book.
The book is written in English. Moreover, the website (http://eloquentjavascript.net) contains translations in Bulgarian, Portuguese, and Russian. Its content and examples are relevant and generally applicable regardless of any specific cultural background.
“Eloquent JavaScript” is very comprehensive in its coverage of JavaScript. While most JavaScript textbooks cover only superficial examples of how to use JavaScript on the client side, such as validating forms and displaying alerts, this textbook... read more
“Eloquent JavaScript” is very comprehensive in its coverage of JavaScript. While most JavaScript textbooks cover only superficial examples of how to use JavaScript on the client side, such as validating forms and displaying alerts, this textbook explains the fundamental concepts of JavaScript as a programming language. This textbook covers fundamental programming concepts such as data types, operators, functions, and data structures. Then the book dives deep into how JavaScript interacts with the browser through the Document Object Model (DOM) and event handling. The only weakness in the coverage is that the book uses Node.js, which is a library for running JavaScript server-side, instead of one of the more popular JavaScript libraries like jQuery, React, or Angular. This book contains an index, but it does not contain a glossary, at least in the electronic version that was reviewed.
The JavaScript code and the explanations of concepts are accurate. I tested several code examples in my browser, and they were error-free. The tone of the writing is neutral and unbiased.
Since this textbook covers the fundamental programming structures of JavaScript as well as how the language is used for browser interaction, this book should remain relevant for a reasonably long period of time. The only section which may change quickly in relevancy is the section that focuses on the JavaScript library Node.js. JavaScript libraries come in and out of fashion quickly as developers adopt and discard them, so this section may be updated in a future edition of the textbook. In a future edition, I would love to see an additional instructor bank of materials, like quizzes, to accompany this textbook.
The textbook describes concepts in a clear, straight-forward manner. This text is very readable, and the language approachable for a beginning programming student. The examples that are given illustrate the programming concepts lucidly. For example, Chapter 14 on the Document Object Model (DOM), the author gives the Hypertext Markup Language (HTML) for a simple web page, and then presents a diagram depicting how the HTML content is represented by the DOM.
This textbook is consistent throughout in regards to terminology and general formatting. When multiple terms are used to describe the same concept, the author makes it clear that the two terms are interchangeable. This is helpful, and makes the terminology clearer for beginning students.
Like most programming textbooks, this book starts with fundamental concepts, such as data types, and then progresses though more advanced concepts, such as data structures and control statements. The chapters shouldn’t be assigned in a non-sequential order, as this would break the logical progression of concepts for students. However, the book is broken into three large modules which could be assigned independent of each other: language, browser, and Node (the JavaScript library.)
The text is logically organized, with the programming concepts building on one another like most standard software development textbooks. Each chapter is structured so that the exercises at the end of the chapter reinforce the chapter concepts. In addition, the author uses projects at intervals throughout the book to illustrate the concepts.
The table of contents is accurate and the hyperlinks work well to direct the reader to the correct chapter. The diagrams and code are easy to read and free of distortions.
I found no grammar errors in this textbook.
The book is written in standard English. The examples used to illustrate the coding concepts appear to be culturally neutral. The book seem like it would appeal to most readers, and the language was inoffensive.
This book is an exciting new resource for teaching JavaScript, not only because the text is part of the Open Library, but because it is the only JavaScript book I've found which explains the concepts of the language using solid computer science concepts. The approach that this book takes of teaching students the fundamental concepts first will give students a solid footing before they dive into the web-specific features of JavaScript.
This book is quite comprehensive. It covers the features of the JavaScript language thoroughly as well as giving a complete explanation of the way JavaScript interacts with the DOM and the HTML 5 canvas. Advanced features like Modules are also... read more
This book is quite comprehensive. It covers the features of the JavaScript language thoroughly as well as giving a complete explanation of the way JavaScript interacts with the DOM and the HTML 5 canvas. Advanced features like Modules are also presented. In addition there is a chapter on debugging as well as a section on Node.js
The book is very accurate. The author's explanations and descriptions are thorough and correct.
This book was copyrighted in 2014 and is based on ECMAScript version 5. ECMAScript 6 was released in 2015 so the book is slightly out of date.
The writing is lucid and includes some nice humor. Concepts are broken down and explained clearly and in a way that is accessible to readers without prior programming experience.
Terms related to programming and JavaScript in particular are used consistently and accurately throughout the book.
The books parts, chapters and sub-sections are divided logically and while the topics build on one another each section is well organized and cohesive.
The book follows a fairly typical organization for a book on programming, stating with procedural concepts, then introducing functions, then objects. Chapter length projects are interspersed at regular intervals throughout the book to illustrate the concepts that have been presented.
The book has a detailed table of contents and index with accurate page numbers. Diagrams and illustrations are clear and well done.
I did not detect any grammar errors. The English is standard and does not reflect any regional dialect.
The book mainly sticks to the technical details of JavaScript programming, but the author does use some entertaining stories, like the one about the Jacques the "weresquirrel", a man who turns into a squirrel after the sun goes down. He uses this story as a prop to discuss data sets. All the the stories are unoffensive and would be relevant to readers from most cultures.
This is a very well written book that is accessible to beginning programmers but that will take them all the way to an advanced level of programming with JavaScript.
Table of Contents
- Introduction
Part 1: Language
- 1 Values, Types, and Operators
- 2 Program Structure
- 3 Functions
- 4 Data Structures: Object and Arrays
- 5 Higher-Order Functions
- 6 The Secret Life of Objects
- 7 Project: A Robot
- 8 Bugs and Errors
- 9 Regular Expressions
- 10 Modules
- 11 Asynchronous Programming
- 12 Project: A Programming Language
Part 2: Browser
- 13 JavaScript and the Browser
- 14 The Document Object Model
- 15 Handling Events
- 16 Project: A Platform Game
- 17 Drawing on Canvas
- 18 HTTP and Forms
- 19 Project: A Pixel Art Editor
Part 3: Node
- 20 Node.js
- 21 Project: Skill-Sharing Website
- Exercise Hints
Ancillary Material
About the Book
JavaScript lies at the heart of almost every modern web application, from social apps like Twitter to browser-based game frameworks like Phaser and Babylon. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications.
This much anticipated and thoroughly revised third edition of Eloquent JavaScript dives deep into the JavaScript language to show you how to write beautiful, effective code. It has been updated to reflect the current state of Java¬Script and web browsers and includes brand-new material on features like class notation, arrow functions, iterators, async functions, template strings, and block scope. A host of new exercises have also been added to test your skills and keep you on track.
About the Contributors
Author
Marijn Haverbeke is a programming language enthusiast and polyglot. He's worked his way from trivial BASIC games on the Commodore, through a C++ phase, to the present where he mostly hacks on database systems and web APIs in dynamic languages. He recently won the JS1K—JavaScript demo in 1024 bytes—contest, and is the author of a wide range of open-source software.