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
$('#thing').accordion()
$('#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

Examples?
"I want to manage my dependencies'

Require-js
"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

coffeescript?
Configuration

Static file includes?
configuration

unsupported libraries?
Configuration

Then the real problems start

emberjs

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 )
directives?
<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/>
</div>
Directives?
angular.module('docsBindExample', [])
.controller('Controller', ['$scope', function($scope) {
$scope.name = '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!
.gif)
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
Causes?
- 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?

lazy?

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?"
time.
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

anyway
We're not doing too bad really
there are some clever people doing it right
npm
browserify
all the module authors
We are learning as a community
We'll get there eventually

thanks very much
@robashton

You have ruined javascript
By Rob Ashton
You have ruined javascript
- 7,898