SlideShare una empresa de Scribd logo
1 de 78
The
Better
Parts
Antoine de Saint-ExupéryAntoine de Saint-Exupéry
Il semble que la perfection soit atteinte
non quand il n’y a plus rien à ajouter,
mais quand il n’y a plus rien à retrancher.
Antoine de Saint-Exupéry
Terre des Hommes, 1939
It seems that perfection is attained
not when there is nothing more to add,
but when there is nothing more to take away.
Good Parts
It seems that perfection is attained
not when there is nothing more to add,
but when there is nothing more to take away.
If a feature is sometimes
useful and sometimes
dangerous
and if there is a better option then
always use the better option.
We are not paid to use every
feature of the language.
We are paid to write
programs that work
well and are free of
error.
We are not paid to use every
feature of the language.
We are paid to write
programs that work
well and are free of
error.
A good programming
language should teach you.
I made every mistake with
JavaScript you could make.
Arguments against good parts
• Just a matter of opinion.
• Every feature is an essential tool.
• It is sometimes useful.
• I have a right to use every feature.
• I need the freedom to express myself.
• I need to reduce my keystrokes.
• It is an insult to suggest that I would ever make a
mistake with a dangerous feature.
• There is a good reason those features were added
to the language.
Foot Guns
Brendan Eich
The purpose of a
programming language is to
aid programmers in
producing error-free
programs.
It is not possible to write good
programs in JavaScript.
It is not only possible to
write good programs in
JavaScript,
it is necessary.
It is not possible to write good
programs in JavaScript.
Java <> JavaScript
Java <> JavaScript
Star Trek Star Wars
Java <> JavaScript
Star Trek
• Phasers
• Photon Torpedoes
• Uniforms
• Regulations
Star Wars
Java <> JavaScript
Star Trek
• Phasers
• Photon Torpedoes
• Uniforms
• Regulations
Star Wars
• Light Sabres & Blasters
• Proton Torpedoes
• Sand
• Chaos
Meesa
web
ninja!
The fantasy of infallibility.
The futility of faultlessness.
Danger Driven Development
Scheduling
A.The time it takes to write the code.
B. The time it takes to make the code
work right.
Always take the time to code well.
New Good Parts in ES6
• Proper tail calls:
return func();
New Good Parts in ES6
• Proper tail calls
• Ellipsis...aka ...rest, aka ...spread
function curry(func, ...first) {
return function (...second) {
return func(...first, ...second);
};
}
function curry(func) {
var slice = Array.prototype.slice, args = slice.call(arguments, 1);
return function () {
return func.apply(null, args.concat(slice.call(arguments, 0)));
};
}
New Good Parts in ES6
• Proper tail calls
• Ellipsis
• Module
New Good Parts in ES6
• Proper tail calls
• Ellipsis
• Module
• let and const
const fax = {};
fax = faz; // bad
fax.fay = faz; // ok
New Good Parts in ES6
• Proper tail calls
• Ellipsis
• Module
• Let
• Destructuring
let {that, other} = some_object;
let that = some_object.that, other = some_object.other;
New Good Parts in ES6
• Proper tail calls
• Ellipsis
• Module
• let and const
• Destructuring
• WeakMap
New Good Parts in ES6
• Proper tail calls
• Ellipsis
• Module
• let and const
• Destructuring
• WeakMap
• Megastring literals
var rx_number = /^(0(?:b[01]+|o[0-7]+|x[0-9a-fA-
F]+|.[0-9]+(?:e[+-]?[0-9]+)?)?|[1-9][0-
9]*(?:.[0-9]+)?(?:e[+-]?[0-9]+)?)$/;
function mega_regexp(str, fl) {
return new RegExp(str.replace(/s/, ""), fl);
}
const rx_number = mega_regexp(`^(
0 (?:
b [01]+
| o [0-7]+
| x [0-9 a-f A-F]+
| . [0-9]+ (?: e [+ -]? [0-9]+ )?
)?
| [1-9] [0-9]*
(?: . [0-9]+ )? (?: e [+ -]? [0-9]+ )?
)$`);
var rx_number = /^(0(?:b[01]+|o[0-7]+|x[0-9a-fA-
F]+|.[0-9]+(?:e[+-]?[0-9]+)?)?|[1-9][0-
9]*(?:.[0-9]+)?(?:e[+-]?[0-9]+)?)$/;
function mega_regexp(str, fl) {
return new RegExp(str.replace(/s/, ""), fl);
}
const rx_number = mega_regexp(`^(
0 (?:
b [01]+
| o [0-7]+
| x [0-9 a-f A-F]+
| . [0-9]+ (?: e [+ -]? [0-9]+ )?
)?
| [1-9] [0-9]*
(?: . [0-9]+ )? (?: e [+ -]? [0-9]+ )?
)$`);
http://jex.im/regulex
New Bad Parts in ES6
• Proxies
• Generators
• Iterators
• Symbols
• Reflect
• Fat Arrow Functions
(name) => {id: name}
Worst Bad Part in ES6
class
Good Parts Reconsidered
• I stopped using new years ago.
Use Object.create instead.
Good Parts Reconsidered
• I stopped using new years ago.
• I have stopped using Object.create.
Good Parts Reconsidered
• I stopped using new years ago.
• I have stopped using Object.create.
• I have stopped using this.
[ADsafe.org]
Good Parts Reconsidered
• I stopped using new years ago.
• I have stopped using Object.create.
• I have stopped using this.
• I have stopped using null.
Good Parts Reconsidered
• I stopped using new years ago.
• I have stopped using Object.create.
• I have stopped using this.
• I have stopped using null.
• I have stopped using falsiness.
Loops Reconsidered
• I don’t use for.
I now use array.forEach and its many
sisters.
• I don’t use for in. I now use
Object.keys(object).forEach.
• ES6 will have proper tail calls.
At that point I will stop using while.
function repeat(func) {
while (func() !== undefined) {
}
}
function repeat(func) {
if (func() !== undefined) {
return repeat(func);
}
}
The Next Language
Programmers are as
emotional and irrational
as normal people.
It took a generation to agree that
high level languages were a good
idea.
It took a generation to agree that
goto was a bad idea.
It took a generation to agree that
objects were a good idea.
It took two generations to agree that
lambdas were a good idea.
Systems languages
Application languages
Classical Inheritance
Prototypal Inheritance
Classification
Taxonomy
Prototypal Inheritance
• Memory conservation.
• May have made sense in 1995.
• Confusion: Own vs inherited.
• Retroactive heredity.
• Performance inhibiting.
Prototypal Inheritance
Class Free
Block Scope
{
let a;
{
let b;
… a …
… b …
}
… a …
}
Function Scope
function green() {
let a;
function yellow() {
let b;
… a …
… b …
}
… a …
}
Function Scope
function green() {
let a;
function yellow() {
let b;
… a …
… b …
}
… a …
}
a
Closure
function green() {
let a;
function yellow() {
let b;
… a …
… b …
}
… a …
}
a b
Inner survives the outer
function green() {
let a;
return function yellow() {
let b;
… a …
… b …
};
… a …
}
function constructor(spec) {
let {member} = spec;
let {other} = other_constructor(spec);
let method = function () {
// member, other, method, spec
};
return Object.freeze({
method,
other
});
}
function constructor(spec) {
let {member} = spec;
const {other} = other_constructor(spec);
let method = function () {
// member, other, method, spec
};
return Object.freeze({
method,
other
});
}
function constructor(spec) {
let {member} = spec;
const {other} = other_constructor(spec);
const method = function () {
// member, other, method, spec
};
return Object.freeze({
method,
other
});
}
function constructor(spec) {
let {member} = spec;
const {other} = other_constructor(spec);
const method = function () {
// member, other, method, spec
};
return Object.freeze({
method,
other
});
}
A Bug Story
private int index;
int
• Overflow errors
• Complement: saving gates in
subtraction
• Memory used to be really
expensive and scarce
Number types
Java: byte char short int long float double
Wastes the programmer’s time by having to select the
right type.
Errors result from choosing the wrong type.
No real benefit from chosing the right type.
JavaScript: number (same as double)
Having only one type is a huge improvement.
Unfortunately, it is the wrong type.
Number types
Java: byte char short int long float double
Wastes the programmer’s time by having to select the
right type.
Errors result from choosing the wrong type.
No real benefit.
JavaScript: number (same as double)
Having only one type is a huge improvement.
Unfortunately, it is the wrong type.
0.1 + 0.2 == 0.3
false
Binary Floating Point
Made a lot of sense in the 1950s.
Scientific | Business
DEC64
Number = Coefficient * 10Exponent
CoefficientCoefficient
Exponent
dec64.com
https://github.com/douglascrockford/DEC64/
CoefficientCoefficient
Exponent
The JSON Data Interchange
Format
JSON, XML
JSON, XML
Advice to data format
standard designers
• Don’t break JSON.
• Make it significantly better.
• Get a better name.
JSON
Java-
Script
Object
Notation
Responsibility
1. The People
2. The Team
3. Management
And finally,
one piece of advice:
Don’t make bugs.

Más contenido relacionado

La actualidad más candente

Introduction to Programming Bots
Introduction to Programming BotsIntroduction to Programming Bots
Introduction to Programming BotsDmitri Nesteruk
 
All You Need to Know About Type Script
All You Need to Know About Type ScriptAll You Need to Know About Type Script
All You Need to Know About Type ScriptFolio3 Software
 
JavaScript for Web Analysts
JavaScript for Web AnalystsJavaScript for Web Analysts
JavaScript for Web AnalystsLukáš Čech
 
[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtoolingDouglas Chen
 
Connecting C++ and JavaScript on the Web with Embind
Connecting C++ and JavaScript on the Web with EmbindConnecting C++ and JavaScript on the Web with Embind
Connecting C++ and JavaScript on the Web with EmbindChad Austin
 
Introduction to Dart
Introduction to DartIntroduction to Dart
Introduction to DartRamesh Nair
 
Swimat - Swift formatter
Swimat - Swift formatterSwimat - Swift formatter
Swimat - Swift formatterJintin Lin
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Jimmy Schementi
 
Dove sono i tuoi vertici e di cosa stanno parlando?
Dove sono i tuoi vertici e di cosa stanno parlando?Dove sono i tuoi vertici e di cosa stanno parlando?
Dove sono i tuoi vertici e di cosa stanno parlando?Codemotion
 
A quick and fast intro to Kotlin
A quick and fast intro to Kotlin A quick and fast intro to Kotlin
A quick and fast intro to Kotlin XPeppers
 
Hourglass Interfaces for C++ APIs - CppCon 2014
Hourglass Interfaces for C++ APIs - CppCon 2014Hourglass Interfaces for C++ APIs - CppCon 2014
Hourglass Interfaces for C++ APIs - CppCon 2014Stefanus Du Toit
 
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)Igalia
 
Kotlin cheat sheet by ekito
Kotlin cheat sheet by ekitoKotlin cheat sheet by ekito
Kotlin cheat sheet by ekitoArnaud Giuliani
 
Typescript tips & tricks
Typescript tips & tricksTypescript tips & tricks
Typescript tips & tricksOri Calvo
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvmArnaud Giuliani
 
C++ Tail Recursion Using 64-bit variables
C++ Tail Recursion Using 64-bit variablesC++ Tail Recursion Using 64-bit variables
C++ Tail Recursion Using 64-bit variablesPVS-Studio
 
Groovy AST Transformations
Groovy AST TransformationsGroovy AST Transformations
Groovy AST Transformationshendersk
 
Large Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptLarge Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptOliver Zeigermann
 

La actualidad más candente (20)

Introduction to Programming Bots
Introduction to Programming BotsIntroduction to Programming Bots
Introduction to Programming Bots
 
Monte Carlo C++
Monte Carlo C++Monte Carlo C++
Monte Carlo C++
 
All You Need to Know About Type Script
All You Need to Know About Type ScriptAll You Need to Know About Type Script
All You Need to Know About Type Script
 
JavaScript for Web Analysts
JavaScript for Web AnalystsJavaScript for Web Analysts
JavaScript for Web Analysts
 
[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling
 
Connecting C++ and JavaScript on the Web with Embind
Connecting C++ and JavaScript on the Web with EmbindConnecting C++ and JavaScript on the Web with Embind
Connecting C++ and JavaScript on the Web with Embind
 
Introduction to Dart
Introduction to DartIntroduction to Dart
Introduction to Dart
 
Swimat - Swift formatter
Swimat - Swift formatterSwimat - Swift formatter
Swimat - Swift formatter
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011
 
Dove sono i tuoi vertici e di cosa stanno parlando?
Dove sono i tuoi vertici e di cosa stanno parlando?Dove sono i tuoi vertici e di cosa stanno parlando?
Dove sono i tuoi vertici e di cosa stanno parlando?
 
A quick and fast intro to Kotlin
A quick and fast intro to Kotlin A quick and fast intro to Kotlin
A quick and fast intro to Kotlin
 
Hourglass Interfaces for C++ APIs - CppCon 2014
Hourglass Interfaces for C++ APIs - CppCon 2014Hourglass Interfaces for C++ APIs - CppCon 2014
Hourglass Interfaces for C++ APIs - CppCon 2014
 
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
 
Kotlin cheat sheet by ekito
Kotlin cheat sheet by ekitoKotlin cheat sheet by ekito
Kotlin cheat sheet by ekito
 
Typescript tips & tricks
Typescript tips & tricksTypescript tips & tricks
Typescript tips & tricks
 
Kotlin, smarter development for the jvm
Kotlin, smarter development for the jvmKotlin, smarter development for the jvm
Kotlin, smarter development for the jvm
 
C++ Tail Recursion Using 64-bit variables
C++ Tail Recursion Using 64-bit variablesC++ Tail Recursion Using 64-bit variables
C++ Tail Recursion Using 64-bit variables
 
Groovy AST Transformations
Groovy AST TransformationsGroovy AST Transformations
Groovy AST Transformations
 
Large Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScriptLarge Scale JavaScript with TypeScript
Large Scale JavaScript with TypeScript
 
Metaprogramming
MetaprogrammingMetaprogramming
Metaprogramming
 

Similar a JS Fest 2018. Douglas Crockford. The Better Parts

Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsAjax Experience 2009
 
Douglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainDouglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainWeb Directions
 
Section 8 Programming Style and Your Brain: Douglas Crockford
Section 8 Programming Style and Your Brain: Douglas CrockfordSection 8 Programming Style and Your Brain: Douglas Crockford
Section 8 Programming Style and Your Brain: Douglas Crockfordjaxconf
 
Go Beyond Higher Order Functions: A Journey into Functional Programming
Go Beyond Higher Order Functions: A Journey into Functional ProgrammingGo Beyond Higher Order Functions: A Journey into Functional Programming
Go Beyond Higher Order Functions: A Journey into Functional ProgrammingLex Sheehan
 
Haxe by sergei egorov
Haxe by sergei egorovHaxe by sergei egorov
Haxe by sergei egorovSergei Egorov
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)Pavlo Baron
 
Making JavaScript Libraries More Approachable
Making JavaScript Libraries More ApproachableMaking JavaScript Libraries More Approachable
Making JavaScript Libraries More ApproachablePamela Fox
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScriptTroy Miles
 
2 Years of Real World FP at REA
2 Years of Real World FP at REA2 Years of Real World FP at REA
2 Years of Real World FP at REAkenbot
 
A brief introduction to C Language
A brief introduction to C LanguageA brief introduction to C Language
A brief introduction to C LanguageMohamed Elsayed
 
Functional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersFunctional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersDiego Freniche Brito
 
Fp for the oo programmer
Fp for the oo programmerFp for the oo programmer
Fp for the oo programmerShawn Button
 
Boo Manifesto
Boo ManifestoBoo Manifesto
Boo Manifestohu hans
 
React Native Evening
React Native EveningReact Native Evening
React Native EveningTroy Miles
 
javascript teach
javascript teachjavascript teach
javascript teachguest3732fa
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_Whiteguest3732fa
 
Power Leveling your TypeScript
Power Leveling your TypeScriptPower Leveling your TypeScript
Power Leveling your TypeScriptOffirmo
 

Similar a JS Fest 2018. Douglas Crockford. The Better Parts (20)

Douglas Crockford Presentation Goodparts
Douglas Crockford Presentation GoodpartsDouglas Crockford Presentation Goodparts
Douglas Crockford Presentation Goodparts
 
Goodparts
GoodpartsGoodparts
Goodparts
 
Douglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your BrainDouglas Crockford - Programming Style and Your Brain
Douglas Crockford - Programming Style and Your Brain
 
Section 8 Programming Style and Your Brain: Douglas Crockford
Section 8 Programming Style and Your Brain: Douglas CrockfordSection 8 Programming Style and Your Brain: Douglas Crockford
Section 8 Programming Style and Your Brain: Douglas Crockford
 
Go Beyond Higher Order Functions: A Journey into Functional Programming
Go Beyond Higher Order Functions: A Journey into Functional ProgrammingGo Beyond Higher Order Functions: A Journey into Functional Programming
Go Beyond Higher Order Functions: A Journey into Functional Programming
 
Javascript status 2016
Javascript status 2016Javascript status 2016
Javascript status 2016
 
Haxe by sergei egorov
Haxe by sergei egorovHaxe by sergei egorov
Haxe by sergei egorov
 
What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)What can be done with Java, but should better be done with Erlang (@pavlobaron)
What can be done with Java, but should better be done with Erlang (@pavlobaron)
 
Making JavaScript Libraries More Approachable
Making JavaScript Libraries More ApproachableMaking JavaScript Libraries More Approachable
Making JavaScript Libraries More Approachable
 
Functional Programming in JavaScript
Functional Programming in JavaScriptFunctional Programming in JavaScript
Functional Programming in JavaScript
 
2 Years of Real World FP at REA
2 Years of Real World FP at REA2 Years of Real World FP at REA
2 Years of Real World FP at REA
 
A brief introduction to C Language
A brief introduction to C LanguageA brief introduction to C Language
A brief introduction to C Language
 
Functional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented ProgrammersFunctional Programming for Busy Object Oriented Programmers
Functional Programming for Busy Object Oriented Programmers
 
Fp for the oo programmer
Fp for the oo programmerFp for the oo programmer
Fp for the oo programmer
 
Boo Manifesto
Boo ManifestoBoo Manifesto
Boo Manifesto
 
React Native Evening
React Native EveningReact Native Evening
React Native Evening
 
javascript teach
javascript teachjavascript teach
javascript teach
 
JSBootcamp_White
JSBootcamp_WhiteJSBootcamp_White
JSBootcamp_White
 
Power Leveling your TypeScript
Power Leveling your TypeScriptPower Leveling your TypeScript
Power Leveling your TypeScript
 
Java
JavaJava
Java
 

Más de JSFestUA

JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production
JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in productionJS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production
JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in productionJSFestUA
 
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript PerformanceJS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript PerformanceJSFestUA
 
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JSFestUA
 
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JSFestUA
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JSFestUA
 
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JSFestUA
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJSFestUA
 
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
 
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...JSFestUA
 
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJSFestUA
 
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JSFestUA
 
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JSFestUA
 
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJSFestUA
 
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJSFestUA
 
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJSFestUA
 
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJSFestUA
 
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JSFestUA
 
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJSFestUA
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJSFestUA
 
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JSFestUA
 

Más de JSFestUA (20)

JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production
JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in productionJS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production
JS Fest 2019/Autumn. Роман Савіцький. Webcomponents & lit-element in production
 
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript PerformanceJS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
JS Fest 2019/Autumn. Erick Wendel. 10 secrets to improve Javascript Performance
 
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
JS Fest 2019/Autumn. Alexandre Gomes. Embrace the "react fatigue"
 
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
JS Fest 2019/Autumn. Anton Cherednikov. Choreographic or orchestral architect...
 
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
JS Fest 2019/Autumn. Adam Leos. So why do you need to know Algorithms and Dat...
 
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
JS Fest 2019/Autumn. Marko Letic. Saving the world with JavaScript: A Data Vi...
 
JS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstackJS Fest 2019/Autumn. Александр Товмач. JAMstack
JS Fest 2019/Autumn. Александр Товмач. JAMstack
 
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...
 
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
JS Fest 2019/Autumn. Дмитрий Жарков. Blockchainize your SPA or Integrate Java...
 
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developersJS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
JS Fest 2019/Autumn. Maciej Treder. Angular Schematics - Develop for developers
 
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
JS Fest 2019/Autumn. Kyle Boss. A Tinder Love Story: Create a Wordpress Blog ...
 
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
JS Fest 2019/Autumn. Андрей Старовойт. Зачем нужен тип "true" в TypeScript?
 
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the ScaleJS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
JS Fest 2019/Autumn. Eyal Eizenberg. Tipping the Scale
 
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratchJS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
JS Fest 2019/Autumn. Sota Ohara. Сreate own server less CMS from scratch
 
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотятJS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
JS Fest 2019/Autumn. Джордж Евтушенко. Как стать программистом, которого хотят
 
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for RustJS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
JS Fest 2019/Autumn. Алексей Орленко. Node.js N-API for Rust
 
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
JS Fest 2019/Autumn. Daniel Ostrovsky. Falling in love with decorators ES6/Ty...
 
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проектіJS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
JS Fest 2019/Autumn. Андрей Андрийко. Гексагональна архітектура в Nodejs проекті
 
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядроJS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
JS Fest 2019/Autumn. Борис Могила. Svelte. Почему нам не нужно run-time ядро
 
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
JS Fest 2019/Autumn. Виталий Кухар. Сравнение кластеризации HTTP, TCP и UDP н...
 

Último

4.11.24 Mass Incarceration and the New Jim Crow.pptx
4.11.24 Mass Incarceration and the New Jim Crow.pptx4.11.24 Mass Incarceration and the New Jim Crow.pptx
4.11.24 Mass Incarceration and the New Jim Crow.pptxmary850239
 
How to Manage Engineering to Order in Odoo 17
How to Manage Engineering to Order in Odoo 17How to Manage Engineering to Order in Odoo 17
How to Manage Engineering to Order in Odoo 17Celine George
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Association for Project Management
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseCeline George
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxlancelewisportillo
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Projectjordimapav
 
Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1GloryAnnCastre1
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxHumphrey A Beña
 
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQ-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQuiz Club NITW
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSMae Pangan
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptxmary850239
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfTechSoup
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxAnupkumar Sharma
 
MS4 level being good citizen -imperative- (1) (1).pdf
MS4 level   being good citizen -imperative- (1) (1).pdfMS4 level   being good citizen -imperative- (1) (1).pdf
MS4 level being good citizen -imperative- (1) (1).pdfMr Bounab Samir
 
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxMichelleTuguinay1
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptxiammrhaywood
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operationalssuser3e220a
 

Último (20)

4.11.24 Mass Incarceration and the New Jim Crow.pptx
4.11.24 Mass Incarceration and the New Jim Crow.pptx4.11.24 Mass Incarceration and the New Jim Crow.pptx
4.11.24 Mass Incarceration and the New Jim Crow.pptx
 
How to Manage Engineering to Order in Odoo 17
How to Manage Engineering to Order in Odoo 17How to Manage Engineering to Order in Odoo 17
How to Manage Engineering to Order in Odoo 17
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
Team Lead Succeed – Helping you and your team achieve high-performance teamwo...
 
How to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 DatabaseHow to Make a Duplicate of Your Odoo 17 Database
How to Make a Duplicate of Your Odoo 17 Database
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptxQ4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
Q4-PPT-Music9_Lesson-1-Romantic-Opera.pptx
 
ClimART Action | eTwinning Project
ClimART Action    |    eTwinning ProjectClimART Action    |    eTwinning Project
ClimART Action | eTwinning Project
 
Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1Reading and Writing Skills 11 quarter 4 melc 1
Reading and Writing Skills 11 quarter 4 melc 1
 
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptxINTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
INTRODUCTION TO CATHOLIC CHRISTOLOGY.pptx
 
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITWQ-Factor General Quiz-7th April 2024, Quiz Club NITW
Q-Factor General Quiz-7th April 2024, Quiz Club NITW
 
Textual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHSTextual Evidence in Reading and Writing of SHS
Textual Evidence in Reading and Writing of SHS
 
4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx4.16.24 21st Century Movements for Black Lives.pptx
4.16.24 21st Century Movements for Black Lives.pptx
 
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdfInclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
Inclusivity Essentials_ Creating Accessible Websites for Nonprofits .pdf
 
prashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Professionprashanth updated resume 2024 for Teaching Profession
prashanth updated resume 2024 for Teaching Profession
 
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptxMULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
MULTIDISCIPLINRY NATURE OF THE ENVIRONMENTAL STUDIES.pptx
 
MS4 level being good citizen -imperative- (1) (1).pdf
MS4 level   being good citizen -imperative- (1) (1).pdfMS4 level   being good citizen -imperative- (1) (1).pdf
MS4 level being good citizen -imperative- (1) (1).pdf
 
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptxDIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
DIFFERENT BASKETRY IN THE PHILIPPINES PPT.pptx
 
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptxAUDIENCE THEORY -CULTIVATION THEORY -  GERBNER.pptx
AUDIENCE THEORY -CULTIVATION THEORY - GERBNER.pptx
 
Expanded definition: technical and operational
Expanded definition: technical and operationalExpanded definition: technical and operational
Expanded definition: technical and operational
 

JS Fest 2018. Douglas Crockford. The Better Parts

  • 3.
  • 4. Il semble que la perfection soit atteinte non quand il n’y a plus rien à ajouter, mais quand il n’y a plus rien à retrancher. Antoine de Saint-Exupéry Terre des Hommes, 1939 It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to take away.
  • 5. Good Parts It seems that perfection is attained not when there is nothing more to add, but when there is nothing more to take away.
  • 6. If a feature is sometimes useful and sometimes dangerous and if there is a better option then always use the better option.
  • 7. We are not paid to use every feature of the language. We are paid to write programs that work well and are free of error.
  • 8. We are not paid to use every feature of the language. We are paid to write programs that work well and are free of error.
  • 9. A good programming language should teach you.
  • 10. I made every mistake with JavaScript you could make.
  • 11.
  • 12.
  • 13. Arguments against good parts • Just a matter of opinion. • Every feature is an essential tool. • It is sometimes useful. • I have a right to use every feature. • I need the freedom to express myself. • I need to reduce my keystrokes. • It is an insult to suggest that I would ever make a mistake with a dangerous feature. • There is a good reason those features were added to the language.
  • 15. The purpose of a programming language is to aid programmers in producing error-free programs.
  • 16. It is not possible to write good programs in JavaScript.
  • 17. It is not only possible to write good programs in JavaScript, it is necessary. It is not possible to write good programs in JavaScript.
  • 19. Java <> JavaScript Star Trek Star Wars
  • 20. Java <> JavaScript Star Trek • Phasers • Photon Torpedoes • Uniforms • Regulations Star Wars
  • 21. Java <> JavaScript Star Trek • Phasers • Photon Torpedoes • Uniforms • Regulations Star Wars • Light Sabres & Blasters • Proton Torpedoes • Sand • Chaos
  • 22.
  • 23.
  • 25. The fantasy of infallibility. The futility of faultlessness.
  • 27. Scheduling A.The time it takes to write the code. B. The time it takes to make the code work right. Always take the time to code well.
  • 28. New Good Parts in ES6 • Proper tail calls: return func();
  • 29. New Good Parts in ES6 • Proper tail calls • Ellipsis...aka ...rest, aka ...spread function curry(func, ...first) { return function (...second) { return func(...first, ...second); }; } function curry(func) { var slice = Array.prototype.slice, args = slice.call(arguments, 1); return function () { return func.apply(null, args.concat(slice.call(arguments, 0))); }; }
  • 30. New Good Parts in ES6 • Proper tail calls • Ellipsis • Module
  • 31. New Good Parts in ES6 • Proper tail calls • Ellipsis • Module • let and const const fax = {}; fax = faz; // bad fax.fay = faz; // ok
  • 32. New Good Parts in ES6 • Proper tail calls • Ellipsis • Module • Let • Destructuring let {that, other} = some_object; let that = some_object.that, other = some_object.other;
  • 33. New Good Parts in ES6 • Proper tail calls • Ellipsis • Module • let and const • Destructuring • WeakMap
  • 34. New Good Parts in ES6 • Proper tail calls • Ellipsis • Module • let and const • Destructuring • WeakMap • Megastring literals
  • 35. var rx_number = /^(0(?:b[01]+|o[0-7]+|x[0-9a-fA- F]+|.[0-9]+(?:e[+-]?[0-9]+)?)?|[1-9][0- 9]*(?:.[0-9]+)?(?:e[+-]?[0-9]+)?)$/; function mega_regexp(str, fl) { return new RegExp(str.replace(/s/, ""), fl); } const rx_number = mega_regexp(`^( 0 (?: b [01]+ | o [0-7]+ | x [0-9 a-f A-F]+ | . [0-9]+ (?: e [+ -]? [0-9]+ )? )? | [1-9] [0-9]* (?: . [0-9]+ )? (?: e [+ -]? [0-9]+ )? )$`);
  • 36. var rx_number = /^(0(?:b[01]+|o[0-7]+|x[0-9a-fA- F]+|.[0-9]+(?:e[+-]?[0-9]+)?)?|[1-9][0- 9]*(?:.[0-9]+)?(?:e[+-]?[0-9]+)?)$/; function mega_regexp(str, fl) { return new RegExp(str.replace(/s/, ""), fl); } const rx_number = mega_regexp(`^( 0 (?: b [01]+ | o [0-7]+ | x [0-9 a-f A-F]+ | . [0-9]+ (?: e [+ -]? [0-9]+ )? )? | [1-9] [0-9]* (?: . [0-9]+ )? (?: e [+ -]? [0-9]+ )? )$`); http://jex.im/regulex
  • 37. New Bad Parts in ES6 • Proxies • Generators • Iterators • Symbols • Reflect • Fat Arrow Functions
  • 38. (name) => {id: name}
  • 39. Worst Bad Part in ES6 class
  • 40. Good Parts Reconsidered • I stopped using new years ago. Use Object.create instead.
  • 41. Good Parts Reconsidered • I stopped using new years ago. • I have stopped using Object.create.
  • 42. Good Parts Reconsidered • I stopped using new years ago. • I have stopped using Object.create. • I have stopped using this. [ADsafe.org]
  • 43. Good Parts Reconsidered • I stopped using new years ago. • I have stopped using Object.create. • I have stopped using this. • I have stopped using null.
  • 44. Good Parts Reconsidered • I stopped using new years ago. • I have stopped using Object.create. • I have stopped using this. • I have stopped using null. • I have stopped using falsiness.
  • 45. Loops Reconsidered • I don’t use for. I now use array.forEach and its many sisters. • I don’t use for in. I now use Object.keys(object).forEach. • ES6 will have proper tail calls. At that point I will stop using while.
  • 46. function repeat(func) { while (func() !== undefined) { } } function repeat(func) { if (func() !== undefined) { return repeat(func); } }
  • 48. Programmers are as emotional and irrational as normal people.
  • 49. It took a generation to agree that high level languages were a good idea. It took a generation to agree that goto was a bad idea. It took a generation to agree that objects were a good idea. It took two generations to agree that lambdas were a good idea.
  • 53. Prototypal Inheritance • Memory conservation. • May have made sense in 1995. • Confusion: Own vs inherited. • Retroactive heredity. • Performance inhibiting.
  • 55. Block Scope { let a; { let b; … a … … b … } … a … }
  • 56. Function Scope function green() { let a; function yellow() { let b; … a … … b … } … a … }
  • 57. Function Scope function green() { let a; function yellow() { let b; … a … … b … } … a … } a
  • 58. Closure function green() { let a; function yellow() { let b; … a … … b … } … a … } a b
  • 59. Inner survives the outer function green() { let a; return function yellow() { let b; … a … … b … }; … a … }
  • 60. function constructor(spec) { let {member} = spec; let {other} = other_constructor(spec); let method = function () { // member, other, method, spec }; return Object.freeze({ method, other }); }
  • 61. function constructor(spec) { let {member} = spec; const {other} = other_constructor(spec); let method = function () { // member, other, method, spec }; return Object.freeze({ method, other }); }
  • 62. function constructor(spec) { let {member} = spec; const {other} = other_constructor(spec); const method = function () { // member, other, method, spec }; return Object.freeze({ method, other }); }
  • 63. function constructor(spec) { let {member} = spec; const {other} = other_constructor(spec); const method = function () { // member, other, method, spec }; return Object.freeze({ method, other }); }
  • 64. A Bug Story private int index;
  • 65. int • Overflow errors • Complement: saving gates in subtraction • Memory used to be really expensive and scarce
  • 66. Number types Java: byte char short int long float double Wastes the programmer’s time by having to select the right type. Errors result from choosing the wrong type. No real benefit from chosing the right type. JavaScript: number (same as double) Having only one type is a huge improvement. Unfortunately, it is the wrong type.
  • 67. Number types Java: byte char short int long float double Wastes the programmer’s time by having to select the right type. Errors result from choosing the wrong type. No real benefit. JavaScript: number (same as double) Having only one type is a huge improvement. Unfortunately, it is the wrong type.
  • 68. 0.1 + 0.2 == 0.3 false
  • 69. Binary Floating Point Made a lot of sense in the 1950s. Scientific | Business
  • 70. DEC64 Number = Coefficient * 10Exponent CoefficientCoefficient Exponent
  • 72. The JSON Data Interchange Format
  • 75. Advice to data format standard designers • Don’t break JSON. • Make it significantly better. • Get a better name.
  • 77. Responsibility 1. The People 2. The Team 3. Management
  • 78. And finally, one piece of advice: Don’t make bugs.