@AnjanaVakil
Photo by Marcin Wichary from San Francisco, U.S.A. (Alan Kay and the prototype of Dynabook, pt. 5)
[CC BY 2.0 (http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons
Alan
Kay
@AnjanaVakil
Slide 11
Slide 11 text
@AnjanaVakil
Alan
Kay
coiner of
“object-
oriented”
@AnjanaVakil
Slide 12
Slide 12 text
@AnjanaVakil
Alan
Kay
(co-)creator of
Smalltalk
@AnjanaVakil
Slide 13
Slide 13 text
@AnjanaVakil
Alan
Kay
personal
computing
pioneer
Dynabook
@AnjanaVakil
Slide 14
Slide 14 text
@AnjanaVakil
Alan
Kay
undergrad
biology major
@AnjanaVakil
Slide 15
Slide 15 text
@AnjanaVakil
biological metaphors
oops #1:
Slide 16
Slide 16 text
@AnjanaVakil
what I
thought
inheritance
taxonomy
Slide 17
Slide 17 text
@AnjanaVakil
what it is
cells
organs
Slide 18
Slide 18 text
@AnjanaVakil
procedural
imperative
“Clocks Gears Wallpaper” via Wallpoper (http://wallpoper.com/images/00/38/51/35/clocks-gears_00385135.jpg) @AnjanaVakil
Slide 19
Slide 19 text
@AnjanaVakil
object-
oriented
“Slide of the Week: Increased WBC, April 14, 2011” via Center for Genomic Pathology
(http://ctrgenpath.net/wp-content/uploads/2011/04/cml02.jpg) @AnjanaVakil
Slide 20
Slide 20 text
@AnjanaVakil
Slide 21
Slide 21 text
@AnjanaVakil
Slide 22
Slide 22 text
@AnjanaVakil
big ideas
oops #2:
Slide 23
Slide 23 text
@AnjanaVakil
what I
thought
objects(!)
classes
Slide 24
Slide 24 text
@AnjanaVakil
Alan
Kay
“I'm sorry that I long
ago coined the
term "objects" for
this topic because it
gets many people to
focus on the
lesser idea.
@AnjanaVakil
Slide 25
Slide 25 text
@AnjanaVakil
Alan
Kay
“The big idea is
"messaging"”
- To Smalltalk/Squeak
mailing list, 1998
wiki.c2.com/?AlanKayOnMessaging
@AnjanaVakil
Slide 26
Slide 26 text
@AnjanaVakil
what it is
messaging
late-binding
Slide 27
Slide 27 text
@AnjanaVakil
objects
@AnjanaVakil
Slide 28
Slide 28 text
@AnjanaVakil
messages
“Dopamine D3 receptor” via Orientation of Proteins in Membranes Database
(http://opm.phar.umich.edu/images/png/3pbl.png) @AnjanaVakil
Slide 29
Slide 29 text
@AnjanaVakil
systems
Image by The Opte Project (Internet Map)
[CC BY 2.5 (http://creativecommons.org/licenses/by/2.5)], via Wikimedia Commons @AnjanaVakil
@AnjanaVakil
def Friend(friend_names):
my_friends = friend_names
def is_my_friend(name):
return name in friend_names
def responder(method_name, *args):
if method_name == 'is_friend_of':
return is_my_friend(args)
return responder
buddy = Friend(['alan', 'alonzo'])
buddy('is_friend_of','guy') => False
Slide 48
Slide 48 text
@AnjanaVakil
def Friend(friend_names):
my_friends = friend_names
def is_my_friend(name):
return name in friend_names
def buddy(method_name, *args):
if method_name == 'is_friend_of':
return is_my_friend(*args)
return responder
buddy = Friend(['alan', 'alonzo'])
buddy('is_friend_of','guy') => False
Slide 49
Slide 49 text
@AnjanaVakil
def Friend(friend_names):
my_friends = friend_names
def is_my_friend(name):
return name in friend_names
def buddy(method_name, *args):
if method_name == 'is_friend_of':
return is_my_friend(*args)
return responder
buddy = Friend(['alan', 'alonzo'])
buddy('is_friend_of','guy') => False
Slide 50
Slide 50 text
@AnjanaVakil
def Friend(friend_names):
my_friends = friend_names
def is_my_friend(name):
return name in friend_names
def responder(method_name, *args):
if method_name == 'is_friend_of':
return is_my_friend(*args)
return responder
buddy = Friend(['alan', 'alonzo'])
buddy('is_friend_of','guy') => False
Slide 51
Slide 51 text
@AnjanaVakil
boundaries
oops #4:
Slide 52
Slide 52 text
@AnjanaVakil
what I
thought
imperative
----------
object-otd
==========
functional
Slide 53
Slide 53 text
@AnjanaVakil
what it is
imperative
==========
object-otd
----------
functional
Slide 54
Slide 54 text
@AnjanaVakil
Smalltalk
class True
ifTrue: a ifFalse: b
^ a value
class False
ifTrue: a ifFalse: b
^ b value
Slide 55
Slide 55 text
@AnjanaVakil
Smalltalk
class True
ifTrue: a ifFalse: b
^ a value
class False
ifTrue: a ifFalse: b
^ b value
Lambda calculus
TRUE := λx.λy.x
FALSE := λx.λy.y
Slide 56
Slide 56 text
@AnjanaVakil
Erlang
Fred Hébert
Learn You Some Erlang
for Great Good
learnyousomeerlang.com
@AnjanaVakil
what it is built for
change
*or should be
Slide 61
Slide 61 text
@AnjanaVakil
simplicity
complexity
@AnjanaVakil
Slide 62
Slide 62 text
@AnjanaVakil
resilience
@AnjanaVakil
Slide 63
Slide 63 text
@AnjanaVakil
scalability
@AnjanaVakil
Slide 64
Slide 64 text
@AnjanaVakil
Alan Kay:
- The early history of Smalltalk worrydream.com/EarlyHistoryOfSmalltalk
- Comment on Moti Ben-Ari's Objects never? Well, hardly ever!
computinged.wordpress.com/2010/09/11/moti-asks-objects-never-well-hardly-ever/#div-comment-3766
- E-mail to Stefan Ram on definition of OOP purl.org/stefan_ram/pub/doc_kay_oop_en
- E-mail to Squeak list on "messaging" wiki.c2.com/?AlanKayOnMessaging
William Cook:
- A Proposal for Simplified, Modern Definitions of "Object" and "Object Oriented"
wcook.blogspot.com/2012/07/proposal-for-simplified-modern.html
- On Understanding Data Abstraction, Revisited cs.utexas.edu/%7Ewcook/Drafts/2009/essay.pdf
Anjana Vakil, "Programming across Paradigms" youtu.be/uNPdZm5oF_E
Andre Stalz, "Why we need callbags" staltz.com/why-we-need-callbags
Structure & Interpretation of Computer Programs mitpress.mit.edu/sicp
Learn You Some Erlang for Great Good learnyousomeerlang.com
further reading & references
Slide 65
Slide 65 text
David Albert, Darius Bacon,
Lindsey Kuper, Julia Evans, Matthew Parker, Ezekiel Smithburg,
Juan Hernández, Andy Lee, Michael Arntzenius
& the Recurse Center
Team Øredev
thank you!
@AnjanaVakil