What is the fastest way to learn Javascript?
Question: What is the fastest way to learn Javascript for someone eloquent with class-
based OOP & typed functional programming (Scala, Java), and having some
knowledge of metaprogramming (Python, Ruby, Clojure)?


Answer: This is probably a subjective question. :-)

  * Play with it.
  * Try to solve real problems with it.
  * Read Crockford: [online](http://javascript.crockford.com/), [book](http://oreilly.com/catalog/9780596517748). Note that Crockford is intelligent and well-informed, but does sometimes blur the line between fact and his opinion in his writing. (The section on inheritance is particularly affected by this.)
  * I found [JavaScript: The Definitive Guide](http://oreilly.com/catalog/9780596101992) by Flanagan useful. And apparently so have lots of others, as it's in its sixth edition now.
  * [The spec](http://ecma-international.org/ecma-262/5.1/) is worth reading as well, if a bit hard going in places.
  * ~~If you're interested in inheritance, the documentation for my[`Lineage` script](http://code.google.com/p/lineagejs/) may be useful as it compares using the script and doing it without the script, and so goes into some of the plumbing details. (You may also find the script handy.)~~ As of ES2015 (aka "ES6"), `Lineage` is redundant; just use `class` (transpiling if necessary with tools like [Babel](http://babeljs.io).)
  * Read [questions and answers](http://stackoverflow.com/questions/tagged/javascript) about JavaScript here at StackOverflow. Then you'll see what real problems people have, and how they get solved.
  * Closures are a very big thing in JavaScript, I'd [read up on them](http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html) (disclosure: that's my blog again).

* * *

Side note: If you plan to use JavaScript in a browser environment, to
manipulate the DOM, etc., I'd recommend using a library to help smooth over
the browser differences (mostly DOM and event related). There are plenty to
choose from: [jQuery](http://jquery.com), [Prototype](http://prototypejs.org),
[YUI](http://developer.yahoo.com/yui/),
[Closure](http://code.google.com/closure/library), or [any of several
others](http://en.wikipedia.org/wiki/List_of_JavaScript_libraries). But make
no mistake, regardless of what library you use (or if you don't use any), it's
important to understand the _language_.

