SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
Este.js
The End of the Great Schism
daniel@steigerwald.cz
Why full stack development is so hard?
1. huge js fragmentation - 40% of a developers time is spent in
learning
2. permanent client/server languages/tools/libraries schizophrenia
- developer has to learn/write/change things twice!
3. endless fight against app state a structure; class model and
inheritance - 40% of a developers time is spent in debugging and
refactoring
Let's face it: We are hardly productive 10 % of our time.
For next several years at least.
Este.js to the Rescue.
Huge JavaScript fragmentation
Angular, Backbone, jQuery, Meteor, MarionetteJS, Dart, KnockoutJS,
mustache.js, Ampersand.js, Grunt, CoffeeScript, broccolijs, and
more…
Solution: Be modular, minimize vendor locks and bus
factors. Choose only well supported stuff unless you
have pretty good reason to not.
Mail I got recently...
"Daniel, I went away for a few weeks and when I came back my
engineers had changed us from Angular to React!
I thought you'd find this funny - as in you told me to use React
instead of Angular almost two years ago. Oh, wait, does this put us
back into the running for possibly consultancy with you?"
medium.com/este-js-framework/whats-wrong-with-angular-js-
97b0a787f903
● Facebook library for building user interfaces
● Laser focused with minimal API
● Huge adoption
● Facebook is open sourcing only dog fooded stuff
There are many awesome features, but the most important is the
fact, that React replaces imperative mutated API with the
declarative API. Yes, for iOS and Android as well.
React
Client MVC hell
In MVC, a Model can be read by multiple Views, and can be updated by
multiple Controllers. In a large application, this results in highly
complex interactions where a single update to a Model can cause
Views to notify their Controllers, which may trigger even more Model
updates.
= hard to reason about and debug cascading changes
Flux
● CQS - Command Query Separation
● actions, stores, dispatcher
● unidirectional data flow
● = keeps things predictable
In Este.js, Flux is pure - no framework, no state.
nulogy.com/articles/what-the-flux
medium.com/brigade-engineering/what-is-the-flux-application-architecture-b57ebca85b9e
Flux Action - it's basically command design pattern.
Cimrman's sidestep: blog.confluent.io/2015/01/29/making-sense-of-stream-processing
Flux Store - reduce/sort/filter app state
Awesome combo with github.com/facebook/immutable-js. Forget about Underscore.
Flux Dispatcher - pub/sub
Flux
ES6/7/whatever
● JavaScript as language rocks - babeljs.io
○ Ich bin ein BabelScripter! ES6 + ES7 + JSX + Flowtypes
● npm is the largest module repository
● no dependency hell
● writing functional and async code is much easier
No more client/server schizophrenia
● Everybody wants server side rendering, even Angular
2 is planning it. Ember has demo already.
● Meteor is not solution. Closed ecosystems suck.
● With good design it's pretty easy.
Solution: Use one language and isomorphic approach
Endless fight against app state a structure
● en.wikipedia.org/wiki/Elephant_in_the_room
● state is evil, state-less actions, state-less stores, CQS
○ github.com/facebook/immutable-js
● global app state with cursors
○ In Este.js, press ctrl-save-s, then console.log(_appState)
● composition over inheritace
"Inheritance locks you into the first shitty design you
come up with." Dan Abramov
Endless fight against app state a structure
● App model built ad hoc, just like with TDD, but without TDD.
● DI container is workaround for distributed state in many classes
● Function > Class
● Class is piece of mutable state, and state is root of all evil.
Class and inheritance is the wrong pattern most of the
time, but the first thing people try.
Endless fight against app state a structure
● live checking code syntax for JS/HTML/CSS/whatver
● eslint
● webpack React hot reload
● pendings actions
● sync/async validations
● localizations
● jest testing with automocking
● LESS, SASS, Stylus, or plain CSS with autoprefixer.
● … and much more
What else Este.js provides?
● Relay - gist.github.com/wincent/598fa75e22bdfa44cf47
● js-csp - CSP channels for Javascript (like Clojurescript's core.
async, or Go)
● Leverage Webpack loaders for Clojure or PureScript or whatever.
○ twitter.com/swannodette/status/574986800466370560
● React Native and A Dynamic, Crazy, Native Mobile Future
Future
● I don't see any reason to start a new project in PHP/Ruby/Whatever. Sure you can use
Clojure, Elm, or even PHP, but you must be aware of aforementioned issues.
● Don't create classes messed with state unless you have pretty good reasons to do
that. Immutability and functional programming is a thing you have to learn right now.
It's easy with Este.js
● Maybe Ember can compete, but there is huge legacy stuff.
● Este.js is now only about patterns and practices. Frameworks are dead.
● Static pages or dynamic app? False dichotomy. Now Este.js is just fine for coders as
well. Part of your app will always be static, and you can add interactivity anytime later.
No need to change stack or learn new one.
Final thoughts
http://javascript-skoleni.cz
I'm hiring.
twitter.com/steida

Weitere ähnliche Inhalte

Was ist angesagt?

Front-end development automation with Grunt
Front-end development automation with GruntFront-end development automation with Grunt
Front-end development automation with Gruntbenko
 
Automate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.jsAutomate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.jsJosh Lee
 
Preprocessor Workflow with Grunt
Preprocessor Workflow with GruntPreprocessor Workflow with Grunt
Preprocessor Workflow with GruntVlad Filippov
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptLars Thorup
 
Webpack
Webpack Webpack
Webpack DataArt
 
Introduction to rails
Introduction to railsIntroduction to rails
Introduction to railsGo Asgard
 
Front-end tools in java webapps
Front-end tools in java webappsFront-end tools in java webapps
Front-end tools in java webappsbenfante
 
Grunt JS - Getting Started With Grunt
Grunt JS - Getting Started With GruntGrunt JS - Getting Started With Grunt
Grunt JS - Getting Started With GruntDouglas Reynolds
 
Why don't you Groovy?
Why don't you Groovy?Why don't you Groovy?
Why don't you Groovy?Orest Ivasiv
 
Advanced front-end automation with npm scripts
Advanced front-end automation with npm scriptsAdvanced front-end automation with npm scripts
Advanced front-end automation with npm scriptsk88hudson
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)Hyun-woo Park
 
Softshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offlineSoftshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offlineClaire Reynaud
 

Was ist angesagt? (20)

Introduction to React
Introduction to ReactIntroduction to React
Introduction to React
 
Front-end development automation with Grunt
Front-end development automation with GruntFront-end development automation with Grunt
Front-end development automation with Grunt
 
Webpack: from 0 to 2
Webpack: from 0 to 2Webpack: from 0 to 2
Webpack: from 0 to 2
 
Grunt to automate JS build
Grunt to automate JS buildGrunt to automate JS build
Grunt to automate JS build
 
Automate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.jsAutomate your WordPress Workflow with Grunt.js
Automate your WordPress Workflow with Grunt.js
 
Preprocessor Workflow with Grunt
Preprocessor Workflow with GruntPreprocessor Workflow with Grunt
Preprocessor Workflow with Grunt
 
Groovy and noteworthy
Groovy and noteworthyGroovy and noteworthy
Groovy and noteworthy
 
Continuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScriptContinuous Integration for front-end JavaScript
Continuous Integration for front-end JavaScript
 
Blogging for hackers (english)
Blogging for hackers (english)Blogging for hackers (english)
Blogging for hackers (english)
 
Webpack
Webpack Webpack
Webpack
 
Grunt and Bower
Grunt and BowerGrunt and Bower
Grunt and Bower
 
Introduction to rails
Introduction to railsIntroduction to rails
Introduction to rails
 
Front-end tools in java webapps
Front-end tools in java webappsFront-end tools in java webapps
Front-end tools in java webapps
 
Grunt JS - Getting Started With Grunt
Grunt JS - Getting Started With GruntGrunt JS - Getting Started With Grunt
Grunt JS - Getting Started With Grunt
 
Why don't you Groovy?
Why don't you Groovy?Why don't you Groovy?
Why don't you Groovy?
 
Web pack and friends
Web pack and friendsWeb pack and friends
Web pack and friends
 
Advanced front-end automation with npm scripts
Advanced front-end automation with npm scriptsAdvanced front-end automation with npm scripts
Advanced front-end automation with npm scripts
 
Javascript fullstasck
Javascript fullstasckJavascript fullstasck
Javascript fullstasck
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY (English)
 
Softshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offlineSoftshake 2013 - Let's take this offline
Softshake 2013 - Let's take this offline
 

Ähnlich wie Daniel Steigerwald - Este.js - konec velkého Schizma

Flu3nt highlights
Flu3nt highlightsFlu3nt highlights
Flu3nt highlightsdswork
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practicesfloydophone
 
7 Redux challenges
7 Redux challenges7 Redux challenges
7 Redux challengesreactima
 
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
 
Introduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with ClojurescriptIntroduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with ClojurescriptJohn Stevenson
 
Maintainable Javascript carsonified
Maintainable Javascript carsonifiedMaintainable Javascript carsonified
Maintainable Javascript carsonifiedChristian Heilmann
 
Real World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case StudyReal World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case Studyhousecor
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortalscgack
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernizationdevObjective
 
Get Started with JavaScript Frameworks
Get Started with JavaScript FrameworksGet Started with JavaScript Frameworks
Get Started with JavaScript FrameworksChristian Gaetano
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendVlad Fedosov
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUGslandelle
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewVisual Engineering
 
Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Ramith Jayasinghe
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JSFestUA
 

Ähnlich wie Daniel Steigerwald - Este.js - konec velkého Schizma (20)

Flu3nt highlights
Flu3nt highlightsFlu3nt highlights
Flu3nt highlights
 
Rethinking Best Practices
Rethinking Best PracticesRethinking Best Practices
Rethinking Best Practices
 
Rx Swift
Rx SwiftRx Swift
Rx Swift
 
7 Redux challenges
7 Redux challenges7 Redux challenges
7 Redux challenges
 
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
 
Introduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with ClojurescriptIntroduction to Functional Reactive Web with Clojurescript
Introduction to Functional Reactive Web with Clojurescript
 
Maintainable Javascript carsonified
Maintainable Javascript carsonifiedMaintainable Javascript carsonified
Maintainable Javascript carsonified
 
Sexy React Stack
Sexy React StackSexy React Stack
Sexy React Stack
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 
Real World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case StudyReal World Single Page App - A Knockout Case Study
Real World Single Page App - A Knockout Case Study
 
Front-End Modernization for Mortals
Front-End Modernization for MortalsFront-End Modernization for Mortals
Front-End Modernization for Mortals
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 
Front end-modernization
Front end-modernizationFront end-modernization
Front end-modernization
 
Get Started with JavaScript Frameworks
Get Started with JavaScript FrameworksGet Started with JavaScript Frameworks
Get Started with JavaScript Frameworks
 
Why Concurrency is hard ?
Why Concurrency is hard ?Why Concurrency is hard ?
Why Concurrency is hard ?
 
JSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontendJSFest 2019: Technology agnostic microservices at SPA frontend
JSFest 2019: Technology agnostic microservices at SPA frontend
 
Gatling - Bordeaux JUG
Gatling - Bordeaux JUGGatling - Bordeaux JUG
Gatling - Bordeaux JUG
 
Workshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General OverviewWorkshop Intro: FrontEnd General Overview
Workshop Intro: FrontEnd General Overview
 
Concurrency - Why it's hard ?
Concurrency - Why it's hard ?Concurrency - Why it's hard ?
Concurrency - Why it's hard ?
 
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
JS Fest 2019/Autumn. Влад Федосов. Technology agnostic microservices at SPA f...
 

Mehr von Develcz

Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Develcz
 
Ondřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryOndřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryDevelcz
 
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftDevelcz
 
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebOndřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebDevelcz
 
Marcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyMarcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyDevelcz
 
Michal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloMichal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloDevelcz
 
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůOndřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůDevelcz
 
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Develcz
 
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslDevelcz
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLDevelcz
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíDevelcz
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostDevelcz
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonDevelcz
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloDevelcz
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Develcz
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kóduDevelcz
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDevelcz
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Develcz
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalDevelcz
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěDevelcz
 

Mehr von Develcz (20)

Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)Daniel Steigerwald: WYSIWYG je šik! (když funguje)
Daniel Steigerwald: WYSIWYG je šik! (když funguje)
 
Ondřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featuryOndřej Hlaváček: Životní cyklus featury
Ondřej Hlaváček: Životní cyklus featury
 
Martin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of WarcraftMartin Hassman: Jak se tvoří addony pro World of Warcraft
Martin Hassman: Jak se tvoří addony pro World of Warcraft
 
Ondřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužebOndřej Voves: Jak přepsat monolit do mikroslužeb
Ondřej Voves: Jak přepsat monolit do mikroslužeb
 
Marcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódyMarcel Šulek: Zpraste svoje kódy
Marcel Šulek: Zpraste svoje kódy
 
Michal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadloMichal Illich: Vývojáři staví letadlo
Michal Illich: Vývojáři staví letadlo
 
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojůOndřej Kokeš: Zpracování dat z veřejných zdrojů
Ondřej Kokeš: Zpracování dat z veřejných zdrojů
 
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
Patrick Zandl: Open source software, hardware, 3D tiskárny a tvrdý business -...
 
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmyslŠtěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
Štěpán Bechynský: Hardware pro IoT projekty nejen pro hobby, ale i pro průmysl
 
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQLTomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
Tomáš Vondra: Paralelizace dotazu a partitioning v PostgreSQL
 
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikacíTomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
Tomáš Zvěřina: Flutter.io - multiplatformní vývoj mobilních aplikací
 
Jakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnostJakub Vrána: Dokazatelná bezpečnost
Jakub Vrána: Dokazatelná bezpečnost
 
Roman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To ReasonRoman Schejbal: From Madness To Reason
Roman Schejbal: From Madness To Reason
 
Michal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadloMichal Illich: Zuri aneb Vývojáři staví letadlo
Michal Illich: Zuri aneb Vývojáři staví letadlo
 
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
Ondřej Šika: Docker, Traefik a CI - Mějte nasazené všeny větve na kterých pra...
 
David Majda: Autoformátování kódu
David Majda: Autoformátování kóduDavid Majda: Autoformátování kódu
David Majda: Autoformátování kódu
 
David Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the UglyDavid Grudl: Open source: The Good, the Bad and the Ugly
David Grudl: Open source: The Good, the Bad and the Ugly
 
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!Ondřej Machulda: Začíná zlatá doba end-to-end testů!
Ondřej Machulda: Začíná zlatá doba end-to-end testů!
 
Adam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/DrupalAdam Kudrna: Headless WordPress/Drupal
Adam Kudrna: Headless WordPress/Drupal
 
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světěJaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
Jaroslav Tulach: GraalVM - z vývoje nejrychlejšího virtuálního stroje na světě
 

Kürzlich hochgeladen

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Angel Borroy López
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationBradBedford3
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf31events.com
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsSafe Software
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureDinusha Kumarasiri
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odishasmiwainfosol
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringHironori Washizaki
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprisepreethippts
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Mater
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 

Kürzlich hochgeladen (20)

What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
Alfresco TTL#157 - Troubleshooting Made Easy: Deciphering Alfresco mTLS Confi...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
How to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion ApplicationHow to submit a standout Adobe Champion Application
How to submit a standout Adobe Champion Application
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Sending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdfSending Calendar Invites on SES and Calendarsnack.pdf
Sending Calendar Invites on SES and Calendarsnack.pdf
 
Powering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data StreamsPowering Real-Time Decisions with Continuous Data Streams
Powering Real-Time Decisions with Continuous Data Streams
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Implementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with AzureImplementing Zero Trust strategy with Azure
Implementing Zero Trust strategy with Azure
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company OdishaBalasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
Balasore Best It Company|| Top 10 IT Company || Balasore Software company Odisha
 
Machine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their EngineeringMachine Learning Software Engineering Patterns and Their Engineering
Machine Learning Software Engineering Patterns and Their Engineering
 
Odoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 EnterpriseOdoo 14 - eLearning Module In Odoo 14 Enterprise
Odoo 14 - eLearning Module In Odoo 14 Enterprise
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)Ahmed Motair CV April 2024 (Senior SW Developer)
Ahmed Motair CV April 2024 (Senior SW Developer)
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 

Daniel Steigerwald - Este.js - konec velkého Schizma

  • 1. Este.js The End of the Great Schism daniel@steigerwald.cz
  • 2. Why full stack development is so hard? 1. huge js fragmentation - 40% of a developers time is spent in learning 2. permanent client/server languages/tools/libraries schizophrenia - developer has to learn/write/change things twice! 3. endless fight against app state a structure; class model and inheritance - 40% of a developers time is spent in debugging and refactoring Let's face it: We are hardly productive 10 % of our time.
  • 3. For next several years at least. Este.js to the Rescue.
  • 4. Huge JavaScript fragmentation Angular, Backbone, jQuery, Meteor, MarionetteJS, Dart, KnockoutJS, mustache.js, Ampersand.js, Grunt, CoffeeScript, broccolijs, and more… Solution: Be modular, minimize vendor locks and bus factors. Choose only well supported stuff unless you have pretty good reason to not.
  • 5. Mail I got recently... "Daniel, I went away for a few weeks and when I came back my engineers had changed us from Angular to React! I thought you'd find this funny - as in you told me to use React instead of Angular almost two years ago. Oh, wait, does this put us back into the running for possibly consultancy with you?" medium.com/este-js-framework/whats-wrong-with-angular-js- 97b0a787f903
  • 6. ● Facebook library for building user interfaces ● Laser focused with minimal API ● Huge adoption ● Facebook is open sourcing only dog fooded stuff There are many awesome features, but the most important is the fact, that React replaces imperative mutated API with the declarative API. Yes, for iOS and Android as well. React
  • 7. Client MVC hell In MVC, a Model can be read by multiple Views, and can be updated by multiple Controllers. In a large application, this results in highly complex interactions where a single update to a Model can cause Views to notify their Controllers, which may trigger even more Model updates. = hard to reason about and debug cascading changes
  • 8. Flux ● CQS - Command Query Separation ● actions, stores, dispatcher ● unidirectional data flow ● = keeps things predictable In Este.js, Flux is pure - no framework, no state. nulogy.com/articles/what-the-flux medium.com/brigade-engineering/what-is-the-flux-application-architecture-b57ebca85b9e
  • 9. Flux Action - it's basically command design pattern. Cimrman's sidestep: blog.confluent.io/2015/01/29/making-sense-of-stream-processing Flux Store - reduce/sort/filter app state Awesome combo with github.com/facebook/immutable-js. Forget about Underscore. Flux Dispatcher - pub/sub Flux
  • 10. ES6/7/whatever ● JavaScript as language rocks - babeljs.io ○ Ich bin ein BabelScripter! ES6 + ES7 + JSX + Flowtypes ● npm is the largest module repository ● no dependency hell ● writing functional and async code is much easier
  • 11. No more client/server schizophrenia ● Everybody wants server side rendering, even Angular 2 is planning it. Ember has demo already. ● Meteor is not solution. Closed ecosystems suck. ● With good design it's pretty easy. Solution: Use one language and isomorphic approach
  • 12. Endless fight against app state a structure
  • 13. ● en.wikipedia.org/wiki/Elephant_in_the_room ● state is evil, state-less actions, state-less stores, CQS ○ github.com/facebook/immutable-js ● global app state with cursors ○ In Este.js, press ctrl-save-s, then console.log(_appState) ● composition over inheritace "Inheritance locks you into the first shitty design you come up with." Dan Abramov Endless fight against app state a structure
  • 14. ● App model built ad hoc, just like with TDD, but without TDD. ● DI container is workaround for distributed state in many classes ● Function > Class ● Class is piece of mutable state, and state is root of all evil. Class and inheritance is the wrong pattern most of the time, but the first thing people try. Endless fight against app state a structure
  • 15. ● live checking code syntax for JS/HTML/CSS/whatver ● eslint ● webpack React hot reload ● pendings actions ● sync/async validations ● localizations ● jest testing with automocking ● LESS, SASS, Stylus, or plain CSS with autoprefixer. ● … and much more What else Este.js provides?
  • 16. ● Relay - gist.github.com/wincent/598fa75e22bdfa44cf47 ● js-csp - CSP channels for Javascript (like Clojurescript's core. async, or Go) ● Leverage Webpack loaders for Clojure or PureScript or whatever. ○ twitter.com/swannodette/status/574986800466370560 ● React Native and A Dynamic, Crazy, Native Mobile Future Future
  • 17. ● I don't see any reason to start a new project in PHP/Ruby/Whatever. Sure you can use Clojure, Elm, or even PHP, but you must be aware of aforementioned issues. ● Don't create classes messed with state unless you have pretty good reasons to do that. Immutability and functional programming is a thing you have to learn right now. It's easy with Este.js ● Maybe Ember can compete, but there is huge legacy stuff. ● Este.js is now only about patterns and practices. Frameworks are dead. ● Static pages or dynamic app? False dichotomy. Now Este.js is just fine for coders as well. Part of your app will always be static, and you can add interactivity anytime later. No need to change stack or learn new one. Final thoughts