+ - 0:00:00
Notes for current slide
Notes for next slide

picasso bulls

1 / 149

bit.ly/renderconf-2016

2 / 149

hi my name is @ag_dubs

3 / 149

npm

4 / 149

left-pad distribution center

5 / 149

npm

6 / 149

if you don't understand how npm works

7 / 149

if you don't understand how npm works

that's my problem

8 / 149

i like to think about thinking

9 / 149

i like to think about thinking

...especially the type of thinking that happens when people write code

10 / 149

board game

11 / 149

let's talk about

cows in space

12 / 149

cows in space

13 / 149

let's talk about

art

14 / 149

cows in space cows in space cows in space cows in space

15 / 149

let's talk about

javascript

16 / 149

cows in space

17 / 149

let's talk about

ES6/2015

18 / 149

cows in space

19 / 149

let's talk about

ABSTRACTION

20 / 149

picasso bulls

21 / 149

The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer.

Edsger W. Dijkstra

"The Humble Programmer" (1972)
22 / 149

The Abstraction Principle

Each significant piece of functionality in a program should be implemented in just one place in the source code. Where similar functions are carried out by distinct pieces of code, it is generally beneficial to combine them into one by abstracting out the varying parts.

Benjamin C. Pierce

Pierce, Benjamin (2002). Types and Programming Languages. MIT Press. p. 339. ISBN 0-262-16209-1.
23 / 149

[Abstraction] tries to factor out details from a common pattern so that programmers can work close to the level of human thought, leaving out details which matter in practice, but are immaterial to the problem being solved.

"Abstraction (computer science)", Wikipedia. http://en.wikipedia.org/wiki/Abstraction_(computer_science). Accessed 6 October 2014.
24 / 149

[I]mmaterial to the problem being solved.

danger

25 / 149

NYC web dev fellowship

I teach beginners, and beginners teach me.

26 / 149

Iteration is hard.

Ruby

array.each do |item|
# do something
end

Javascript

for(var i =0; i< array.length; i++){
// do something
}
27 / 149

Iteration is hard.

Ruby

array.each do |item|
# do something
end

Javascript

for(var i =0; i< array.length; i++){
// do something
}

cow in space

28 / 149

Programs must be written for people to read, and only incidentally for machines to execute.

Abelson and Sussman

Abelson Sussman

Abelson and Sussman. "Structure and Interpretation of Computer Programs" MIT Press, Second ed. 1996.
29 / 149

ups

30 / 149

Iteration is hard.

Ruby

array.each do |item|
# do something
end

Javascript

for(var i =0; i< array.length; i++){
// do something
}
31 / 149

Iteration is hard.

Ruby

array.each do |item|
# do something
end

Javascript

for(var i =0; i< array.length; i++){
// do something
}

cow in space

32 / 149

feynman

33 / 149

The real problem in speech is not precise language. The problem is clear language ... It is really quite impossible to say anything with absolute precision, unless that thing is so abstracted from the real world as to not represent any real thing.

Richard Feynman

"New Textbooks for the "New" Mathematics", Engineering and Science volume 28, number 6 (March 1965) p. 9-15 at p. 14
34 / 149

precision <-> clarity

abstraction <-> reality

35 / 149

picasso

36 / 149

There is no abstract art. You must always start with something. Afterward you can remove all traces of reality.

Pablo Picasso

37 / 149

Where should we begin?

38 / 149

draw the owl

39 / 149

draw the owl

helmet

40 / 149

draw the owl

helmet

helmet

41 / 149

guns

42 / 149

journey

43 / 149

let's talk about

cows in space

44 / 149

picasso bulls

45 / 149

taurus constellation

46 / 149

Humans are awesome pattern identifiers.

taurus constellation

47 / 149

taurus constellation

48 / 149

Abstractions are patterns that we give names.

horoscope

49 / 149

But we need to be careful about the patterns we pave.

horoscope2 horoscope3

50 / 149

cowpaths

51 / 149

let's talk about

javascript

52 / 149

cows in space

53 / 149

Javascript has been a delightful beginner programming language because it has lacked abstractions...

54 / 149

explode

That's all about to change.

55 / 149

September 28, 1980

56 / 149

cosmos

57 / 149

If you wish to make an apple pie from scratch, you must first invent the universe

Carl Sagan

58 / 149

If you wish to learn ES6/2015 from scratch you must first invent the universe

Carl Sagan

59 / 149

If you wish to learn ES6/2015 from scratch you must first invent the universe

ag_dubs

60 / 149

let's talk about

ES6/2015

61 / 149

cows in space

62 / 149

ECMAScript syntax is relaxed to enable it to serve as an easy-to-use scripting language.

https://people.mozilla.org/~jorendorff/es6-draft.html. Accessed 12 May 2015.
63 / 149

relax

64 / 149

[I]mmaterial to the problem being solved.

danger

65 / 149

What is JavaScript trying to solve?

66 / 149

What will be JavaScript's legacy?

67 / 149

javscript

68 / 149

ECMASCRIPT6/2015

Classes

danger

69 / 149

Sugar

makes me

sick

70 / 149

diabetepunk

71 / 149

Syntactic Sugar

makes me

nervous

72 / 149

ECMASCRIPT6/2015: Classes

Even though ECMAScript includes syntax for class definitions, ECMAScript objects are not fundamentally class-based such as those in C++, Smalltalk, or Java.

https://people.mozilla.org/~jorendorff/es6-draft.html. Accessed 12 May 2015.
73 / 149

You might not need

class syntax

74 / 149

You might not need

JQuery

75 / 149

You might not need

class syntax

76 / 149

gepbox

77 / 149

Remember that all models are wrong; the practical question is how wrong do they have to be to not be useful.

George E. P. Box

Box, G. E. P., and Draper, N. R., (1987), Empirical Model Building and Response Surfaces, John Wiley & Sons, New York, NY. p74.
78 / 149

ECMASCRIPT6/2015: Classes

In a class-based object-oriented language, in general, state is carried by instances, methods are carried by classes, and inheritance is only of structure and behaviour. In ECMAScript, the state and methods are carried by objects, while structure, behaviour, and state are all inherited.

https://people.mozilla.org/~jorendorff/es6-draft.html. Accessed 12 May 2015.
79 / 149

raganwald

80 / 149

prototypes aren't classes

81 / 149

Javascript Classes are Model Homes

arrested dev

82 / 149

Javascript classes are... objects

83 / 149

Javascript classes are... objects

not classes. really.

84 / 149

shallow class

85 / 149

drunk

go home TC39, you're drunk

86 / 149

drunk

go home TC39, you're drunk

TC39

87 / 149

drunk

go home TC39, you're drunk

TC39

abstraction

88 / 149

drunk

go home TC39, you're drunk

TC39

abstraction

no

89 / 149

This is NOT a hate talk

90 / 149

What even is a class?

91 / 149

simula

92 / 149

this is fine

93 / 149

too many things

94 / 149

guidon

95 / 149

Teaching is nature's way of letting you know how sloppy your understanding is

96 / 149

Teach Programming Concepts, Not Language Features

SICP

97 / 149

Javascript WILL BE the introduction to programming concepts for an entire generation of developers

98 / 149

[I]mmaterial to the problem being solved.

danger

99 / 149

simple vs easy

Rich Hickey, "Simple, Made Easy" http://www.infoq.com/presentations/Simple-Made-Easy Strangeloop 2011
100 / 149

Peter Van Roy

101 / 149

Teach Programming as a Unified Discipline

CTM

102 / 149

Programming languages are tools

103 / 149

Problem-Solution Pairs => Paradigms

104 / 149

The Kernel Teaching Method

A good way to organize a programming course is to start with a simple language and then to extend this language gradually.

Peter Van Roy

"Convergence in Language Design: A Case of Lightning Striking Four Times in the Same Place", FLOPS 2006, LNCS 3945, pp. 2-12, 2006.
105 / 149

We must invent the Universe

106 / 149

EVERY BEGINNER SHOULD WRITE A KERNEL LANGUAGE

107 / 149

EVERY BEGINNER SHOULD WRITE A KERNEL LANGUAGE

no

108 / 149

The Creative Extension Principle

109 / 149

You Aren't Going to Need It (YAGNI)

Always implement things when you actually need them, never when you just foresee that you need them.

Ron Jeffries, co-founder XP

Ron Jeffries. "You’re NOT gonna need it!". Practices. X Programming. Retrieved 2007-11-07.
110 / 149

Prototypal inheritence is a big part of the JavaScript universe

111 / 149

It's how the apple pie gets made

112 / 149

It's how the apple pie gets made

#veganfriendlymetaphors

113 / 149

npm

114 / 149

npm is an abstraction machine

115 / 149

module-counts

http://www.modulecounts.com, Accessed 21 April 2016
116 / 149

272,580 packages

117 / 149

272,580 abstractions

118 / 149

left pad press

119 / 149

left pad press

120 / 149

left pad press

121 / 149

left pad press

122 / 149

left-pad code

123 / 149

abstractions are our curse

124 / 149

abstraction is outsourced understanding

125 / 149

abstractions are our power

126 / 149

it's about ethics in gamejournalism

127 / 149

it's about ethics in abstraction

128 / 149

we must be ethical consumers and producers

129 / 149

ethical consumption

130 / 149

tl;dr

  • Abstraction: it's what programming is at it's most essential
  • Abstraction: beginners struggle with it
  • Abstraction: it will drive your culture and community
  • ES6 Classes: an abstraction, a problem
  • We should be teaching concepts not syntax
  • Syntax that obfuscates concepts is problematic
  • When we teach, we have to start at the beginning
131 / 149

What do we even mean when we talk about programming?

132 / 149

heidegger what is called thinking

133 / 149

The most thought-provoking thing in our thought-provoking time is that we are still not thinking.

Martin Heidegger

What is Called Thinking? [Was heisst Denken?] (1951–1952), as translated by Fred D. Wieck and J. Glenn Gray (1968)
134 / 149

Are we programming yet?

135 / 149

racket pyret

136 / 149

scratch

137 / 149

evelang

138 / 149

kuhn

139 / 149

Scientists work from models acquired through education and through subsequent exposure to the literature often without quite knowing or needing to know what characteristics have given these models the status of community paradigms.

Thomas Kuhn

Kuhn, Thomas. "The Structure of Scientific Revolutions", pg 46 (1962)
140 / 149

We have an awesome opportunity to think more radically about how we extend JavaScript

141 / 149

We have an awesome opportunity to think more radically about how we build abstractions

142 / 149

To appreciate this point is to change our images of ourselves as programmers. We come to see ourselves as designers of languages, rather than only users of languages designed by others.

Abelson and Sussman

143 / 149

It is far better to grasp the universe as it really is than to persist in delusion, however satisfying and reassuring.

Carl Sagan

144 / 149

Let's reconsider our ontology.

145 / 149

Let's reconsider our ontology.

Let's reconsider it early and often.

146 / 149

Let's reconsider our ontology.

Let's reconsider it early and often.

Let's stay beginners.

147 / 149

you're awesome you're awesome you're awesome you're awesome

148 / 149

#clapforashley ?

149 / 149

bit.ly/renderconf-2016

2 / 149
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow