54
IN PRODUCTION elm FULL-SCALE @rtfeldman

@rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

IN PRODUCTIONelmFULL-SCALE

@rtfeldman

Page 2: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

2014 201620152013

Page 3: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available
Page 4: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

2 billion questions answered

100,000 lines of elm code

0 runtime exceptions

IN PRODUCTION

Page 5: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Ellie

Page 6: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

VIEW FUNCTION

ARGUMENTS → VIRTUAL DOM

Page 7: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

the elm architecture

viewupdate Model

Msg VDOM

Elm Runtime

Page 8: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

JavaScript

React

Elm

DOM + globals

components

1 immutable value

APPLICATION STATE

+ stores

Page 9: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Object-Oriented vs Functional

different paradigm to learn

Elm has no components

Page 10: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Dynamic Types vs Type-Checked

cheaper refactoring → less technical debt

“if it compiles, it usually just works”

more time in the console, less in the browser

Page 11: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

IMPACT ON VELOCITY

JS: Quicker to get something on the screen

Elm: Higher overall velocity

Page 12: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Interoprerating with JavaScript

Elm code talks to JavaScriptthe way it talks to servers

JAVASCRIPT AS A SERVICE

Page 13: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

MAINTAIN GUARANTEES

JAVASCRIPT ECOSYSTEM

while accessing the huge

Page 14: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

npm

much bigger than elm-package ecosystem

publish JavaScript, binaries, etc.

may also install keyloggers

Page 15: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

elm-package

installing packages can’t install keyloggers

supports Elm code, not arbitrary JavaScript

semantic versioning automatically enforced

Page 16: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

elm-package

less available off-the-shelf, more DIY

write a wrapper around moment.jswrite a Date library in pure Elm

long-term ecosystem quality

Page 17: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Full-Scale Elm

Small-Scale Elm

begins with

Page 18: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

SHIP SOMETHING SMALL

Page 19: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

GET IT INTO

PRODUCTION

Page 20: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

how will we...

INTEGRATE it into our code?TEACH it to our teammates?BUILD and deploy it?

Page 21: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

MINIMAL RISK

MAJOR REWARD

Page 22: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

how will we BUILD it?

Sprockets (Rails)Webpack loaderelm-make

Page 23: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

ADVANCED BUILDS?

Page 24: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Server-Side Elm

Server-Side Rendering

Code Splitting

What about...

Page 25: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

“Why not use ______ instead?”

Page 26: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

delight

Page 27: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

“That should be an inspiration for every error message.” —John Carmack“That should be an inspiration for every error message.” —John Carmack

Page 28: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

reliability

Page 29: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

(optional types)(optional types)(optional types)

Page 30: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available
Page 31: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

“just don’t use it”

“also don’t use libraries that use it”

any

Page 32: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

any is considered part of best practices

Page 33: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

LESS CRASHING THAN PLAIN JS

ZERO RUNTIME EXCEPTIONS

Elm

Page 34: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

OCaml + BuckleScript

Haskell (or GHCjs)

Scala

Clojure ClojureScript

“Why not use a different FP language?”

Page 35: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

optional typing

ClojureScript

Page 36: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

anything can be null

ClojureScript

Page 37: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

anything can run arbitrary JS code

ClojureScript

+ BuckleScript

Page 38: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

how will we HIRE anyone?

Page 39: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

11 developers hired in 2016

9 cited Elm as a reason for applying

hiring was much harder before we used Elm!

Page 40: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Hiring for React, Redux, Immutable.js, Babel

Hiring for Angular 2, TypeScript, Ramda

Want to come write Elm full-time?

WHICH JOB POSTS STAND OUT?

Page 41: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

how will we TEACH it?more new hires already know React than Elm

compiler aids beginner learning a LOT

similar time to becoming prod contributor

Page 42: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

guide.elm-lang.org

RESOURCES

How to Use Elm at Workelm-lang.org/blog

Page 43: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available
Page 44: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Kris Jenkinsjenkster.comcreated elm-remote-data

Luke Westbyhumblespark.comcreated Ellie

TRAININGBrian Hicksaster.iscreated elm-benchmark

Page 45: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

elmtown.github.io

Elm Town Podcast

Page 46: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

beginner-friendly community

SLACK (5,000+ members, #beginners channel)elmlang.herokuapp.com

REDDIT (weekly beginner questions thread)reddit.com/r/elm

Page 47: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

St. LouisZürich

Chicago

Seattle

Utrecht

Denver

Copenhagen Hamburg

DCHelsinki

London Paris

San Francisco

Page 48: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available
Page 49: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available
Page 50: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

HOW CAN OUR TEAM DO THIS?

Page 51: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

Full-Scale Elm

Small-Scale Elm

begins with

Page 52: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

SHIP SOMETHING SMALL

Page 53: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

GET IT INTO

PRODUCTION

Page 54: @rtfeldman · 2017-03-15 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less available

@rtfeldman