2011 was a year that saw the use and usefulness of JavaScript skyrocket.  With the improvement of browsers, and the increasing diversity of platforms the web is used on, such as smart phones and tablets, JavaScript has become increasingly important in user interface development, and has moved from being a tool used for decoration and the occasional ajax call to a language used as the main tool is building dynamic web applications. This has been made possible by a number of tools that have come into use this past year:


Underscore.js is in my opinion the most important JavaScript tool released since jQuery.  Underscore js does not have a singular focus, calling itself a ‘utility-belt library’. It includes several common functional programming functions, such as map, reduce, and filter, to make processing sets of data easier and allows for using functional paradigms in JavaScript, which works well with JavaScript’s prototype inheritance and first-class functions.  It also include a great micro-templating library that makes working with dynamic HTML incredibly easy.  Many of the other tools on this list would not be possible without the help that underscore provides.


Require.js is a file and module loader for JavaScript.  With the increasing amount of tools and complexity of projects in JavaScript, it becomes necessary to have a way to manage all of these modules and their dependencies.  require.js provides a way to do this, both on the client side with asynchronous loading for providing a better user expierience, or on the server side to help manage web servers in node.


Node.js is a tool for writing web servers in JavaScript. It has moved JavaScript from being just a client side tool into something that can be used for every part of a web application. This has the benefit of being able to use a single language on every part of the development stack, which can make things easier for the developer. Node also takes advantage of JavaScript asynchronous nature, and as such allows for a lot of parallel, non-blocking way of processing requests that leads to incredibly fast, scalable web applications.


Backbone is a JavaScript MVC Framework for the client side.  It allows for building structured, modular web applications completely in the browser.  Several large scale applications, such as Grooveshark, Trello, and GMail have made use of Backbone to build amazingly fast interfaces in the browser.  Backbone also provides a better way of organizing and using code, which has become necessary as web apps have grown more complex. Backbone has personally exciting for me, as it led to me re-thinking how web applications are built, and to stop thinking in series of pages, and start thinking in a more responsive, desktop-live paradigm.


CoffeeScript is a  language that transforms into JavaScript. It is used to give JavaScript a simpler, more ruby-like syntax in order to increase developer productivity.  a simple closure may look something like this in JavaScript:
var square = function(x) {
    return x * x
While in CoffeeScript,  the same function would be written like this:
square = (x) -> x * x
CoffeeScript made waves when the people at 37Signals decided to include CoffeeScript and SASS as default modules in Ruby on Rails 3.1.  While the modules can be easily turned off, this led to developers both becoming aware of CoffeeScript, and becoming divided by it.  Some see it as a great tool to clean up code and make writing code faster, others see it as a waste of time, and unneeded step of complexity, and some just plain don’t like the new syntax.
The needs and capabilities of the web have grown, and JavaScript has stepped to the challenge.