SlideShare une entreprise Scribd logo
1  sur  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.

Contenu connexe

Tendances

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
 

Tendances (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
 

Similaire à 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
 

Similaire à 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
 

Plus 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
 

Plus 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 н...
 

Dernier

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdfssuserdda66b
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Association for Project Management
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibitjbellavia9
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.pptRamjanShidvankar
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsTechSoup
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentationcamerronhm
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...Nguyen Thanh Tu Collection
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxheathfieldcps1
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfciinovamais
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...pradhanghanshyam7136
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Jisc
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfPoh-Sun Goh
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024Elizabeth Walsh
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxDenish Jangid
 
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptxMaritesTamaniVerdade
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxVishalSingh1417
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxEsquimalt MFRC
 

Dernier (20)

Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdfVishram Singh - Textbook of Anatomy  Upper Limb and Thorax.. Volume 1 (1).pdf
Vishram Singh - Textbook of Anatomy Upper Limb and Thorax.. Volume 1 (1).pdf
 
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Hongkong ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...Making communications land - Are they received and understood as intended? we...
Making communications land - Are they received and understood as intended? we...
 
Sociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning ExhibitSociology 101 Demonstration of Learning Exhibit
Sociology 101 Demonstration of Learning Exhibit
 
Application orientated numerical on hev.ppt
Application orientated numerical on hev.pptApplication orientated numerical on hev.ppt
Application orientated numerical on hev.ppt
 
Introduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The BasicsIntroduction to Nonprofit Accounting: The Basics
Introduction to Nonprofit Accounting: The Basics
 
Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024Mehran University Newsletter Vol-X, Issue-I, 2024
Mehran University Newsletter Vol-X, Issue-I, 2024
 
SOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning PresentationSOC 101 Demonstration of Learning Presentation
SOC 101 Demonstration of Learning Presentation
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
TỔNG ÔN TẬP THI VÀO LỚP 10 MÔN TIẾNG ANH NĂM HỌC 2023 - 2024 CÓ ĐÁP ÁN (NGỮ Â...
 
The basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptxThe basics of sentences session 3pptx.pptx
The basics of sentences session 3pptx.pptx
 
Activity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdfActivity 01 - Artificial Culture (1).pdf
Activity 01 - Artificial Culture (1).pdf
 
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...Kodo Millet  PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
Kodo Millet PPT made by Ghanshyam bairwa college of Agriculture kumher bhara...
 
Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)Accessible Digital Futures project (20/03/2024)
Accessible Digital Futures project (20/03/2024)
 
Micro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdfMicro-Scholarship, What it is, How can it help me.pdf
Micro-Scholarship, What it is, How can it help me.pdf
 
FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024FSB Advising Checklist - Orientation 2024
FSB Advising Checklist - Orientation 2024
 
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptxBasic Civil Engineering first year Notes- Chapter 4 Building.pptx
Basic Civil Engineering first year Notes- Chapter 4 Building.pptx
 
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
2024-NATIONAL-LEARNING-CAMP-AND-OTHER.pptx
 
Unit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptxUnit-V; Pricing (Pharma Marketing Management).pptx
Unit-V; Pricing (Pharma Marketing Management).pptx
 
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptxHMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
HMCS Max Bernays Pre-Deployment Brief (May 2024).pptx
 

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.