Why Ruby?
-
Upload
robbin-fan -
Category
Technology
-
view
771 -
download
1
description
Transcript of Why Ruby?
![Page 1: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/1.jpg)
RubyConf China
Why Ruby?
Yukihiro "Matz" Matsumotoまつもと ゆきひろ[email protected]
Copyright (c) 2008 Yukihiro "Matz" Matsumoto, No rights reserved though.
![Page 2: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/2.jpg)
Moore’s Law
The number of Transistors in LSI Doubles Every
18 Months
![Page 3: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/3.jpg)
Moore’s Law Means:
Computer Grows Exponentially Faster Cheaper More Common
![Page 4: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/4.jpg)
Faster Computer
PCs are Faster than Super Computers of 20 Years Ago
![Page 5: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/5.jpg)
Cheaper Computers
We can Buy a PC for $400 Now
![Page 6: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/6.jpg)
Common Computers
Now Everyone Owns Computers Personal Computers Cell Phones
![Page 7: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/7.jpg)
Cell Phone as a Computer
![Page 8: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/8.jpg)
Cell Phone as a Computer
![Page 9: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/9.jpg)
Everyone is Connected
Broadband WiFi Mobile Networks
![Page 10: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/10.jpg)
Influence in Programming
Moore’s Law Changes Software Complexity Programming Languages
![Page 11: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/11.jpg)
Software Complexity
No Business Can Be Run without Software
We Need More Software Quicker Cheaper
![Page 12: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/12.jpg)
Humans Don’t Improve
Moore’s Law Does Not Apply to Humans
![Page 13: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/13.jpg)
Productivity
We Need More Software with Limited Resources
![Page 14: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/14.jpg)
Productivity
We Have Faster Computers Development Efficiency At the
Cost of Runtime Efficiency
![Page 15: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/15.jpg)
Productivity
The Most Important Factor of Language Evolution
Languages are One of the Tools for Productivity
![Page 16: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/16.jpg)
How Languages HelpProductivity
![Page 17: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/17.jpg)
Sapir-Whorf hypothesis
Language determines the way we think.
![Page 18: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/18.jpg)
Theorem #1
Languages influence human thought,
more than you think
![Page 19: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/19.jpg)
Programming Languages
Do programming languages
influence human thoughts?
![Page 20: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/20.jpg)
Thinking in Programming Language
Natural languages are too ambiguous.
Or, too verbose. Or, too indirect.
![Page 21: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/21.jpg)
Thinking in Programming Language.
If programmers think in programming languages,
They must influence thoughts as much as
natural languages do.
![Page 22: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/22.jpg)
Theorem #2
"languages" in Theorem #1 includes
programming languages.
![Page 23: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/23.jpg)
Why don’t you choose a good language?
Programming langugages are so
easy to learn.
![Page 24: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/24.jpg)
What is a good language?
The language that helps thinking
![Page 25: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/25.jpg)
Recursion
BASIC did not allow recursion
![Page 26: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/26.jpg)
Factorial
def fact(n) if n == 0 1 else n * fact(n - 1) end end print "6!=", fact(6), "\n" 6!=740
![Page 27: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/27.jpg)
A good Language
does not restrict our thought
![Page 28: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/28.jpg)
Factorial Again
print "200!=", fact(200), "\n" 200!=78865786736479050355236321393218506 2295135977687173263294742533244359449963 4033429203042840119846239041772121389196 3883025764279024263710506192662495282993 1113462857270763317237396988943922445621 4516642402540332918641312274282948532775 2424240757390324032125740557956866022603 1904170324062351700858796178922222789623 7038973747200000000000000000000000000000 00000000000000000000
![Page 29: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/29.jpg)
Less Restriction
print "200!=", fact(200), "\n" 200!=788657867364790503552363213932185062295 13597768717326329474253324435944996340334292 03042840119846239041772121389196388302576427 90242637105061926624952829931113462857270763 31723739698894392244562145166424025403329186 41312274282948532775242424075739032403212574 05579568660226031904170324062351700858796178 92222278962370389737472000000000000000000000 0000000000000000000000000000
Ruby
![Page 30: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/30.jpg)
A good language
Consise
![Page 31: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/31.jpg)
Succinctness is Power
by Paul Graham Fred Brooks’ Law Less Lines ≒ Effective
![Page 32: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/32.jpg)
Succinctness is Power
Less Code, Less Bugs Less Bugs, You Feel Yourself
Smarter. You can be 10 times (or even
1000 times) more productive
![Page 33: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/33.jpg)
More Factorial
class Factorial { private static int fact(int n) { if (n == 1) return 1; return n * fact(n - 1); } public static void main(String[] argv) { System.out.println("6!="+fact(6)); } } 6!=740
![Page 34: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/34.jpg)
Succinctness Example
def fact(n) if n == 1 1 else n * fact(n - 1) end end print "6!=", fact(6), "\n" 6!=740
Ruby
![Page 35: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/35.jpg)
A good language
Inspiring
![Page 36: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/36.jpg)
Functional Factorial
def fact(n) (1..n).inject(:*) end print "6!=", fact(6), "\n" 6!=740
![Page 37: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/37.jpg)
A good language
makes better programming experience
![Page 38: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/38.jpg)
For Better Programming Experience
Learnability Efficiency Memorability Errors Satisfaction According to Dr. Jacob Nielsen
![Page 39: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/39.jpg)
Learnability
How easy is it for users to accomplish basic tasks the first time they encounter the design?
![Page 40: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/40.jpg)
Learnability
Usability for Beginners Important to Acquire New Users "Common Sense" is the Key
![Page 41: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/41.jpg)
Efficiency
Once users have learned the design, how quickly can they perform tasks?
![Page 42: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/42.jpg)
Efficiency
More important than learnability Efficiency is the top purpose of
languages
![Page 43: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/43.jpg)
Memorability
When users return to the design after a period of not using it, how easily can they reestablish proficiency?
![Page 44: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/44.jpg)
Memorability
Association Consistency Orthogonality Common Sense No Radical
![Page 45: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/45.jpg)
Errors
How many errors do users make, how severe are these errors, and how easily can they recover from these errors?
![Page 46: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/46.jpg)
Errors
When you see repeated errors, you have to do something.
Errors are the source of design inspiration.
![Page 47: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/47.jpg)
Satisfaction
How pleasant is it to use the design?
![Page 48: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/48.jpg)
Satisfaction
We program to have fun. Even when we program for
money, we want to have fun as well.
![Page 49: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/49.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 50: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/50.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 51: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/51.jpg)
Learnability
Ruby is very conservative except for a few places
Quick to learn Quick to try
![Page 52: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/52.jpg)
Learnability Example
Hello World!
print "Hello World\n" Hello World
![Page 53: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/53.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 54: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/54.jpg)
Efficiency
No Run-Time Efficiency
Ruby focuses on the cost of programming.
![Page 55: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/55.jpg)
Devlopment Efficiency
Ruby focuses on the cost of programming by
Simplicity Consistency Smartness
![Page 56: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/56.jpg)
Simplicity
Do you like programming language to be simple?
Probably you do.
![Page 57: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/57.jpg)
Simplicity
Does language simplicity really help you?
not always. need more complex tool
sometimes
![Page 58: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/58.jpg)
Need More Complex Tool
Knife vs Chain Saw Bicycle vs Airplane
![Page 59: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/59.jpg)
Human Heart: No Simple
We love simplicity We love complexity We love easy problems We hate easy problems
![Page 60: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/60.jpg)
Pseudo-Simplicity
Ruby is NOT a simple language.
![Page 61: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/61.jpg)
Simplicity Example
Rakefile Rake = Ruby Make task :default => [:test] task :test do ruby "test/unittest.rb" end
![Page 62: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/62.jpg)
Simplicity Example
In Simpler Syntax
task({:default => [:test]}) task(:test, lambda(){ ruby "test/unittest.rb" })
![Page 63: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/63.jpg)
Solution-Simplicity
Tool Complexity is OK if it makes the Solution Simple
![Page 64: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/64.jpg)
Efficiency Example
/bin/cat in Ruby
puts ARGF
It would be more than 50 lines of code in C
![Page 65: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/65.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 66: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/66.jpg)
Memorability
Conservativeness helps here too Easy-to-remember syntax Ruby looks like other languages
![Page 67: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/67.jpg)
Memorability Example
Can you write /bin/cat -n without looking anything?
I can, if I use Ruby. ARGF.each_with_index{|line,i| printf "%4d %s",i,line }
![Page 68: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/68.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 69: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/69.jpg)
Errors
You will see less errors due to Consistent Syntax Rules Succinct Code Less code, Less bug.
![Page 70: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/70.jpg)
How Ruby Serves
Learnability Efficiency Memorability Errors Satisfaction
![Page 71: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/71.jpg)
Satisfaction
As a result, Ruby is fun to use.
It makes you feel smarter.
![Page 72: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/72.jpg)
Ruby the Language
![Page 73: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/73.jpg)
Ruby is Good for
Text Processing Web Programming XML Programming GUI Applications
![Page 74: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/74.jpg)
Ruby is Good for
Bioinformatics eXtreme Programming
"I love it. Conceptually it is really clean and sweet." -- Kent Beck
![Page 75: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/75.jpg)
Why I created Ruby
Just for Fun Tool for me myself Ideal tool for Everyday Task
![Page 76: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/76.jpg)
How I created Ruby
Combine Good Things from the Past
Design Conservative Design a Tool I Want to Use To Have Fun
![Page 77: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/77.jpg)
The History ofthe Ruby Language
![Page 78: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/78.jpg)
Pre-History
OO Fanboy Language Geek
![Page 79: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/79.jpg)
In 1993
Project Started Mere Hobby
![Page 80: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/80.jpg)
Goals
Scripting a la Perl Nice Clean Syntax With OO
![Page 81: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/81.jpg)
Real Goal
To Enjoy Making Language Implementation Programming
![Page 82: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/82.jpg)
Process
Lisp Semantics Smalltalk OO Conservative Syntax
![Page 83: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/83.jpg)
Process
Deconstruct Perl Reorganize into Class Library
![Page 84: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/84.jpg)
Process
Iterators from CLU Higher-order Functions using
Blocks
![Page 85: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/85.jpg)
Process
Some Spice from Python ..and other languages
![Page 86: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/86.jpg)
Released
1995-12-21
fj.sources
![Page 87: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/87.jpg)
In 1997
Hired by NaCl Became Full-time OSS
Developer
![Page 88: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/88.jpg)
In 1999
First Book
![Page 89: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/89.jpg)
In 2000
First English Book
![Page 90: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/90.jpg)
Ruby in early 2000s
Became a Language for Geeks
![Page 91: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/91.jpg)
In 2004
Ruby on Rails
![Page 92: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/92.jpg)
Ruby on Rails
Web Application Framework
Web development that doesn’t hurt
![Page 93: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/93.jpg)
Ruby on Rails
10x Productive than Java 15 Minutes to code Blog
![Page 94: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/94.jpg)
Enterprise Ruby
Ruby started to be used in the Enterprise Environment
![Page 95: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/95.jpg)
Enterprise Ruby
Concerns Fast Enough? Scales?
![Page 96: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/96.jpg)
Enterprise Ruby
Issues are Matters of Resource/Money We Put in.
![Page 97: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/97.jpg)
Ruby’s Mindshare
From Java To Ruby
![Page 98: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/98.jpg)
What’s "Enterprise"?
What Major Players Recommend:
Sun Microsystems Microsoft Apple Etc.
![Page 99: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/99.jpg)
Why Ruby?
Ruby is Productive Ruby is Motivating Ruby is Fun
![Page 100: Why Ruby?](https://reader035.fdocument.pub/reader035/viewer/2022070302/548b5e96b47959b4798b4661/html5/thumbnails/100.jpg)
A Message from Ruby
Enjoy Programming!