SlideShare una empresa de Scribd logo
1 de 71
Descargar para leer sin conexión
Beyond JavaScript Frameworks:

Writing Reliable Web Apps With
Elm
Erik Wendel

Codemotion Amsterdam 2018
Jonathan Ive?
Who is
Erik Wendel

JavaZone 2017
– Peder Korsveien
Elm is like Jonathan Ive would have designed a
programming language – it is minimalistic, user-friendly
and it just works
How many of you…
…write JavaScript at work?
Did you ever…
…ship an app with confidence it
wouldn`t crash in production?

(without loads of QA)
Did you ever…
…feel completely safe after a 

large refactor of the frontend code?
Did you ever…
…become overwhelmed by the
amount of frontend tech in 2018?
Did you ever…
…feel like not all team members are
comfortable with frontend tasks?
Check, check, check…
JavaScript fatigue
Worrysome refactors
Nail-biting deploys
Dedicated frontend devs
✅
✅
✅
✅
I will argue that Elm addresses these issues
while also providing
a dedicated pair-programmer
error messages that actually help
no runtime errors
User interface expert, experienced with
javascript and single-page apps
Erik Wendel
Serving Elm in
production to 1M+ users
Web Development Lead at
BEKK Consulting, Oslo 

(450 people)
Worked with large
Norwegian companies like
SpareBank1 and NSB
Founder of

Oslo Elm Meetup (2016)

Oslo Elm Day (2017)
Agenda
1. How Elm works

Compared to the JS of today

2. App Example

Counter app


3. Does Anyone Use Elm?

A few stories and examples

1. How Elm works

Compared to the JS of today

2. App Example

Counter app


3. Does Anyone Use Elm?

A few stories and examples

Agenda
Elm is a language compiling to JavaScript
it is not another library or a framework
How does Elm compare to React?
Elm and JavaScript are totally different
In terms of syntax and semantics
How does Elm compare to React?
Elm uses pure functions and virtual dom
to create a tree of components
How does Elm compare to React?
Elm does not allow component state
all state is stored in top-level store, like Redux
How does Elm compare to React?
Elm uses the Redux architecture
actually, it is the other way around - Redux was inspired by Elm
How does Elm compare to React?
“Elm is basically React-
Redux with type
safety”
This is how it works
<div id="container"></div>
<script src=“main.js"></script>
<script>
var node = document.getElementById('container');
var app = Elm.Main.embed(node);
</script>
A quick overview
1. Correctness, maintainability and 

developer-friendliness comes first



2. A functional language of the ML family

(F#, OCaml, Haskell)



3. No run-time errors (!)



4. Heavily opinionated
Key Language Features
1. All data is immutable, and there is no null



2. Expression-oriented, no statements

Everything evaluates to a value



3. Pure (side-effects handled by runtime)

Like redux-saga



4. Architecture as a built-in feature

Redux is a JavaScript-adaptation of The Elm Architecture



5. Small but expressive feature set

Fits together like Lego

Therefore: it’s pretty easy to learn
Let’s see some code!
increment x =
x + 1
five = increment 4
Functions

Kind of important in functional
programming
increment : Int -> Int
increment x =
x + 1
five : Int
five = increment 4
Type Inference

Elm is smart, but you’d still want
to have explicit types
-- constant
x : Int
x = 42
-- tuple
position : (Int, Int)
position = (3, 2)
-- object (called record)
person : { name : String, age : Int }
person =
{ name = "Erik"
, age = 30
}
Data

Constants, tuples og objects
type alias Coordinates = (Int, Int)
playerPosition : Coordinates
playerPosition = (0,0)
type alias Discount = Int
studentDiscount: Discount
studentDiscount = 10
Type Alias

Allows us to define new
types
type alias Customer =
{ name: String
, age: Int
}
erik : Customer
erik =
{ name = "Erik"
, age = 24
}
Type Alias

Works best with objects
Example

Three types of customers: 

ordinary, students and companies
2. Hard to find the possible values of CustomerType
1. Easy to mistype
3. You don’t get any help from the compiler
4. You end up with lots of fields with dummy values
type CustomerType
= Student
| Corporate
| Private
Union Types

Surprisingly useful!
type CustomerType
= Student Int
| Corporate String
| Private
Union Types

Every branch can contain different values
type CustomerType = Student Discount | Corporate CompanyName | Private
getDiscount : CustomerType -> Discount
getDiscount class =
case class of
Student discount ->
discount
Corporate name ->
0
Private ->
0 Union Types

Values are unwrapped with
pattern matching
type Maybe a = Just a | Nothing
Maybe

Eliminating the need for null and
undefined
type Maybe a = Just a | Nothing
type alias Game =
{ highscore: Maybe Int
}
Maybe

Eliminating the need for null and undefined
type Maybe a = Just a | Nothing
type alias Game =
{ highscore: Maybe Int
}
getHighscore : Game -> String
getHighscore game =
case game.highscore of
Just score ->
toString score
Nothing ->
"No highscore"
Maybe

The compiler will force us to
handle all cases (similarily with ajax
and other unsafe operations)
<div class="ninja">
<span>Banzai!</span>
</div>
HTML

Creating it in Elm
main =
div [ class "ninja" ]
[ span []
[ text "Banzai!" ]
]
HTML

Like React without JSX (hyperscript)
main : Html a
main =
div [ class "ninja" ]
[ span []
[ text "Banzai!" ]
]
HTML

What does a mean?
main : Html Msg
main =
div [ class "ninja" ]
[ span [ onClick DoSomethingCool ]
[ text "Banzai!" ]
]
HTML

The Html-type includes the type that
will be created by user interactions 

(like Redux actions)
-- our entire app state (store)
model: Model
-- represent data with html (react)
view: Model -> Html Msg
-- changes to app state (reducers)
update: Msg -> Model -> Model
The Elm
Architecture
Which JavaScript-libraries would you need to get this out of the box?
1. React

Virtual DOM
2. Redux

Our built-in architecture
3. ImmutableJS

For full immutability



4. TypeScript eller Flow

For (a considerably weaker) type safety
5. ESLint

Enforcing code style and code-level sanity
Agenda
1. How Elm works

Compared to the JS of today

2. App Example

Counter app


3. Does Anyone Use Elm?

A few stories and examples

0+ -
1. How Elm works

Compared to the JS of today

2. App Example

Counter app


3. Does Anyone Use Elm?

A few stories and examples

Agenda
Elm has been around for quite a few years, attracting
attention and generating conference talks, but is it
really ready for production?





Is anyone using it in their business-critical, user-facing
applications? If so, what’s their stories?

So…
First meetup in May 2016

Huge interest with no marketing

150 members and 42 attendees



January 2018:

398 members



Monthly meetups
Oslo Elm Meetup
One-day, single-track conference in 

Oslo, June 2017

105 attendees

10 speakers from 5 countries

All talks are on YouTube



Next edition: most likely fall 2018
Oslo Elm Day
Does Anyone Use Elm?
… yes!
Here’s two example apps

written in Elm for different reasons
Switcharoo

Conference information system
NSB
(Norwegian Railways, like SJ)

Summer interns doing seat
reservation app
1. Many are experimenting with or using Elm



2. People are happy! (100%“would use again”)



3. Easy onboarding, especially for FPers and 

React-developers



4. World’s biggest adoptor has around 250k LOC
Summary Of Experience Reports
you’re making a prototype
…or something else that’s small
when dev speed trumps code quality
you use a lot of third party code (like map libs)
the team doesn’t know func. prog. and don’t want to learn
Bad-use cases for Elm:
you know the refactors are coming
complex domain logic
you’re re-creating Excel et. al in the browser
Great use-cases for Elm:
team has little or no knowledge of javascript
code correctness is especially important
Challenges, adressed!
JavaScript fatigue
Worrysome refactors
Nail-biting deploys
Dedicated frontend devs
a lang without runtime errors
Elm gives you..
superb refactoring support
frontend for the entire team
with Redux built-in
and React’s virtual DOM
a currently small ecosystem
a lang without a huge backer
some boilerplate
en delightful dev experience
Is it a good deal?
I think so!
What do you think?
1. Check out my free workshop material

github.com/ewendel/elm-workshop

(shameless plug)
Did this make you curious?
2. Join the Elm slack team

The elm community is truly amazing

elmlang.herokuapp.com
3. Check out your local Elm meetup

meetup.com/topics/elm-programming/
Thanks for listening!
@ewndl
twitter.com/osloelmday
slides and workshop available at 

is.gd/forward_elm

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

Introducing TypeScript
Introducing TypeScriptIntroducing TypeScript
Introducing TypeScript
 
Typescript in 30mins
Typescript in 30mins Typescript in 30mins
Typescript in 30mins
 
Clean Code
Clean CodeClean Code
Clean Code
 
Selenium online training
Selenium online trainingSelenium online training
Selenium online training
 
DSL in test automation
DSL in test automationDSL in test automation
DSL in test automation
 
introduction to javascript
introduction to javascriptintroduction to javascript
introduction to javascript
 
4Developers: Tomasz Ducin- JavaScript + Java = TypeScript
4Developers: Tomasz Ducin- JavaScript + Java = TypeScript4Developers: Tomasz Ducin- JavaScript + Java = TypeScript
4Developers: Tomasz Ducin- JavaScript + Java = TypeScript
 
Client side scripting
Client side scriptingClient side scripting
Client side scripting
 
Java Script An Introduction By HWA
Java Script An Introduction By HWAJava Script An Introduction By HWA
Java Script An Introduction By HWA
 
Client side scripting using Javascript
Client side scripting using JavascriptClient side scripting using Javascript
Client side scripting using Javascript
 
Typescript ppt
Typescript pptTypescript ppt
Typescript ppt
 
TypeScript and Angular workshop
TypeScript and Angular workshopTypeScript and Angular workshop
TypeScript and Angular workshop
 
Introducing type script
Introducing type scriptIntroducing type script
Introducing type script
 
Clean code coding like a professional
Clean code   coding like a professionalClean code   coding like a professional
Clean code coding like a professional
 
Getting started with typescript
Getting started with typescriptGetting started with typescript
Getting started with typescript
 
Elm or how I learned to love front-end development
Elm or how I learned to love front-end developmentElm or how I learned to love front-end development
Elm or how I learned to love front-end development
 
TypeScript Overview
TypeScript OverviewTypeScript Overview
TypeScript Overview
 

Similar a Beyond JavaScript Frameworks: Writing Reliable Web Apps With Elm - Erik Wendel - Codemotion Amsterdam 2018

Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...
Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...
Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...Codemotion
 
Down With JavaScript!
Down With JavaScript!Down With JavaScript!
Down With JavaScript!Garth Gilmour
 
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
Unit 1 - TypeScript & Introduction to Angular CLI.pptxUnit 1 - TypeScript & Introduction to Angular CLI.pptx
Unit 1 - TypeScript & Introduction to Angular CLI.pptxMalla Reddy University
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...Maarten Balliauw
 
Entity Framework V1 and V2
Entity Framework V1 and V2Entity Framework V1 and V2
Entity Framework V1 and V2ukdpe
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...Maarten Balliauw
 
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...Bill Buchan
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript Corley S.r.l.
 
01 Database Management (re-uploaded)
01 Database Management (re-uploaded)01 Database Management (re-uploaded)
01 Database Management (re-uploaded)bluejayjunior
 
Ppt on visual basics
Ppt on visual basicsPpt on visual basics
Ppt on visual basicsyounganand
 
Designing A Project Using Java Programming
Designing A Project Using Java ProgrammingDesigning A Project Using Java Programming
Designing A Project Using Java ProgrammingKaty Allen
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Maarten Balliauw
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigueTobias Braner
 
Domain oriented development
Domain oriented developmentDomain oriented development
Domain oriented developmentrajmundr
 
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdf
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdfCLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdf
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdfssuserbe139c
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstElements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstEnea Gabriel
 
Automated JavaScript Deobfuscation - PacSec 2007
Automated JavaScript Deobfuscation - PacSec 2007Automated JavaScript Deobfuscation - PacSec 2007
Automated JavaScript Deobfuscation - PacSec 2007Stephan Chenette
 

Similar a Beyond JavaScript Frameworks: Writing Reliable Web Apps With Elm - Erik Wendel - Codemotion Amsterdam 2018 (20)

Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...
Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...
Erik Wendel - Beyond JavaScript Frameworks: Writing Reliable Web Apps With El...
 
Intro To AOP
Intro To AOPIntro To AOP
Intro To AOP
 
Down With JavaScript!
Down With JavaScript!Down With JavaScript!
Down With JavaScript!
 
Intro1
Intro1Intro1
Intro1
 
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
Unit 1 - TypeScript & Introduction to Angular CLI.pptxUnit 1 - TypeScript & Introduction to Angular CLI.pptx
Unit 1 - TypeScript & Introduction to Angular CLI.pptx
 
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
ConFoo Montreal - Microservices for building an IDE - The innards of JetBrain...
 
Entity Framework V1 and V2
Entity Framework V1 and V2Entity Framework V1 and V2
Entity Framework V1 and V2
 
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
NDC Sydney 2019 - Microservices for building an IDE – The innards of JetBrain...
 
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
Lotusphere 2007 AD507 Leveraging the Power of Object Oriented Programming in ...
 
The advantage of developing with TypeScript
The advantage of developing with TypeScript The advantage of developing with TypeScript
The advantage of developing with TypeScript
 
AngularConf2015
AngularConf2015AngularConf2015
AngularConf2015
 
01 Database Management (re-uploaded)
01 Database Management (re-uploaded)01 Database Management (re-uploaded)
01 Database Management (re-uploaded)
 
Ppt on visual basics
Ppt on visual basicsPpt on visual basics
Ppt on visual basics
 
Designing A Project Using Java Programming
Designing A Project Using Java ProgrammingDesigning A Project Using Java Programming
Designing A Project Using Java Programming
 
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
Microservices for building an IDE – The innards of JetBrains Rider - TechDays...
 
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017   ember.js - escape the javascript fatigueNode.js meetup 17.05.2017   ember.js - escape the javascript fatigue
Node.js meetup 17.05.2017 ember.js - escape the javascript fatigue
 
Domain oriented development
Domain oriented developmentDomain oriented development
Domain oriented development
 
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdf
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdfCLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdf
CLR_via_CSharp_(Jeffrey_Richter_4th_Edition).pdf
 
Elements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code FirstElements of DDD with ASP.NET MVC & Entity Framework Code First
Elements of DDD with ASP.NET MVC & Entity Framework Code First
 
Automated JavaScript Deobfuscation - PacSec 2007
Automated JavaScript Deobfuscation - PacSec 2007Automated JavaScript Deobfuscation - PacSec 2007
Automated JavaScript Deobfuscation - PacSec 2007
 

Más de Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Más de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Último

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Último (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

Beyond JavaScript Frameworks: Writing Reliable Web Apps With Elm - Erik Wendel - Codemotion Amsterdam 2018

  • 1. Beyond JavaScript Frameworks:
 Writing Reliable Web Apps With Elm Erik Wendel
 Codemotion Amsterdam 2018
  • 4. – Peder Korsveien Elm is like Jonathan Ive would have designed a programming language – it is minimalistic, user-friendly and it just works
  • 5. How many of you… …write JavaScript at work?
  • 6. Did you ever… …ship an app with confidence it wouldn`t crash in production?
 (without loads of QA)
  • 7. Did you ever… …feel completely safe after a 
 large refactor of the frontend code?
  • 8. Did you ever… …become overwhelmed by the amount of frontend tech in 2018?
  • 9. Did you ever… …feel like not all team members are comfortable with frontend tasks?
  • 10. Check, check, check… JavaScript fatigue Worrysome refactors Nail-biting deploys Dedicated frontend devs ✅ ✅ ✅ ✅
  • 11. I will argue that Elm addresses these issues
  • 12. while also providing a dedicated pair-programmer error messages that actually help no runtime errors
  • 13.
  • 14.
  • 15. User interface expert, experienced with javascript and single-page apps Erik Wendel Serving Elm in production to 1M+ users Web Development Lead at BEKK Consulting, Oslo 
 (450 people) Worked with large Norwegian companies like SpareBank1 and NSB Founder of
 Oslo Elm Meetup (2016)
 Oslo Elm Day (2017)
  • 16. Agenda 1. How Elm works
 Compared to the JS of today
 2. App Example
 Counter app 
 3. Does Anyone Use Elm?
 A few stories and examples

  • 17. 1. How Elm works
 Compared to the JS of today
 2. App Example
 Counter app 
 3. Does Anyone Use Elm?
 A few stories and examples
 Agenda
  • 18. Elm is a language compiling to JavaScript it is not another library or a framework How does Elm compare to React?
  • 19. Elm and JavaScript are totally different In terms of syntax and semantics How does Elm compare to React?
  • 20. Elm uses pure functions and virtual dom to create a tree of components How does Elm compare to React?
  • 21. Elm does not allow component state all state is stored in top-level store, like Redux How does Elm compare to React?
  • 22. Elm uses the Redux architecture actually, it is the other way around - Redux was inspired by Elm How does Elm compare to React?
  • 23. “Elm is basically React- Redux with type safety”
  • 24. This is how it works <div id="container"></div> <script src=“main.js"></script> <script> var node = document.getElementById('container'); var app = Elm.Main.embed(node); </script>
  • 25. A quick overview 1. Correctness, maintainability and 
 developer-friendliness comes first
 
 2. A functional language of the ML family
 (F#, OCaml, Haskell)
 
 3. No run-time errors (!)
 
 4. Heavily opinionated
  • 26. Key Language Features 1. All data is immutable, and there is no null
 
 2. Expression-oriented, no statements
 Everything evaluates to a value
 
 3. Pure (side-effects handled by runtime)
 Like redux-saga
 
 4. Architecture as a built-in feature
 Redux is a JavaScript-adaptation of The Elm Architecture
 
 5. Small but expressive feature set
 Fits together like Lego
 Therefore: it’s pretty easy to learn
  • 28. increment x = x + 1 five = increment 4 Functions
 Kind of important in functional programming
  • 29. increment : Int -> Int increment x = x + 1 five : Int five = increment 4 Type Inference
 Elm is smart, but you’d still want to have explicit types
  • 30. -- constant x : Int x = 42 -- tuple position : (Int, Int) position = (3, 2) -- object (called record) person : { name : String, age : Int } person = { name = "Erik" , age = 30 } Data
 Constants, tuples og objects
  • 31. type alias Coordinates = (Int, Int) playerPosition : Coordinates playerPosition = (0,0) type alias Discount = Int studentDiscount: Discount studentDiscount = 10 Type Alias
 Allows us to define new types
  • 32. type alias Customer = { name: String , age: Int } erik : Customer erik = { name = "Erik" , age = 24 } Type Alias
 Works best with objects
  • 33. Example
 Three types of customers: 
 ordinary, students and companies
  • 34.
  • 35. 2. Hard to find the possible values of CustomerType 1. Easy to mistype 3. You don’t get any help from the compiler 4. You end up with lots of fields with dummy values
  • 36. type CustomerType = Student | Corporate | Private Union Types
 Surprisingly useful!
  • 37. type CustomerType = Student Int | Corporate String | Private Union Types
 Every branch can contain different values
  • 38. type CustomerType = Student Discount | Corporate CompanyName | Private getDiscount : CustomerType -> Discount getDiscount class = case class of Student discount -> discount Corporate name -> 0 Private -> 0 Union Types
 Values are unwrapped with pattern matching
  • 39. type Maybe a = Just a | Nothing Maybe
 Eliminating the need for null and undefined
  • 40. type Maybe a = Just a | Nothing type alias Game = { highscore: Maybe Int } Maybe
 Eliminating the need for null and undefined
  • 41. type Maybe a = Just a | Nothing type alias Game = { highscore: Maybe Int } getHighscore : Game -> String getHighscore game = case game.highscore of Just score -> toString score Nothing -> "No highscore" Maybe
 The compiler will force us to handle all cases (similarily with ajax and other unsafe operations)
  • 43. main = div [ class "ninja" ] [ span [] [ text "Banzai!" ] ] HTML
 Like React without JSX (hyperscript)
  • 44. main : Html a main = div [ class "ninja" ] [ span [] [ text "Banzai!" ] ] HTML
 What does a mean?
  • 45. main : Html Msg main = div [ class "ninja" ] [ span [ onClick DoSomethingCool ] [ text "Banzai!" ] ] HTML
 The Html-type includes the type that will be created by user interactions 
 (like Redux actions)
  • 46. -- our entire app state (store) model: Model -- represent data with html (react) view: Model -> Html Msg -- changes to app state (reducers) update: Msg -> Model -> Model The Elm Architecture
  • 47. Which JavaScript-libraries would you need to get this out of the box? 1. React
 Virtual DOM 2. Redux
 Our built-in architecture 3. ImmutableJS
 For full immutability
 
 4. TypeScript eller Flow
 For (a considerably weaker) type safety 5. ESLint
 Enforcing code style and code-level sanity
  • 48. Agenda 1. How Elm works
 Compared to the JS of today
 2. App Example
 Counter app 
 3. Does Anyone Use Elm?
 A few stories and examples

  • 49. 0+ -
  • 50.
  • 51.
  • 52.
  • 53.
  • 54. 1. How Elm works
 Compared to the JS of today
 2. App Example
 Counter app 
 3. Does Anyone Use Elm?
 A few stories and examples
 Agenda
  • 55. Elm has been around for quite a few years, attracting attention and generating conference talks, but is it really ready for production?
 
 
 Is anyone using it in their business-critical, user-facing applications? If so, what’s their stories?
 So…
  • 56. First meetup in May 2016
 Huge interest with no marketing
 150 members and 42 attendees
 
 January 2018:
 398 members
 
 Monthly meetups Oslo Elm Meetup
  • 57. One-day, single-track conference in 
 Oslo, June 2017
 105 attendees
 10 speakers from 5 countries
 All talks are on YouTube
 
 Next edition: most likely fall 2018 Oslo Elm Day
  • 58. Does Anyone Use Elm? … yes!
  • 59. Here’s two example apps
 written in Elm for different reasons
  • 61. NSB (Norwegian Railways, like SJ)
 Summer interns doing seat reservation app
  • 62.
  • 63.
  • 64. 1. Many are experimenting with or using Elm
 
 2. People are happy! (100%“would use again”)
 
 3. Easy onboarding, especially for FPers and 
 React-developers
 
 4. World’s biggest adoptor has around 250k LOC Summary Of Experience Reports
  • 65. you’re making a prototype …or something else that’s small when dev speed trumps code quality you use a lot of third party code (like map libs) the team doesn’t know func. prog. and don’t want to learn Bad-use cases for Elm:
  • 66. you know the refactors are coming complex domain logic you’re re-creating Excel et. al in the browser Great use-cases for Elm: team has little or no knowledge of javascript code correctness is especially important
  • 67. Challenges, adressed! JavaScript fatigue Worrysome refactors Nail-biting deploys Dedicated frontend devs
  • 68. a lang without runtime errors Elm gives you.. superb refactoring support frontend for the entire team with Redux built-in and React’s virtual DOM a currently small ecosystem a lang without a huge backer some boilerplate en delightful dev experience
  • 69. Is it a good deal? I think so! What do you think?
  • 70. 1. Check out my free workshop material
 github.com/ewendel/elm-workshop
 (shameless plug) Did this make you curious? 2. Join the Elm slack team
 The elm community is truly amazing
 elmlang.herokuapp.com 3. Check out your local Elm meetup
 meetup.com/topics/elm-programming/
  • 71. Thanks for listening! @ewndl twitter.com/osloelmday slides and workshop available at 
 is.gd/forward_elm