section 8 programming style & your brain · 2019-12-18 · programming style & your brain...

76
Programming Style & Your Brain Section 8

Upload: others

Post on 27-Jul-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programming Style

& Your Brain

Section 8

Page 2: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programming Style

&Your Brain

Douglas Crockford

Page 3: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual
Page 4: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Head.Gut.

Two Systems.

Page 5: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Visual Processing.

An analogy.

Page 6: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual
Page 7: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual
Page 8: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual
Page 9: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Advertising.

Page 10: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Tobacco.

Page 11: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Computer Programs.

The most complicated things people make.

Page 12: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Artificial Intelligence.

Page 13: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programming Language.

Page 14: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Perfection.

Page 15: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Hunters and Gatherers.

Page 16: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programming uses Head and Gut.

Tradeoffs.

Page 17: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

JavaScript.

Good Parts.

Bad Parts.

Page 18: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

JSLint.

JSLint defines a professional subset of JavaScript.

http://www.JSLint.com/

Page 19: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

WARNING!JSLint will hurt your

feelings.

Page 20: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Left or Right?

block

{

....

}

block {

....

}

Page 21: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Left or Right?

block

{

....

}

• Be consistent.

block {

....

}

• Everyone should do it like I do.

Page 22: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Left or Right?

return

{

ok: false

};

• SILENT ERROR!

return {

ok: true

};

• Works well in JavaScript.

Page 23: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Prefer forms that are error resistant.

Page 24: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

switch statement.

The fallthrough hazard.

Page 25: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

“That hardly ever happens”

is another way of saying“It happens”.

Page 26: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

A good style can help produce better programs.

Style is should not be about personal preference and self-

expression.

Page 27: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

THEROMANSWROTELATINALLINUPPERCASEWITH

NOWORDBREAKSORPUNCTUATION

Page 28: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Medieval copyists introduced lowercase, word breaks, and

punctuation.

These innovations helped reduce the error rate.

Page 29: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Good use of style can help reduce the occurrence of

errors.

Page 30: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

The Elements of StyleWilliam Strunk

http://www.crockford.com/wrrrld/style.html

Page 31: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programs must communicate clearly to people.

Page 32: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Use elements of good composition where applicable.

For example, use a space after a comma, not before.

Page 33: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Use spaces to disambiguate parens.

• No space before ( when used to invoke a function.

• No space between a function name and a parameter list.

• One space between all other names and (.

• Wrong:foo (bar);

return(a+b);

if(a=== 0) {…}

function foo (b) {…}

function(x) {…}

Page 34: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Immediately Invocable Function Expressions

function () {

...

}(); // Syntax error!

Page 35: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Immediately Invocable Function Expressions

(function () {

...

})();

Page 36: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Immediately Invocable Function Expressions

(function () {

...

})();

Dog balls

Page 37: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Immediately Invocable Function Expressions

(function () {

...

}()); // Neatness counts.

Page 38: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

The Heartbreak of Automatic Semicolon Insertion

x = y // <-- Missing semicolon

(function () {

...

}());

• Never rely on automatic semicolon insertion!

Page 39: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

with statement.

with (o) {

foo = koda;

}

o.foo = koda;

o.foo = o.koda;

foo = koda;

foo = o.koda;

Page 40: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

with statement.

with (o) {

foo = koda;

}

o.foo = koda;

o.foo = o.koda;

foo = koda;

foo = o.koda;

I am not saying that it isn’t useful.I am saying that there is never a case

where it isn’t confusing.

Page 41: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Confusion must be avoided.

Page 42: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Transitivity? What's That?

0 == '' // true

0 == '0' // true

'' == '0' // false

false == 'false' // false

false == '0' // true

" \t\r\n " == 0 // true

Always use ===, never ==.

Page 43: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

If there is a feature of a language that is sometimes problematic, and if it can be

replaced with another feature that is more reliable, then

always use the more reliable feature.

Page 44: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Multiline string literals

var long_line_1 = "This is a \

long line"; // ok

var long_line_2 = "This is a \

long line"; // syntax error

Page 45: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Avoid forms that are difficult to distinguish from common

errors.

Page 46: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

“That was intentional.”

“I know what I’m doing.”

Page 47: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

if (a = b) {…}

a = b;if (a) {…}

if (a === b) {…}

Page 48: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Make your programs look like what they do.

Page 49: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Scope.

Block scope v function scope.

Page 50: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

var statement.• It gets split into two parts:

The declaration part gets hoisted to the top of the function, initializing with undefined.The initialization part turns into an ordinary assignment. So

function foo() {...var myVar = 0, myOtherVar;

• Expands into function foo() {

var myVar = undefined,myOtherVar = undefined;

...myVar = 0;

Page 51: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Declare all variables at the top of the function.

Declare all functions before you call them.

Page 52: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

for (var i …) {…}

Variable i is not scoped to the loop.

Page 53: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Write in the language you are writing in.

Page 54: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Let there be let.

Page 55: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Global variables.

• Global variables are evil.

• Avoid global variables.

• When using global variables, be explicit.

UPPER_CASE

• Global variables should be as rare as hens teeth and stick out like a sore thumb.

Page 56: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

new prefix

Forgetting new causes a constructor to clobber global variables without warning.

Fixed in ES5/strict.

Page 57: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Constructor functions should be named with InitialCaps.

Nothing else should be named with InitialCaps.

Page 58: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

var a = b = 0;

var a = 0, b = 0;

b = 0;

var a = b;

Page 59: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Write in a way that clearly communicates your intent.

Page 60: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

++

Page 61: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

++

x += 1

Page 62: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

++

x += 1

x++

Page 63: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

++

x += 1

x++

++x

Page 64: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

++x;++x;

x += 2;

Page 65: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

For no cost, by adopting a more rigorous style, many

classes of errors can be automatically avoided.

Page 66: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

if (a) b(); c();

Page 67: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

if (a) b(); c();

if (a) {b(); c();}

if (a) {b();} c();

Page 68: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

As our processes become more agile, our coding must be more

resilient.

Page 69: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Programming is the most complicated thing that humans do.

Computer programs must be perfect.

Humans are not good at perfect.

Page 70: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Designing a programming style demands discipline.

It is not selecting features because they are liked, or pretty, or

familiar.

Page 71: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

The Abyss

Page 72: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

The JSLint style was driven by the need to automatically

detect defects.

Forms that can hide defects are considered defective.

Page 73: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Language Subsetting.

Only a madman would use all of C++.

Page 74: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

There will be bugs.

Do what you can to move the odds to your favor.

Page 75: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Good style is good for your gut.

Page 76: Section 8 Programming Style & Your Brain · 2019-12-18 · Programming Style & Your Brain Section 8. Programming Style & Your Brain Douglas Crockford. Head. Gut. Two Systems. Visual

Thank you and good night.