• Save

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

The Top 10 Reasons The Ruby Programming Language Sucks

on

  • 160,781 views

Matz's keynote presentation from RubyConf 2003, from http://www.ruby-doc.org/whyruby

Matz's keynote presentation from RubyConf 2003, from http://www.ruby-doc.org/whyruby

Statistics

Views

Total Views
160,781
Views on SlideShare
157,761
Embed Views
3,020

Actions

Likes
174
Downloads
2
Comments
27

71 Embeds 3,020

http://tech.gaeatimes.com 969
http://www.slideshare.net 539
http://www.jornaljava.com 310
http://blog.shabdar.ws 246
http://rubisobrerieles.blogspot.com 225
http://kapilnakhwa.wordpress.com 146
http://www.redditmedia.com 140
http://zawaarudo.blogspot.com 92
http://localhost:3000 48
http://paper.li 45
http://juandedios.blogspot.com 34
http://twitter.com 30
http://mett.ru 14
https://nuigalway-test.blackboard.com 13
http://blog.phuha.net 11
http://shanon-demo-july.herokuapp.com 10
https://twitter.com 10
http://test-vaultilius.heroku.com 9
http://us-w1.rockmelt.com 8
http://rnnadaf.ubdtcse.in 8
http://lj-toys.com 8
http://helloworld.atihow.com 8
http://www.planetacodigo.com 6
https://twimg0-a.akamaihd.net 6
http://dev-vaultilius.heroku.com 5
http://zawaarudo.blogspot.in 5
http://csipanama2007.com 5
http://lohithmv.blogspot.com 4
http://squashedthoughts.blogspot.com 4
http://localhost 3
http://a0.twimg.com 3
https://si0.twimg.com 3
http://translate.googleusercontent.com 3
http://rnnadaf.net63.net 2
http://192.168.6.184:3000 2
http://zawaarudo.blogspot.com.au 2
http://l.lj-toys.com 2
http://zawaarudo.blogspot.hk 2
http://zawaarudo.blogspot.de 2
http://f74.faxo.com:3000 2
http://zawaarudo.blogspot.ca 2
http://localhost:3001 2
http://phuha.net 2
http://www.filescon.com 2
http://facebook.slideshare.com 2
http://nuigalway-test.blackboard.com 1
http://zawaarudo.blogspot.co.uk 1
http://www.html-bin.appspot.com 1
http://www.blogger.com 1
http://hackety.org 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

15 of 27 Post a comment

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • In the mean while there are almost 90K ruby projects available ;-)
    https://www.versioneye.com/Ruby
    Are you sure you want to
    Your message goes here
    Processing…
  • Nyahahaha
    Awesome'
    Are you sure you want to
    Your message goes here
    Processing…
  • @adityamenon90 People fail to see that this is Matz's presentation.
    Are you sure you want to
    Your message goes here
    Processing…
  • This was so funny. I loved it!
    Are you sure you want to
    Your message goes here
    Processing…
  • follow the link to http://www.ruby-doc.org/whyruby to find the powerpoint from the original presentation
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

The Top 10 Reasons The Ruby Programming Language Sucks The Top 10 Reasons The Ruby Programming Language Sucks Presentation Transcript

  • The Top 10 Reasons The Ruby Programming Language Sucks!
  • 10. Too young
  • No Libraries
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster Ruby libraries:
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster Ruby libraries: 96 standard libraries
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster Ruby libraries: 96 standard libraries Ruby Application Archive (RAA) catalogs over 1,200 applications and libraries
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster Ruby libraries: 96 standard libraries Ruby Application Archive (RAA) catalogs over 1,200 applications and libraries RubyForge is hosting over 800 open source projects
  • No Libraries A collection of good libraries, especially in something like Perl’s CPAN, means less work to achieve better results, faster Ruby libraries: 96 standard libraries Ruby Application Archive (RAA) catalogs over 1,200 applications and libraries RubyForge is hosting over 800 open source projects RubyGems has served over 900,000 gems
  • No support
  • No support Documentation
  • No support Documentation Core 100% documented
  • No support Documentation Core 100% documented Standard library documentation in progress
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels Facets of Ruby book series
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels Facets of Ruby book series Community
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels Facets of Ruby book series Community Mailing lists in multiple languages
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels Facets of Ruby book series Community Mailing lists in multiple languages Usenet groups (with ML gateway)
  • No support Documentation Core 100% documented Standard library documentation in progress Tutorials available for various skill levels Facets of Ruby book series Community Mailing lists in multiple languages Usenet groups (with ML gateway) Web forums
  • No one using it
  • No one using it Companies using Ruby
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA Uses for Ruby
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA Uses for Ruby Simulation, data munging, code generation, image processing, prototyping, and more
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA Uses for Ruby Simulation, data munging, code generation, image processing, prototyping, and more “Killer app”
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA Uses for Ruby Simulation, data munging, code generation, image processing, prototyping, and more “Killer app” Ruby on Rails
  • No one using it Companies using Ruby HP, Intel, NASA, and NOAA Uses for Ruby Simulation, data munging, code generation, image processing, prototyping, and more “Killer app” Ruby on Rails Already being used in profitable web applications like Basecamp and Blinksale
  • 10. Too young
  • e! im t ts i 10. Toof young o d ea h A
  • 9. Useless in obfuscation contests
  • Optional Syntax No ;s needed Drop the “ ” characters Optional ()s
  • Objectified Syntax obj.attribute = methods dangerous! and query? methods
  • Simple, flexible syntax Simple declarations: local_var = ... @instance_var = ... $global_var = ... do...end or {...} Real exception handling, like Java String interpolation: any Ruby code inside #{...}
  • Compare with other languages
  • Compare with other languages Ruby: puts “Hello world!”
  • Compare with other languages Ruby: puts “Hello world!” Java: threeVeryLongLines.weHopeWork...
  • Compare with other languages Ruby: puts “Hello world!” Java: threeVeryLongLines.weHopeWork... Perl: #$<!&;
  • Compare with other languages Ruby: puts “Hello world!” Java: threeVeryLongLines.weHopeWork... Perl: #$<!&; Lisp: ((a(((b)))(c)))
  • 9. Useless in obfuscation contests
  • ! x ta n y s 9. Useless in obfuscation n ea contests l C
  • 8. Object Oriented
  • Ruby is object oriented Everything is an object Numbers, code blocks, everything Baked-in, not bolted-on No need to use “self” everywhere, like Python
  • Ruby has many object orientation shortcuts Automatic constructor generation, unlike Perl Easy accessors Define methods to interact with Core Ruby
  • Procedural code allowed You can ignore the class system as needed You can even mix and match objects with procedural code
  • 8. Object Oriented
  • e! l ib x eOriented fl 8. Object o o T
  • 7. Uses “Mix-ins”
  • You can’t win with multiple inheritance
  • You can’t win with multiple inheritance Multiple inheritance allows a class to inherit from more than one parent
  • You can’t win with multiple inheritance Multiple inheritance allows a class to inherit from more than one parent The good: Makes modeling complex object trees easier
  • You can’t win with multiple inheritance Multiple inheritance allows a class to inherit from more than one parent The good: Makes modeling complex object trees easier The bad: The diamond inheritance problem
  • You can’t win with multiple inheritance Multiple inheritance allows a class to inherit from more than one parent The good: Makes modeling complex object trees easier The bad: The diamond inheritance problem You can’t please both sides
  • Ruby uses single inheritance...
  • ...and “Mix-ins” Similar to Java’s interfaces, plus implementation No limit to how many you use The benefits of multiple inheritance, without the minuses
  • 7. Uses “Mix-ins”
  • e! s n se h c u m o 7. Uses “Mix-ins” to es k a M
  • 6. No loops
  • The well-known loops
  • The well-known loops Most languages Ruby
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end do { ... } while begin ... end while do { ... } until begin ... end until
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end do { ... } while begin ... end while do { ... } until begin ... end until foreach { ... } each do ... end
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end do { ... } while begin ... end while do { ... } until begin ... end until foreach { ... } each do ... end for(...;...;...) { ... }
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end do { ... } while begin ... end while do { ... } until begin ... end until foreach { ... } each do ... end for(...;...;...) { ... }
  • The well-known loops Most languages Ruby while { ... } while ... end until { ... } until ... end do { ... } while begin ... end while do { ... } until begin ... end until foreach { ... } each do ... end for(...;...;...) { ... }
  • Aren’t loops proven to work by now?
  • Aren’t loops proven to work by now? “N + 1” errors
  • Aren’t loops proven to work by now? “N + 1” errors foreach { ... } is conceptually backwards
  • Aren’t loops proven to work by now? “N + 1” errors foreach { ... } is conceptually backwards Objects should manage their own traversal
  • Iterators Objects manage their own traversal No more “N + 1” errors Code blocks still allow customizing behavior
  • 6. No loops
  • s! u io l el 6. No loops b e R
  • 5. Code blocks everywhere
  • What is a code block? Any method can accept a block Blocks can be called immediately or stored for later use Blocks are closures
  • What are they for? Blocks can allow your code to react in according to user code Blocks are a great way to pass around behavior Blocks are ideal for transactions
  • 5. Code blocks everywhere
  • l! fu r e w 5. Code blocks o p oo everywhere T
  • 4. Wide open, even at runtime
  • Dynamic tools Strong reflection eval() instance_eval() class_eval() and module_eval() Hooks for runtime events
  • Classes are open Add methods to a class at any time Even a core class Customize individual objects Overload operators Hook into Ruby’s math and conversion operations
  • 4. Wide open, even at runtime
  • ! at seven es l 4. Wide open, w a runtime L
  • 3. Ruby gurus are obsessed with ducks
  • “If it walks like a duck and talks like a duck, it’s a duck!”
  • The “Duck Typing” philosophy We define an object by what it can do, not its type Most of the time, you shouldn’t even check for methods
  • 3. Ruby gurus are obsessed with ducks
  • ! eare g n ra ducks 3. Ruby gurus t obsessedswith o o T
  • 2. Includes too many great toys
  • 96 standard libraries
  • 96 standard libraries Read/Write CSV XML YAML
  • 96 standard libraries Read/Write CSV XML YAML Talk to Email FTP Web
  • 96 standard libraries Read/Write CSV XML YAML Talk to Email FTP Web Serve Code Servlets XML-RPC
  • 96 standard libraries Read/Write CSV XML YAML Talk to Email FTP Web Serve Code Servlets XML-RPC Work with Math Templates Threads
  • 96 standard libraries Read/Write CSV XML YAML Talk to Email FTP Web Serve Code Servlets XML-RPC Work with Math Templates Threads Tools for Debugging Docs Testing
  • 2. Includes too many great toys
  • ! g n ti many 2. Includesrac too t toys is d great o o T
  • 1. “It's entirely too fun and productive for most people.” — Mike Clark