Eloquent JavaScript: A Modern Introduction to Programming
Marijn Haverbeke
Published by No Starch Press
Praise for the First Edition of Eloquent Javascript
I became a better architect, author, mentor and developer because of this book. It deserves to share shelf space with Flannagan and Crockford.
A NGUS C ROLL , T WITTER D EVELOPER
This is the book I give out when people ask me how to learn proper JavaScript.
C HRIS W ILLIAMS, ORGANIZER OF JSC ONF US
One of the best JavaScript books Ive read.
R EY B ANGO , JQ UERY T EAM M EMBER AND C LIENT -W EB C OMMUNITY P ROGRAM M ANAGER AT M ICROSOFT
A really good guide to JavaScript; but even more than that, this book is a great guide to programming.
B EN N ADEL , C HIEF S OFTWARE E NGINEER AT E PICENTER C ONSULTING
A good book, suitable for those without experience in JavaScript and even those without programming experience.
N ICHOLAS Z AKAS, AUTHOR OF H IGH P ERFORMANCE J AVA S CRIPT AND THE P RINCIPLES OF O BJECT -O RIENTED J AVA S CRIPT
Does a good job of detailing the fundamentals and explaining concepts like the stack and the environment. This attention to detail is what sets the book apart from other JavaScript books.
D ESIGNORATI
If youre new to JavaScript, the first thing Id recommend you do is visit Eloquent JavaScript and check out Marijn Haverbekes introduction to the language.
CNET UK
Introduction
This is a book about getting computers to do what you want them to do. Computers are about as common as screwdrivers today, but they contain a lot more hidden complexity and thus are harder to operate and understand. To many, they remain alien, slightly threatening things.
Weve found two effective ways of bridging the communication gap between us, squishy biological organisms with a talent for social and spatial reasoning, and computers, unfeeling manipulators of meaningless data. The first is to appeal to our sense of the physical world and build interfaces that mimic that world and allow us to manipulate shapes on a screen with our fingers. This works very well for casual machine interaction.
But we have not yet found a good way to use the point-and-click approach to communicate things to the computer that the designer of the interface did not anticipate. For open-ended interfaces, such as instructing the computer to perform arbitrary tasks, weve had more luck with an approach that makes use of our talent for language: teaching the machine a language.
Human languages allow words and phrases to be combined in many ways, which allows us to say many different things. Computer languages, though typically less grammatically flexible, follow a similar principle.
Casual computing has become much more widespread in the past 20 years, and language-based interfaces, which once were the default way in which people interacted with computers, have largely been replaced with graphical interfaces. But they are still there, if you know where to look. One such language, JavaScript, is built into almost every web browser and is thus available on just about every consumer device.
This book intends to make you familiar enough with this language to be able to make a computer do what you want.
On Programming
I do not enlighten those who are not eager to learn, nor arouse those who are not anxious to give an explanation themselves. If I have presented one corner of the square and they cannot come back to me with the other three, I should not go over the points again.
Confucius
Besides explaining JavaScript, I also will introduce the basic principles of programming. Programming, it turns out, is hard. The fundamental rules are typically simple and clear. But programs built on top of these rules tend to become complex enough to introduce their own rules and complexity. Youre building your own maze, in a way, and you might just get lost in it.
There will be times when reading this book will feel terribly frustrating. If you are new to programming, there will be a lot of new material to digest. Much of this material will then be combined in ways that require you to make additional connections.
It is up to you to make the necessary effort. When you are struggling to follow the book, do not jump to any conclusions about your own capabilities. You are fineyou just need to keep at it. Take a break, reread some material, and always make sure you read and understand the example programs and exercises. Learning is hard work, but everything you learn is yours and will make subsequent learning easier.
The computer programmer is a creator of universes for which he [sic] alone is responsible. Universes of virtually unlimited complexity can be created in the form of computer programs.
Joseph Weizenbaum, Computer Power and Human Reason
A program is many things. It is a piece of text typed by a programmer; it is the directing force that makes the computer do what it does; it is data in the computers memory, yet it controls the actions performed on this same memory. Analogies that try to compare programs to objects we are familiar with tend to fall short. A superficially fitting one is that of a machinelots of separate parts tend to be involved, and to make the whole thing tick, we have to consider the ways in which these parts interconnect and contribute to the operation of the whole.
A computer is a machine built to act as a host for these immaterial machines. Computers themselves can do only stupidly straightforward things. The reason they are so useful is that they do these things at an incredibly high speed. A program can ingeniously combine an enormous number of these simple actions in order to do very complicated things.
To some of us, writing computer programs is a fascinating game. A program is a building of thought. It is costless to build, it is weightless, and it grows easily under our typing hands.
But without care, a programs size and complexity will grow out of control, confusing even the person who created it. Keeping programs under control is the main problem of programming. When a program works, it is beautiful. The art of programming is the skill of controlling complexity. The great program is subduedsimple in its complexity.
Many programmers believe that this complexity is best managed by using only a small set of well-understood techniques in their programs. They have composed strict rules (best practices) prescribing the form programs should have, and the more zealous among them will consider those who go outside of this safe little zone to be bad programmers.
What hostility to the richness of programmingto try to reduce it to something straightforward and predictable, to place a taboo on all the weird and beautiful programs! The landscape of programming techniques is enormous, fascinating in its diversity, and still largely unexplored. It is certainly dangerous going, luring the inexperienced programmer into all kinds of confusion, but that only means you should proceed with caution and keep your wits about you. There will always be new challenges and new territory to explore. Programmers who refuse to keep exploring will stagnate, forget their joy, and get bored with their craft.
Why Language Matters
In the beginning, at the birth of computing, there were no programming languages. Programs looked something like this: