@rtfeldman - qcon london 2020 · object-oriented vs functional different paradigm to learn ... not...

54
IN PRODUCTION elm FULL-SCALE @rtfeldman

Upload: others

Post on 07-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

IN PRODUCTIONelmFULL-SCALE

@rtfeldman

Page 2: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

2014 201620152013

Page 3: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less
Page 4: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

2 billion questions answered

100,000 lines of elm code

0 runtime exceptions

IN PRODUCTION

Page 5: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Ellie

Page 6: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

VIEW FUNCTION

ARGUMENTS → VIRTUAL DOM

Page 7: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

the elm architecture

viewupdate Model

Msg VDOM

Elm Runtime

Page 8: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

JavaScript

React

Elm

DOM + globals

components

1 immutable value

APPLICATION STATE

+ stores

Page 9: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Object-Oriented vs Functional

different paradigm to learn

Elm has no components

Page 10: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

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 - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

IMPACT ON VELOCITY

JS: Quicker to get something on the screen

Elm: Higher overall velocity

Page 12: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Interoprerating with JavaScript

Elm code talks to JavaScriptthe way it talks to servers

JAVASCRIPT AS A SERVICE

Page 13: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

MAINTAIN GUARANTEES

JAVASCRIPT ECOSYSTEM

while accessing the huge

Page 14: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

npm

much bigger than elm-package ecosystem

publish JavaScript, binaries, etc.

may also install keyloggers

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

elm-package

installing packages can’t install keyloggers

supports Elm code, not arbitrary JavaScript

semantic versioning automatically enforced

Page 16: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

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 - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Full-Scale Elm

Small-Scale Elm

begins with

Page 18: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

SHIP SOMETHING SMALL

Page 19: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

GET IT INTO

PRODUCTION

Page 20: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

how will we...

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

Page 21: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

MINIMAL RISK

MAJOR REWARD

Page 22: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

how will we BUILD it?

Sprockets (Rails)Webpack loaderelm-make

Page 23: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

ADVANCED BUILDS?

Page 24: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Server-Side Elm

Server-Side Rendering

Code Splitting

What about...

Page 25: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

“Why not use ______ instead?”

Page 26: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

delight

Page 27: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

“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 - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

reliability

Page 29: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

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

Page 30: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less
Page 31: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

“just don’t use it”

“also don’t use libraries that use it”

any

Page 32: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

any is considered part of best practices

Page 33: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

LESS CRASHING THAN PLAIN JS

ZERO RUNTIME EXCEPTIONS

Elm

Page 34: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

OCaml + BuckleScript

Haskell (or GHCjs)

Scala

Clojure ClojureScript

“Why not use a different FP language?”

Page 35: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

optional typing

ClojureScript

Page 36: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

anything can be null

ClojureScript

Page 37: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

anything can run arbitrary JS code

ClojureScript

+ BuckleScript

Page 38: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

how will we HIRE anyone?

Page 39: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

11 developers hired in 2016

9 cited Elm as a reason for applying

hiring was much harder before we used Elm!

Page 40: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

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 - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

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 - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

guide.elm-lang.org

RESOURCES

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

Page 43: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less
Page 44: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Kris Jenkinsjenkster.comcreated elm-remote-data

Luke Westbyhumblespark.comcreated Ellie

TRAININGBrian Hicksaster.iscreated elm-benchmark

Page 45: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

elmtown.github.io

Elm Town Podcast

Page 46: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

beginner-friendly community

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

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

Page 47: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

St. LouisZürich

Chicago

Seattle

Utrecht

Denver

Copenhagen Hamburg

DCHelsinki

London Paris

San Francisco

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

HOW CAN OUR TEAM DO THIS?

Page 51: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

Full-Scale Elm

Small-Scale Elm

begins with

Page 52: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

SHIP SOMETHING SMALL

Page 53: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

GET IT INTO

PRODUCTION

Page 54: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less

@rtfeldman