A Case for CoffeeScript

I’ve been writing JavaScript applications for the past few years. I’ve spent a lot of time learning JavaScript, and I’ve established a pretty solid development work-flow. We use CoffeeScript here at Gaslight, so when I came on-board, I was not at all excited to switch. I’ve spent the past few months in CoffeeScript, I can honestly say that I was wrong. I think CoffeeScript is great and here’s why:

Beauty

I hate to admit it, but JavaScript is just plain ugly. It’s not so much the brackets, parens and semicolons that bother me. It’s that I have to type things like function(){} and var that = this all over the place. I didn’t notice it so much when I was writing JavaScript, but now when I switch back, it bugs the crap out of me. CoffeeScript is expressive. It’s loops, comprehensions, splats and string interpolation are much cleaner than the javascript counterparts. Using CoffeeScript, I can easily write code that reads well. I found that very difficult to do in JavaScript.

Whitespace

This had been one of my biggest perceived qualms with the CoffeeScript syntax. I’ve never liked significant whitespace in languages. In reality, I didn’t find it to be a problem. I’m really OCD, so I can’t stand reading code that isn’t properly indented. With JavaScript, I spent a lot of time making sure that my code was well-styled. CoffeeScript takes some of that away by ensuring that my indentation is correct. I’ve also found that CoffeeScript is pretty liberal with its syntax. Things like object literals, loops and conditionals can be put on one line or multiple.

Debugging

I spend a lot of time in the Chrome debugger, so the thought of stepping through code that I didn’t write was a real concern. That ended up not really bothering me. The best thing about CoffeeScript is that it’s nearly one-to-one with JavaScript. I can step through the debugger and know exactly where everything came from, and it’s rare that I get confused about the translation. With source maps soon to be released, this won’t be a problem at all.

Linting

When I was writing JavaScript, I always ran my code through a linter. With CoffeeScript, I don’t need to. I know that the compiled JS will always be valid. It protects me from those JS got-cha’s like forgetting to put var or missing a trailing comma on a object literal.

The Downside

CoffeeScript is great, but it’s not all unicorns and rainbows. The biggest headache is setting up the compile step. A lot of Ruby people start a Javascript project with Rails just to get this for free with the asset pipeline. Most people still have to set up the workflow themselves. Grunt Coffeepot is a Grunt project I’ve been working on to serve compiled CoffeeScript on-demand.

It’s also a pain when you need to convert someone else’s JavaScript into CoffeeScript. I’m hoping that things like this will get easier as the tooling matures. The CoffeeScript language is still young, and there’s a lot that more that can be done to make the workflow easier.

Yay, now I don’t have to learn JavaScript!

NO! CoffeeScript is an enhancement, not an alternative. It helps to have have an understanding of JavaScript before switching to CoffeeScript. For example, if you’re going to use CoffeeScript classes, you should take the time to really understand Javascript’s prototypal inheritance. Sometimes it makes more sense not to use classes, and it’s good to have the basic understanding of native JavaScript so that you have options. Things like the extends operator, and CoffeeScripts’s list comprehensions are doing some really crazy stuff behind the scenes that you should be aware of. Coffeescript won’t write good code for you. That’s your job.

Try it!

I was once a CoffeeScript hater, but these past few months have changed that. JavaScript pre-compilers are getting more and more popular, and CoffeeScript is just one the many out there. As the tooling for these pre-compilers matures, more developers will adopt them. Even if you cringe at the idea of pre-compiled JavaScript, it’s worth giving it a try.


Gaslighters Chris Nelson and Kevin Rockwood will be holding a San Francisco instance of their Mastering Backbone training course on Dec 3 - 5. Check it out!

Related Posts

Want to learn about the types of products we build?

Check out our projects

Like what you're seeing? Let's keep in touch.

Subscribe to Our Newsletter