Spoiler Alert!
Dumbledore Dies!
Welcome to Future Insights Live!!!
Las Vegas
"The Vegas"
I am not always right.
Future Insights Live
Future Insights Live
Future!Insights Live
Future!Insights Live
Future!Insights!Live
Hopefully?
Future ofRubyRailsWeb
I am not a Fortune Teller
Agile Web Developer
Progress Is a Line
Start At The Beginning
Aaron Patterson
@tenderlove
Ruby Core Team
Rails Core Team
OMG!
INTERNET!
POINTS
FULL STACK ENGINEER
AT&T, AT&T logo and all AT&T related marks are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies.
☑AdequateEverything. Adequately.
Two Cats
Gorbachev!Puff Puff!
Thunderhorse
Sea-Tac!Facebook!YouTube
Extremely Shy
Constant Failyour
WWFMD?
Language Background
School: C / C++
First OSS in 2002
Lingua::EN::NameCase
SomethingFactoryFactoryFactoryBuilder
SomethingFactoryFactoryFactoryBuilder
No OSS in Java.
I’ve never written Java for fun.
My Birthday, in 2003
Lesson: Use someone else’s credit card
I was hooked.
High Productivity
Startup World
OSS Increased
Corporate World
AT&T, AT&T logo and all AT&T related marks are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies.
High Productivity
Employment as OSS Developer
Expense Reporting
Expense Report Infinite Loop
ConcurPDF
"5 pages sent to …"
Concur
Fax
High Productivity?
I love my job.
People Seek High Productivity
Back to Future Predictions…
Future of Programming Languages
Machine Code
[ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 decimal 000000 00001 00010 00110 00000 100000 binary
Assembly Language .arch msp430g2553 .cpu 430 .mpy none ! .section .init9,"ax",@progbits .p2align 1,0 .global main .type main,@function /*********************** * Function `main' ***********************/ main: mov.b #0, &__P1OUT mov.b &__CALBC1_1MHZ, &__BCSCTL1 mov.b &__CALDCO_1MHZ, &__DCOCTL bis.b #1, &__P1DIR bis.b #1, &__P1OUT mov #1, r15 .Lfe1: .size main,.Lfe1-main ;; End of function
Freed us from binary
Cvoid loop(void) { green(); dht * fridge = malloc(sizeof(dht)); read = dhtRead(fridge); ! if(DHT_OK == read) { WRITE_TEMP(fridge->rhIntegral, fridge->rhDecimal, fridge->tIntegral, fridge->tDecimal); } else { red(); WRITE_TEMP(99, 99, 99, 99); } delaySeconds(2); }
Freed us from the instructions
Javapublic IRubyObject start_document(ThreadContext context, IRubyObject version, IRubyObject tags, IRubyObject implicit) { boolean implicitBool = implicit.isTrue(); Map<String, String> tagsMap = null; ! RubyArray tagsAry = tags.convertToArray(); if (tagsAry.size() > 0) { tagsMap = new HashMap<String, String>(tagsAry.size()); for (int i = 0; i < tagsAry.size(); i++) { RubyArray tagsTuple = tagsAry.eltInternal(i).convertToArray(); if (tagsTuple.size() != 2) { throw context.runtime.newRuntimeError("tags tuple must be of length 2"); } IRubyObject key = tagsTuple.eltInternal(0); IRubyObject value = tagsTuple.eltInternal(1); tagsMap.put(key.asJavaString(), value.asJavaString()); } } ! return this; }
Freed us from memory management.
Rubydef start_document(context, version, tags, implicit) tagsMap = nil; ! tagsAry = Array(tags) if (tagsAry.size > 0) tagsMap = {} tagsAry.size.times do |i| tagsTuple = tagsAry.eltInternal(i) if (tagsTuple.size != 2) raise RuntimeError, "tags tuple must be of length 2" end key = tagsTuple.eltInternal(0); value = tagsTuple.eltInternal(1); tagsMap[key] = value end end end
Freed us from Types
We’ve eliminated
• Specific machine code • Particular CPU instructions • Memory management • Object Types
What’s next?
Concurrency
CPUs aren’t getting faster
We’re getting more cores
Today
lock.synchronize { # Manipulate some data }
Today
pool = ThreadPool.new NUMBER_OF_CPU
Thinking about this is a waste of time!
Dealing with concurrency is CODE NOISE
The computer should solve these problems FOR US!
Distributed Systems
Concurrency tomorrow will be like memory management today
Future of Ruby
Ruby will ADAPT.
By STEALING
Clojure, Haskell, Go
GC was invented in 1959.
GC was invented in 1959.
1959!!!!!
Java’s First Release: 1995
WTF?
We can do better than 36 years!
Ruby Will Adapt Ruby Will Change
Future of Rails
Freedom of Rails
Where does a model go?
How does it talk to the controller?
What are our table names?
What is the primary key name?
Convention over Configuration
High Productivity
The Web is Changing
Computations are changing
Ember.js / AngularJS
btw, Ember.js is way better
I have no idea what I’m talking about.
The pendulum is done.
Why is multi-core different than distributed computing?
Why is distributed computing different than client/server?
Practical Terms
Better API support
High Productivity
Future of Web
World’s Most Advanced Animated Gif Delivery System
Future of the Web IS HERE!
Future Favors High Productivity
Higher Productivity for Languages
Higher Productivity for Frameworks
Higher Productivity for The Web
Thank You!!💛💙💜💚❤️💗💛💙💜💚❤️💗