SlideShare a Scribd company logo
1 of 17
How to survive the
JavaScript apocalypse?
Póth Attila 2016
HOW DID WE GET HERE?
Explain the last 20 years of JS world to your grandma
#WebDev 1990s
"Should array indices start at 0 or 1? My compromise
of 0.5 was rejected without, I thought, proper
consideration." - Stan Kelly-Bootle
#WebDev 2000s
"Alternative browsers, led by Firefox, continue to steal back market share from Internet Explorer. As a result,
sites that only work in IE are seen by the industry and by media as the sub-standard pieces of junk they are,
and are subjected to public ridicule on the web, in newspapers, and in magazines, and maybe even on TV. "
- Roger Johansson (456 Berea street): Predictions and hopes for 2005
#WebDev 2015
"At times, I think where web
development is at this point is some
cruel joke [...]"
- Drew Hamlett: The Sad State of Web Development
"Lastly, combining a quick iteration cycle with a
seemingly infinite amount of libraries makes for a
very dangerous mix. Everything is just one bower
install oh-my-shiny-library away."
- Manuel Bernhardt: Generation Javascript
(R)EVOLUTION
What's happening?
Phylogenetic tree & eras of
the UI world
1. Stone age: PHP +
static HTML + JS
enhance era
2. Bronze age: jQuery
era
3. Iron age: RequireJS +
Backbone
4. Renessaince: Node -
CommonJS / tooling /
MVC-MVVM-MV*
wars
5. Steampunk: Post-
MV* / bundling /
components + libs era
6. Space age: ...?
1. PHP / jQuery plumber-hackers,
Joomla-Wordpress gurus,
fullstack garage-company saviors
2. Oldschool classic
first-gen MVC grandmasters,
"own frameworkers"
3. Opinionated MVC superheroes,
Angular evangelists,
anti-Angular freedom fighters
(a.k.a. "haters gonna hate")
4. Early-adopter trendhunter ninjas,
popularists gold-diggers
5. Future-seer weirdo
wizards / monks / oraculums
Typical developer characters based on
which era they coming from
LEVEL UP FOR PLUMBERS
Fighting with the spaghetti monster
Fighting with the spaghetti monster
• Know the language
• Good, bad & the ugly: use style guides (Airbnb, Google,
Crockford)
• There is always a better code: refactor!
• Design patterns (Addy Osmani ebook)
• OOP vs Functional programming (mpj youtube channel)
• Get familiar with concepts: modularisation, dependency
management, MVC (Backbone), task runners, envs
• Know your tools, hello command line!
• There is a solution already for everything: know libraries,
frameworks!
• Stay tuned: Javascript weekly, HTML5 weekly, Smashing Mag
LEVEL UP FOR THE OTHERS
Framework world wars
Framework world wars
• Level up command line (Git bash)
• Think in a team: Git, Github, feature branching, pull
requests, code reviews
• Write modular code, extract everything you can,
• Use task runners (Gulp, Grunt, Broccoli), bundle your
code for different envs (Webpack, Browserify)
• Try as many frameworks as you can, master one
• Choose based on the requirements (not every
project needs a full-blown MVC like Angular)
ASKING THE RIGHT QUESTIONS
Adapt or die? Swim with the flow?
Technology stack evolution
1. jQuery, jQuery UI, Prototype
Dep.mgmt: IIFE, globals
Tools: copy-paste online
minifiers, CVS
2. MVC, Backbone, templating,
REST
Dep.mgmt: RequireJS
Tools: SVN, Git
3. MVVM, Angular, Ember
(+jQuery)
Server-side js: Node
Dep.mgmt: CommonJS vs AMD
Tools: Grunt, Karma-Jasmine
CSS preprocessors
4. MV*, Angular + jqLite, MEAN stack,
Polymer shadow-dom, Material design
Compile to JS, Babel, webassembly
IO.js
PostCSS
Tools: Gulp, Broccoli
Devtools: Chrome devtools
Automated testing: Selenium,
Protractor, CucumberJS
5. React, React Native, RX, cycle.js
ES6-ES7
Inline CSS w/JS
Model: Flux, Redux, Falcor, GraphQL,
ImmutableJS, Relay
Tools: Browserify, Webpack
Devtools: time travel debugging, hot
reload
LEVEL UP+: SECRET ARCANUMS
Trends & future-proof recipees
Trends & future-proof recipes
1. Tech interview question: if you could choose
only one framework / technology in 2016,
which would you pick? (ES6!)
2. Functional / stateful / applicative / declarative
over imperative (Redux)
3. Component development over MVCs
4. Purpose-specific libs over the One True
Framework (moment.js). Question: how these
fit together? (package.json w/ hundreds of
devDeps)
5. Open source ecosystem: popularity wars will
not end. Read the sources!
6. Everything is a stream (RX.js) – js meant for
functional, not OOP
7. Do we even need CSS anymore?
8. Native ES6-7 task runners
JavaScript,

More Related Content

What's hot

What is FED
What is FEDWhat is FED
What is FEDSam Lee
 
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databindingDev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databindingStuart Lodge
 
Mobile JavaScript
Mobile JavaScriptMobile JavaScript
Mobile JavaScriptFil Maj
 
codecept.js introduce - front end test E2E tool introduce
codecept.js introduce - front end test E2E tool introducecodecept.js introduce - front end test E2E tool introduce
codecept.js introduce - front end test E2E tool introduceCaesar Chi
 
JavaScript와 TypeScript의 으리 있는 만남
JavaScript와 TypeScript의 으리 있는 만남JavaScript와 TypeScript의 으리 있는 만남
JavaScript와 TypeScript의 으리 있는 만남영욱 김
 
Enki.js, lessons learned while writing a javascript framework
Enki.js, lessons learned while writing a javascript frameworkEnki.js, lessons learned while writing a javascript framework
Enki.js, lessons learned while writing a javascript frameworkRadu Iscu
 
Morden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsMorden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsCaesar Chi
 
Unleash and Empower Your Engineers
Unleash and Empower Your EngineersUnleash and Empower Your Engineers
Unleash and Empower Your EngineersJeff Harrell
 
Introduce Angular2 & render & firebase flow
Introduce Angular2 & render & firebase flowIntroduce Angular2 & render & firebase flow
Introduce Angular2 & render & firebase flowCaesar Chi
 
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017Matt Raible
 
WebAssembly: Digging a bit deeper
WebAssembly: Digging a bit deeperWebAssembly: Digging a bit deeper
WebAssembly: Digging a bit deeperAll Things Open
 
Anton Sakharov: The risks you take when develop cross-platform apps using HT...
 Anton Sakharov: The risks you take when develop cross-platform apps using HT... Anton Sakharov: The risks you take when develop cross-platform apps using HT...
Anton Sakharov: The risks you take when develop cross-platform apps using HT...Mobile Trends
 
Typescript: Javascript senza problemi by Andrea Boschin
Typescript: Javascript senza problemi by Andrea BoschinTypescript: Javascript senza problemi by Andrea Boschin
Typescript: Javascript senza problemi by Andrea BoschinCodemotion
 
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
 
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...Mobile Trends
 
Letter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of ProgrammingLetter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of ProgrammingLazar Kovacevic
 
[Mas 500] Mobile Basics
[Mas 500] Mobile Basics[Mas 500] Mobile Basics
[Mas 500] Mobile Basicsrahulbot
 
Full stack development
Full stack developmentFull stack development
Full stack developmentArnav Gupta
 

What's hot (20)

What is FED
What is FEDWhat is FED
What is FED
 
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databindingDev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding
Dev evening - MonoTouch, MonoDroid, Mvvm MvvmCross and databinding
 
Mobile JavaScript
Mobile JavaScriptMobile JavaScript
Mobile JavaScript
 
codecept.js introduce - front end test E2E tool introduce
codecept.js introduce - front end test E2E tool introducecodecept.js introduce - front end test E2E tool introduce
codecept.js introduce - front end test E2E tool introduce
 
JavaScript와 TypeScript의 으리 있는 만남
JavaScript와 TypeScript의 으리 있는 만남JavaScript와 TypeScript의 으리 있는 만남
JavaScript와 TypeScript의 으리 있는 만남
 
Enki.js, lessons learned while writing a javascript framework
Enki.js, lessons learned while writing a javascript frameworkEnki.js, lessons learned while writing a javascript framework
Enki.js, lessons learned while writing a javascript framework
 
Coffee script throwdown
Coffee script throwdownCoffee script throwdown
Coffee script throwdown
 
Morden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web AppsMorden F2E Education - Think of Progressive Web Apps
Morden F2E Education - Think of Progressive Web Apps
 
Unleash and Empower Your Engineers
Unleash and Empower Your EngineersUnleash and Empower Your Engineers
Unleash and Empower Your Engineers
 
Introduce Angular2 & render & firebase flow
Introduce Angular2 & render & firebase flowIntroduce Angular2 & render & firebase flow
Introduce Angular2 & render & firebase flow
 
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017
Building a PWA with Ionic, Angular and Spring Boot - Jfokus 2017
 
WebAssembly: Digging a bit deeper
WebAssembly: Digging a bit deeperWebAssembly: Digging a bit deeper
WebAssembly: Digging a bit deeper
 
Anton Sakharov: The risks you take when develop cross-platform apps using HT...
 Anton Sakharov: The risks you take when develop cross-platform apps using HT... Anton Sakharov: The risks you take when develop cross-platform apps using HT...
Anton Sakharov: The risks you take when develop cross-platform apps using HT...
 
Typescript: Javascript senza problemi by Andrea Boschin
Typescript: Javascript senza problemi by Andrea BoschinTypescript: Javascript senza problemi by Andrea Boschin
Typescript: Javascript senza problemi by Andrea Boschin
 
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)
 
Adobemax2009na
Adobemax2009naAdobemax2009na
Adobemax2009na
 
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...
Alexander Shitikov: Cross Platform Mobile Development. Business Logic for mob...
 
Letter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of ProgrammingLetter to a Junior Developer: The Engineering Side of Programming
Letter to a Junior Developer: The Engineering Side of Programming
 
[Mas 500] Mobile Basics
[Mas 500] Mobile Basics[Mas 500] Mobile Basics
[Mas 500] Mobile Basics
 
Full stack development
Full stack developmentFull stack development
Full stack development
 

Similar to How to survive the JavaScript apocalypse

An introduction to Node.js
An introduction to Node.jsAn introduction to Node.js
An introduction to Node.jsKasey McCurdy
 
Finding harmony in web development
Finding harmony in web developmentFinding harmony in web development
Finding harmony in web developmentChristian Heilmann
 
Let's unRiddle jsFiddle
Let's unRiddle jsFiddleLet's unRiddle jsFiddle
Let's unRiddle jsFiddlerhoward_blk
 
Do you need jQuery in 2019?
Do you need jQuery in 2019?Do you need jQuery in 2019?
Do you need jQuery in 2019?LindaHsu19
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationMarakana Inc.
 
Js everywhere (Georgy Bunin)
Js everywhere (Georgy Bunin)Js everywhere (Georgy Bunin)
Js everywhere (Georgy Bunin)Georgy Bunin
 
Javascript library toolbox
Javascript library toolboxJavascript library toolbox
Javascript library toolboxSkysoul Pty.Ltd.
 
ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017vinaikopp
 
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2Jeremy Likness
 
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachJDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachPROIDEA
 
JavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing EraJavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing EraAllen Wirfs-Brock
 
JavaScript - The Universal Platform?
JavaScript - The Universal Platform?JavaScript - The Universal Platform?
JavaScript - The Universal Platform?Jonas Bandi
 
LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :) LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :) Sascha Sambale
 
Mvvm knockout vs angular
Mvvm knockout vs angularMvvm knockout vs angular
Mvvm knockout vs angularBasarat Syed
 
Going offline with JS (DDD Sydney)
Going offline with JS (DDD Sydney)Going offline with JS (DDD Sydney)
Going offline with JS (DDD Sydney)brendankowitz
 
JavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceJavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceDmitry Sheiko
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemFITC
 

Similar to How to survive the JavaScript apocalypse (20)

An introduction to Node.js
An introduction to Node.jsAn introduction to Node.js
An introduction to Node.js
 
Finding harmony in web development
Finding harmony in web developmentFinding harmony in web development
Finding harmony in web development
 
Let's unRiddle jsFiddle
Let's unRiddle jsFiddleLet's unRiddle jsFiddle
Let's unRiddle jsFiddle
 
Do you need jQuery in 2019?
Do you need jQuery in 2019?Do you need jQuery in 2019?
Do you need jQuery in 2019?
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovation
 
Js everywhere (Georgy Bunin)
Js everywhere (Georgy Bunin)Js everywhere (Georgy Bunin)
Js everywhere (Georgy Bunin)
 
Javascript library toolbox
Javascript library toolboxJavascript library toolbox
Javascript library toolbox
 
ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017ClojureScript in Magento 2 - MageTitansMCR 2017
ClojureScript in Magento 2 - MageTitansMCR 2017
 
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2
Wintellect - Devscovery - Enterprise JavaScript Development 2 of 2
 
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav TulachJDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
JDD2015: Java Everywhere Again—with DukeScript - Jaroslav Tulach
 
JavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing EraJavaScript: The Machine Language of the Ambient Computing Era
JavaScript: The Machine Language of the Ambient Computing Era
 
JavaScript - The Universal Platform?
JavaScript - The Universal Platform?JavaScript - The Universal Platform?
JavaScript - The Universal Platform?
 
LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :) LAMP is so yesterday, MEAN is so tomorrow! :)
LAMP is so yesterday, MEAN is so tomorrow! :)
 
Mvvm knockout vs angular
Mvvm knockout vs angularMvvm knockout vs angular
Mvvm knockout vs angular
 
Going offline with JS (DDD Sydney)
Going offline with JS (DDD Sydney)Going offline with JS (DDD Sydney)
Going offline with JS (DDD Sydney)
 
JavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right ChoiceJavaScript MV* Framework - Making the Right Choice
JavaScript MV* Framework - Making the Right Choice
 
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane EcosystemDownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
DownTheRabbitHole.js – How to Stay Sane in an Insane Ecosystem
 
Node.JS briefly introduced
Node.JS briefly introducedNode.JS briefly introduced
Node.JS briefly introduced
 
Drupal Backbone.js in the Frontend
Drupal Backbone.js in the FrontendDrupal Backbone.js in the Frontend
Drupal Backbone.js in the Frontend
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 

Recently uploaded

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfdanishmna97
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governanceWSO2
 
Simplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptxSimplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptxMarkSteadman7
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc
 
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...caitlingebhard1
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityVictorSzoltysek
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard37
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformWSO2
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)Samir Dash
 

Recently uploaded (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cf
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
API Governance and Monetization - The evolution of API governance
API Governance and Monetization -  The evolution of API governanceAPI Governance and Monetization -  The evolution of API governance
API Governance and Monetization - The evolution of API governance
 
Simplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptxSimplifying Mobile A11y Presentation.pptx
Simplifying Mobile A11y Presentation.pptx
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data PlatformLess Is More: Utilizing Ballerina to Architect a Cloud Data Platform
Less Is More: Utilizing Ballerina to Architect a Cloud Data Platform
 
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
AI+A11Y 11MAY2024 HYDERBAD GAAD 2024 - HelloA11Y (11 May 2024)
 

How to survive the JavaScript apocalypse

  • 1. How to survive the JavaScript apocalypse? Póth Attila 2016
  • 2. HOW DID WE GET HERE? Explain the last 20 years of JS world to your grandma
  • 3. #WebDev 1990s "Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration." - Stan Kelly-Bootle
  • 4. #WebDev 2000s "Alternative browsers, led by Firefox, continue to steal back market share from Internet Explorer. As a result, sites that only work in IE are seen by the industry and by media as the sub-standard pieces of junk they are, and are subjected to public ridicule on the web, in newspapers, and in magazines, and maybe even on TV. " - Roger Johansson (456 Berea street): Predictions and hopes for 2005
  • 5. #WebDev 2015 "At times, I think where web development is at this point is some cruel joke [...]" - Drew Hamlett: The Sad State of Web Development "Lastly, combining a quick iteration cycle with a seemingly infinite amount of libraries makes for a very dangerous mix. Everything is just one bower install oh-my-shiny-library away." - Manuel Bernhardt: Generation Javascript
  • 7. Phylogenetic tree & eras of the UI world 1. Stone age: PHP + static HTML + JS enhance era 2. Bronze age: jQuery era 3. Iron age: RequireJS + Backbone 4. Renessaince: Node - CommonJS / tooling / MVC-MVVM-MV* wars 5. Steampunk: Post- MV* / bundling / components + libs era 6. Space age: ...?
  • 8. 1. PHP / jQuery plumber-hackers, Joomla-Wordpress gurus, fullstack garage-company saviors 2. Oldschool classic first-gen MVC grandmasters, "own frameworkers" 3. Opinionated MVC superheroes, Angular evangelists, anti-Angular freedom fighters (a.k.a. "haters gonna hate") 4. Early-adopter trendhunter ninjas, popularists gold-diggers 5. Future-seer weirdo wizards / monks / oraculums Typical developer characters based on which era they coming from
  • 9. LEVEL UP FOR PLUMBERS Fighting with the spaghetti monster
  • 10. Fighting with the spaghetti monster • Know the language • Good, bad & the ugly: use style guides (Airbnb, Google, Crockford) • There is always a better code: refactor! • Design patterns (Addy Osmani ebook) • OOP vs Functional programming (mpj youtube channel) • Get familiar with concepts: modularisation, dependency management, MVC (Backbone), task runners, envs • Know your tools, hello command line! • There is a solution already for everything: know libraries, frameworks! • Stay tuned: Javascript weekly, HTML5 weekly, Smashing Mag
  • 11. LEVEL UP FOR THE OTHERS Framework world wars
  • 12. Framework world wars • Level up command line (Git bash) • Think in a team: Git, Github, feature branching, pull requests, code reviews • Write modular code, extract everything you can, • Use task runners (Gulp, Grunt, Broccoli), bundle your code for different envs (Webpack, Browserify) • Try as many frameworks as you can, master one • Choose based on the requirements (not every project needs a full-blown MVC like Angular)
  • 13. ASKING THE RIGHT QUESTIONS Adapt or die? Swim with the flow?
  • 14. Technology stack evolution 1. jQuery, jQuery UI, Prototype Dep.mgmt: IIFE, globals Tools: copy-paste online minifiers, CVS 2. MVC, Backbone, templating, REST Dep.mgmt: RequireJS Tools: SVN, Git 3. MVVM, Angular, Ember (+jQuery) Server-side js: Node Dep.mgmt: CommonJS vs AMD Tools: Grunt, Karma-Jasmine CSS preprocessors 4. MV*, Angular + jqLite, MEAN stack, Polymer shadow-dom, Material design Compile to JS, Babel, webassembly IO.js PostCSS Tools: Gulp, Broccoli Devtools: Chrome devtools Automated testing: Selenium, Protractor, CucumberJS 5. React, React Native, RX, cycle.js ES6-ES7 Inline CSS w/JS Model: Flux, Redux, Falcor, GraphQL, ImmutableJS, Relay Tools: Browserify, Webpack Devtools: time travel debugging, hot reload
  • 15. LEVEL UP+: SECRET ARCANUMS Trends & future-proof recipees
  • 16. Trends & future-proof recipes 1. Tech interview question: if you could choose only one framework / technology in 2016, which would you pick? (ES6!) 2. Functional / stateful / applicative / declarative over imperative (Redux) 3. Component development over MVCs 4. Purpose-specific libs over the One True Framework (moment.js). Question: how these fit together? (package.json w/ hundreds of devDeps) 5. Open source ecosystem: popularity wars will not end. Read the sources! 6. Everything is a stream (RX.js) – js meant for functional, not OOP 7. Do we even need CSS anymore? 8. Native ES6-7 task runners

Editor's Notes

  1. Photo credits: http://nohopefor.us/ Predictions expiry date: 3 weeks from opening.
  2. Based on the standard interview question: how would you explain MVC concept to your grandma?
  3. - HTTP protocol, request-response - Serving raw static html pages - table, iframe, marquee, blink, inline css - 1995 Javascript: client-side form enhancement only - 1995 FutureWave Software acquired by Macromedia, FutureSplash Animator renamed to Flash - 1999 Microsoft released proprietrary ActiveX extension for IE called XMLHTTP, soon adapted by Mozilla, Safari, Opera as XMLHTTPRequest (XHR) - Launch of Gmail -> term AJAX
  4. - PHP4.0 (2000): templating (about_us.php, contact_us.php) - "divitis" / unsemantic html, rounded corner hacks - CMS zoo (Drupal, Joomla, Wordpress): web development for the masses - Steps towards realtime web: hidden iframe, xhr polling, xhr long polling, JSONP, HTTP piggybacking - support IE6, IE7, IE8, ...
  5. - HTML5: dozens of different APIs supported by different browser vendors - CSS3: semantic elements, BEM, style guides, scalability, animations, responsive web. - cross-browser hacks for legacy browserS (sic! - IE) - Quasi-standards based on popularity: Bootstrap, HTML5 Boilerplate, Yeoman (where to start a project??) - Diversity, chaos, communities supporting different frameworks - MVC wars: in search of the next holy grail (Angular 2.0) - Server side javascript, noSQL/schemaless databases, Internet of Things - Non-blocking, async, promise, sockets, real-time web, respsonsivity benchmarks (1000ms), REST architectures - Tools: node ecosystem, dependency management, preprocessors, build tools, scaffolding - Testing (TDD/BDD): Karma, Jasmine, Selenium, CucumberJS, Mocha, Chai, Chai-as-promised, etc
  6. Photo: Diversity and phylogenetic analysis of bacteria in the mucosa of chicken ceca and comparison with bacteria in the cecal lumen
  7. Era milestones (holy grails): 1 ➔ 2: jQuery 2 ➔ 3: Backbone 3 ➔ 4: Node, npm ecosystem, Angular 4 ➔ 5: React
  8. Typical developer characters based on which era they coming from. Our focus: #3-4-5 Our question: how to be a #5 To read: http://ferd.ca/the-little-printf.html
  9. Swim with the flow or not? Obviously yes if you are a dev. If business, you're probably already having hard times :D
  10. Javascript style guides: http://noeticforce.com/best-javascript-style-guide-for-maintainable-code Addy Osmani design patterns: https://addyosmani.com/resources/essentialjsdesignpatterns/book/ https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q/videos http://javascriptweekly.com/ http://html5weekly.com/ https://www.smashingmagazine.com/
  11. Swim with the flow or not? Obviously yes if you are a dev. If business, you're probably already having hard times :D
  12. Javascript style guides: http://noeticforce.com/best-javascript-style-guide-for-maintainable-code Addy Osmani design patterns: https://addyosmani.com/resources/essentialjsdesignpatterns/book/
  13. Swim with the flow or not? Obviously yes if you are a dev. If business, you're probably already having hard times :D
  14. Question for devs: how to become an oraculum in this chaos? (You can't learn everything, you have to choose your weapon) Question for business: what tech stack is future-proof enough to stick to? (You can't pay for devs wanting to rewrite your whole app every 3 months when a new supercool framework comes up)
  15. Swim with the flow or not? Obviously yes if you are a dev. If business, you're probably already having hard times :D
  16. https://ponyfoo.com/articles/es6 https://medium.com/@wob/the-sad-state-of-web-development-1603a861d29f#.lv5sn4h9c https://drboolean.gitbooks.io/mostly-adequate-guide/ https://www.gitbook.com/book/jcouyang/functional-javascript https://medium.com/@PitaJ/stop-classifying-javascript-4cc823dfbedf http://rackt.org/redux/index.html https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 http://xgrommx.github.io/rx-book// http://cycle.js.org/ http://staltz.com/why-react-redux-is-an-inferior-paradigm.html http://engineering.widen.com/blog/future-of-the-web-react-falcor/ https://edgecoders.com/why-i-think-react-with-graphql-and-relay-will-be-the-angular-js-killers-591174bafc15#.ukptk3ykw https://medium.com/@dan_abramov/the-evolution-of-flux-frameworks-6c16ad26bb31#.ghozw1ve0 http://teropa.info/blog/2015/09/10/full-stack-redux-tutorial.html https://www.youtube.com/watch?v=xsSnOQynTHs http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background https://css-tricks.com/the-debate-around-do-we-even-need-css-anymore/ https://medium.com/swlh/you-might-not-need-gulp-js-89a0220487dd#.i8xl3ujge https://medium.com/@housecor/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8#.18t4ocd5w
  17. Lana Del Rey loves JS! Be like Lana Del Rey!