Upgrade to Pro — share decks privately, control downloads, hide ads and more …

A ferramenta ideal: uma questão de perspectiva

A ferramenta ideal: uma questão de perspectiva

Como aproveitar o que a sua ferramenta preferida tem de melhor, sem ter que lidar com o que ela tem de ruim? Esse talk é sobre uma experiência vivida durante o desenvolvimento de uma plataforma de ensino online para qual uma das soluções que se provou mais efetiva foi o uso não de uma única linguagem ou framework. Mas sim de tecnologias específicas para problemas específicos e pontuais. Um ponto importante e crítico dessa abordagem é a integração de todos esses micro sistemas.

Ricardo Valeriano

July 07, 2012
Tweet

More Decks by Ricardo Valeriano

Other Decks in Programming

Transcript

  1. List<Categoria> categorias = new ArrayList<Categoria>(); for(Produto p : produtos) categorias.add(p.getCategoria());

    for(int i=0;i<categorias.size();i++) { Categoria c = categorias.get(i); if(categorias.lastIndexOf(c)!=i) { categorias.remove(c); i--; } } double total = 0; for(Produto p : produtos) { total += p.getValor(); } Java Monday, August 6, 12
  2. List<Categoria> categorias = new ArrayList<Categoria>(); for(Produto p : produtos) categorias.add(p.getCategoria());

    for(int i=0;i<categorias.size();i++) { Categoria c = categorias.get(i); if(categorias.lastIndexOf(c)!=i) { categorias.remove(c); i--; } } double total = 0; for(Produto p : produtos) { total += p.getValor(); } Java realm ente, é dem ais! Monday, August 6, 12
  3. unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas

    << produto.categoria end end Ruby Monday, August 6, 12
  4. unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas

    << produto.categoria end end Ruby Monday, August 6, 12
  5. Java Set categorias = new HashSet(); for(Produto p : produtos)

    cat.add(p.categoria()); double total = 0; for(Produto p : produtos) total += p.valor(); Monday, August 6, 12
  6. Scala class Compra() { lazy val produtos = Produtos.all }

    BONUS ROUND: public lazy! Monday, August 6, 12
  7. Scala class Compra() { lazy val produtos = Produtos.all }

    class Compra(produtos:List[Produto]) { } BONUS ROUND: public lazy! Monday, August 6, 12
  8. Scala class Compra() { lazy val produtos = Produtos.all }

    class Compra(produtos:List[Produto]) { } class Compra(val produtos:List[Produto]) { } BONUS ROUND: IMUTAVEL! BONUS ROUND: public lazy! Monday, August 6, 12
  9. Scala class Compra() { lazy val produtos = Produtos.all }

    class Compra(produtos:List[Produto]) { } class Compra(val produtos:List[Produto]) { } class Compra(var produtos:List[Produto]) { } BONUS ROUND: IMUTAVEL! BONUS ROUND: public vars! BONUS ROUND: public lazy! Monday, August 6, 12
  10. O que buscamos em uma linguagem? Poder o que posso

    fazer? Expressividade como posso fazer? Monday, August 6, 12
  11. O que buscamos em uma linguagem? Poder o que posso

    fazer? Expressividade como posso fazer? Monday, August 6, 12
  12. Usei o cartão de crédito da minha mãe pois estava

    sem dinheiro. Monday, August 6, 12
  13. Usei o cartão de crédito da minha mãe pois estava

    sem dinheiro. + 20 sílabas Monday, August 6, 12
  14. I’ve used my mom’s credit card ‘cause I had no

    money. + 17 sílabas Monday, August 6, 12
  15. Súmemo jão. Mó perreio! Utilizei do cartão da senhora minha

    mãe, certo? Prá adquirir uns bens, na humildade mêmo, tá ligado? Monday, August 6, 12
  16. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end fonte pequena? Monday, August 6, 12
  17. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end agora sim? fonte 16 Monday, August 6, 12
  18. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... Monday, August 6, 12
  19. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... Monday, August 6, 12
  20. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... Monday, August 6, 12
  21. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... Monday, August 6, 12
  22. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... Monday, August 6, 12
  23. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12
  24. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12
  25. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12
  26. def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name

    == 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12
  27. Muito if? Ruby? Java? C++? C#? Scala? JavaScript? Basic? A

    nova linguagem do mês? Monday, August 6, 12
  28. ‘o teu “overuse” é muito bom prá você mas a

    desgraça dos outros’ Jay Fields Monday, August 6, 12
  29. Seja o principal crítico de suas escolhas (sugestão para o

    bom programador) Monday, August 6, 12
  30. ‘Quando quebra o projeto em vários, fica mais fácil de

    ver que para uma parte do projeto Alberto (oderski) Souza uma linguagem é mais interessante’ Monday, August 6, 12
  31. require "sinatra" require "json" Sequel.connect ENV["DATABASE_URL"] require "interest" get "/"

    do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response params end def ok_response(params) respond_with params end def error_response(params) respond_with(params, { errors:["unable to set up interest"] }) end def respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})" end interestie Monday, August 6, 12
  32. require "sinatra" require "json" Sequel.connect ENV["DATABASE_URL"] require "interest" get "/"

    do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response params end def ok_response(params) respond_with params end def error_response(params) respond_with(params, { errors:["unable to set up interest"] }) end def respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})" end interestie Monday, August 6, 12
  33. Quando não usar o Rails? Quem melhor que o José

    Valim para dizer? Monday, August 6, 12
  34. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor exercícios RoR Monday, August 6, 12
  35. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor exercícios RoR + 1 projeto scala + play Monday, August 6, 12
  36. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor exercícios RoR + 1 projeto scala + play mountable engine RoR Monday, August 6, 12
  37. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12
  38. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12
  39. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor pagamentos java analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12
  40. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor pagamentos java analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12
  41. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12
  42. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12
  43. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12
  44. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12
  45. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12
  46. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12
  47. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12
  48. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel sugest java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12
  49. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12
  50. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12
  51. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12
  52. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql Monday, August 6, 12
  53. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis Monday, August 6, 12
  54. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr Monday, August 6, 12
  55. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12
  56. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12
  57. alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby

    gnarus java + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12
  58. Reparou? RoR ruby java + RoR sinatra + sequel RoR

    sinatra RoR mountable engine RoR RoR alunos java + vraptor alumni.caelum.com.br ondetrabalhar.com gnarus java + vraptor casa do código java métricas java + octave interestie sugest java promo analisador 1 analisador 2 java exercícios + 1 projeto scala + play + 6 projetos + 1 ‘página’ js aws tickets + projetos mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql pagamentos RoR sinatra + sequel postgresql Monday, August 6, 12
  59. Reparou? RoR ruby java + RoR sinatra + sequel RoR

    sinatra RoR mountable engine RoR RoR alunos java + vraptor alumni.caelum.com.br ondetrabalhar.com gnarus java + vraptor casa do código java métricas java + octave interestie sugest java promo analisador 1 analisador 2 java exercícios + 1 projeto scala + play + 6 projetos + 1 ‘página’ js aws tickets + projetos mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql pagamentos RoR sinatra + sequel postgresql Monday, August 6, 12
  60. Domine sua linguagem (sugestão para o bom programador) api/framework a

    ponto de criticar os pontos negativos Monday, August 6, 12
  61. Domine suas escolhas para não ser dominado por elas. (sugestão

    para o bom programador) @sr_valeriano Monday, August 6, 12
  62. Domine suas escolhas para não ser dominado por elas. (sugestão

    para o bom programador) Obrigado! @sr_valeriano Monday, August 6, 12