SlideShare uma empresa Scribd logo
1 de 85
Baixar para ler offline
O mundo visto de dentro do
          Ruby
2007
2007
Ciência da Computação
E vocês, já ouviram falar ou
       usaram Ruby?
Yukihiro “Matz” Matsumoto
“Se você terminar seu trabalho rápido e
                              de forma divertida, isso não é bom?”




Yukihiro “Matz” Matsumoto
“Se você terminar seu trabalho rápido e
                              de forma divertida, isso não é bom?”


                        “Eu queria uma linguagem mais poderosa
                         que perl, e mais orientada a objetos que
                        Python. Foi por isso que eu decidi projetar
                               minha própria linguagem.”



Yukihiro “Matz” Matsumoto
1993
                            Primeiros rabiscos




Yukihiro “Matz” Matsumoto
1993
                              Primeiros rabiscos



                                  1995
                            Primeiro release público



Yukihiro “Matz” Matsumoto
   Sintaxe simples, inspirada por Ada, Eiffel e Perl
   Semântica compacta, inspirada por Smalltalk
   Object Model igual ao de Smalltalk
   Expressões regulares do Perl
   Conceitos de linguagem funcional
   Características do C e C++
   Sintaxe simples, inspirada por Ada, Eiffel e Perl
   Semântica compacta, inspirada por Smalltalk
   Object Model igual ao de Smalltalk
   Expressões regulares do Perl
   Conceitos de linguagem funcional
   Características do C e C++
   Produtividade no desenvolvedor
   Simplicidade
   Linguagem humana
   Linguagem dinâmica e reflexiva
   Extensibilidade
   Todas as classes são abertas
   Herança simples e mixins
   DSL’s
   Garbage collector
Ruby   1.8.7 e 1.9.2
Ruby   1.8.7 e 1.9.2

REE    1.8.7-2010.2
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)

MagLev     Beta            (Smalltalk)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)

MagLev     Beta            (Smalltalk)

IronRuby   1.1             (.NET)
Mas, por que Ruby?
“Tornar as coisas simples fáceis e as coisas
           complexas possíveis.”
                                   Filosofia Ruby
Focado no humano

    3.times do
           print “Wee”
    end
Focado no humano

      3.times do
             print “Wee”
      end


  feed_dog if @dog.hungry?
Focado no humano

            3.times do
                   print “Wee”
            end


      feed_dog if @dog.hungry?



['beer', 'vodka', 'wine'].each |drink| do
        print drink.capitalize
end
Verdadeiramente OO



Tudo é objeto, não há sequer tipo primitivo.
Verdadeiramente OO



Tudo é objeto, não há sequer tipo primitivo.



                >> 1.class
                => Fixnum
                >> 1.class.class
                => Class
                >> nil.class
                => NilClass
Código “bonito”
140
vs

40
“Eu sempre soube que Smalltalk substituiria
Java. Só não sabia que isso se chamaria Ruby.”
               Kent Beck, Criador do "Extreme Programming" e "TDD"
O que podemos fazer com Ruby...
No desktop
Bowline   Titanium
Bowline   Titanium


Shoes     GTK+
Bowline   Titanium


Shoes     GTK+


wxRuby    Win32 widgets
          Aqua, GTK+
Bowline   Titanium


Shoes     GTK+


wxRuby    Win32 widgets
          Aqua, GTK+

QtRuby    Qt
Bowline      Titanium


Shoes        GTK+


wxRuby       Win32 widgets
             Aqua, GTK+

QtRuby       Qt


Ruby Cocoa   Cocoa
Na web
David “dhh” Heinemeier Hansson
2004




David “dhh” Heinemeier Hansson
2004




David “dhh” Heinemeier Hansson
2.3.8   3.0.0
   Código gerando código
   Convenção sobre configuração
   DRY (don't repeat yourself)
   Produtividade sustentável
   Desenvolvimento ágil
   Diversão
Sinatra
require 'rubygems'
require 'sinatra'
get '/hi' do
 "Hello World!"
end
Ferramentas
1.8.7 + 1.9.2 + REE + JRuby + Rubinius +
    MagLev + IronRuby + MacRuby
1.8.7 + 1.9.2 + REE + JRuby + Rubinius +
    MagLev + IronRuby + MacRuby

                   =

                RVM
Repositórios   Github, Codebase
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano

                      NewRelic, Scout
Monitoramento         BackupMyApp
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano

                      NewRelic, Scout
Monitoramento         BackupMyApp


Servidores            Passenger,
                      Mongrel, Thin
Testes



Cucumber, Steak, RSpec, Minitest,
   Test::Unit, Shoulda, Bacon,
  Machinist, Factory Girl, Mocha
Minispec




http://gist.github.com/433067
Cucumber




http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
Steak
Comunidade
Ué, mas não dizem que
     Ruby é lento?
Performance

      !=

Escalabilidade
“O The New York Times usou Ruby on Rails para agregar,
analisar e mostrar os resultados das eleições em quase tempo
     real em um de seus sites mais acessados de todos os
                           tempos.”
    http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise/?fp=16&fpid=1
Agradecimentos


@akitaonrails   (Fábio Akita)
@danielvlopes   (Daniel V. Lopes)
OBRIGADO!
@vitoravelino
vitoravelino@octahedron.com.br

Mais conteúdo relacionado

Mais procurados

Mais procurados (13)

XPCE 2010
XPCE 2010XPCE 2010
XPCE 2010
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Paradigmas do Ruby
Paradigmas do RubyParadigmas do Ruby
Paradigmas do Ruby
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Py dojo
Py dojoPy dojo
Py dojo
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Javascript é fã do Python
Javascript é fã do PythonJavascript é fã do Python
Javascript é fã do Python
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Introducing Ruby
Introducing RubyIntroducing Ruby
Introducing Ruby
 
Como criar e lançar um site em 42 minutos
Como criar e lançar um site em 42 minutosComo criar e lançar um site em 42 minutos
Como criar e lançar um site em 42 minutos
 
Mirah
MirahMirah
Mirah
 
Porque python é legal! d
Porque python é legal!  dPorque python é legal!  d
Porque python é legal! d
 

Semelhante a O mundo visto de dentro do Ruby

Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On RailsAlberto Leal
 
Slides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsSlides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsTiago Godinho
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e DiversãoJulio Monteiro
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o MercadoJulio Monteiro
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercadoelliando dias
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filhorafarubert
 
Ruby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosRuby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosFrevo on Rails
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Andre Bernardes
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Railsoverduka
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaGabriel Molter
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Emerson Macedo
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Openredu - ConsoliNE 2016
Openredu - ConsoliNE 2016Openredu - ConsoliNE 2016
Openredu - ConsoliNE 2016Yves Bouckaert
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Marcelo Bohn
 

Semelhante a O mundo visto de dentro do Ruby (20)

Prazer,Ruby On Rails
Prazer,Ruby On RailsPrazer,Ruby On Rails
Prazer,Ruby On Rails
 
Slides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRailsSlides do curso Programação web com RubyOnRails
Slides do curso Programação web com RubyOnRails
 
Ruby, Rails e Diversão
Ruby, Rails e DiversãoRuby, Rails e Diversão
Ruby, Rails e Diversão
 
Ruby on Rails e o Mercado
Ruby on Rails e o MercadoRuby on Rails e o Mercado
Ruby on Rails e o Mercado
 
ruby on rails e o mercado
ruby on rails e o mercadoruby on rails e o mercado
ruby on rails e o mercado
 
Palestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço FilhoPalestra Faculdade Lourenço Filho
Palestra Faculdade Lourenço Filho
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Ruby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos UnicórniosRuby e o Mundo Mágico dos Unicórnios
Ruby e o Mundo Mágico dos Unicórnios
 
Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011Desenvolvimento Ágil com Rails GURUSC 2011
Desenvolvimento Ágil com Rails GURUSC 2011
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Introdução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em RailsIntrodução á linguagem Ruby com aplicativo em Rails
Introdução á linguagem Ruby com aplicativo em Rails
 
Ruby e Rails
Ruby e RailsRuby e Rails
Ruby e Rails
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
Ruby FTW
Ruby FTWRuby FTW
Ruby FTW
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011Node.JS - Campus Party Brasil 2011
Node.JS - Campus Party Brasil 2011
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Openredu - ConsoliNE 2016
Openredu - ConsoliNE 2016Openredu - ConsoliNE 2016
Openredu - ConsoliNE 2016
 
Apresentação ruby + rails 2014
Apresentação ruby + rails 2014Apresentação ruby + rails 2014
Apresentação ruby + rails 2014
 

O mundo visto de dentro do Ruby

  • 1. O mundo visto de dentro do Ruby
  • 2.
  • 5.
  • 6. E vocês, já ouviram falar ou usaram Ruby?
  • 7.
  • 9. “Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?” Yukihiro “Matz” Matsumoto
  • 10. “Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?” “Eu queria uma linguagem mais poderosa que perl, e mais orientada a objetos que Python. Foi por isso que eu decidi projetar minha própria linguagem.” Yukihiro “Matz” Matsumoto
  • 11. 1993 Primeiros rabiscos Yukihiro “Matz” Matsumoto
  • 12. 1993 Primeiros rabiscos 1995 Primeiro release público Yukihiro “Matz” Matsumoto
  • 13. Sintaxe simples, inspirada por Ada, Eiffel e Perl  Semântica compacta, inspirada por Smalltalk  Object Model igual ao de Smalltalk  Expressões regulares do Perl  Conceitos de linguagem funcional  Características do C e C++
  • 14. Sintaxe simples, inspirada por Ada, Eiffel e Perl  Semântica compacta, inspirada por Smalltalk  Object Model igual ao de Smalltalk  Expressões regulares do Perl  Conceitos de linguagem funcional  Características do C e C++
  • 15. Produtividade no desenvolvedor  Simplicidade  Linguagem humana  Linguagem dinâmica e reflexiva  Extensibilidade  Todas as classes são abertas  Herança simples e mixins  DSL’s  Garbage collector
  • 16. Ruby 1.8.7 e 1.9.2
  • 17. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2
  • 18. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1
  • 19. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java)
  • 20. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C)
  • 21. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C) MagLev Beta (Smalltalk)
  • 22. Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C) MagLev Beta (Smalltalk) IronRuby 1.1 (.NET)
  • 23. Mas, por que Ruby?
  • 24. “Tornar as coisas simples fáceis e as coisas complexas possíveis.” Filosofia Ruby
  • 25. Focado no humano 3.times do print “Wee” end
  • 26. Focado no humano 3.times do print “Wee” end feed_dog if @dog.hungry?
  • 27. Focado no humano 3.times do print “Wee” end feed_dog if @dog.hungry? ['beer', 'vodka', 'wine'].each |drink| do print drink.capitalize end
  • 28. Verdadeiramente OO Tudo é objeto, não há sequer tipo primitivo.
  • 29. Verdadeiramente OO Tudo é objeto, não há sequer tipo primitivo. >> 1.class => Fixnum >> 1.class.class => Class >> nil.class => NilClass
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 37. “Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 38. O que podemos fazer com Ruby...
  • 40. Bowline Titanium
  • 41. Bowline Titanium Shoes GTK+
  • 42. Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+
  • 43. Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+ QtRuby Qt
  • 44. Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+ QtRuby Qt Ruby Cocoa Cocoa
  • 49. 2.3.8 3.0.0
  • 50. Código gerando código  Convenção sobre configuração  DRY (don't repeat yourself)  Produtividade sustentável  Desenvolvimento ágil  Diversão
  • 52. require 'rubygems' require 'sinatra' get '/hi' do "Hello World!" end
  • 53.
  • 54.
  • 56. 1.8.7 + 1.9.2 + REE + JRuby + Rubinius + MagLev + IronRuby + MacRuby
  • 57. 1.8.7 + 1.9.2 + REE + JRuby + Rubinius + MagLev + IronRuby + MacRuby = RVM
  • 58. Repositórios Github, Codebase
  • 59. Repositórios Github, Codebase Integração contínua Hudson, Cruise
  • 60. Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano
  • 61. Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano NewRelic, Scout Monitoramento BackupMyApp
  • 62. Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano NewRelic, Scout Monitoramento BackupMyApp Servidores Passenger, Mongrel, Thin
  • 63. Testes Cucumber, Steak, RSpec, Minitest, Test::Unit, Shoulda, Bacon, Machinist, Factory Girl, Mocha
  • 66. Steak
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79. Ué, mas não dizem que Ruby é lento?
  • 80.
  • 81.
  • 82. Performance != Escalabilidade
  • 83. “O The New York Times usou Ruby on Rails para agregar, analisar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise/?fp=16&fpid=1
  • 84. Agradecimentos @akitaonrails (Fábio Akita) @danielvlopes (Daniel V. Lopes)