standing on the shoulders of giants - zenspider.com · standing on the shoulders of giants mwrc...
TRANSCRIPT
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx1
Standing on the Shoulders of Giants
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Setting ExpectationsSorta a history talk. Le Sigh.
Very Little Code.
Ideas/Survey/Inspiration Talk.
109 Slides, ~3.6 SPM2
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx3
Intro
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
"we [the Moderns] are like dwarves perched on the shoulders of giants [the Ancients], and thus we are able to see more and farther than the latter. And this is not at all because of the acuteness of our sight or the stature of our body, but because we are carried aloft and elevated by the magnitude of the giants.”
Bernard of Chartres, 12th century
4
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
"If I have seen further it is by standing on ye sholders of Giants.”
Isaac Newton, 1676
5
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
In Other Words6
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Not a new concept, at all
7
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Newton was
iterating8
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Simple Idea9
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Idea10
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Begs the
question11
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
WTF, Language?
12
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby13
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
RubyCreated by Matz in 1993
Interpreted File-based “Scripting” System.
Purely Object-Oriented Class-based Runtime.
Incredibly Complex Syntax & Semantics.
Extensive Class Library, Numeric Tower, etc.
Designed for “Developer Happiness”.14
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Fibonacci
15
class Integer def fib self < 2 ? self : (self-1).fib + (self-2).fib end end
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby History
16
1981 - 1990
1981 1983 1985 1987 1989
1991 - 2000
1991 1993 1995 1997 1999
2001 - 2010
2001 2003 2005 2007 2009
2011 - 2020
2011 2013 2015 2017 2019
Feb 1993: Birth
Dec 1995: Ruby 0.95
Dec 1996: Ruby 1.0
Dec 1998: Ruby 1.2
Aug 1999: Ruby 1.4
Aug 2000: Ruby 1.6
Aug 2003: Ruby 1.8
Dec 2007: Ruby 1.9
Feb 2013: Ruby 2.0
Dec 2013: Ruby 2.1
Dec 2014: Ruby 2.2
Glo
bal
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby History
16
1981 - 1990
1981 1983 1985 1987 1989
1991 - 2000
1991 1993 1995 1997 1999
2001 - 2010
2001 2003 2005 2007 2009
2011 - 2020
2011 2013 2015 2017 2019
Feb 1993: Birth
Dec 1995: Ruby 0.95
Dec 1996: Ruby 1.0
Dec 1998: Ruby 1.2
Aug 1999: Ruby 1.4
Aug 2000: Ruby 1.6
Aug 2003: Ruby 1.8
Dec 2007: Ruby 1.9
Feb 2013: Ruby 2.0
Dec 2013: Ruby 2.1
Dec 2014: Ruby 2.2
Glo
bal
What Happened?
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby 1.0 Shipped with Almost Everything
17
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Not Much Added Since 1.0Private/Protected (~1.1)
Class Variables (1.6)
Encodings (1.9, 2.0)
frilly syntactic sugar (that doesn't really improve much of anything) (1.9+)
18
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby is a fantastic language, but it could be
better.19
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Smalltalk
Ruby
Lisp Perl
20
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
COLASelf
Smalltalk
Ruby
Lisp Perl
21
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx22
Smalltalk Self
Scheme/Racket FONC/COLA
+ V
PRI T
eam
+ P
LT T
eam
+ D
an In
galls
TooCoolfor
Logos?
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
& Many More23
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Smalltalk24
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief summary of SmalltalkBy Alan Kay & Dan Ingalls at Xerox PARC, created in 1972. Publicly released in 1980.
Bytecode Compiled Image-based System.
Purely Object-Oriented Class-based Runtime.
Incredibly Simple/Clean Syntax and Semantics. Only 6 keywords, 4 precedence levels.
Fully Immersive development environment.
Incubator for Ideas: this is where many ideas of OO, patterns, mvc, etc came from.
WAY ahead of its time. Still is in some ways.
25
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Fibonacci
26
!Integer methodsFor: 'benchmarks' stamp: 'jm 11/20/1998 07:06'! fib ^ self < 2 ifTrue: [self] ifFalse: [(self-1) fib + (self-2) fib] ! !
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Self27
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief summary of selfDavid Ungar & Randall Smith started at Xerox PARC and finished at Sun in 87.
Bytecode Compiled + JIT Image-based System.
Purely Object-Oriented Classless (aka prototypes) Runtime.
Incredibly Simple/Clean Syntax & Semantics. 8 bytecodes. EIGHT.
Fully Immersive development environment.
Incubator for Ideas: java hotspot was born here.
28
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Fibonacci
29
fibonacci = ( <= 1 ifTrue: [ self ] False: [ predecessor fibonacci + (- 2) fibonacci ])
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Scheme & Racket
30
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief summary of schemeBy Gerald Sussman & Guy Steele in 1975.
Scheme is a minimal variant of a lexically-scoped Lisp.
Lisp is a functional language based on lists.
Innovation Galore: Tail Call Optimizations, Numeric Tower, Hygienic Macros, 1st class continuations, etc.
31
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief summary of racketBy Matthias Felleisen & PLT Cohort.
Racket is a maximal variant of Scheme. Huge incredibly diverse library.
Bytecode Compiled + JIT File-based System.
Mostly functional multi-language Runtime.
Simple Syntax & Semantics w/ rich expressions like extensive macros & structural matching.
Ships with Editor & Runtime.
32
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Fibonacci
33
(define (fib x) (if (< x 2) x (+ (fib (- x 1)) (fib (- x 2)))))
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
COLA34
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
A Tiny, Beautiful
Kernel35
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
In the theme of this talk, we are coming back around to Alan Kay
36
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief Summary of VPRI Viewpoints Research Institute (VPRI) is Alan Kay's thinktank
5 year NSF grant to work on FONC: foundations of new computing
Project: STEPS (STEPS Toward Expressive Programming Systems)
They want a whole system that can be understood by one brain
Entire system, from language to GUI Apps, in ~20kloc.37
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Brief Summary of COLA Machine Compiled File-Based System.
Object Oriented Prototype-based Runtime.
Incredibly Simple/Clean Syntax & Semantics. (notice a pattern?)
COLA = Combined Object/Lambda Architecture.
“designed to be the simplest possible language which can be described in itself"
38
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Fibonacci
39
Integer fib { ; lispy (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))) }
Integer fib [ ; smalltalky ^ self < 2 ifTrue: [self] ifFalse: [(self - 1) fib + (self - 2) fib] ]
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Time to Plunder!
40
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Time to Plunder!
40
Yarrrrrr
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ideas from Smalltalk
41
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Squeak Smalltalk generates and builds itself.
42
Smalltalk
New VM
Smalltalk Subsetto C translator
VM written inSmalltalk Subset
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Extensive Hierarchy of Classes
43…lots more…
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Developer Tools!44
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx45
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx46
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx47
Integrated Debugger
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Implementors & Senders Browser
48
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
(and a lot more)49
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
#inspect actually useful# smalltalk: >> Color lightRed darker => (Color r: 0.92 g: 0.736 b: 0.736) >> (Color r: 0.92 g: 0.736 b: 0.736) => (Color r: 0.92 g: 0.736 b: 0.736)
# versus ruby: >> Color.new(0.92, 0.736, 0.736) => #<Color:0x007fad5114c458 @r=0.92, @g=0.736, @b=0.736>
50
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ideas from Self
51
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
This was the birthplace of JIT.
52
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Self is the reason why Java & Javascript
are fast53
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Dynamic languages CAN be fast.
54
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Prototyping55
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Influenced Javascript & IO
56
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Prototyping is Handy!class Object def define_method name, &b self.singleton_class.send :define_method, name, &b self end
def clone_method obj, name define_method name, &obj.method(name) end end
class X; def to_s; self.class.name; end; end class Y; def to_s; self.class.name; end; end
puts X.new # X puts Y.new # Y puts X.new.clone_method(Y.new, :to_s) # Y??
57
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Developer Tools!58
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx59
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx60
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx61
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx62
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ideas from Scheme & Racket
63
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx64
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx65
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx66
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx67
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Visual Stack Traces
68
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx69
Structural Pattern Matching
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Multiple Language Support
#lang scribble/manual @title{My Library} Welcome to my documentation: @racket[(list 'testing 1 2 3)].
70
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
OO is good for organization, scoping,
and data hiding71
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
But…72
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
lambda is king
73
𝞴
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
lambda is king
73
𝞴👑
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Speed Comparison% racket fib.rkt '(0 1 1 2 3 5 8 13) cpu time: 13 real time: 13 gc time: 0 cpu time: 22 real time: 22 gc time: 0 cpu time: 35 real time: 35 gc time: 0 '(832040 1346269 2178309)
% ruby fib.rb [0, 1, 1, 2, 3, 5, 8, 13] user system total real 30 0.230000 0.000000 0.230000 ( 0.237727) 31 0.390000 0.000000 0.390000 ( 0.389832) 32 0.600000 0.010000 0.610000 ( 0.602819)
74
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
17x faster75
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Tail Call Optimization
76
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ideas from COLA
77
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
STEP’s vision of computing is massively
powerful78
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx79
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Debian Mac OS X
Windows Vista FreeBSD
Open Office GTK+ v2
Ruby electromagnetism
283 million lines of code 86 million lines of code 50 million lines of code 9 million lines of code 10 million lines of code 650 thousand lines of code 1.2 million lines of code 4 lines of code
80
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Combined Object/Lambda Architecture
81
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Objects for storage and organization
82
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Lambdas for execution
83
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx84
Objectsfor
Storage
Lambdasfor
Execution
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx85
string "lookup"_vt
symbol
string "addMethod"_vt
symbolstring "allocate"_vt
symbol
string "delegated"_vt
symbol
string "intern"_vt
symbol
--datalookupmethod
_vtclosure
--dataaddMethodmethod
_vtclosure
--datadelegatedmethod
_vtclosure
--dataallocatemethod
_vtclosure
--datainternmethod
_vtclosure
parentvalueskeys
4size_vt
vtable_vt
--parentvalueskeys
5size--_vt
SymbolList
parent--values
keys --0size
_vtclosure_vt
parent--values
keys --0size
_vtobject_vt
parentvalueskeys
1size_vt
symbol_vt
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Nile (graphics language) Source
Nile to Nile AST
Nile AST
Nile AST to Nothing
Nothing Code
Nothing to N-AST
N-AST code
Nothing to x86
CPU
OMeta: Translators all the way down
86
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Define your system using basic axioms.
87
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Teach the GUI Euclid’s geometry and give it a rule
engine88
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
650 kloc gtk GUI library <
Rules + Euclid in ~250 loc89
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Runtime90
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
MUCH smaller91
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Much more understandable
92
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Much more maintainable.
93
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby’s 1.3 mloc <
STEPS’ 20 kloc94
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
👋 Too Hand Wavey?
👋95
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
TONS of Rich Info Here:
http://vpri.org/html/writings.php
96
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx97
Conclusion
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Surveyed a minority of ideasself-bootstrapping implementations
extensive collection / magnitude hierarchies
instance-based inheritance
JIT compilation
Importance of lambdas & Tail Calls
object level pattern matching
the combined object/lambda architecture
98
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Ruby is at its best
99
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Borrowing great ideas
100
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
From other languages
101
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
It has fallen behind
102
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
Lost its way103
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
It's time for ruby to step up
104
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
do more with these ideas
105
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
keep pushing forward
106
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx
to stand upon the shoulders of giants
107
Standing on the Shoulders of Giants
MWRC 2015, SLC, UT
Ryan Davis, Seattle.rb
@the_zenspiderx108
Thank You