Comments:"Eloquent JavaScript Second Edition"
URL:https://eloquentjavascript.net/2nd_edition/
A crowd-funded reboot
Total amount pledged
I have started rewriting Eloquent JavaScript.
Eloquent JavaScript is an open, freely available textbook on JavaScript and computer programming in general. It was written in 2007 and has, since then, taught thousands of people, from Kashmir to Louisiana to Minas Gerais, to program.
But 2007 is a long time ago, in terms of both technological progress and personal growth. The text is ready for a thorough update.
I am in the process of closely going over the whole text to modernize it and smooth out the most obvious wrinkles. Even if this campaign ends up collecting exactly zero euros, I'll get the book into a passable state again.
But if you are part of the JavaScript community, have in the past derived value from this book, or simply believe that having a quality programming textbook available to everyone with an Internet connection is a good thing, I'd like to ask you to chip in, and make it possible for me to spend serious time on this project while still providing for my family.
To get an idea of what I'm going for, take a look at this preview of the reworked introduction chapter, and read the list of plans below.
Overview
Tasks
Below I have outlined the various things that I'd like to work on. It is possible to donate money to a specific task by clicking on it. Click on the ‘total amount pledged’ bar at the top of the page to pledge money unspecifically.
Rewrite and modernize
I've learned a lot in the past five years, and the world of web programming itself has also moved forward swiftly.
For one thing, the current text describes ECMAScript version 3, and makes only a passing mention of version 5 of the language. Many of the helper functions the book introduces are available as built-in methods in ECMAScript 5.
I want to keep deriving and defining these functions in the text, but also introduce the built-in variants, and, in subsequent example code, use those instead of non-standard utilities that are specific to the book.
That, in combination with using console.log
instead of
a custom print
function, will make the snippets in the
book stand-alone vanilla JavaScript code, rather than depending on the
environment provided by the book's sandbox.
There are some sections (for example those on recursion and closures) that have generated a lot of questions. I'm taking that as a sign that I should rewrite and expand them to be easier to follow.
Finally, the writing style is often somewhat stilted, and the structure of the text could do with quite a lot of clarification and improvement. The whole text needs attention.
I'll let the amount that's pledged determine how closely and thoroughly I'll perform this editing.
Hire an artist
A more professional cover and some illustrations would do a lot to liven up the book. The more I collect on this item, the more I'll be able to pay an illustrator to help me with this.
If you are an illustrator and want to donate your time, rather than your money, that's great too! Get in touch.
Rewrite the DOM chapters
If you read chapter 11 to 14 of the online book, you'll notice that they feel a little rushed. As if the author didn't really want to write them. This is accurate. The awkwardness of browser programming in the IE6 era, combined with the fact that I wasn't actually that knowledgeable in the subject at the time, made it hard for me to put together a solid set of chapters. It shows.
To make things worse, I'm recommending some odd practices, such as
binding $
to document.getElementById
(which,
in this jQuery-dominated world, is quite confusing), and use some
rather confused terminology.
So what I want to do is to largely rewrite those chapters. I'll de-emphasize old-browser compatibility issues, get rid of the lame enumerations of methods and properties, and take a more big-picture approach to explaining what browsers provide, and how to interact with them. The examples in these chapters also need to be rethought, and unified into a couple of more interesting projects.
Write a node.js chapter
Node.js is genius. It's a kind of universal network duct tape with a well-thought-out programming interface and wonderful library ecosystem that makes it easy, and even fun to write all kinds of servers and utilities.
I think I'll be doing starting JavaScript programmers a service by exposing them to this way of using JavaScript—it'll expand their reach outside of the browser.
This chapter would explain the concept of node.js, and build a few simple servers with it, illustrating what server-side programming is and how it complements client-side programming.
Improve coding sandbox
At the time, I thought pulling off a pseudo-Firebug console in the web page was a rather cool stunt. But at this point I can't help but feel that it looks terribly dated. And what's worse, it's painful to use.
A much better solution would be to have the interactive coding happen in-line in the text. I.e. you'd be able to simply click examples to start editing them. Output would be shown below the piece of code that was run. Exercises would come with an empty box to write the answer in. That gets rid of the silly bar at the bottom and the cramped little editor.
The fact that the code examples in the book depend on each other, and that you often need to have run previous examples for later ones to work, is another source of confusion. It should be easy to set things up so that dependencies are automatically, silently, run when an example is executed.
Additionally, some of the conventions used (such as the
custom print
and show
functions) go against
common idioms (they should be called console.log
instead).
Add one or two practical chapters 5
A great way to learn about the small subtleties of coding is to see someone work through a project and comment on it. These would be chapters at the end of the book that use the knowledge from the rest of the book to undertake some interesting projects.
One thing I believe every programmer is served well by is some basic experience with parsing and interpretation of custom domain languages. I think a chapter that demystifies the basics of programming language interpretation, and teaches people to think in the direction of creating their own domain languages, would be a great addition.
Another attractive program would be another game, one with more advanced logic than the Sokoban clone. A real-time simulation of some kind would help illustrate performance trade-offs and complexity theory.
Alternatively, if the node.js chapter becomes a reality, a full web application, both front and back, is enlightening to work through. Something mundane, like a multi-user sketch app, could work well.
Write a graphics chapter
With canvas, SVG, and CSS 3 (transforms, gradients, shadows), modern browsers are a decent platform for graphics programming.
To push aspiring JavaScript programmers in the direction of wonderful graphical feats, I'd like to add a chapter that outlines the various options for graphics on the web, explains what to use in which situation, and shows some examples of the things that are possible.
Second edition on paper
The publisher of the current edition, No Starch Press, have expressed interest in publishing a second edition.
This means that they will help with professional editing (which is sorely needed when a non-native speaker like me tries to write an English book), and put out a commercial paper version of the book.
The Rules
All money donated goes directly to me, and stays with me whether targets are reached or not. I will deliver the sub-goals for which the target is reached. Targets that aren't reached will, depending on the kind of goal and the amount of money pledged, either be executed in a more modest form, or have their donations reallocated to other goals at my discretion.
The result of this work will be released under a Creative Commons Attribution-NonCommercial license. This means that people may use and remix the work as long as they aren't doing so commercially and keep my name attached to it.
I'll open the work-in-progress rewrite as a git repository in a week or so, and invite everyone to get involved by proof-reading and commenting.
Frequently Asked Questions
Why aren't you on Kickstarter or Indiegogo? I like to host things myself. It allows me full control over the website and process, and reduces the degree to which I'm subject to other people's whims.
Where's the video? There is no video. I'm camera shy, ignorant about making videos, and unwilling to shell out the money for professional assistance. If you want to see me talk in order to judge whether I'm a shifty character or not, watch this talk I gave at JSConf.
Why are there no perks? Sending people T-shirts or stickers or even paper versions of the book significantly reduces the efficiency in which your donations can be converted into actual time and money spent on the book. Consider the final product to be your perk.
What's up with that background? It is a riff on the virtual life simulation in the chapter on Object-Oriented Programming in Eloquent JavaScript, and a shameless attempt at getting people to link to this page. (If you are on a narrow screen or an old browser, you might not see the background.)
Thank
you,
Marijn Haverbeke