BT

The Well-Grounded Rubyist, David A. Black

Postado por Robert Bazinet , traduzido por Nuno Marques em 07 Ago 2009 |

A linguagem Ruby saiu pela primeira vez há 14 anos e desde aí tem crescido muito graças a frameworks como Ruby on Rails.

Robert Bazinet da InfoQ teve a oportunidade de falar com David A. Black o autor do "The Well-Grounded Rubyist" . Este livro cobre detalhes intrincados da linguagem Ruby de hoje, incluindo a última versão 1.9.1 e dá aos programadores uma base sólida para criar aplicações em Ruby.

 A conversa com David suplementa um artigo recente na InfoQ do Charlie Martin, que nos dá um resumo do livro. Esta entrevista é acompanhada por um capítulo de exemplo do livro, o capítulo 15. Callbacks, hooks and runtime introspection (PDF).

Robert Bazinet (RB): Conte-nos sobre seu novo livro "The Well-Grounded Rubyist"?

David A. Black (DB): É o que eu chamo de uma "reprogramação" do meu livro de 2006, "Ruby for Rails". É um livro de Ruby (não específico para Rails), e cobre Ruby 1.9.1.

RB: Eu muitas vezes falo com autores que dizem que nunca mais irão escrever outro livro depois do que o que acabaram de escrever. No seu caso você escreveu Ruby for Rails, qual foi sua inspiração para escrever outro livro de Ruby?

DB: Eu sempre quis escrever um livro de Ruby – só Ruby - e Ruby for Rails me deu aquilo que eu chamo de "kernel" para este livro. Por isso foi um passo natural. Tal como para não escrever outro livro: Eu já estou trabalhando no meu próximo livro, que tem o título de "Rails Choices" e será publicado pela Pragmatic Bookshelf. Eu publiquei o meu próprio livro em 1999, num campo completamente diferente, e escrevi muitos capítulos de livros, artigos acadêmicos e seções de enciclopédia na minha vida acadêmica. Portanto, escrever sempre foi uma boa parte daquilo que eu sempre fiz, e sabendo que escrever um livro te deixa bastante esgotado, nunca senti que nenhum dos livros seria o último.

RB:Quem é a audiência pretendida para este livro?

DB: Qualquer pessoa que é nova em Ruby e quer começar bem, ou alguém que já fez algumas coisas em Ruby (incluindo, mas não limitado a, Rails) e quer passar pelas características, técnicas e princípios da linguagem de uma maneira sistemática. Eu aprendi com a minha experiência como professor de Ruby que mesmo que tu escolhas uma linguagem ao ponto de conseguires fazer várias coisas diferentes com ela, há sempre alguma coisa a mais para aprender. Não sei quantas vezes eu vi momentos de "Ah ha!" enquanto ensinava programadores que já usavam Ruby, enquanto eu explicava algo sobre o modelo de objetos, da maneira como funcionam scoping, blocos, meta programação – ou qualquer outro tópico. E não é porque não sejam bons programadores, é porque (ainda) não tiveram a chance de se sentarem e terem alguém que lhes explique a linguagem dessa maneira.

Ler um livro é diferente de ter um professor ou formador, mas eu estou contente de poder dizer que um dos comentários que as pessoas fazem sobre Ruby for Rails é que é quase como se tivessem um mestre sentado ao lado explicando-lhes as coisas. Eu espero que algum espírito dos meus ensinamentos apareçam também no "The Well-Grounded Rubyist".

RB: É o "The Well-Grounded Rubyist" um seguimento do teu livro Ruby for Rails? O que está diferente e o que você aprendeu sobre escrever para este público que o novo livro é aplicado?

DB: Não é bem um seguimento; Definitivamente não é "Ruby for Rails, volume 2" nem nada parecido. Nem é exatamente um super conjunto de Ruby for Rails. A relação entre os dois livros não é muito vulgar, e não há palavra certa para a descrever. A escolha de tópicos é diferente, The Well-Grounded Rubyist não é uma referência completa, mas tem muitos mais tópicos de Ruby do que o Ruby for Rails, e a escolha de tópicos não foi orientada por algo tão específico como o conceito de "para Rails". E qualquer tópico em comum entre os dois foi completamente revisto e atualizado.

No caso do público: uma coisa que eu acho que mudou é que a comunidade de programadores de Ruby está pronta, digamos, para instrução e exploração de Ruby que não é necessariamente "para Rails" da mesma maneira que Ruby for Rails foi. Há suficiente tração de Ruby como linguagem. Portanto o The Well-Grounded Rubyist é sem dúvida "para Rails" - só que é mais expansivo, abrangente e mais agradável. (Acredita que, várias pessoas disseram que Ruby for Rails foi o melhor livro de Ruby que conheciam, "para Rails" ou não. Esperemos que o The Well-Grounded Rubyist não seja menos :-)

RB: Por que você escolheu Ruby como a linguagem para usar, programar e ensinar em vez de Python ou outra linguagem dinâmica ou estática?

DB: Ruby me escolheu. Eu estava na livraria Borders, mais ou menos na primeira semana de Novembro de 2000. Eu vi o livro Pickaxe, que tinha acabado de sair. Tirei-o da prateleira, abri e me apaixonei.

5 anos depois, me despedi da minha posição de professor universitário e prossegui com consultoria e treinamento full-time de Ruby e Rails. Nessa altura eu já estava trabalhando no Ruby for Rails, por isso o pêndulo de meu interesse já estava bem inclinado para programação e para Ruby em particular. (A minha posição acadêmica era em outra área). Eu mantive em Ruby especialmente por causa das pessoas envolvidas nele. Eu achei uma "casa" na comunidade Ruby, e tenho passado bons tempos nela. Eu adoro o mundo de Ruby porque as pessoas não estão muito interessadas em hierarquias e cultos de personalidades. Há de uma certa maneira mais disso hoje do que havia antigamente, mas se você conseguir ignorar, conseguirá ter as partes boas.

RB: Se alguém novo em Ruby pegar seu livro e você tiver a oportunidade de acompanhá-lo ao mesmo tempo, que partes do livro e/ou dos capítulos você acha que são mais importantes para lhes dar uma boa base de aprendizagem em Ruby?

DB: Eu começaria pelo princípio. O livro está dividido 3 grandes partes: Ruby Foundations; Built-in Classes and Modules; e Ruby Dynamics. Por isso está preparado para te lançar para a linguagem desde o início. Se você já usa Ruby, talvez queira passar à frente os primeiros capítulos, e começar a ler em profundidade quando chegar a uma parte menos familiar (ou pelo menos saber o que está nesses capítulos, no caso de querer voltar atrás).

RB: Muitos programadores Ruby on Rails aprendem Ruby através de Rails. Você acha que esta é uma boa maneira para abordar Ruby on Rails ou acha que as pessoas deviam saber Ruby antes?

DB: Eu não acho que você precisa se manter afastado de Rails até dominar Ruby. Esse foi o maior foco de Ruby for Rails: integração da experiência de aprender Ruby com a experiência de usar Rails. É importante lembrar, no entanto, que se você decidir aprender Rails, você decide aprender Ruby (a não ser que queira apenas brincar um pouco com Rails e pôr de lado). Há várias maneiras de se chegar lá, mas você precisa querer.

RB: O livro inclui Ruby 1.9.1. Quais são algumas das características de 1.9.1 que te estimulam mais ou que acha que são as mais importantes para os programadores?

DB: Eu estou convencido da ideia de que as pessoas deviam se mudar para 1.9 porque está aí e está pronto. Algumas das novas caracteristícas da linguagem eu gosto; outras conseguiria viver sem elas. Mas isso acontecerá sempre com as maiores versões novas.

Entre as coisas que eu gosto: muito dos novos métodos de Enumerable. Eu resmungava algumas vezes quando o número de métodos era muito grande... Mas agora acho que é bom colocar métodos na linguagem em que toda a gente de qualquer maneira acaba programandp a sua própria versão ou que são suficientemente diferentes dos métodos existentes que faz acaba fazendo sentido.

Enumerable#each_with_objects é um bom exemplo. Ele pode fazer algo da seguinte maneira:

&gr;&gr; names = ["David Alan Black", "Yukihiro Matsumoto", "Rob Bazinet"] 
=&gr; ["David Alan Black", "Yukihiro Matsumoto", "Rob Bazinet"] 
&gr;&gr; h = names.each_with_object({}) do |n,hash| 
    hash[n] = n.scan(/\b(\w)/).join 
  end 
=&gr; {"David Alan Black"=&gr;"DAB", "Yukihiro Matsumoto"=&gr;"YM", 
   "Rob Bazinet"=&gr;"RB"}

Em vez do pouco elegante equivalente inject onde você tem o nome do acumulador no fim de cada bloco:

names.inject({}) {|hash,n| hash[n] = n.scan(/\b(\w)/).join; hash }

Portanto, o #each_with_object não faz nada que não pudesses fazer antes, mas soluciona o caso de uso comum de uma maneira muito mais idiomática.

Há muitos destes tipos de funcionalidades adicionadas na versão 1.9.1. Algumas alterações sintáticas menores não me fazem diferença mas também não me sinto inclinado para nenhuma das maneiras. Mas eu acabei gostando desta:

{ a: 1, b: 2 }  # same as { :a => 1, :b => 2 }

Eu sou sempre céptico sobre "magia" e o que eu penso sobre a sintaxe que usa "tinta invisível". Mas neste caso, eu acho que é bom.

RB: O que você acha que precisa ser feito para que a maioria das pessoas usem Ruby 1.9?

DB: As pessoas precisam ler o meu livro :) E também, temos de nos certificar que as gems que as pessoas precisam usar estão na versão 1.9. Eu não posso reclamar nenhuma glória neste aspeto; Eu estou bem atrás da onde deveria estar no teste e atualização das gems de outras pessoas. Pelo menos existe uma iniciativa em curso, onde se está sistematicamente melhorando esta situação: http://ruby19orbust.com

Eu tenho medo de que, com todo o respeito com o time de desenvolvimento do Ruby, eu não acredite muito na versão 1.8.7. É descrita como o passo para a versão 1.9, e que, juntamente com as dificuldades que a versão estável inicial 1.9 teve, se tornou um lugar seguro onde as pessoas querem usar algo da versão 1.9 mas não tem confiança nela. É um pouco triste.

Eu encorajaria bastante as pessoas a instalarem pelo menos a versão 1.9.1, e ver quais problemas que surgiram. Eu não acho que fazer a versão 1.8 mais parecida com a versão 1.9 seja a resposta. Envia a mensagem de que há uma razão para se evitar a versão 1.9 - e que embora tal possa ter sido verdade antes da versão 1.9.1, o que eu posso dizer agora é que é estável e sólida como qualquer outra versão que saiu antes desta.

RB: Você recomenda que os programadores de Ruby atualmente na versão 1.8.6 passem à frente da versão 1.8.7 e saltem para a versão 1.9.1? O que devem fazer os programadores que encontram plugins e gems que não funcionam na versão 1.9.1?

DB: Corrigi-los :-) A resposta a passar à frente da versão 1.8.7 é, no seu todo, sim. Talvez se tenha mais trabalho em conseguir que as coisas funcionem na versão 1.9.1 (pelas retro-incompatibilidades) mas você terá que fazer este trabalho de qualquer maneira se está pensando em ir para a versão 1.9. Eu acho que fazer duas transições implica incrementos menores, e qualquer programador e equipe terá que decidir se eles sentem que é mais administrável. E, para ser justo, devo dizer que foram expressas muitas opiniões, bastante diferentes sobre este assunto, e talvez seja boa idéia olhar para algumas delas.

Voltando à questão dos plugins e das gems: Tem sido uma transição longe de ser fácil, mas se tem dado ultimamente muita atenção (ver o link anterior). Não é inconcebível que um dado projeto acabe se decidindo por não fazer a transição. Mas a minha impressão é que cada vez mais as pessoas estão adotando a versão 1.9.

Acredita que, se algo está atrasando a versão 1.9 nesta altura, é talvez o fato do Ruby já ser muito bom antes da versão 1.9. :-) Ainda assim, mesmo que esta transição seja mais demorada que algumas das anteriores, eu encorajaria as pessoas a estarem mais atualizadas quanto as circunstâncias o permitirem. Ruby continuará sendo interessante, e você quer estar lá!

RB: David, obrigado por disponibilizar seu tempo para falar comigo sobre seu novo livro.

O David A. Black é um programador, consultor, formador, autor, organizador de eventos e conferencista internacionalmente ativo de Ruby e Rails. Ele programa em Ruby desde 2000. O David é um dos diretores fundadores do Ruby Central Inc., a companhia mãe da organização da conferência internacional de Ruby (RubyConf), um evento que ele está envolvido desde a sua estréia em 2001. É o autor do muito aclamado livro "Ruby for Rails" (Manning Publications 2006), tal como do novo recentemente publicado "The Well-Grounded Rubyist" (Manning, 2009). O seu novo livro é "Rails Choices", será publicado na Pragmatic Bookshelf no final de 2009.

David é o dono e diretor da consultora de Ruby/Rails Power and Light, LLC, através da qual ele conduz cursos de formação públicos e privados e oferece serviços de consultadoria e de revisão de código.

Manning Press foi generosa o suficiente para oferecer aos leitores da InfoQ um desconto de 40% no livro do David, The Well-Grounded Rubyist, para isso use o código "ruby40".

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2014 C4Media Inc.
Política de privacidade
BT