O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
A Ferramenta Idealuma questão de perspectiva
A Ferramenta Idealuma questão de perspectiva
A Ferramenta Idealuma questão de perspectiva
RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, java, javascript, ios
GuilhermeSilveira@guilhermecaelumgithub.com/caelum
Não é especificamentesobre Ruby =(
TemÇo
Não tem código =(
Mentira, tem maspouquinho =(
QMX, miseravão duma figa.
Java é D+
Java é D+
Java
JavaList<Categoria> categorias = newArrayList<Categoria>();for(Produto p : produtos)categorias.add(p.getCategoria());for(i...
JavaList<Categoria> categorias = newArrayList<Categoria>();for(Produto p : produtos)categorias.add(p.getCategoria());for(i...
Ruby é D+
Ruby é D+
Rubyunicas = []for produto in produtos  unless(unicas.include? produto.categoria)    unicas << produto.categoria  endend
Rubyunicas = []for produto in produtos  unless(unicas.include? produto.categoria)    unicas << produto.categoria  endend
Ruby
Rubyunicas = produtos.map{|p| p.categoria}.uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
Rubyunicas = produtos.map{|p| p.categoria}.uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
Rubyunicas = produtos.map(&:categoria).uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
GORDOY U NO USE THA API?
Domine sua api  (sugestão para o bom programador)
Rubyunicos = produtos.map(&:categoria).uniq
Rubyunicos = produtos.map(&:categoria).uniqtotal   = produtos.map(&:valor).inject(:+)
Domine sua api  (sugestão para o bom programador)
JavaSet categorias = new HashSet();for(Produto p : produtos) cat.add(p.categoria());double total = 0;for(Produto p : produ...
Rubyunicos = produtos.map(&:categoria).uniqtotal   = produtos.map(&:valor).inject(:+)
Rubyunicos = produtos.map(&:categoria).uniqtotal   = produtos.map(&:valor).inject(:+) Ruby é D+
Rubyunicos = produtos.map(&:categoria).uniq                                    e,                                  ttotal ...
Scalaprodutos.map(_.categoria).uniqueprodutos.map(_.valor).sum
Scalaprodutos.map(_.categoria).uniqueprodutos.map(_.valor).sum                             !      ais                     ...
Scalaclass Compra() {  lazy val produtos = Produtos.all}
Scalaclass Compra() {  lazy val produtos = Produtos.all}           BONUS ROUND: public lazy!
Scalaclass Compra() {  lazy val produtos = Produtos.all}           BONUS ROUND: public lazy!class Compra(produtos:List[Pro...
Scalaclass Compra() {  lazy val produtos = Produtos.all}           BONUS ROUND: public lazy!class Compra(produtos:List[Pro...
Scalaclass Compra() {  lazy val produtos = Produtos.all}           BONUS ROUND: public lazy!class Compra(produtos:List[Pro...
Scala rocks
Scala rocks      #fato
Scala rocks      #fatoObrigado
Scala rocks      #fatoObrigado     The End.
Scala rocks      #fatoObrigado     The End.
RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, java, javascript, ios
O que buscamos em uma  linguagem?Poder o que posso fazer?Expressividade como posso fazer?
O que buscamos em uma  linguagem?Poder o que posso fazer?Expressividade como posso fazer?
O que expressa mais,de maneira mais breve?
PORTUGUÊS (PT-BR)
Usei o cartão de crédito daminha mãe pois estavasem dinheiro.
Usei o cartão de crédito daminha mãe pois estava as                         absem dinheiro.          íls                  ...
INGLÊS (EN-US)
I’ve used my mom’s creditcard ‘cause I had nomoney.
I’ve used my mom’s creditcard ‘cause I had no      as                       abmoney.               íl   s                 ...
MANÊS?
Súmemo jão. Mó perreio!Utilizei do cartão dasenhora minha mãe, certo?Prá adquirir uns bens, nahumildade mêmo, táligado?
COREANO
A PRIMEIRA VISTA, QUAL VOCÊ PREFERE?
돈 없어서 엄아 카드    썼다.
돈 없어서 엄아 카드 <              < <    썼다.    AL                 s               M ba              R a             O íl        ...
Expressividade           엄카 썼다.
Expressividade           엄카 썼다.         s                         a                        b íd o                       a ...
Coreanomenos palavrasmais expressividademais poder
Coreanomenos palavrasmais expressividademais poder
LET’S USE LEARNKOREAN NOOOOOW!
안녕~ 집에 갈래?
‘A medida que diminuem  as palavras, aumenta a           ambiguidade’            José Valim - GuruSP
Então... o que queremos  afinal?MAIS poderMAIS expressividadeMAIS concisão
Então... o que queremos  afinal?MAIS poderMAIS expressividadeMAIS concisão
‘you can accomplish more   in smaller yet readable                     code’                 Matz (on Ruby)
Não é só escrever           menos
Talvez o código maissimples, seja melhor.
‘Simplicity Aint Easy’             Stuart Halloway
Contexto   Poder,   Expressividade,   Concisãosão contextuais
‘humans requiremore sophisticated tools            to program’                   Matz
Quem acha a sualinguagem perfeita?
As ferramentasmudam com otempo, elas evoluem.
Linguagens eescolhas possuemdesvantagens. #fato
(re) Conheça bem asdesvantagens.  (sugestão para o bom programador)
Para evitar abusardelas.  (sugestão para o bom programador)
MySQL   as queueNeo4J   as crud storage
O mais importanteem um projeto éescrever códigobonito.
O mais importanteem um projeto éescrever códigobom.
?
O que nãoqueremos?
      def _read_attribute(attr_name)        attr_name = attr_name.to_s        attr_name = self.class.primary_key if attr_n...
      def _read_attribute(attr_name)        attr_name = attr_name.to_s        attr_name = self.class.primary_key if attr_n...
for_attribute(attr_na  agora sim? fonte mil
23...      def _read_attribute(attr_name)        attr_name = attr_name.to_s        attr_name = self.class.primary_key if a...
23...      def _read_attribute(attr_name)        attr_name = attr_name.to_s        attr_name = self.class.primary_key if a...
mas e se...                       23...      def _read_attribute(attr_name)        attr_name = attr_name.to_s        attr_...
mas eese...                                mas se...                         23...      def _read_attribute(attr_name)    ...
mas eese...                                mas ese...                        23...                                 mas se....
mas eese...                                mas ese...                        23...                                 mas ese...
mas eese...                                mas ese...                        23...                                 mas ese...
mas eese...                                mas ese...                        23...                                 mas ese...
mas eese...                                mas ese...                        23...                                 mas ese...
Conciso?
Muito if?
Ruby?      C++?        Java?   Scala?Muito if?Basic?C#?       JavaScript?
Ruby?      C++?        Java?   Scala?Muito if?Basic?C#?       JavaScript? A nova linguagem do mês?
NovaLinguagem
NovaLinguagemnovo uso idiomáticonovo mindset
LET’S USE SCALAFOR ALL THE THINGS!
Para evitar abusardas desvantagens.  (sugestão para o bom programador)
scala   para crud
NovaLinguagemnovo uso idiomáticonovo mindset
NovaLinguagemnovo uso idiomáticonovo mindsetmesmos erros
‘o teu “overuse” é muito bomprá você mas a desgraça dos                      outros’                       Jay Fields
Quem está hámais de 2 anos nomesmo projeto?
‘pfvr néam? amanhã você              vai sair do                projeto!’              Random Scumbag
Seja o principalcrítico de suasescolhas  (sugestão para o bom programador)
‘Quando quebra o projeto em vários, fica mais fácil de ver que para uma                    parte do projeto                ...
require "sinatra"require "json"                             interestieSequel.connect ENV["DATABASE_URL"]require "interest"...
require "sinatra"require "json"                             interestieSequel.connect ENV["DATABASE_URL"]require "interest"...
Projetos pequenos   múltiplos projetos
Quando não usar o Rails?Quem melhor que o José Valim para dizer?
Não escolha semprea sua linguagempreferida.  (sugestão para o bom programador)
Caelum Online(online.caelum.com.br)
Baseado nisso
Baseado nisso      alunos    java + vraptor
Baseado nissoalumni.caelum.com.br      RoR                alunos                       java + vraptor
Baseado nisso  alumni.caelum.com.br         RoR               alunos                         java + vraptorondetrabalhar.c...
Baseado nisso  alumni.caelum.com.br         RoR               alunos                         java + vraptor               ...
Baseado nisso  alumni.caelum.com.br         RoR               alunos                         java + vraptor               ...
Baseado nisso  alumni.caelum.com.br            RoR            alunos                         java + vraptor               ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR                 alunos                              java + vraptor     ...
Baseado nisso  alumni.caelum.com.br            RoR            alunos                         java + vraptor               ...
Baseado nisso  alumni.caelum.com.br            RoR             alunos                          java + vraptor             ...
Baseado nisso  alumni.caelum.com.br            RoR             alunos                          java + vraptor             ...
Baseado nisso  alumni.caelum.com.br            RoR               alunos                            java + vraptor         ...
Baseado nisso  alumni.caelum.com.br            RoR               alunos                            java + vraptor         ...
Baseado nisso  alumni.caelum.com.br            RoR               alunos                            java + vraptor         ...
Baseado nisso  alumni.caelum.com.br                                         métricas            RoR               alunos  ...
Baseado nisso  alumni.caelum.com.br                                         métricas            RoR               alunos  ...
mysql                      Baseado nisso   alumni.caelum.com.br                 mysql                       métricas      ...
mysql                      Baseado nisso   alumni.caelum.com.br                 mysql                       métricas      ...
mysql                        Baseado nisso   alumni.caelum.com.br                   mysql                       métricas  ...
mysql                        Baseado nisso   alumni.caelum.com.br                              mysql                      ...
mysql                        Baseado nisso   alumni.caelum.com.br                              mysql                      ...
mysql                        Baseado nisso   alumni.caelum.com.br                              mysql                      ...
mysql                                 Reparou?   alumni.caelum.com.br                              mysql                  ...
mysql                                 Reparou?   alumni.caelum.com.br                              mysql                  ...
Domine sua linguagem   (sugestão para o bom programador)
Domine sua linguagemapi/framework a pontode criticar os pontosnegativos   (sugestão para o bom programador)
Domine outraslinguagens...TANTO quanto.   (sugestão para o bom programador)
Nenhuma linguagemou ([framework])é ruim  (sugestão para o bom programador)
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Nenhuma linguagemou ([framework])é ruim, salvo brain f*ck   (sugestão para o bom programador)
Todas são marotas * Contexto Pessoa Momento              * salvo brain f#ck
Domine suas escolhaspara não ser dominadopor elas.   (sugestão para o bom programador)         @sr_valeriano
Domine suas escolhaspara não ser dominadopor elas.   (sugestão para o bom programador)         Obrigado!         @sr_valer...
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
A ferramenta ideal: uma questão de perspectiva.
Próximos SlideShares
Carregando em…5
×

A ferramenta ideal: uma questão de perspectiva.

313 visualizações

Publicada em

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.

Publicada em: Tecnologia
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

A ferramenta ideal: uma questão de perspectiva.

  1. 1. A Ferramenta Idealuma questão de perspectiva
  2. 2. A Ferramenta Idealuma questão de perspectiva
  3. 3. A Ferramenta Idealuma questão de perspectiva
  4. 4. RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, java, javascript, ios
  5. 5. GuilhermeSilveira@guilhermecaelumgithub.com/caelum
  6. 6. Não é especificamentesobre Ruby =(
  7. 7. TemÇo
  8. 8. Não tem código =(
  9. 9. Mentira, tem maspouquinho =(
  10. 10. QMX, miseravão duma figa.
  11. 11. Java é D+
  12. 12. Java é D+
  13. 13. Java
  14. 14. JavaList<Categoria> categorias = newArrayList<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();}
  15. 15. JavaList<Categoria> categorias = newArrayList<Categoria>();for(Produto p : produtos)categorias.add(p.getCategoria());for(int i=0;i<categorias.size();i++) { Categoria c = categorias.get(i); e, t if(categorias.lastIndexOf(c)!=i) { n ! categorias.remove(c); i--; e s m ai }} l a mdouble total = 0; e e r dfor(Produto p : produtos) {} total += p.getValor(); é
  16. 16. Ruby é D+
  17. 17. Ruby é D+
  18. 18. Rubyunicas = []for produto in produtos unless(unicas.include? produto.categoria) unicas << produto.categoria endend
  19. 19. Rubyunicas = []for produto in produtos unless(unicas.include? produto.categoria) unicas << produto.categoria endend
  20. 20. Ruby
  21. 21. Rubyunicas = produtos.map{|p| p.categoria}.uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
  22. 22. Rubyunicas = produtos.map{|p| p.categoria}.uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
  23. 23. Rubyunicas = produtos.map(&:categoria).uniqtotal = produtos.inject(0){|tot, p| tot + p.valor}
  24. 24. GORDOY U NO USE THA API?
  25. 25. Domine sua api (sugestão para o bom programador)
  26. 26. Rubyunicos = produtos.map(&:categoria).uniq
  27. 27. Rubyunicos = produtos.map(&:categoria).uniqtotal = produtos.map(&:valor).inject(:+)
  28. 28. Domine sua api (sugestão para o bom programador)
  29. 29. JavaSet categorias = new HashSet();for(Produto p : produtos) cat.add(p.categoria());double total = 0;for(Produto p : produtos) total += p.valor();
  30. 30. Rubyunicos = produtos.map(&:categoria).uniqtotal = produtos.map(&:valor).inject(:+)
  31. 31. Rubyunicos = produtos.map(&:categoria).uniqtotal = produtos.map(&:valor).inject(:+) Ruby é D+
  32. 32. Rubyunicos = produtos.map(&:categoria).uniq e, ttotal = produtos.map(&:valor).inject(:+) n ! e s lm ai a m e e Ruby é D+ r d é
  33. 33. Scalaprodutos.map(_.categoria).uniqueprodutos.map(_.valor).sum
  34. 34. Scalaprodutos.map(_.categoria).uniqueprodutos.map(_.valor).sum ! ais H á m e m t E
  35. 35. Scalaclass Compra() { lazy val produtos = Produtos.all}
  36. 36. Scalaclass Compra() { lazy val produtos = Produtos.all} BONUS ROUND: public lazy!
  37. 37. Scalaclass Compra() { lazy val produtos = Produtos.all} BONUS ROUND: public lazy!class Compra(produtos:List[Produto]) {}
  38. 38. Scalaclass Compra() { lazy val produtos = Produtos.all} BONUS ROUND: public lazy!class Compra(produtos:List[Produto]) {}class Compra(val produtos:List[Produto]) {} BONUS ROUND: IMUTAVEL!
  39. 39. Scalaclass Compra() { lazy val produtos = Produtos.all} BONUS ROUND: public lazy!class Compra(produtos:List[Produto]) {}class Compra(val produtos:List[Produto]) {} BONUS ROUND: IMUTAVEL!class Compra(var produtos:List[Produto]) {} BONUS ROUND: public vars!
  40. 40. Scala rocks
  41. 41. Scala rocks #fato
  42. 42. Scala rocks #fatoObrigado
  43. 43. Scala rocks #fatoObrigado The End.
  44. 44. Scala rocks #fatoObrigado The End.
  45. 45. RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, java, javascript, ios
  46. 46. O que buscamos em uma linguagem?Poder o que posso fazer?Expressividade como posso fazer?
  47. 47. O que buscamos em uma linguagem?Poder o que posso fazer?Expressividade como posso fazer?
  48. 48. O que expressa mais,de maneira mais breve?
  49. 49. PORTUGUÊS (PT-BR)
  50. 50. Usei o cartão de crédito daminha mãe pois estavasem dinheiro.
  51. 51. Usei o cartão de crédito daminha mãe pois estava as absem dinheiro. íls 20 +
  52. 52. INGLÊS (EN-US)
  53. 53. I’ve used my mom’s creditcard ‘cause I had nomoney.
  54. 54. I’ve used my mom’s creditcard ‘cause I had no as abmoney. íl s 17 +
  55. 55. MANÊS?
  56. 56. Súmemo jão. Mó perreio!Utilizei do cartão dasenhora minha mãe, certo?Prá adquirir uns bens, nahumildade mêmo, táligado?
  57. 57. COREANO
  58. 58. A PRIMEIRA VISTA, QUAL VOCÊ PREFERE?
  59. 59. 돈 없어서 엄아 카드 썼다.
  60. 60. 돈 없어서 엄아 카드 < < < 썼다. AL s M ba R a O íl F s > > 2 > 1
  61. 61. Expressividade 엄카 썼다.
  62. 62. Expressividade 엄카 썼다. s a b íd o a u s íl r 4 em s e
  63. 63. Coreanomenos palavrasmais expressividademais poder
  64. 64. Coreanomenos palavrasmais expressividademais poder
  65. 65. LET’S USE LEARNKOREAN NOOOOOW!
  66. 66. 안녕~ 집에 갈래?
  67. 67. ‘A medida que diminuem as palavras, aumenta a ambiguidade’ José Valim - GuruSP
  68. 68. Então... o que queremos afinal?MAIS poderMAIS expressividadeMAIS concisão
  69. 69. Então... o que queremos afinal?MAIS poderMAIS expressividadeMAIS concisão
  70. 70. ‘you can accomplish more in smaller yet readable code’ Matz (on Ruby)
  71. 71. Não é só escrever menos
  72. 72. Talvez o código maissimples, seja melhor.
  73. 73. ‘Simplicity Aint Easy’ Stuart Halloway
  74. 74. Contexto Poder, Expressividade, Concisãosão contextuais
  75. 75. ‘humans requiremore sophisticated tools to program’ Matz
  76. 76. Quem acha a sualinguagem perfeita?
  77. 77. As ferramentasmudam com otempo, elas evoluem.
  78. 78. Linguagens eescolhas possuemdesvantagens. #fato
  79. 79. (re) Conheça bem asdesvantagens. (sugestão para o bom programador)
  80. 80. Para evitar abusardelas. (sugestão para o bom programador)
  81. 81. MySQL as queueNeo4J as crud storage
  82. 82. O mais importanteem um projeto éescrever códigobonito.
  83. 83. O mais importanteem um projeto éescrever códigobom.
  84. 84. ?
  85. 85. O que nãoqueremos?
  86. 86.       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?
  87. 87.       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
  88. 88. for_attribute(attr_na agora sim? fonte mil
  89. 89. 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
  90. 90. 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
  91. 91. mas e se... 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
  92. 92. mas eese... mas se... 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
  93. 93. mas eese... mas ese... 23... mas se...      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
  94. 94. mas eese... mas ese... 23... mas ese... mas se...      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
  95. 95. mas eese... mas ese... 23... mas ese... mas ese... mas se...      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
  96. 96. mas eese... mas ese... 23... mas ese... mas ese... mas se...      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
  97. 97. mas eese... mas ese... 23... mas ese... mas ese... mas ese... mas se...      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
  98. 98. Conciso?
  99. 99. Muito if?
  100. 100. Ruby? C++? Java? Scala?Muito if?Basic?C#? JavaScript?
  101. 101. Ruby? C++? Java? Scala?Muito if?Basic?C#? JavaScript? A nova linguagem do mês?
  102. 102. NovaLinguagem
  103. 103. NovaLinguagemnovo uso idiomáticonovo mindset
  104. 104. LET’S USE SCALAFOR ALL THE THINGS!
  105. 105. Para evitar abusardas desvantagens. (sugestão para o bom programador)
  106. 106. scala para crud
  107. 107. NovaLinguagemnovo uso idiomáticonovo mindset
  108. 108. NovaLinguagemnovo uso idiomáticonovo mindsetmesmos erros
  109. 109. ‘o teu “overuse” é muito bomprá você mas a desgraça dos outros’ Jay Fields
  110. 110. Quem está hámais de 2 anos nomesmo projeto?
  111. 111. ‘pfvr néam? amanhã você vai sair do projeto!’ Random Scumbag
  112. 112. Seja o principalcrítico de suasescolhas (sugestão para o bom programador)
  113. 113. ‘Quando quebra o projeto em vários, fica mais fácil de ver que para uma parte do projeto uma linguagem é mais interessante’ Alberto (oderski) Souza
  114. 114. require "sinatra"require "json" interestieSequel.connect ENV["DATABASE_URL"]require "interest"get "/" do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response paramsenddef ok_response(params) respond_with paramsenddef error_response(params) respond_with(params, { errors:["unable to set up interest"] })enddef respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})"end
  115. 115. require "sinatra"require "json" interestieSequel.connect ENV["DATABASE_URL"]require "interest"get "/" do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response paramsenddef ok_response(params) respond_with paramsenddef error_response(params) respond_with(params, { errors:["unable to set up interest"] })enddef respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})"end
  116. 116. Projetos pequenos múltiplos projetos
  117. 117. Quando não usar o Rails?Quem melhor que o José Valim para dizer?
  118. 118. Não escolha semprea sua linguagempreferida. (sugestão para o bom programador)
  119. 119. Caelum Online(online.caelum.com.br)
  120. 120. Baseado nisso
  121. 121. Baseado nisso alunos java + vraptor
  122. 122. Baseado nissoalumni.caelum.com.br RoR alunos java + vraptor
  123. 123. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptorondetrabalhar.com ruby
  124. 124. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby
  125. 125. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby exercícios RoR
  126. 126. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby exercícios RoR+ 1 projeto scala + play
  127. 127. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby exercícios RoR+ 1 projeto scala + play mountable engine RoR
  128. 128. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby exercícios RoR+ 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  129. 129. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby analisador 1 sinatra exercícios RoR+ 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  130. 130. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby pagamentos java analisador 1 sinatra exercícios RoR+ 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  131. 131. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby pagamentos java analisador 1 sinatra exercícios RoR+ 1 projeto scala + play mountable engine + 1 ‘página’ RoR + 6 projetos js RoR
  132. 132. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby pagamentos java analisador 1 sinatra exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ RoR + 6 projetos js RoR
  133. 133. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor ruby pagamentos java analisador 1 sinatra exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ RoR + 6 projetos js RoR
  134. 134. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor rubycasa do código pagamentos java java + RoR analisador 1 sinatra exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ RoR + 6 projetos js RoR
  135. 135. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor rubycasa do código pagamentos java java + RoR analisador 1 sinatra exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  136. 136. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor rubycasa do código pagamentos java java + RoR interestie analisador 1 sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  137. 137. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor rubycasa do código pagamentos java java + RoR interestie analisador 1 sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  138. 138. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarusondetrabalhar.com scala + vraptor rubycasa do código pagamentos java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  139. 139. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus sugestondetrabalhar.com scala + vraptor java rubycasa do código pagamentos java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  140. 140. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus sugestondetrabalhar.com scala + vraptor java ruby promocasa do código pagamentos RoR java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  141. 141. Baseado nisso alumni.caelum.com.br métricas RoR alunos java + octave java + vraptor gnarus sugestondetrabalhar.com scala + vraptor java ruby promocasa do código pagamentos RoR java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  142. 142. Baseado nisso alumni.caelum.com.br métricas RoR alunos java + octave java + vraptor gnarus sugestondetrabalhar.com scala + vraptor java ruby promocasa do código pagamentos RoR java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  143. 143. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave java + vraptor mysql gnarus sugestondetrabalhar.com scala + vraptor java ruby mysql promomysqlcasa do código pagamentos RoR java java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  144. 144. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor mysql gnarus sugestondetrabalhar.com scala + vraptor java ruby mysql promomysqlcasa do código pagamentos RoR java redis java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  145. 145. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com scala + vraptor java ruby mysql promomysqlcasa do código pagamentos RoR java redis java + RoR interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios RoR analisador 2+ 1 projeto java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js RoR RoR
  146. 146. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com scala + vraptor java ruby postgresql mysql promomysqlcasa do código pagamentos RoR java redis java + RoR postgresql interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios postgresql RoR analisador 2 postgresql+ 1 projeto postgresql java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js postgresql RoR RoR postgresql
  147. 147. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com scala + vraptor java ruby postgresql mysql promomysqlcasa do código pagamentos RoR java redis java + RoR postgresql interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios postgresql RoR analisador 2 postgresql+ 1 projeto postgresql java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js postgresql RoR RoR postgresql
  148. 148. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com java + vraptor java ruby postgresql mysql promomysqlcasa do código pagamentos RoR java redis java + RoR postgresql interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios postgresql RoR analisador 2 postgresql+ 1 projeto postgresql java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js postgresql RoR RoR postgresql
  149. 149. mysql Reparou? alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com java + vraptor java ruby postgresql mysql promomysqlcasa do código pagamentos RoR java redis java + RoR postgresql interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios postgresql RoR analisador 2 postgresql+ 1 projeto postgresql java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js postgresql RoR RoR postgresql
  150. 150. mysql Reparou? alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptorsolr mysql gnarus sugestondetrabalhar.com java + vraptor java ruby postgresql mysql promomysqlcasa do código pagamentos RoR java redis java + RoR postgresql interestie analisador 1 + projetos sinatra + sequel sinatra sinatra + sequel exercícios postgresql RoR analisador 2 postgresql+ 1 projeto postgresql java scala + play mountable engine + 1 ‘página’ aws tickets RoR + 6 projetos js postgresql RoR RoR postgresql
  151. 151. Domine sua linguagem (sugestão para o bom programador)
  152. 152. Domine sua linguagemapi/framework a pontode criticar os pontosnegativos (sugestão para o bom programador)
  153. 153. Domine outraslinguagens...TANTO quanto. (sugestão para o bom programador)
  154. 154. Nenhuma linguagemou ([framework])é ruim (sugestão para o bom programador)
  155. 155. ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
  156. 156. Nenhuma linguagemou ([framework])é ruim, salvo brain f*ck (sugestão para o bom programador)
  157. 157. Todas são marotas * Contexto Pessoa Momento * salvo brain f#ck
  158. 158. Domine suas escolhaspara não ser dominadopor elas. (sugestão para o bom programador) @sr_valeriano
  159. 159. Domine suas escolhaspara não ser dominadopor elas. (sugestão para o bom programador) Obrigado! @sr_valeriano

×