SlideShare a Scribd company logo
1 of 46
There Is No
JavaScript
Noam Kfir
Senior Architect, Sela Group
http://noam.kfir.cc
@NoamKfir
A Brief History of JavaScript
The Bubbling Pool
Brendan Eich hacked JavaScript together in ten
days
The First Decade Happened
• JavaScript was handed to a committee
• The browsers went to war
• A bunch of languages fought and JavaScript
won
• The web got big
The Mesozoic Lair
John Resig raised JavaScript out of the swamp
The Second Decade Happened
• IE6 died a slow painful death
• We got standards and frameworks and tools
• JavaScript spread to Node.js and MongoDB and
Johnny Five!
And Then Things Got Weird
But First, A Little Exercise!
Yes, we’re going to get physical…
Nod Your Head
if you use JavaScript
Clap Your Hands
if you love JavaScript
Pound Your Feet
if you hate JavaScript
Real Programmers Multi-Task
Use it. Love it. Hate it.
Nod. Clap. Pound.
But why?
Let’s Ask Expert!
Douglas Crockford, 2001
“JavaScript is the world’s
most misunderstood
programming language.”
The
Most Misunderstood
• the name carries misleading implications
• typecasting and lisp in c’s clothing
• moving target and design errors
• amateurs and lousy implementations
• bad books and a substandard standard
• not really object-oriented?
But Not Anymore
• Crockford was right, but things have changed
• JavaScript is no longer misunderstood
• So the question remains… Why?
Typology
Dynamic?
Yes
Weakly Typed?
Yup
Except it also has a few strong types
Compiled?
Of course not
Except that all major JavaScript engines
perform JIT (and AOT?) compilation today
Or maybe even grunt and gulp and webpack?
Interpreted?
Definitely!
Actually, interpreted semantics
Which change under strict mode
And again for ES6
Functional?
Yes… high-order functions
And no… side effects and immutable semantics
Unless ES5: filter, map, reduce, some,
defineProperty…
Or ES6: consts, arrow functions, destructuring,
generators…
Or ES7: async, observe…
Inheritance?
Absolutely, but it’s weird
Prototypes, not classes
Except in ES6, where classes are actually
prototypes
Or the gazillion logical class implementations,
which are mostly abstractions for prototypes or
glorified mixins
Modules?
Nope, not really
Unless you use specific design patterns
Or hacks, like immediate functions
Or a framework that rolls its own, like Angular
Or AMD (RequireJS)
Or CommonJS (Node.js)
Or ES6 modules
Expressive?
It really depends on who you ask
But before jQuery showed us the way, most
programmers did not see it as expressive or use
it that way
So JavaScript Is…
• Clearly dynamic
• Mostly weakly typed
• Kind of interpreted yet also compiled
• Trending toward but not quite functional
• Inherently mixed up about inheritance
• Inconsistently modular
• Subjectively expressive
WTF?!!!!
JavaScript is no longer misunderstood…
But it is confusing
JavaScript is a buffet!
Coping Strategies
The Ostrich
Ignore JavaScript
“We don’t need no stinkin’ JavaScript!”
• Go native
• Or stick to the server
• … And curse Brendan Eich
The Chameleon
Hide JavaScript
“the assembly language of the web”
• JavaScript is ugly
• So compile familiar
languages “down”
• Or invent “prettier”
languages to transpile
The Phoenix
Reinvent JavaScript
“The king is dead. Long live the king.”
• Improve JavaScript gradually
• Or drastically
• Or create a “better” superset
The Kangaroo
Skip Over JavaScript
“cut out the middleman”
• Use an alternative in the browser
(like Dart or VBScript)
• Or go binary (with WebAssembly)
The Dinosaur
Stop Changing JavaScript
“Why ruin a good thing?”
• It works, leave it alone
• The advantage of living
in the past is that it’s
all documented
Coping Strategies
• The Ostrich: ignore JavaScript
• The Chameleon: hide JavaScript
• The Phoenix: reinvent JavaScript
• The Kangaroo: skip over JavaScript
• The Dinosaur: stop changing JavaScript
There Seems to Be a Pattern
And it’s not the animals
Hint #1 – The Environment
In which environments does your JavaScript run?
• In the browser?
• On the server?
• In the database?
• On some device?
• Everywhere?
Hint #2 – The Ecosystem
What language do you use to write your code?
• JavaScript all the way!
• CoffeeScript?
• TypeScript or Flow?
• C# or Java?
• Anything but JavaScript?
Hint #3 – The Language
Which JavaScript do you actually use?
• ES3?
• ES5?
• ES6?
• Some other version?
• Do you even know?
Hint #4 – The Style
Do you have a preferred programming style?
• More functional?
• More object-oriented?
• Whatever the framework prescribes?
• Whatever gets the job done?
• What are you talking about?
The Problem
• JavaScript is ubiquitous, flexible, feature-rich,
expressive and popular
• But it is also very confusing and
suffering from an identity crisis
Converging and Diverging
• JavaScript engines are finally converging and
are achieving remarkable feature parity,
implying eventual consistency across tools,
platforms and ecosystems
• But the tools, platforms and ecosystems are
actually diverging, despite expectations
• These are opposing trends
Has JavaScript Peaked?
• JavaScript does not seem to be slowing down
• But neither is the fragmentation
• These are opposing trends
JavaScript Has Evolved
• JavaScript’s design has been influenced by
many factors and contradictory goals:
• open source
• competing browsers
• a changing web
• maturation of the industry
• etc.
• They have caused fragmentation
• But ironically, they have also contributed to its
evolution and survival
JavaScript Is Inherently Adaptive
• The key to its survival is its adaptability
• Its ubiquity and strange typology are
evolutionary byproducts
• Change is part of its DNA
• The language will continue to evolve
Looking Forward
• JavaScript is constantly shooting
out in new directions
• It will hopefully never stabilize
• Stabilization will be its death knell
• Change makes our lives difficult
• In the long run, it’s a necessity
There Is No Spoon
• Do not try and bend the spoon. That’s
impossible. Instead, only try and realize the
truth.
• What truth?
• There is no spoon.
• There is no spoon?
• Then you’ll see that it is not the spoon that
bends, it is only yourself.
Thank You
Noam Kfir
Senior Architect, Sela Group
http://noam.kfir.cc
@NoamKfir

More Related Content

What's hot

Customizing the custom loop wordcamp 2012-jeff
Customizing the custom loop   wordcamp 2012-jeffCustomizing the custom loop   wordcamp 2012-jeff
Customizing the custom loop wordcamp 2012-jeff
Alexander Sapountzis
 
Deploying Rails Applications: Lessons Learned
Deploying Rails Applications: Lessons LearnedDeploying Rails Applications: Lessons Learned
Deploying Rails Applications: Lessons Learned
Michael Koby
 
Dr. Russell Keith-Magee: Building a development community
Dr. Russell Keith-Magee: Building a development communityDr. Russell Keith-Magee: Building a development community
Dr. Russell Keith-Magee: Building a development community
it-people
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
elliando dias
 

What's hot (10)

Java Is Not Dead - Bob McWhirter
Java Is Not Dead - Bob McWhirterJava Is Not Dead - Bob McWhirter
Java Is Not Dead - Bob McWhirter
 
Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014Rethinking Scala Presented in San Francisco May 7, 2014
Rethinking Scala Presented in San Francisco May 7, 2014
 
Customizing the custom loop wordcamp 2012-jeff
Customizing the custom loop   wordcamp 2012-jeffCustomizing the custom loop   wordcamp 2012-jeff
Customizing the custom loop wordcamp 2012-jeff
 
Deploying Rails Applications: Lessons Learned
Deploying Rails Applications: Lessons LearnedDeploying Rails Applications: Lessons Learned
Deploying Rails Applications: Lessons Learned
 
Dr. Russell Keith-Magee: Building a development community
Dr. Russell Keith-Magee: Building a development communityDr. Russell Keith-Magee: Building a development community
Dr. Russell Keith-Magee: Building a development community
 
Writing Bullet-Proof Javascript: By Using CoffeeScript
Writing Bullet-Proof Javascript: By Using CoffeeScriptWriting Bullet-Proof Javascript: By Using CoffeeScript
Writing Bullet-Proof Javascript: By Using CoffeeScript
 
Why you should be excited about ClojureScript
Why you should be excited about ClojureScriptWhy you should be excited about ClojureScript
Why you should be excited about ClojureScript
 
A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!A Swift introduction a.k.a Fun with Minions!
A Swift introduction a.k.a Fun with Minions!
 
Scalable Open Source
Scalable Open SourceScalable Open Source
Scalable Open Source
 
How To Be A Real Developer In Two Easy Steps!
How To Be A Real Developer In Two Easy Steps!How To Be A Real Developer In Two Easy Steps!
How To Be A Real Developer In Two Easy Steps!
 

Similar to There Is No JavaScript

YOOX Launch & Learn - Javascript as a programming language
 YOOX Launch & Learn - Javascript as a programming language YOOX Launch & Learn - Javascript as a programming language
YOOX Launch & Learn - Javascript as a programming language
Marco Cedaro
 

Similar to There Is No JavaScript (20)

Let’s learn how to use JavaScript responsibly and stay up-to-date.
Let’s learn how to use JavaScript responsibly and stay up-to-date. Let’s learn how to use JavaScript responsibly and stay up-to-date.
Let’s learn how to use JavaScript responsibly and stay up-to-date.
 
Quo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynoteQuo vadis, JavaScript? Devday.pl keynote
Quo vadis, JavaScript? Devday.pl keynote
 
Why I will never write JavaScript ever again*
Why I will never write JavaScript ever again*Why I will never write JavaScript ever again*
Why I will never write JavaScript ever again*
 
Upgrading JavaScript to ES6 and using TypeScript as a shortcut
Upgrading JavaScript to ES6 and using TypeScript as a shortcutUpgrading JavaScript to ES6 and using TypeScript as a shortcut
Upgrading JavaScript to ES6 and using TypeScript as a shortcut
 
Kevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScriptKevin Whinnery: Write Better JavaScript
Kevin Whinnery: Write Better JavaScript
 
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" EcosystemsPyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
PyData Frankfurt - (Efficient) Data Exchange with "Foreign" Ecosystems
 
Frontend as a first class citizen
Frontend as a first class citizenFrontend as a first class citizen
Frontend as a first class citizen
 
Breaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynoteBreaking out of the endless callback look - #jsday Italy keynote
Breaking out of the endless callback look - #jsday Italy keynote
 
Jsday
JsdayJsday
Jsday
 
Introduction to the wonderful world of JavaScript
Introduction to the wonderful world of JavaScriptIntroduction to the wonderful world of JavaScript
Introduction to the wonderful world of JavaScript
 
Making ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and TypescriptMaking ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and Typescript
 
YOOX Launch & Learn - Javascript as a programming language
 YOOX Launch & Learn - Javascript as a programming language YOOX Launch & Learn - Javascript as a programming language
YOOX Launch & Learn - Javascript as a programming language
 
The JavaScript Delusion
The JavaScript DelusionThe JavaScript Delusion
The JavaScript Delusion
 
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
 
JavaScript nicht nur für Programmierer: Einblicke in die weltweit am meisten ...
JavaScript nicht nur für Programmierer: Einblicke in die weltweit am meisten ...JavaScript nicht nur für Programmierer: Einblicke in die weltweit am meisten ...
JavaScript nicht nur für Programmierer: Einblicke in die weltweit am meisten ...
 
History of Java 2/2
History of Java 2/2History of Java 2/2
History of Java 2/2
 
TypeScript-SPS-melb.pptx
TypeScript-SPS-melb.pptxTypeScript-SPS-melb.pptx
TypeScript-SPS-melb.pptx
 
jsDay - Javascript as a programming language
jsDay - Javascript as a programming languagejsDay - Javascript as a programming language
jsDay - Javascript as a programming language
 
JavaScript: Your New Overlord
JavaScript: Your New OverlordJavaScript: Your New Overlord
JavaScript: Your New Overlord
 
Coffee script throwdown
Coffee script throwdownCoffee script throwdown
Coffee script throwdown
 

More from Noam Kfir

Drawing in HTML5 Open House
Drawing in HTML5 Open HouseDrawing in HTML5 Open House
Drawing in HTML5 Open House
Noam Kfir
 

More from Noam Kfir (16)

Agile Mind Games and the Art of Self-Delusion
Agile Mind Games and the Art of Self-DelusionAgile Mind Games and the Art of Self-Delusion
Agile Mind Games and the Art of Self-Delusion
 
Testers and Coders - Blurring the Lines
Testers and Coders - Blurring the LinesTesters and Coders - Blurring the Lines
Testers and Coders - Blurring the Lines
 
TDD and the Legacy Code Black Hole
TDD and the Legacy Code Black HoleTDD and the Legacy Code Black Hole
TDD and the Legacy Code Black Hole
 
TypeScript Modules
TypeScript ModulesTypeScript Modules
TypeScript Modules
 
Angular on ASP.NET MVC 6
Angular on ASP.NET MVC 6Angular on ASP.NET MVC 6
Angular on ASP.NET MVC 6
 
Meteor
MeteorMeteor
Meteor
 
Clean code
Clean codeClean code
Clean code
 
Maximizing UI Automation – A Case Study
Maximizing UI Automation – A Case StudyMaximizing UI Automation – A Case Study
Maximizing UI Automation – A Case Study
 
Web components
Web componentsWeb components
Web components
 
HTML5 and the Evolution of the Web
HTML5 and the Evolution of the WebHTML5 and the Evolution of the Web
HTML5 and the Evolution of the Web
 
Git Workflows
Git WorkflowsGit Workflows
Git Workflows
 
Getting Started with Git: A Primer for SVN and TFS Users
Getting Started with Git: A Primer for SVN and TFS UsersGetting Started with Git: A Primer for SVN and TFS Users
Getting Started with Git: A Primer for SVN and TFS Users
 
Building Cross-Platform JavaScript Apps using Cordova
Building Cross-Platform JavaScript Apps using CordovaBuilding Cross-Platform JavaScript Apps using Cordova
Building Cross-Platform JavaScript Apps using Cordova
 
Telerik Platform
Telerik PlatformTelerik Platform
Telerik Platform
 
Profiling JavaScript Performance
Profiling JavaScript PerformanceProfiling JavaScript Performance
Profiling JavaScript Performance
 
Drawing in HTML5 Open House
Drawing in HTML5 Open HouseDrawing in HTML5 Open House
Drawing in HTML5 Open House
 

Recently uploaded

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 

Recently uploaded (20)

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 

There Is No JavaScript

  • 1. There Is No JavaScript Noam Kfir Senior Architect, Sela Group http://noam.kfir.cc @NoamKfir
  • 2. A Brief History of JavaScript
  • 3. The Bubbling Pool Brendan Eich hacked JavaScript together in ten days
  • 4. The First Decade Happened • JavaScript was handed to a committee • The browsers went to war • A bunch of languages fought and JavaScript won • The web got big
  • 5. The Mesozoic Lair John Resig raised JavaScript out of the swamp
  • 6. The Second Decade Happened • IE6 died a slow painful death • We got standards and frameworks and tools • JavaScript spread to Node.js and MongoDB and Johnny Five!
  • 7. And Then Things Got Weird
  • 8. But First, A Little Exercise! Yes, we’re going to get physical…
  • 9. Nod Your Head if you use JavaScript
  • 10. Clap Your Hands if you love JavaScript
  • 11. Pound Your Feet if you hate JavaScript
  • 12. Real Programmers Multi-Task Use it. Love it. Hate it. Nod. Clap. Pound. But why?
  • 13. Let’s Ask Expert! Douglas Crockford, 2001 “JavaScript is the world’s most misunderstood programming language.” The
  • 14. Most Misunderstood • the name carries misleading implications • typecasting and lisp in c’s clothing • moving target and design errors • amateurs and lousy implementations • bad books and a substandard standard • not really object-oriented?
  • 15. But Not Anymore • Crockford was right, but things have changed • JavaScript is no longer misunderstood • So the question remains… Why?
  • 18. Weakly Typed? Yup Except it also has a few strong types
  • 19. Compiled? Of course not Except that all major JavaScript engines perform JIT (and AOT?) compilation today Or maybe even grunt and gulp and webpack?
  • 20. Interpreted? Definitely! Actually, interpreted semantics Which change under strict mode And again for ES6
  • 21. Functional? Yes… high-order functions And no… side effects and immutable semantics Unless ES5: filter, map, reduce, some, defineProperty… Or ES6: consts, arrow functions, destructuring, generators… Or ES7: async, observe…
  • 22. Inheritance? Absolutely, but it’s weird Prototypes, not classes Except in ES6, where classes are actually prototypes Or the gazillion logical class implementations, which are mostly abstractions for prototypes or glorified mixins
  • 23. Modules? Nope, not really Unless you use specific design patterns Or hacks, like immediate functions Or a framework that rolls its own, like Angular Or AMD (RequireJS) Or CommonJS (Node.js) Or ES6 modules
  • 24. Expressive? It really depends on who you ask But before jQuery showed us the way, most programmers did not see it as expressive or use it that way
  • 25. So JavaScript Is… • Clearly dynamic • Mostly weakly typed • Kind of interpreted yet also compiled • Trending toward but not quite functional • Inherently mixed up about inheritance • Inconsistently modular • Subjectively expressive
  • 26. WTF?!!!! JavaScript is no longer misunderstood… But it is confusing JavaScript is a buffet!
  • 28. The Ostrich Ignore JavaScript “We don’t need no stinkin’ JavaScript!” • Go native • Or stick to the server • … And curse Brendan Eich
  • 29. The Chameleon Hide JavaScript “the assembly language of the web” • JavaScript is ugly • So compile familiar languages “down” • Or invent “prettier” languages to transpile
  • 30. The Phoenix Reinvent JavaScript “The king is dead. Long live the king.” • Improve JavaScript gradually • Or drastically • Or create a “better” superset
  • 31. The Kangaroo Skip Over JavaScript “cut out the middleman” • Use an alternative in the browser (like Dart or VBScript) • Or go binary (with WebAssembly)
  • 32. The Dinosaur Stop Changing JavaScript “Why ruin a good thing?” • It works, leave it alone • The advantage of living in the past is that it’s all documented
  • 33. Coping Strategies • The Ostrich: ignore JavaScript • The Chameleon: hide JavaScript • The Phoenix: reinvent JavaScript • The Kangaroo: skip over JavaScript • The Dinosaur: stop changing JavaScript
  • 34. There Seems to Be a Pattern And it’s not the animals
  • 35. Hint #1 – The Environment In which environments does your JavaScript run? • In the browser? • On the server? • In the database? • On some device? • Everywhere?
  • 36. Hint #2 – The Ecosystem What language do you use to write your code? • JavaScript all the way! • CoffeeScript? • TypeScript or Flow? • C# or Java? • Anything but JavaScript?
  • 37. Hint #3 – The Language Which JavaScript do you actually use? • ES3? • ES5? • ES6? • Some other version? • Do you even know?
  • 38. Hint #4 – The Style Do you have a preferred programming style? • More functional? • More object-oriented? • Whatever the framework prescribes? • Whatever gets the job done? • What are you talking about?
  • 39. The Problem • JavaScript is ubiquitous, flexible, feature-rich, expressive and popular • But it is also very confusing and suffering from an identity crisis
  • 40. Converging and Diverging • JavaScript engines are finally converging and are achieving remarkable feature parity, implying eventual consistency across tools, platforms and ecosystems • But the tools, platforms and ecosystems are actually diverging, despite expectations • These are opposing trends
  • 41. Has JavaScript Peaked? • JavaScript does not seem to be slowing down • But neither is the fragmentation • These are opposing trends
  • 42. JavaScript Has Evolved • JavaScript’s design has been influenced by many factors and contradictory goals: • open source • competing browsers • a changing web • maturation of the industry • etc. • They have caused fragmentation • But ironically, they have also contributed to its evolution and survival
  • 43. JavaScript Is Inherently Adaptive • The key to its survival is its adaptability • Its ubiquity and strange typology are evolutionary byproducts • Change is part of its DNA • The language will continue to evolve
  • 44. Looking Forward • JavaScript is constantly shooting out in new directions • It will hopefully never stabilize • Stabilization will be its death knell • Change makes our lives difficult • In the long run, it’s a necessity
  • 45. There Is No Spoon • Do not try and bend the spoon. That’s impossible. Instead, only try and realize the truth. • What truth? • There is no spoon. • There is no spoon? • Then you’ll see that it is not the spoon that bends, it is only yourself.
  • 46. Thank You Noam Kfir Senior Architect, Sela Group http://noam.kfir.cc @NoamKfir

Editor's Notes

  1. A Short History of JavaScript on w3c.org https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript
  2. JavaScript was basically supposed to be a performance optimization.
  3. Exciting times… Does anybody cares about the programmers? History - highlights: - browser wars - inconsistencies, standards - ActionScript extended JS - JScript bit the bullet - VBScript bit the bullet - DHTML gave us full access to the DOM - jQuery rewired our brains - Object.create()
  4. Only about 150 million internet years ago… jQuery: - unified browsers - made Ajax easy - made JavaScript elegant and professional - solved tons of problems “JQuery is used by 95.5% of all the websites whose JavaScript library we know. This is 65.9% of all websites.” http://w3techs.com/technologies/details/js-jquery/all/all
  5. The server, and the database, and Arduino microchip controllers.
  6. I want to talk about the current state of JavaScript and where it’s heading.
  7. I won’t ask you to stand up, unless…
  8. Or shake it. Whatever.
  9. Don’t be shy…
  10. 1. There’s no shame in it. 2. And nobody can you see your feet.
  11. Nod you hands, clap your feet, pound your heads.
  12. A bit old, but surprisingly some of it is still relevant today!
  13. - moving target and design errors: bad choices, outdated opinions, too many versions - object-oriented: encapuslation, inheritance, prototypes? Sections: - the name - lisp in c’s clothing - moving target - design errors - lousy implementations - substandard standard - amateurs - object-oriented
  14. A typological analysis is quite revealing. JavaScript today is more confusing than ever!
  15. Some strong types: * Int8Array, also 16 and 32 * Uint8Array, also 16 and 32 * Float32Array, also 64
  16. strict mode: - no implied global variables in functions - no with statement - no octal literals - restrictions on eval - setting a writeable: false property will throw - deleting a configurable: false property will throw - apply and call do not default to the global object - “this” not bound to the global object by function form - eval and arguments are reserved - arguments not linked to parameters - no more arguments.caller or arguments.callee - duplicate names in an object literal or function parameters are a syntax error based on: https://gist.github.com/sym3tri/2425983
  17. immediate functions - self-executing functions - immediately invoked function expressions (IIFEs) ES6 vs. Node.js modules - ES6 import vs. CJS require - CJS can load modules dynamically - ES6 can be synd or async, CJS is never async
  18. … I know I’m confused.
  19. Obviously, the language was designed by committee… Buffet – smorgasbord – has a bit of everything and you get to choose what you want.
  20. They’ll even write Objective-C! Or maybe just stop programming…
  21. There are hundreds of languages that compile to JavaScript! It’s almost like they don’t like the language… Assembly is always just the lowest layer. But JavaScript can be any layer. It really depends on your approach. - http://www.slant.co/topics/101/~what-are-the-best-languages-that-compile-to-javascript - https://github.com/jashkenas/coffeescript/wiki/list-of-languages-that-compile-to-js - compile down: - C#: Script# and DuoCode - Java: GWT and Vaadin - Clojure: ClojureScript - Ruby: Opal - F#: FunScript - Python: pyjamas - transpile: - CoffeeScript - Dart - Haxe (maybe) emscripten talk: http://kripken.github.io/mloc_emscripten_talk/#/5
  22. Phoenixes believe that JavaScript is not “just” the assemble language of the web. It is layer-agnostic. - Gradually improve JavaScript: - strict mode - property attributes - new library functions - Drastically change JavaScript - ES6 and ES7: new keywords, operators and semantics) - Create “better” supersets - Flow - TypeScript
  23. - specific alternatives: Dart and VBScript - go binary: WebAssembly and asm.js Assembly as the assembly language of the web, except it’s not really an assembly language. Brendan Eich: “we are aiming to develop the Web’s polyglot-programming-language object-file format” https://brendaneich.com/2015/06/from-asm-js-to-webassembly/ Big Web App? Compile It! by Alon Zakai / Mozilla http://kripken.github.io/mloc_emscripten_talk/#/
  24. “Vanilla JavaScript” is good just the way it is
  25. Are the convergence and divergence mutual?
  26. The fragmentation is like a powerful and unstoppable undercurrent.
  27. New directions: experimenting with new technologies, adapting to new platforms and environments
  28. The moral is: as JavaScript changes, so must we. We have a symbiotic relationship with the language. Nobody wants to be a dinosaur.