You have ruined javascript

You - yes you. You know who you are

I'm @robashton

Enterprise developer

I've been around

I've seen things

And I am disappoint.

But enough about me

What about you?

You have great good

You have great wine

And you're a lovely audience


You have bad coffee

But I won't hold it against you

Now let's talk Javascript

AWful language

  'true' == true  // returns false

written in a day

in use for nearly two decades

(apparently 1995 was the year of "take that")

In the beginning

We were wizards

then came jquery

everything as a plugin

$('#other').tabs({ onChange: onTabChanged})

never claimed it was ideal

But it worked

But now?

We're writing everything 

as a js client*

*(We really shouldn't, but that's another talk)

And we're bringing our baggage with us

This is not cool


"I want to manage my dependencies'


"RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node."

'require-js seems to be the thing'

'wow, requirejs solves so many problems i never knew I had'

everything is configuration



Static file includes?


unsupported libraries?


Then the real problems start


convention over... convention

Shove everything on app

 App.FooController = blah
 App.FooRoute = blah
 App.FooView = blah

Refactor and forget

is this code dead now?

Set up your observers

observe that your observers are observing observers which are observing chaos

Except when they're a binding

or a computed property

emberjs: Taking something dynamic and confusing and making it more dynamic and confusing

a six month old ember codebase 

But it's okay

 you can hire an ember consultant

and angular...

where do you even begin?

"I had a problem and thought to use Angular so now I have a problem directive factory"

(h/t Andreas Brekken )


 <div ng-controller="Controller">  Hello <input ng-model='name'> <hr/>
  <span ng-bind="name"></span> <br/>
  <span ng:bind="name"></span> <br/>
  <span ng_bind="name"></span> <br/>
  <span data-ng-bind="name"></span> <br/>
  <span x-ng-bind="name"></span> <br/>


 angular.module('docsBindExample', [])  .controller('Controller', ['$scope', function($scope) {
    $ = 'Max Karl Ernst Ludwig Planck (April 23, 1858 – October 4, 1947)';

directives are what happen when you take html and js and then vomit all over them

angular is extensible

An Angular "service" is a singleton object created by a "service factory". These service factories are functions which, in turn, are created by a "service provider". "The service providers are constructor functions". When instantiated they must contain a property called $get, which holds the service factory function.

Factory factories?

service factories?

service providers?

"You need all of this because of dependency injection"

Dependency injection

var pony = new Pony(dependency)  

testing a dumb view with some dumb data is dumb and easy

var view = new View(fakeProvider)
view.addPony("Pinkie Pie")
view.render()     .should_contain("pinkie pie") 

you don't need extensibility

you need less code

And now - Javascript vnext

  • Promises
  • Generators
  • Classes
  • Etc

You can polish turds

but why bother?

If you want a better client-side language

  • Idris
  • Fay
  • Purescript
  • Bash

Case study: Google

"Oh what, we have to write js?"

No wai - GWT will save us!

how about making js itself

 look more like java?

Ffs, it's not working - let's make angular js

Everything google do is about trying to make javascript more like java


  • Too much time on their hands?
  • Afraid of a little bit of dynamic code?
  • Because frameworks and languages are fun to write?
  • (genuine performance concerns)

Well I've got a message 

for you google

You have done bad

you should feel bad

because you are bad

Why do we do this to ourselves?


instant gratification?

"Productivity without much learning"

the only winners here are the consultants

"But rob, how else do you get a large team of developers up to speed?"


if your company wants to do javascript yesterday and you are not already a team of js developers

 then you will fail regardless of technology

slow down

spend time learning

have patience

grow as a team 

not as a flock of sheep

be set free


We're not doing too bad really

there are some clever people doing it right

all the module authors

We are learning as a community

We'll get there eventually

thanks very much


You have ruined javascript

By Rob Ashton

You have ruined javascript

  • 7,482