@rtfeldman - qcon london 2020 · object-oriented vs functional different paradigm to learn ... not...
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/3.jpg)
![Page 4: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/25.jpg)
“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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/27.jpg)
“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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/29.jpg)
(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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/30.jpg)
![Page 31: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/31.jpg)
“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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/43.jpg)
![Page 44: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/48.jpg)
![Page 49: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/49.jpg)
![Page 50: @rtfeldman - QCon London 2020 · Object-Oriented vs Functional different paradigm to learn ... not arbitrary JavaScript semantic versioning automatically enforced. elm-package less](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/50.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/51.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/52.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/53.jpg)
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](https://reader034.vdocuments.net/reader034/viewer/2022042412/5f2b1f4351b2d11fbf179357/html5/thumbnails/54.jpg)
@rtfeldman