Arquivo

Textos com Etiquetas ‘Ruby on Rails’

Múltiplos construtores em Ruby (minha versão)

10, setembro, 2010

Ontem, através de uma mensagem no Twitter do André Moreira, estava lendo um post no blog do Rinaldi Fonseca falando sobre múltiplos construtores em Ruby. Comecei a escrever um comentário, que acabou se tornando muito grande. Então achei melhor escrever aqui para expressar minha opinião a respeito.

Na primeira parte do post é mostrado a utilização de métodos de classe para construir um novo objeto passando parâmetros diferentes dos recebidos no construtor, onde foi usado esse exemplo:

class Carro
  attr_accessor :marca, :placa, :dono

  def initialize(marca, placa, dono)
    @marca, @placa, @dono =  marca, placa, dono
  end

  def Carro.carro_sem_dono(marca, placa)
    new marca, placa, "SEM DONO"
  end

  def Carro.carro_sem_placa(marca, dono)
    new marca, "SEM PLACA", dono
  end
end

carro = Carro.new "Ferrari", "ABC1234", "João"
carro_sem_dono  = Carro.carro_sem_dono "Vectra", "ABC5678"
carro_sem_placa = Carro.carro_sem_placa "Palio", "José"

puts carro.inspect           #<Carro: @dono="João", @placa="ABC1234", @marca="Ferrari">
puts carro_sem_dono.inspect  #<Carro: @dono="SEM DONO", @placa="ABC5678", @marca="Vectra">
puts carro_sem_placa.inspect #<Carro: @dono="José", @placa="SEM PLACA", @marca="Palio">

Os métodos carro_sem_dono e carro_sem_placa seguem o Factory Method Design Pattern (Padrão de Projeto Método Fábrica) e atuam como uma DSL na classe Carro. Desse modo, não há necessidade da redundância do nome da classe no ínicio de cada método fábrica:

class Carro
  attr_accessor :marca, :placa, :dono

  def initialize(marca, placa, dono)
    @marca, @placa, @dono =  marca, placa, dono
  end

  def self.sem_dono(marca, placa)
    new marca, placa, "SEM DONO"
  end

  def self.sem_placa(marca, dono)
    new marca, "SEM PLACA", dono
  end
end

carro = Carro.new "Ferrari", "ABC1234", "João"
carro_sem_dono  = Carro.sem_dono "Vectra", "ABC5678"
carro_sem_placa = Carro.sem_placa "Palio", "José"

puts carro.inspect           #<Carro: @dono="João", @placa="ABC1234", @marca="Ferrari">
puts carro_sem_dono.inspect  #<Carro: @dono="SEM DONO", @placa="ABC5678", @marca="Vectra">
puts carro_sem_placa.inspect #<Carro: @dono="José", @placa="SEM PLACA", @marca="Palio">

Já na segunda parte do post é mostrada uma maneira de se passar um bloco para o construtor da classe Carro e assim inicializar seus atributos:

class Carro
  attr_accessor :ano, :marca, :modelo, :dono, :cor, :tipo

  def initialize(&block)
    instance_eval &block
  end
end

carro = Carro.new do
  self.ano    = "2000"
  self.marca  = "Gol"
  self.modelo = "Exemplo"
  self.dono   = "Dono exemplo"
  self.cor    = "Vermelho"
  self.tipo   = "Tipo exemplo"
end

puts carro.inspect #<Carro: @ano="2000", @marca="Gol", @modelo="Exemplo", @dono="Dono exemplo", @cor="Vermelho", @tipo="Tipo exemplo">

Eu particularmente gosto do tipo de inicialização de atributos de um novo objeto permitada nas classes da camada Model de Ruby on Rails. O método new dessas classes (que herdam de ActiveRecord::Base) podem receber tanto um hash quanto um bloco com os valores dos atributos. Dessa maneira, a classe Carro poderia ser inicializada assim:

carro = Carro.new :ano => "2000",
                   :marca => "Gol",
                   :modelo => "Exemplo",
                   :dono => "Dono exemplo",
                   :cor => "Vermelho",
                   :tipo => "Tipo exemplo"

#ArgumentError: wrong number of arguments (1 for 0)

Eu disse poderia. Não pode, pois o construtor new espera um bloco e não um hash, e Carro não é uma classe Model do Rails.

Para solucionar isso, podemos modificar o construtor da classe Carro para receber um hash de atributos ao invés de um bloco. Então atribuímos cada valor presente no hash para seu respectivo atributo:

class Carro
  attr_accessor :ano, :marca, :modelo, :dono, :cor, :tipo

  def initialize(attributes = nil)
    attributes.each do |attr, value|
      self.send("#{attr}=", value)
    end unless attributes.nil?
  end
end

carro = Carro.new :ano => "2000",
                   :marca => "Gol",
                   :modelo => "Exemplo",
                   :dono => "Dono exemplo",
                   :cor => "Vermelho",
                   :tipo => "Tipo exemplo"

puts carro.inspect #<Carro: @ano="2000", @marca="Gol", @modelo="Exemplo", @dono="Dono exemplo", @cor="Vermelho", @tipo="Tipo exemplo">

Mas e se quisermos também ter a opção de inicializar a classe Carro passando um bloco? Sem problemas, usamos o comando yield passando como parâmetro self se um bloco foi fornecido:

class Carro
  attr_accessor :ano, :marca, :modelo, :dono, :cor, :tipo

  def initialize(attributes = nil)
    attributes.each do |attr, value|
      self.send("#{attr}=", value)
    end unless attributes.nil?

    yield self if block_given?
  end
end

carro = Carro.new do |c|
  c.ano    = "2000"
  c.marca  = "Gol"
  c.modelo = "Exemplo"
  c.dono   = "Dono exemplo"
  c.cor    = "Vermelho"
  c.tipo   = "Tipo exemplo"
end

puts carro.inspect #<Carro: @ano="2000", @marca="Gol", @modelo="Exemplo", @dono="Dono exemplo", @cor="Vermelho", @tipo="Tipo exemplo">

Nessa implementação sempre irá prevalecer o que vier no bloco. Então se você passar um hash e um bloco para o construtor ao mesmo tempo (o que é uma bizarrice), os atributos que coincidirem terão o valor que foi passado no bloco:

carro = Carro.new(:ano => "2000", :marca => "Gol", :modelo => "Exemplo") do |c|
  c.modelo = "MODELO DO BLOCO"
  c.dono   = "Dono exemplo"
  c.cor    = "Vermelho"
  c.tipo   = "Tipo exemplo"
end

puts carro.inspect #<Carro: @ano="2000", @marca="Gol", @modelo="MODELO DO BLOCO", @dono="Dono exemplo", @cor="Vermelho", @tipo="Tipo exemplo">

Esses eram meus comentários sobre o interessante assunto de construtores em Ruby.

Ruby , , , , , , ,

Returning em Ruby on Rails

5, agosto, 2010

Quantas vezes você já criou algum método em Ruby que inicializa uma variável, atribui valores a ela e depois a retorna?

Veja o exemplo abaixo:

def some_values
  values = []
  values << "first element"
  values << "second element"
  values
end

some_values # => ["first element", "second element"]

A linha 2 é cria um array vazio, depois são atribuidos valores nas linhas 3 e 4, e finalmente na linha 5 o array é retornado pelo método.

Em Ruby on Rails existe o método returning da classe Object que facilita nossa vida nesses casos:

def some_values
  returning values = [] do
    values << "first element"
    values << "second element"
  end
end

some_values # => ["first element", "second element"]

Na linha 2 chamamos o método returning passando a variável que será retornada já atribuindo seu valor inicial. Dentro do bloco, nas linhas 3 e 4, então atribuímos os valores ao array.

Há também esse outro tipo de sintaxe:

def some_values
  returning [] do |values|
    values << "first element"
    values << "second element"
  end
end

some_values # => ["first element", "second element"]

Funciona da mesma forma, mas acaba sendo não tão intuitivo como o código anterior.

Veja um trecho de código utilizando o método returning, de um método auxiliar para testes de RSpec retirado de uma aplicação real:

def variants
  returning variants = [] do
    5.times do |priority| do
      variants << Factory.build(:variant, :priority => priority)
    end
  end
end

E olhe só como é simples a implementação do método returning:

def returning(value)
  yield(value)
  value
end

Ruby , , ,

[fisl11] O que rolou de Ruby e Ruby on Rails

27, julho, 2010

Como nas edições anteriores, esse ano no fisl11 tivemos várias palestras relacionadas com Ruby e Rails.

Quarta, 21 de julho

No primeiro dia, mostrei o uso do Spree, uma plataforma completa de comércio eletrônico desenvolvida em Ruby on Rails, como base de um novo sistema de loja virtual da Locaweb.

Nessa apresentação foram mostradas algumas técnicas de metaprogramação Ruby para lidar com as extensões do Spree e organizar melhor seu código.

Os slides da palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” estão disponíveis nesse link:
http://www.slideshare.net/Prodis/locaweb-spree-transformando-cdigo-aberto-em-um-projeto-comercial

Quinta, 22 de julho

Neste dia, Daniel Lopes iniciou o “Mini-curso de Ruby e Rails”, introduzindo a linguagem de programação Ruby e os primeiros passos de Ruby on Rails. Essa primeira parte do curso teve duas horas de duração com a sala lotada.

Sexta, 23 de julho

“Lapidando Ruby” foi uma palestra muito interessante de Mauricio Szabo. Foram apresentadas algumas práticas para deixar seu código Ruby mais limpo, e outras técnicas para que seus testes fiquem mais claros e compreensíveis.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/mauricioszabo/lapidando-ruby

A exemplo do dia anterior, a segunda parte do “Mini-curso de Ruby e Rails”, de Daniel Lopes, também teve sua sala lotada. O foco foi em montar uma aplicação simples em Ruby on Rails.

Sábado, 24 de julho

No último dia do fisl11, tivemos praticamente uma Maratona Ruby on Rails.

Para começar, Fabio Akita apresentou em duas horas “Ecossistema Ruby on Rails”, falando sobre o que se formou em volta do Ruby on Rails, como soluções completas em diversas áreas como deployment, e filosofias de empreendedorismo e desenvolvimento ágil.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/akitaonrails/fisl-11-ecossistema-ruby-on-rails

Logo em seguida, tivemos mais uma apresentação do Fabio Akita, dessa vez sobre “Dicas de Desenvolvimento Web com Ruby”, onde foram mostradas algumas soluções simples para resolver o problema de lentidão de aplicações Web, por conta do entendimento pobre da arquitetura Web e suas alternativas.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/akitaonrails/fisl-11-dicas-de-desenvolvimento-web-com-ruby

E o vídeo usado na apresentação está em:
http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip

E para finalizar a maratona, Daniel Lopes deu a terceira e última parte do “Mini-curso de Ruby e Rails”, finalizando a aplicação Ruby on Rails iniciada no segundo dia do treinamento e mostrando várias dicas interessantes sobre Rails.

Os slides de todo mini-curso estão disponíveis nesse link:
http://www.slideshare.net/danielvlopes/minicurso-ruby-e-rails

E o código fonte está em:
http://github.com/danielvlopes/fisl

.
Além disso, a galera do #HoraExtra esteve presente programando e publicando aplicações pequenas, desenvolvidas em Ruby on Rails, durante todo o fisl11. Mais detalhes do como isso aconteceu, você pode ver aqui.

Um abraço a todos os Railers que estiveram presentes ou que acompanharam virtualmente mais esse grande evento.

Eventos, Ruby , , , , , , , , ,

[fisl11] Sala de recepção dos palestrantes

25, julho, 2010

O site do fisl11 trouxe várias notícias durante o evento.

Estava dando uma olhada nessas notícias e encontrei uma foto minha na sala de recepção dos palestrantes, onde conversei com um rapaz que trabalhava na comunicação do evento sobre minha apresentação.

Foto retirada do site do fisl11

Foto retirada do site do fisl11

Veja um trecho da notícia:

…Fernando Hamasaki de Amorim, da Locaweb, já está com sua palestra pronta e aguardando. “Transformando código aberto em um projeto comercial” às 20h na sala 41E de hoje.

Fernando pretende apresentar um estudo de caso onde ele irá relatar os desafios e dificuldades, vantagens e desvantagens em utilizar código aberto para criar um novo sistema. “Vou falar também de códigos aberto em detalhes e mostrar como se ganha dinheiro com software livre. O código é aberto, mas alguém ganha com isto”, explicou. Mais detalhes vale a pena conferir a palestra de Fernando.

.
Para ver a notícia completa, acesse o link abaixo:
http://softwarelivre.org/fisl11/noticias/sala-de-recepcao-dos-palestrantes-esta-lotada

Eventos , , , , , , , , ,

[fisl11] Slides da apresentação Locaweb + Spree: transformando código aberto em um projeto comercial

22, julho, 2010

Veja os slides da palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” que foi apresentada em 21/07/2010 no fisl11.

Agradeço a todos que estiveram presentes.

Eventos , , , , , , , , ,

[fisl11] Confirmadas data e hora da palestra Locaweb + Spree

12, julho, 2010

Está confirmada data, hora e sala da minha palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” no fisl11.

A apresentação será no dia 21/07 às 20h na sala 41-E fisl 5.

Veja também:

Eventos , , , , , , , , ,

[fisl11] Minha proposta de palestra foi aceita

21, junho, 2010

Nos dias 21 a 24 de julho, será realizado em Porto Alegre o fisl11, o 11º Fórum Internacional de Software Livre.

O FISL é o maior evento de software livre da América Latina e a edição do ano passado atingiu a marca de 8.244 participantes.

Entre os assuntos que serão abordados, estão:

  • Linux, Ubuntu, KDE, BSD
  • Desenvolvimento em Ruby, Java, PHP, Python, Perl e Smalltalk
  • Desenvolvimento de Jogos, Multimídia e Streaming
  • Gerenciamento de Dados (SGBD, Storage, backup…)
  • Hardware, Sistemas Embarcados e Robótica
  • Segurança
  • Software livre e negócios
  • Educação e Inclusão Digital

Minha proposta de palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” para o fisl11 foi aceita.

Segue o resumo da palestra:

Os desafios, benefícios, dificuldades e lições aprendidas que a equipe de desenvolvimento de SaaS da Locaweb teve na utilização do Spree, uma plataforma de comércio eletrônico de código aberto, como base de seu novo sistema de loja virtual multi-usuário, desenvolvido em Ruby on Rails. O poder e o dinamismo do Ruby tiveram destaque, com grande utilização de metaprogramação nas extensões do Spree.

Eventos , , , , , , , , ,

Screencasts sobre Ruby on Rails 3

14, junho, 2010

Em um keynote da RailsConf 2010, Gregg Pollack divulgou uma série de screencasts sobre Ruby on Rails 3.

Dive into Rails 3
http://rubyonrails.org/screencasts/rails3

Esses screencasts foram feitos por ele em parceria com a EnvyLabs.

Veja também esses slides da RailsConf 2010:

Keynote do Gregg Pollack
http://s3.amazonaws.com/dhhmix/rails3-railsconf2010.pdf

Tutorial “The Rails 3 Ropes Course”
http://assets.en.oreilly.com/1/event/40/The%20Rails%203%20Ropes%20Course%20Presentation.pdf

Na RailsConf 2010 foi anunciado o Rails 3 beta 4 e que a versão release candidate seria lançada até o final do evento. Ainda não foi lançado, mas deve estar disponível nos próximos dias.

Eventos, Ruby , , , , ,

Material de estudo sobre Ruby on Rails 3

14, junho, 2010

Para acompanhar melhor os tutorias e apresentações relacionadas ao Ruby on Rails 3 que rolaram na RailsConf 2010, separei uma série de artigos/posts e fui lendo na viagem de ida.

Seguem os links:

Ruby on Rails 3.0 Release Notes
http://guides.rails.info/3_0_release_notes.html

Rails Edge Architecture
http://yehudakatz.com/2009/06/11/rails-edge-architecture

Rails 3: The Great Decoupling
http://yehudakatz.com/2009/07/19/rails-3-the-great-decoupling

ActiveModel: Make Any Ruby Object Feel Like ActiveRecord
http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord

Sexy Validation in Edge Rails (Rails 3)
http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3

validates :rails_3, :awesome => true
http://lindsaar.net/2010/1/31/validates_rails_3_awesome_is_true

Active Record Query Interface 3.0
http://m.onkey.org/2010/1/22/active-record-query-interface

Why Arel?
http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel

Active Record Query Interface
http://guides.rails.info/active_record_querying.html

The Rails Module (in Rails 3)
http://litanyagainstfear.com/blog/2010/02/03/the-rails-module

The Lowdown on Routes in Rails 3
http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3

Rails 3 I18n changes
http://blog.plataformatec.com.br/2010/02/rails-3-i18n-changes

Rails 3: Introdução a Javascript Não-Obstrutivo e Responders
http://www.akitaonrails.com/2010/05/10/rails-3-introducao-a-javascript-nao-obstrusivo-e-responders

Rails 3: Introdução a Engines
http://www.akitaonrails.com/2010/05/10/rails-3-introducao-a-engines

Customizing Rails Apps with Plugins
http://www.railsdispatch.com/posts/building-or-updating-a-rails-3-plugin

Upgrading a Rails 2 App to Rails 3
http://www.railsdispatch.com/posts/upgrading-a-rails-2-app-to-rails-3

Getting Rails 3 Edge with jQuery, RSpec and Cucumber using RVM
http://lindsaar.net/2010/5/9/Getting-Rails-3-Edge-with-jQuery-RSpec-and-Cucumber-using-RVM

Rails 3.0 Beta – 36 Links e artigos para você começar
http://www.rubyinside.com.br/rails-30-beta-36-links-e-artigos-para-voce-comecar-2947

Ruby , , , , , , ,

Entrevista com Fabio Akita

25, maio, 2010

Geralmente o entrevistado em questão é que faz as entrevistas, mas dessa vez ele fez o papel inverso.

O blogueiro, programador e evangelizador de Ruby e Ruby on Rails fala sobre:

  • Adoção de Ruby on Rails no Brasil
  • O futuro próximo do Ruby e do Rails
  • Ruby on Rails em grandes corporações
  • O melhor ambiente para um equipe de desenvolvimento
  • Sua rotina de estudo e absorção de conhecimento
  • Os atrativos do Ruby para programadores de outras linguagens
  • Dicas para quem está começando com Ruby

Fabio Akita é um conhecido blogueiro e evangelista da comunidade Ruby on Rails
e Agile. Foi Gerente de Projetos na Locaweb, onde também fez parceria na concepção da conferência anual Rails Summit. Já trabalhou como Brazil Rails Practice Manager para a consultoria americana Surgeworks LLC. Antes disso era consultor de integração e desenvolvimento no mundo SAP. Tem mais de 10 anos
de experiência nas áreas de desenvolvimento de software e gestão de projetos.

Atualmente ele mantém os seguintes blogs:

-

Prodis: Quando se engajou no caminho de evangelizar Ruby on Rails, você imaginava a adoção de Rails no Brasil como está hoje? Você se sente realizado com os resultados que conseguiu?

Fabio Akita: Não, não imaginava. Claro, gostaria que tivesse crescido muito mais, mas dadas as circunstâncias do nosso país, acho que a comunidade foi bastante resiliente e persistente, o que foi muito bom. Eu gosto muito da comunidade que se juntou ao redor de Rails e sim, estou bastante contente com o que conquistamos até agora.
-

Prodis: O que você acha que vem pela frente com as grandes mudanças e aprimoramentos do Ruby on Rails 3.0 + Ruby 1.9? O que você espera desse grande passo que o Rails está dando?

Fabio Akita: É um passo natural, tanto o Ruby 1.8 quanto o Rails 2.3 já estão mostrando sua “idade”. O lançamento do Ruby 1.9.2 e Rails 3.0 limpa o ambiente e força a comunidade e levar seus projetos um passo à frente. A comunidade Ruby não é de ficar parada, então em poucos meses a maior parte dos projetos mais importantes já deve se tornar compatível e até o ano que vem projetos novos já devem começar inteiramente nas novas plataformas. Isso trás mais performance de graça pra nós e oferece mais oportunidades de integração e extensão do framework. Será legal.
-

Prodis: Atualmente muitas grandes corporações no Brasil utilizam o modelo Waterfall de desenvolvimento de software. Você imagina que seja possível a adoção do Rails por essas grandes corporações sem utilizarem Metodologias Ágeis ou o desenvolvimento em Rails está intimamente ligado à cultura ágil?

Fabio Akita: A solução nunca é tecnologia e nem metodologia. Particularmente eu não consigo imaginar grandes corporações adotando agilidade nem se elas quisessem. Não se trata de implementar procedimentos e rituais, isso não é ser ágil. Um programador só é sênior se, independente de onde trabalha, ele já segue as disciplinas de engenharia ágil, como TDD, code review, integração contínua, etc, mas mais do que isso: ele entende “porque” elas são necessárias, quando devem ser usadas, e se importa com elas.

A mesma coisa com tecnologia: um programador sênior saberá tirar muita vantagem dela, mas um programador que apenas segue procedimentos, nunca vai entender quais são as vantagens. E por consequência uma grande corporação - que se importa mais com o preço da hora do que com a qualidade dos profissionais - nunca vai conseguir realmente tirar vantagem de quaisquer novas tecnologias e técnicas, incluindo Rails, incluindo Ágil.

Rails não exige ágil, mas software de qualidade exige as técnicas de engenharia do mundo Ágil, por consequência, projetos Rails de qualidade vão exigir as mesmas técnicas.
-

Prodis: Com sua experiência em desenvolvimento e liderança, qual o seria o ambiente ideal para execução de um projeto de curto/médio prazo? Equipe no mesmo local ou home office, pareamento ou não, programadores sêniors ou diversos níveis de conhecimento?

Fabio Akita: Não existe ambiente ideal. A somatória de todos os fatores que compõe qualquer projeto são tantas e tão granulares que não dá para reduzir a poucos elementos. Vai desde o objetivo final do projeto, até o objetivo pessoal de cada indivíduo do grupo, até se a cadeira é confortável.

Mas se me perguntarem minha preferência, com certeza, eu prefiro uma equipe toda de sêniores. Foi assim que entreguei os melhores projetos até agora. Não importa as metodologias, sêniores não precisam delas porque as técnicas já estão incorporadas. Sêniores não são os que “cospem código”, são os que se “importam com o código”. Não é preciso discutir com um sênior se precisa de um repositório de código. É como perguntar pra um motorista se precisa de cinto de segurança. Rituais não fazem sentido nessa etapa, pulamos as cerimônias e vamos direto ao ponto. Mas cuidado: ser um sênior não é nem de longe simplesmente ter “muitos anos de casa”, mas sim muitos “anos de prática real”, fazendo muitas coisas muito diferentes - quem fez 10 anos a mesma coisa não é um sênior, é um júnior de 10 anos.

Se o projeto permitir, é sempre bom colocar alguns júniores como “sombra” de alguns sêniores. Não adianta colocar a metodologia que for: o código de um júnior sempre será pior porque ele ainda não teve oportunidades para praticar. É como qualquer esporte: se o jogador pisou pela primeira vez num campo de futebol, não dá pra esperar que faça gol. Portanto se a empresa preza por seus funcionários ela precisa entender que júniores vão precisar de mais espaço por um período de 1, ou 2 anos de muita prática em diferentes tipos de projetos e sempre acompanhados por sêniores. Ou seja, é um investimento e nunca uma economia de custos. Se o fator for puramente econômico de curto prazo, não faz sentido ter júniores.
-

Prodis: Em um post do seu blog de 2007 “Off Topic: Seja Arrogante!” você fala, entre outras coisas, como aprendia as coisas sozinho sendo pró-ativo e aproveitando seu tempo livre. Conte-nos um pouco sobre sua rotina atual de estudo e absorção de conhecimento. Tem gente que até brinca dizendo que você não dorme, fica programando, lendo ou escrevendo movido a RedBull.

Fabio Akita: Não é brincadeira, eu não durmo mesmo :-) Mas pra esclarecer: não, pra estudar muito não precisa deixar de dormir, isso é excentricidade minha mesmo.

Por mais que se fale em organização pessoal, disciplina e tudo mais, ninguém é 100% disciplinado o tempo todo. Eu particularmente divago bastante, e mudo o foco o tempo todo de assunto pra assunto. Tudo vai depender do que eu acabei de ler ou com quem acabei de falar.

Minha fonte principal de informações diárias é meu Google Reader. De lá eu passo o olho em cerca de 1000 posts por dia. Desses eu devo selecionar para ler cerca de 1 dúzia de artigos. Finalmente 1 ou 2 realmente eu páro para destilar mais a sério. Isso não é uma regra, apenas uma constatação. Dependendo do artigo, ele vai me levar a outras leituras para aprofundar, daí vai desde outros sites, até wikipedia, até a Amazon pra comprar algum livro.

Por exemplo, escrevi recentemente no meu blog uma constatação de que o mercado de apps pra iPhone/iPad vai crescer muito. Logo em seguida comprei os livros de Objective C e Cocoa Programming da O’Reilly em formato eBook e já coloquei no meu iPad. Fui para Salvador dar palestra lendo metade de um deles.

E todo tempo em que não estou no computador é “perdido” pra mim, por exemplo, quando eu preciso sair de carro para ir ao trabalho ou coisa parecida. Meia hora de carro todos os dias pra ir e voltar é 1 hora por dia jogada fora. É o tempo ideal pra carregar meu iPhone com audiobooks e ler nesse período. “Li” (escutei) dezenas de livros dessa forma.

Além disso precisa existir tempo pra networking. Ir em eventos, participar de comunidades, grupos, nem que seja para um simples happy hour. Muitas idéias saem dali e que depois viram temas pra eu continuar estudando ou perseguindo de alguma forma. Sozinho só dá para ir até um certo ponto. Com outras pessoas dá para extrapolar isso, e é importante se acostumar a participar mais de grupos de pessoas.

Mas como falei, eu divago. Ainda estou começando nos estudos de Objective C, mas li um artigo sobre Scala que me deixou curioso pra ir mais a fundo em Scala, e lá vou eu começar outra coisa. A parte difícil é ir até o fim mesmo em algum dos assuntos, e isso eu também não sou perfeito. Muita coisa eu começo e vai ficando pra trás, meses depois eu retomo e vai indo. Não é uma receita de bolo, vai depender muito das circunstâncias, da vontade, das tendências, etc. O importante é começar, como vai acabar é consequência.
-

Prodis: Tenho notado que muitos programadores bons (eu disse bons) de Java e/ou .NET e que experimentam Ruby não querem mais voltar a programar na antiga linguagem. Na sua opinião, qual é o grande atrativo e diferencial do Ruby que faz com que programadores experientes dessas plataformas se interessem cada vez mais pelo Ruby?

Fabio Akita: Isso é uma hipérbole :-) Ruby é uma linguagem de mais alto nível que Java ou .NET. Por consequência, o nível de abstração é muito maior, o que diminui consideravelmente muitas burocracias e cerimônias. Mas isso é verdade para quaisquer outras linguagens de alto nível vs. as de baixo nível. Java era mais alto nível que C. C# é um pouco mais algo nível que Java (a linguagem). Python, Perl, Javascript são tão alto nível quanto Ruby - onde a discussão é mais em “estilos”. Alto nível sempre será mais agradável para alguns tipos de projetos do que os de baixo nível, é um fato da programação. Fazer aplicativos Web com Java é tão tedioso quanto se fosse usar C/C++. Por outro lado não dá para fazer drives de hardware com Ruby, daí preciso de C/C++.

Tipagem dinâmica, envio de mensagens para objetos, blocos de código encapsulados em objetos, só isso tornaria qualquer uma dessas linguagens mais “amigáveis”. Scala é algo parecido: a grosso modo, um Java menos burocrático. Mas ver somente as partes não é suficiente, o pacote todo do Ruby é muito simples e elegante, por isso é difícil largar. Mas ele não é perfeito, assim como nenhuma linguagem. É necessário - e obrigatório - aprender outras linguagens e inclusive não abandonar nem Java e nem C#. Algumas coisas só fazem sentido nessas linguagens.
-

Prodis: E para quem está começando agora com Ruby e Ruby on Rails, sejam vindos de outras linguagens ou como primeira linguagem, qual o conselho que você dá?

Fabio Akita: Entrem na comunidade, acompanhem as listas de discussão, leiam os blogs dos principais Rubistas, encontrem os projetos open source mais discutidos, baixe os códigos, comece a dissecá-los. Isso muito antes de você pensar em escrever seu primeiro programa do zero: vai demorar muito mais tempo se não fizer dessa forma. Livros, Cursos, Tutoriais, Screencasts, tudo ajuda, mas não são completos sem contexto e contexto você consegue só se inteirando e investindo seu tempo pessoal na comunidade. Novamente, não tem receita de bolo: algumas pessoas tem mais facilidade do que outras, e isso é um fato também.
-

Prodis: Para finalizar, fique à vontade para mandar algum recado, mensagem ou comentário para os leitores.

Fabio Akita: O mais importante é nāo se limitar. Eu sou um evangelizador de Ruby e Ruby on Rails, mas antes disso sou um programador que gosta de tecnologia. Nos últimos 20 anos já usei diversas plataformas, muitas delas já extintas, mas cada uma contribuiu para que eu ficasse cada vez melhor. Pouco antes de Ruby eu estava em Java, e .NET. 10 anos atrás estava em ASP e PHP, e assim por diante. Mesmo que você nāo pretenda usar Ruby, o simples fato de aprender contribuirá com sua formaçāo. Portanto o recado é: fique antenado e continue experimentando coisas novas. Nāo lembro de quem foi essa frase, mas bons julgamentos vem com experiência, e experiência é formada também fazendo maus julgamentos.
-

Prodis: Obrigado pela entrevista.

Ruby, TDD , , , , , , ,