section 8 programming style and your brain: douglas crockford

77
Programming Style & Your Brain Section 8

Upload: jaxconf

Post on 22-May-2015

955 views

Category:

Technology


1 download

DESCRIPTION

Computer programs are the most complicated things that humans make. They must be perfect, which is hard for us because we are not perfect. Programming is thought to be a "head" activity, but there is a lot of "gut" involved. Indeed, it may be the gut that gives us the insight necessary for solving hard problems. But gut messes us up when it come to matters of style. The systems in our brains that make us vulnerable to advertising and propaganda also influence our programming styles. This talk looks systematically at the development of a programming style that specifically improves the reliability of programs. The examples are given in JavaScript, a language with an uncommonly large number of bad parts, but the principles are applicable to all languages.

TRANSCRIPT

Page 1: Section 8 Programming Style and Your Brain: Douglas Crockford

Programming Style

& Your Brain

Section 8

Page 2: Section 8 Programming Style and Your Brain: Douglas Crockford

Programming Style

&Your Brain

Douglas Crockford

Page 3: Section 8 Programming Style and Your Brain: Douglas Crockford
Page 4: Section 8 Programming Style and Your Brain: Douglas Crockford

Head.Gut.

Two Systems.

Page 5: Section 8 Programming Style and Your Brain: Douglas Crockford

Visual Processing.

An analogy.

Page 6: Section 8 Programming Style and Your Brain: Douglas Crockford
Page 7: Section 8 Programming Style and Your Brain: Douglas Crockford
Page 8: Section 8 Programming Style and Your Brain: Douglas Crockford

Advertising.

Page 9: Section 8 Programming Style and Your Brain: Douglas Crockford

Tobacco.

Page 10: Section 8 Programming Style and Your Brain: Douglas Crockford

Computer Programs.

The most complicated things people make.

Page 11: Section 8 Programming Style and Your Brain: Douglas Crockford

Artificial Intelligence.

Page 12: Section 8 Programming Style and Your Brain: Douglas Crockford

Programming Language.

Page 13: Section 8 Programming Style and Your Brain: Douglas Crockford

Perfection.

Page 14: Section 8 Programming Style and Your Brain: Douglas Crockford

Hunters and Gatherers.

Page 15: Section 8 Programming Style and Your Brain: Douglas Crockford

Programming uses Head and Gut.

Tradeoffs.

Page 16: Section 8 Programming Style and Your Brain: Douglas Crockford

JavaScript.

Good Parts.Bad Parts.

Page 17: Section 8 Programming Style and Your Brain: Douglas Crockford

JSLint.

JSLint defines a professional subset of JavaScript.

http://www.JSLint.com/

Page 18: Section 8 Programming Style and Your Brain: Douglas Crockford

WARNING!JSLint will hurt your

feelings.

Page 19: Section 8 Programming Style and Your Brain: Douglas Crockford

Left or Right?

block{

....

}

block { ....

}

Page 20: Section 8 Programming Style and Your Brain: Douglas Crockford

Left or Right?

block{

....

}

• Be consistent.

block { ....

}

• Everyone should do it like I do.

Page 21: Section 8 Programming Style and Your Brain: Douglas Crockford

Left or Right?

return

{

ok: false

};

• SILENT ERROR!

return {

ok: true

};

• Works well in JavaScript.

Page 22: Section 8 Programming Style and Your Brain: Douglas Crockford

Prefer forms that are error resistant.

Page 23: Section 8 Programming Style and Your Brain: Douglas Crockford

switch statement.

The fallthrough hazard.

Page 24: Section 8 Programming Style and Your Brain: Douglas Crockford

“That hardly ever happens”

is another way of saying“It happens”.

Page 25: Section 8 Programming Style and Your Brain: Douglas Crockford

A good style can help produce better programs.

Style is should not be about personal preference and self-

expression.

Page 26: Section 8 Programming Style and Your Brain: Douglas Crockford

THEROMANSWROTELATINALLINUPPERCASEWITH

NOWORDBREAKSORPUNCTUATION

Page 27: Section 8 Programming Style and Your Brain: Douglas Crockford

Medieval copyists introduced lowercase, word breaks, and

punctuation.

These innovations helped reduce the error rate.

Page 28: Section 8 Programming Style and Your Brain: Douglas Crockford

Good use of style can help reduce the occurrence of

errors.

Page 29: Section 8 Programming Style and Your Brain: Douglas Crockford

The Elements of StyleWilliam Strunk

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

Page 30: Section 8 Programming Style and Your Brain: Douglas Crockford

Programs must communicate clearly to people.

Page 31: Section 8 Programming Style and Your Brain: Douglas Crockford

Use elements of good composition where applicable.

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

Page 32: Section 8 Programming Style and Your Brain: Douglas Crockford

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 33: Section 8 Programming Style and Your Brain: Douglas Crockford

Immediately Invocable Function Expressions

function () {

...

}(); // Syntax error!

Page 34: Section 8 Programming Style and Your Brain: Douglas Crockford

Immediately Invocable Function Expressions

(function () {

...

})();

Page 35: Section 8 Programming Style and Your Brain: Douglas Crockford

Immediately Invocable Function Expressions

(function () {

...

})();

Dog balls

Page 36: Section 8 Programming Style and Your Brain: Douglas Crockford

Immediately Invocable Function Expressions

(function () {

...

}()); // Neatness counts.

Page 37: Section 8 Programming Style and Your Brain: Douglas Crockford

The Heartbreak of Automatic Semicolon Insertion

x = y // <-- Missing semicolon

(function () {

...

}());

• Never rely on automatic semicolon insertion!

Page 38: Section 8 Programming Style and Your Brain: Douglas Crockford

with statement.with (o) {

foo = koda;

}

o.foo = koda;

o.foo = o.koda;

foo = koda;

foo = o.koda;

Page 39: Section 8 Programming Style and Your Brain: Douglas Crockford

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 40: Section 8 Programming Style and Your Brain: Douglas Crockford

Confusion must be avoided.

Page 41: Section 8 Programming Style and Your Brain: Douglas Crockford

Transitivity? What's That?0 == '' // true0 == '0' // true'' == '0' // falsefalse == 'false' // falsefalse == '0' // true" \t\r\n " == 0 // true

Always use ===, never ==.

Page 42: Section 8 Programming Style and Your Brain: Douglas Crockford

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 43: Section 8 Programming Style and Your Brain: Douglas Crockford

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 44: Section 8 Programming Style and Your Brain: Douglas Crockford

Avoid forms that are difficult to distinguish from common

errors.

Page 45: Section 8 Programming Style and Your Brain: Douglas Crockford

if (a = b) {…}

a = b;if (a) {…}

if (a === b) {…}

Page 46: Section 8 Programming Style and Your Brain: Douglas Crockford

Make your programs look like what they do.

Page 47: Section 8 Programming Style and Your Brain: Douglas Crockford

Scope.

Block scope v function scope.

Page 48: Section 8 Programming Style and Your Brain: Douglas Crockford

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 49: Section 8 Programming Style and Your Brain: Douglas Crockford

Declare all variables at the top of the function.

Declare all functions before you call them.

Page 50: Section 8 Programming Style and Your Brain: Douglas Crockford

for (var i …) {…}

Variable i is not scoped to the loop.

Page 51: Section 8 Programming Style and Your Brain: Douglas Crockford

Write in the language you are writing in.

Page 52: Section 8 Programming Style and Your Brain: Douglas Crockford

Let there be let.

Page 53: Section 8 Programming Style and Your Brain: Douglas Crockford

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 54: Section 8 Programming Style and Your Brain: Douglas Crockford

new prefix

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

Fixed in ES5/strict.

Page 55: Section 8 Programming Style and Your Brain: Douglas Crockford

Constructor functions should be named with InitialCaps.

Nothing else should be named with InitialCaps.

Page 56: Section 8 Programming Style and Your Brain: Douglas Crockford

var a = b = 0;

var a = 0, b = 0;

b = 0;

var a = b;

Page 57: Section 8 Programming Style and Your Brain: Douglas Crockford

Write in a way that clearly communicates your intent.

Page 58: Section 8 Programming Style and Your Brain: Douglas Crockford

++

Page 59: Section 8 Programming Style and Your Brain: Douglas Crockford

++

x += 1

Page 60: Section 8 Programming Style and Your Brain: Douglas Crockford

++

x += 1

x++

Page 61: Section 8 Programming Style and Your Brain: Douglas Crockford

++

x += 1

x++

++x

Page 62: Section 8 Programming Style and Your Brain: Douglas Crockford

++x;++x;

x += 2;

Page 63: Section 8 Programming Style and Your Brain: Douglas Crockford

For no cost, by adopting a more rigorous style, many classes of errors can be automatically avoided.

Page 64: Section 8 Programming Style and Your Brain: Douglas Crockford

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

Page 65: Section 8 Programming Style and Your Brain: Douglas Crockford

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

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

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

Page 66: Section 8 Programming Style and Your Brain: Douglas Crockford

As our processes become more agile, our coding must

be more resilient.

Page 67: Section 8 Programming Style and Your Brain: Douglas Crockford

Bad stylists

• Under educated.• Old school.• Thrill seeker.• Exhibitionist.

Page 68: Section 8 Programming Style and Your Brain: Douglas Crockford

“That was intentional.”

“I know what I’m doing.”

Page 69: Section 8 Programming Style and Your Brain: Douglas Crockford

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 and Your Brain: Douglas Crockford

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 and Your Brain: Douglas Crockford

The Abyss

Page 72: Section 8 Programming Style and Your Brain: Douglas Crockford

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 and Your Brain: Douglas Crockford

Language Subsetting.

Only a madman would use all of C++.

Page 74: Section 8 Programming Style and Your Brain: Douglas Crockford

There will be bugs.

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

Page 75: Section 8 Programming Style and Your Brain: Douglas Crockford

Good style is good for your gut.

Page 76: Section 8 Programming Style and Your Brain: Douglas Crockford

;

Page 77: Section 8 Programming Style and Your Brain: Douglas Crockford

The Analytical Language of John WilkinsJorge Luis Borges

These ambiguities, redundancies and deficiencies remind us of those which doctor Franz Kuhn attributes to a certain Chinese encyclopedia entitled The Celestial Emporium of Benevolent Knowledge. In its remote pages it is written that the animals are divided into

a. belonging to the Emperorb. embalmedc. trainedd. pigletse. sirensf. fabulousg. stray dogsh. included in this classificationi. trembling like crazyj. innumerablesk. drawn with a very fine camelhair brushl. et ceteram. just broke the vasen. from a distance look like flies