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

A linguagem mais legal do mundo

A linguagem mais legal do mundo

A melhor linguagem do mundo / Guilherme Silveira e Ricardo Valeriano
Que tal a produtividade da linguagem que você mais gosta com garantias de uma nova versão de uma lib não quebrará tão facilmente seu código? Ainda com uma sintaxe mais limpa, mais concisa, menos poluída, mais gostosa? Se beneficiar das bibliotecas existentes ou criar a sua própria? Trabalhar em OO, pseudo-OO, pseudo-funcional ou funcional? Nesse talk queremos mostrar como o conhecimento sobre essa linguagem espetacular vai turbinar a qualidade do software produzido por você e sua equipe. Ou não.

Ricardo Valeriano

April 07, 2012
Tweet

More Decks by Ricardo Valeriano

Other Decks in Programming

Transcript

  1. Java 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--; } } Monday, August 6, 12
  2. Java 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(); } Monday, August 6, 12
  3. Java realmente, é demais! 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(); } Monday, August 6, 12
  4. Ruby unicas = [] for produto in produtos unless(unicas.include? produto.categoria)

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

    unicas << produto.categoria end end Monday, August 6, 12
  6. 1. domine sua api (versus não seja dominado) sugestões para

    um bom programador Monday, August 6, 12
  7. 1. domine sua api (versus não seja dominado) sugestões para

    um bom programador Monday, August 6, 12
  8. Java 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(); } Monday, August 6, 12
  9. Java 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(); } Monday, August 6, 12
  10. 2. domine sua api (versus não seja dominado) sugestões para

    um bom programador Monday, August 6, 12
  11. 2. domine sua api (versus não seja dominado) sugestões para

    um bom programador Monday, August 6, 12
  12. 1 e 2. domine sua api 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
  13. 1 e 2. domine sua api Java Set categorias =

    new HashSet(); for(Produto p : produtos) cat.add(p.categoria()); double total = 0; for(Produto p : produtos) total += p.valor(); ainda dá para “melhorar” Monday, August 6, 12
  14. Scala class Compra() { lazy val produtos = Produtos.all }

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

    class Compra(produtos:List[Produto]) { } BONUS ROUND: public lazy! Monday, August 6, 12
  16. 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
  17. 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
  18. O que buscamos numa linguagem? • poderosa! (o que POSSO

    fazer?) • expressiva! (COMO posso fazer?) Monday, August 6, 12
  19. O que buscamos numa linguagem? • poderosa! (o que POSSO

    fazer?) • expressiva! (COMO posso fazer?) Monday, August 6, 12
  20. O que buscamos numa linguagem? • poderosa! (o que POSSO

    fazer?) • expressiva! (COMO posso fazer?) Monday, August 6, 12
  21. Usei o cartão de crédito da minha mãe pois estava

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

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

    money. +17 sílabas Monday, August 6, 12
  24. Aí Jão, tava no veneno tá ligado? Saquei do cartão

    da véia prá adquirir uns bens, na humildade mêmo. Monday, August 6, 12
  25. Então o que queremos? • + Expressividade • + Poder

    • + Concisão Monday, August 6, 12
  26. ‘i don’t need more random boolean conditional constructs because thats

    not what is improving our code quality’ @product.andand.category zoado né? evan phoenix Monday, August 6, 12
  27. ‘i don’t need more random boolean conditional constructs because thats

    not what is improving our code quality’ @product.andand.category zoado né? evan phoenix verdadeiro Monday, August 6, 12
  28. ‘i don’t need more random boolean conditional constructs because thats

    not what is improving our code quality’ @product.andand.category zoado né? evan phoenix verdadeiro e falso Monday, August 6, 12
  29. não é um random boolean conditional é o básico de

    uma mônada de funcional Monday, August 6, 12
  30. não é um random boolean conditional é o básico de

    uma mônada de funcional products.map(_.category) (0 ou +) Monday, August 6, 12
  31. não é um random boolean conditional é o básico de

    uma mônada de funcional products.map(_.category) (0 ou +) product.map(_.category) (0 ou 1) Monday, August 6, 12
  32. não é um random boolean conditional é o básico de

    uma mônada de funcional products.map(_.category) (0 ou +) product.map(_.category) (0 ou 1) Quem ganha? Ninguém. os dois estão certos! um no imperativo, outro no funcional. Monday, August 6, 12
  33. se sim: de TODAS as INFINITAS possibilidades, em 100 anos

    de computação... ENCONTRAMOS: Monday, August 6, 12
  34. é a mesma coisa que dizer que seu marido/sua esposa

    é a melhor de todos os tempos Monday, August 6, 12
  35. é a mesma coisa que dizer que seu marido/sua esposa

    é a melhor de todos os tempos Monday, August 6, 12
  36. ‘Python and Ruby provide almost the same power to the

    programmer. Instead of emphasizing the what, I want to emphasize the how part: how we feel while programming’ matz Monday, August 6, 12
  37. ‘o teu overuse é muito bom prá você mas a

    desgraça dos outros’ jay fields Monday, August 6, 12
  38. quem melhor que o Valim pra dizer quando usar e

    quando NÃO usar rails? Monday, August 6, 12
  39. quem melhor que a Abril pra dizer quando usar e

    quando NÃO usar REST? Monday, August 6, 12
  40. ‘Quando voce quebra o projeto em vários, fica muito mais

    fácil de ver que para uma parte do projeto uma linguagem é mais interessante’ alberto(oderski)souza Monday, August 6, 12
  41. martin fowler “since most developers aren't that good (it's rumored

    that almost 50% are below average) we need to direct the way they do things” COMPLAINT: you can't foolproof anything, because fools are ingenious and will figure out how to abuse Monday, August 6, 12
  42. martin fowler “developers are responsible professionals and so should be

    given the freedom to do whatever they need to do” COMPLAINT: elitist attitude that can only be properly used by the upper quartile of software developers Monday, August 6, 12
  43. martin fowler ‘Often people are directing in some cases and

    enabling in others’ Monday, August 6, 12
  44. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) Monday, August 6, 12
  45. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) analisador 1 (ruby/sinatra/redis) Monday, August 6, 12
  46. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) Monday, August 6, 12
  47. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) template (ruby/rails) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) Monday, August 6, 12
  48. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) template (ruby/rails) +3 projetos (ruby/rails) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) Monday, August 6, 12
  49. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) template (ruby/rails) +3 projetos (ruby/rails) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) +1 “página” js Monday, August 6, 12
  50. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) template (ruby/rails) +3 projetos (ruby/rails) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) +1 “página” js casa do codigo (scala) Monday, August 6, 12
  51. baseado nisso gnarus (scala) pagamento (scala) alunos (java) exercicios (ruby/rails)

    ex-alunos (java) vagas (ruby/solr) template (ruby/rails) +3 projetos (ruby/rails) analisador 1 (ruby/sinatra/redis) analisador 2 (java/ai) +1 “página” js casa do codigo (scala) aws tickets (ruby) Monday, August 6, 12
  52. 1. (revisitada) domine sua linguagem a ponto de criticar pontos

    negativos dela seja ela java, ruby, scala, portugues, coreano etc Monday, August 6, 12
  53. todas são boas* * salvo ‘brainfuck’ boa é contextual, boa

    é pessoal, boa é temporal. Monday, August 6, 12