SlideShare uma empresa Scribd logo
1 de 166
A Ferramenta Ideal
uma questão de perspectiva
A Ferramenta Ideal
uma questão de perspectiva
A Ferramenta Ideal
uma questão de perspectiva
Ricardo
Valeriano
@sr_valeriano
github.com/ricardovaleriano




ruby, java, javascript, ios
Guilherme
Silveira
@guilhermecaelum
github.com/caelum
Não é especificamente
sobre Ruby =(
TemÇo
Não tem código =(
Mentira, tem mas
pouquinho =(
QMX, miseravão duma figa.
Java é D+
Java é D+
Java
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();
}
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);
                                   e,
                                 t
    if(categorias.lastIndexOf(c)!=i) {
                                n !
        categorias.remove(c); i--;
                               e s
                              m ai
    }
}                            l
                            a m
double total = 0;
                           e e
                          r d
for(Produto p : produtos) {

}
    total += p.getValor();  é
Ruby é D+
Ruby é D+
Ruby

unicas = []
for produto in produtos
  unless(unicas.include? produto.categoria)
    unicas << produto.categoria
  end
end
Ruby

unicas = []
for produto in produtos
  unless(unicas.include? produto.categoria)
    unicas << produto.categoria
  end
end
Ruby
Ruby


unicas = produtos.map{|p| p.categoria}.uniq

total = produtos.inject(0){|tot, p| tot + p.valor}
Ruby


unicas = produtos.map{|p| p.categoria}.uniq

total = produtos.inject(0){|tot, p| tot + p.valor}
Ruby


unicas = produtos.map(&:categoria).uniq

total = produtos.inject(0){|tot, p| tot + p.valor}
GORDO




Y U NO USE THA API?
Domine sua api
  (sugestão para o bom programador)
Ruby


unicos = produtos.map(&:categoria).uniq
Ruby


unicos = produtos.map(&:categoria).uniq

total   = produtos.map(&:valor).inject(:+)
Domine sua api
  (sugestão para o bom programador)
Java

Set categorias = new HashSet();
for(Produto p : produtos) cat.add(p.categoria());

double total = 0;
for(Produto p : produtos) total += p.valor();
Ruby


unicos = produtos.map(&:categoria).uniq

total   = produtos.map(&:valor).inject(:+)
Ruby


unicos = produtos.map(&:categoria).uniq

total   = produtos.map(&:valor).inject(:+)




 Ruby é D+
Ruby


unicos = produtos.map(&:categoria).uniq

                                    e,
                                  t
total = produtos.map(&:valor).inject(:+)
                                 n !
                               e s
                             lm ai
                           a m
                          e e
 Ruby é D+              r d
                            é
Scala

produtos.map(_.categoria).unique

produtos.map(_.valor).sum
Scala

produtos.map(_.categoria).unique

produtos.map(_.valor).sum
                             !      ais
                          H á
                                m
                            e m
                          t
                      E
Scala
class Compra() {
  lazy val produtos = Produtos.all
}
Scala
class Compra() {
  lazy val produtos = Produtos.all
}
           BONUS ROUND: public lazy!
Scala
class Compra() {
  lazy val produtos = Produtos.all
}
           BONUS ROUND: public lazy!
class Compra(produtos:List[Produto]) {
}
Scala
class Compra() {
  lazy val produtos = Produtos.all
}
           BONUS ROUND: public lazy!
class Compra(produtos:List[Produto]) {
}

class Compra(val produtos:List[Produto]) {
}
           BONUS ROUND: IMUTAVEL!
Scala
class 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!
Scala rocks
Scala rocks
      #fato
Scala rocks
      #fato
Obrigado
Scala rocks
      #fato
Obrigado
     The End.
Scala rocks
      #fato
Obrigado
     The End.
Ricardo
Valeriano
@sr_valeriano
github.com/ricardovaleriano




ruby, 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 da
minha mãe pois estava
sem dinheiro.
Usei o cartão de crédito da
minha mãe pois estava as
                         ab
sem dinheiro.          íls
                    20
                +
INGLÊS (EN-US)
I’ve used my mom’s credit
card ‘cause I had no
money.
I’ve used my mom’s credit
card ‘cause I had no      as
                       ab
money.               íl   s
                     17
                 +
MANÊS?
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?
COREANO
A PRIMEIRA VISTA, QUAL VOCÊ PREFERE?
돈 없어서 엄아 카드
    썼다.
돈 없어서 엄아 카드 <
              < <
    썼다.    AL
                 s
               M ba
              R a
             O íl
            F s
          >
         > 2
        > 1
Expressividade




           엄카 썼다.
Expressividade




           엄카 썼다.         s
                         a
                        b íd o
                       a u
                   s íl r
                 4 em
                     s
                  e
Coreano
menos palavras
mais expressividade
mais poder
Coreano
menos palavras
mais expressividade
mais poder
LET’S USE LEARN
KOREAN NOOOOOW!
안녕~ 집에 갈래?
‘A medida que diminuem
  as palavras, aumenta a
           ambiguidade’
            José Valim - GuruSP
Então... o que queremos
  afinal?

MAIS poder
MAIS expressividade
MAIS concisão
Então... o que queremos
  afinal?

MAIS poder
MAIS expressividade
MAIS concisão
‘you can accomplish more
   in smaller yet readable
                     code’
                 Matz (on Ruby)
Não é só escrever
           menos
Talvez o código mais
simples, seja melhor.
‘Simplicity Ain't Easy’


             Stuart Halloway
Contexto
   Poder,
   Expressividade,
   Concisão

são contextuais
‘humans require
more sophisticated tools
            to program’
                   Matz
Quem acha a sua
linguagem perfeita?
As ferramentas
mudam com o
tempo, elas evoluem.
Linguagens e
escolhas possuem
desvantagens. #fato
(re) Conheça bem as
desvantagens.
  (sugestão para o bom programador)
Para evitar abusar
delas.
  (sugestão para o bom programador)
MySQL   as queue
Neo4J   as crud storage
O mais importante
em um projeto é
escrever código
bonito.
O mais importante
em um projeto é
escrever código
bom.
?
O que não
queremos?
      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?
      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
for_att
ribute(
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 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...


      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
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
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
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
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
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
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
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
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?
Nova
Linguagem
Nova
Linguagem
novo uso idiomático
novo mindset
LET’S USE SCALA
FOR ALL THE THINGS!
Para evitar abusar
das desvantagens.
  (sugestão para o bom programador)
scala   para crud
Nova
Linguagem
novo uso idiomático
novo mindset
Nova
Linguagem
novo uso idiomático
novo mindset
mesmos erros
‘o teu “overuse” é muito bom
prá você mas a desgraça dos
                      outros’
                       Jay Fields
Quem está há
mais de 2 anos no
mesmo projeto?
‘pfvr néam? amanhã você
              vai sair do
                projeto!’
              Random Scumbag
Seja o principal
crítico de suas
escolhas
  (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
                                uma
                        linguagem é
                               mais
                       interessante’
                    Alberto (oderski) Souza
require "sinatra"
require "json"                             interestie
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
require "sinatra"
require "json"                             interestie
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
Projetos pequenos
   múltiplos projetos
Quando não usar o Rails?
Quem melhor que o José Valim para dizer?
Não escolha sempre
a sua linguagem
preferida.
  (sugestão para o bom programador)
Caelum Online
(online.caelum.com.br)
Baseado nisso
Baseado nisso
      alunos
    java + vraptor
Baseado nisso
alumni.caelum.com.br
      RoR                alunos
                       java + vraptor
Baseado nisso
  alumni.caelum.com.br
         RoR               alunos
                         java + vraptor

ondetrabalhar.com
      ruby
Baseado nisso
  alumni.caelum.com.br
         RoR               alunos
                         java + vraptor
                                            gnarus
ondetrabalhar.com                         scala + vraptor
      ruby
Baseado nisso
  alumni.caelum.com.br
         RoR               alunos
                         java + vraptor
                                            gnarus
ondetrabalhar.com                         scala + vraptor
      ruby




                                    exercícios
                                           RoR
Baseado nisso
  alumni.caelum.com.br
            RoR            alunos
                         java + vraptor
                                            gnarus
ondetrabalhar.com                         scala + vraptor
        ruby




                                    exercícios
                                           RoR
+ 1 projeto
 scala + play
Baseado nisso
  alumni.caelum.com.br
            RoR                 alunos
                              java + vraptor
                                                 gnarus
ondetrabalhar.com                              scala + vraptor
        ruby




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




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




                                                                 analisador 1
                                                                    sinatra

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

                       pagamentos
                               java
                                                                 analisador 1
                                                                    sinatra

                                         exercícios
                                                RoR
+ 1 projeto
 scala + play     mountable engine                               + 1 ‘página’
                        RoR
                                                                         js
Baseado nisso
  alumni.caelum.com.br
            RoR                 alunos
                              java + vraptor
                                                 gnarus
ondetrabalhar.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
Baseado nisso
  alumni.caelum.com.br
            RoR                 alunos
                              java + vraptor
                                                 gnarus
ondetrabalhar.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
Baseado nisso
  alumni.caelum.com.br
            RoR                 alunos
                              java + vraptor
                                                 gnarus
ondetrabalhar.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
Baseado nisso
  alumni.caelum.com.br
            RoR                 alunos
                              java + vraptor
                                                 gnarus
ondetrabalhar.com                              scala + vraptor
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR            alunos
                         java + vraptor
                                            gnarus
ondetrabalhar.com                         scala + vraptor
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR             alunos
                          java + vraptor
                                             gnarus
ondetrabalhar.com                          scala + vraptor
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR             alunos
                          java + vraptor
                                             gnarus
ondetrabalhar.com                          scala + vraptor
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR               alunos
                            java + vraptor
                                               gnarus
ondetrabalhar.com                            scala + vraptor
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR               alunos
                            java + vraptor
                                               gnarus                  sugest
ondetrabalhar.com                            scala + vraptor
                                                                        java
        ruby

casa 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
Baseado nisso
  alumni.caelum.com.br
            RoR               alunos
                            java + vraptor
                                               gnarus                  sugest
ondetrabalhar.com                            scala + vraptor
                                                                             java
        ruby
                                                                  promo
casa 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
Baseado nisso
  alumni.caelum.com.br                                         métricas
            RoR               alunos                           java + octave
                            java + vraptor
                                               gnarus                    sugest
ondetrabalhar.com                            scala + vraptor
                                                                               java
        ruby
                                                                    promo
casa 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
Baseado nisso
  alumni.caelum.com.br                                         métricas
            RoR               alunos                           java + octave
                            java + vraptor
                                               gnarus                    sugest
ondetrabalhar.com                            scala + vraptor
                                                                               java
        ruby
                                                                    promo
casa 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
mysql
                      Baseado nisso
   alumni.caelum.com.br                 mysql                       métricas
              RoR                 alunos                            java + octave
                                java + vraptor      mysql
                                                    gnarus                    sugest
ondetrabalhar.com                                 scala + vraptor
                                                                                    java
           ruby
                        mysql                                            promo
mysql
casa 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
mysql
                      Baseado nisso
   alumni.caelum.com.br                 mysql                       métricas
              RoR                 alunos                            java + octave
                                                                                         redis
                                java + vraptor      mysql
                                                    gnarus                    sugest
ondetrabalhar.com                                 scala + vraptor
                                                                                    java
           ruby
                        mysql                                            promo
mysql
casa 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
mysql
                        Baseado nisso
   alumni.caelum.com.br                   mysql                       métricas
                  RoR               alunos                            java + octave
                                                                                           redis
                                  java + vraptor
solr                                                  mysql
                                                      gnarus                    sugest
ondetrabalhar.com                                   scala + vraptor
                                                                                      java
               ruby
                          mysql                                            promo
mysql
casa 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
mysql
                        Baseado nisso
   alumni.caelum.com.br                              mysql                       métricas
                  RoR                          alunos                            java + octave
                                                                                                      redis
                                             java + vraptor
solr                                                             mysql
                                                                 gnarus                    sugest
ondetrabalhar.com                                              scala + vraptor
                                                                                                 java
               ruby                                                                  postgresql
                                     mysql                                             promo
mysql
casa 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
mysql
                        Baseado nisso
   alumni.caelum.com.br                              mysql                       métricas
                  RoR                          alunos                            java + octave
                                                                                                      redis
                                             java + vraptor
solr                                                             mysql
                                                                 gnarus                    sugest
ondetrabalhar.com                                              scala + vraptor
                                                                                                 java
               ruby                                                                  postgresql
                                     mysql                                             promo
mysql
casa 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
mysql
                        Baseado nisso
   alumni.caelum.com.br                              mysql                       métricas
                  RoR                          alunos                            java + octave
                                                                                                      redis
                                             java + vraptor
solr                                                             mysql
                                                                 gnarus                    sugest
ondetrabalhar.com                                              java + vraptor
                                                                                                 java
               ruby                                                                  postgresql
                                     mysql                                             promo
mysql
casa 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
mysql
                                 Reparou?
   alumni.caelum.com.br                              mysql                       métricas
                  RoR                          alunos                            java + octave
                                                                                                      redis
                                             java + vraptor
solr                                                             mysql
                                                                 gnarus                    sugest
ondetrabalhar.com                                              java + vraptor
                                                                                                 java
               ruby                                                                  postgresql
                                     mysql                                             promo
mysql
casa 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
mysql
                                 Reparou?
   alumni.caelum.com.br                              mysql                       métricas
                  RoR                          alunos                            java + octave
                                                                                                      redis
                                             java + vraptor
solr                                                             mysql
                                                                 gnarus                    sugest
ondetrabalhar.com                                              java + vraptor
                                                                                                 java
               ruby                                                                  postgresql
                                     mysql                                             promo
mysql
casa 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
Domine sua linguagem
   (sugestão para o bom programador)
Domine sua linguagem
api/framework a ponto
de criticar os pontos
negativos
   (sugestão para o bom programador)
Domine outras
linguagens...
TANTO quanto.
   (sugestão para o bom programador)
Nenhuma linguagem
ou ([framework])
é ruim
  (sugestão para o bom programador)
++++++++++[>++++++
+>++++++++++>+++>
+<<<<-]>++.>+.+++++
++..+++.>++.<<+++++
++++++++++.>.++
+.------.--------.>
+.>.
Nenhuma linguagem
ou ([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 escolhas
para não ser dominado
por elas.
   (sugestão para o bom programador)




         @sr_valeriano
Domine suas escolhas
para não ser dominado
por elas.
   (sugestão para o bom programador)

         Obrigado!
         @sr_valeriano

Mais conteúdo relacionado

Semelhante a Uma Ferramenta Ideal: Poder, Expressividade e Concisão em Linguagens de Programação

Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Zarathon Maia
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação FuncionalNatan Mai
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptPedro Sousa
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN StackBruno Catão
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisCarlos Santos
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerGiovanni Kenji Shiroma
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em RubyDaniel Andrade
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoJuciellen Cabrera
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de ProgramaçãoCarlos Schults
 

Semelhante a Uma Ferramenta Ideal: Poder, Expressividade e Concisão em Linguagens de Programação (20)

Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Ruby learning
Ruby learningRuby learning
Ruby learning
 
Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014Minicurso de Rails - WTISC 2014
Minicurso de Rails - WTISC 2014
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Workshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-ptWorkshop Ruby on Rails dia 1 ruby-pt
Workshop Ruby on Rails dia 1 ruby-pt
 
Palestra Ruby
Palestra RubyPalestra Ruby
Palestra Ruby
 
Introdução à MEAN Stack
Introdução à MEAN StackIntrodução à MEAN Stack
Introdução à MEAN Stack
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Criando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & DockerCriando Webservice REST com NodeJS, NoSQL & Docker
Criando Webservice REST com NodeJS, NoSQL & Docker
 
Curso ruby on rails
Curso ruby on railsCurso ruby on rails
Curso ruby on rails
 
Introdução à programação em Ruby
Introdução à programação em RubyIntrodução à programação em Ruby
Introdução à programação em Ruby
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Refatoração - aquela caprichada no código
Refatoração - aquela caprichada no códigoRefatoração - aquela caprichada no código
Refatoração - aquela caprichada no código
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Solid
SolidSolid
Solid
 

Mais de Ricardo Valeriano

Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)Ricardo Valeriano
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOSRicardo Valeriano
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoRicardo Valeriano
 
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Ricardo Valeriano
 

Mais de Ricardo Valeriano (6)

Sua primeira app iOS
 Sua primeira app iOS Sua primeira app iOS
Sua primeira app iOS
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)A primeira app iOS (a gente não esquece)
A primeira app iOS (a gente não esquece)
 
Testes Automatizados e o iOS
Testes Automatizados e o iOSTestes Automatizados e o iOS
Testes Automatizados e o iOS
 
JavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamentoJavaScript: prototipação, closure e encapsulamento
JavaScript: prototipação, closure e encapsulamento
 
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
Sexy Specs on XCode with MacRuby and Rspec (Lightning Talk)
 

Uma Ferramenta Ideal: Poder, Expressividade e Concisão em Linguagens de Programação

  • 1. A Ferramenta Ideal uma questão de perspectiva
  • 2. A Ferramenta Ideal uma questão de perspectiva
  • 3. A Ferramenta Ideal uma questão de perspectiva
  • 13. Java
  • 14. 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(); }
  • 15. 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); e, t if(categorias.lastIndexOf(c)!=i) { n ! categorias.remove(c); i--; e s m ai } } l a m double total = 0; e e r d for(Produto p : produtos) { } total += p.getValor(); é
  • 18. Ruby unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas << produto.categoria end end
  • 19. Ruby unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas << produto.categoria end end
  • 20. Ruby
  • 21. Ruby unicas = produtos.map{|p| p.categoria}.uniq total = produtos.inject(0){|tot, p| tot + p.valor}
  • 22. Ruby unicas = produtos.map{|p| p.categoria}.uniq total = produtos.inject(0){|tot, p| tot + p.valor}
  • 23. Ruby unicas = produtos.map(&:categoria).uniq total = produtos.inject(0){|tot, p| tot + p.valor}
  • 24. GORDO Y U NO USE THA API?
  • 25. Domine sua api (sugestão para o bom programador)
  • 27. Ruby unicos = produtos.map(&:categoria).uniq total = produtos.map(&:valor).inject(:+)
  • 28. Domine sua api (sugestão para o bom programador)
  • 29. Java Set categorias = new HashSet(); for(Produto p : produtos) cat.add(p.categoria()); double total = 0; for(Produto p : produtos) total += p.valor();
  • 30. Ruby unicos = produtos.map(&:categoria).uniq total = produtos.map(&:valor).inject(:+)
  • 31. Ruby unicos = produtos.map(&:categoria).uniq total = produtos.map(&:valor).inject(:+) Ruby é D+
  • 32. Ruby unicos = produtos.map(&:categoria).uniq e, t total = produtos.map(&:valor).inject(:+) n ! e s lm ai a m e e Ruby é D+ r d é
  • 35. Scala class Compra() { lazy val produtos = Produtos.all }
  • 36. Scala class Compra() { lazy val produtos = Produtos.all } BONUS ROUND: public lazy!
  • 37. Scala class Compra() { lazy val produtos = Produtos.all } BONUS ROUND: public lazy! class Compra(produtos:List[Produto]) { }
  • 38. Scala class 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. Scala class 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!
  • 41. Scala rocks #fato
  • 42. Scala rocks #fato Obrigado
  • 43. Scala rocks #fato Obrigado The End.
  • 44. Scala rocks #fato Obrigado The End.
  • 45.
  • 47. O que buscamos em uma linguagem? Poder o que posso fazer? Expressividade como posso fazer?
  • 48. O que buscamos em uma linguagem? Poder o que posso fazer? Expressividade como posso fazer?
  • 49. O que expressa mais, de maneira mais breve?
  • 51. Usei o cartão de crédito da minha mãe pois estava sem dinheiro.
  • 52. Usei o cartão de crédito da minha mãe pois estava as ab sem dinheiro. íls 20 +
  • 54. I’ve used my mom’s credit card ‘cause I had no money.
  • 55. I’ve used my mom’s credit card ‘cause I had no as ab money. íl s 17 +
  • 57. 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?
  • 59. A PRIMEIRA VISTA, QUAL VOCÊ PREFERE?
  • 60. 돈 없어서 엄아 카드 썼다.
  • 61. 돈 없어서 엄아 카드 < < < 썼다. AL s M ba R a O íl F s > > 2 > 1
  • 62. Expressividade 엄카 썼다.
  • 63. Expressividade 엄카 썼다. s a b íd o a u s íl r 4 em s e
  • 68. ‘A medida que diminuem as palavras, aumenta a ambiguidade’ José Valim - GuruSP
  • 69. Então... o que queremos afinal? MAIS poder MAIS expressividade MAIS concisão
  • 70. Então... o que queremos afinal? MAIS poder MAIS expressividade MAIS concisão
  • 71. ‘you can accomplish more in smaller yet readable code’ Matz (on Ruby)
  • 72. Não é só escrever menos
  • 73. Talvez o código mais simples, seja melhor.
  • 74. ‘Simplicity Ain't Easy’ Stuart Halloway
  • 75.
  • 76.
  • 77.
  • 78.
  • 79. Contexto Poder, Expressividade, Concisão são contextuais
  • 80. ‘humans require more sophisticated tools to program’ Matz
  • 81. Quem acha a sua linguagem perfeita?
  • 82. As ferramentas mudam com o tempo, elas evoluem.
  • 84. (re) Conheça bem as desvantagens. (sugestão para o bom programador)
  • 85. Para evitar abusar delas. (sugestão para o bom programador)
  • 86. MySQL as queue Neo4J as crud storage
  • 87. O mais importante em um projeto é escrever código bonito.
  • 88. O mais importante em um projeto é escrever código bom.
  • 89. ?
  • 91.       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?
  • 92.       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
  • 94. 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
  • 95. 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
  • 96. 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
  • 97. 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
  • 98. 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
  • 99. 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
  • 100. 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
  • 101. 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
  • 102. 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
  • 105. Ruby? C++? Java? Scala? Muito if?Basic? C#? JavaScript?
  • 106. Ruby? C++? Java? Scala? Muito if?Basic? C#? JavaScript? A nova linguagem do mês?
  • 109. LET’S USE SCALA FOR ALL THE THINGS!
  • 110. Para evitar abusar das desvantagens. (sugestão para o bom programador)
  • 111. scala para crud
  • 114.
  • 115. ‘o teu “overuse” é muito bom prá você mas a desgraça dos outros’ Jay Fields
  • 116. Quem está há mais de 2 anos no mesmo projeto?
  • 117. ‘pfvr néam? amanhã você vai sair do projeto!’ Random Scumbag
  • 118. Seja o principal crítico de suas escolhas (sugestão para o bom programador)
  • 119.
  • 120. ‘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
  • 121. require "sinatra" require "json" interestie 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
  • 122. require "sinatra" require "json" interestie 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
  • 123. Projetos pequenos múltiplos projetos
  • 124. Quando não usar o Rails? Quem melhor que o José Valim para dizer?
  • 125. Não escolha sempre a sua linguagem preferida. (sugestão para o bom programador)
  • 128. Baseado nisso alunos java + vraptor
  • 129. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor
  • 130. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor ondetrabalhar.com ruby
  • 131. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby
  • 132. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby exercícios RoR
  • 133. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby exercícios RoR + 1 projeto scala + play
  • 134. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby exercícios RoR + 1 projeto scala + play mountable engine RoR
  • 135. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby exercícios RoR + 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  • 136. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  • 137. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby pagamentos java analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine + 1 ‘página’ RoR js
  • 138. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.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
  • 139. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.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
  • 140. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.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
  • 141. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby casa 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
  • 142. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby casa 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
  • 143. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby casa 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
  • 144. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby casa 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
  • 145. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus ondetrabalhar.com scala + vraptor ruby casa 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
  • 146. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus sugest ondetrabalhar.com scala + vraptor java ruby casa 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
  • 147. Baseado nisso alumni.caelum.com.br RoR alunos java + vraptor gnarus sugest ondetrabalhar.com scala + vraptor java ruby promo casa 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
  • 148. Baseado nisso alumni.caelum.com.br métricas RoR alunos java + octave java + vraptor gnarus sugest ondetrabalhar.com scala + vraptor java ruby promo casa 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
  • 149. Baseado nisso alumni.caelum.com.br métricas RoR alunos java + octave java + vraptor gnarus sugest ondetrabalhar.com scala + vraptor java ruby promo casa 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
  • 150. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave java + vraptor mysql gnarus sugest ondetrabalhar.com scala + vraptor java ruby mysql promo mysql casa 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
  • 151. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor mysql gnarus sugest ondetrabalhar.com scala + vraptor java ruby mysql promo mysql casa 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
  • 152. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com scala + vraptor java ruby mysql promo mysql casa 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
  • 153. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com scala + vraptor java ruby postgresql mysql promo mysql casa 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
  • 154. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com scala + vraptor java ruby postgresql mysql promo mysql casa 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
  • 155. mysql Baseado nisso alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com java + vraptor java ruby postgresql mysql promo mysql casa 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
  • 156. mysql Reparou? alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com java + vraptor java ruby postgresql mysql promo mysql casa 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
  • 157. mysql Reparou? alumni.caelum.com.br mysql métricas RoR alunos java + octave redis java + vraptor solr mysql gnarus sugest ondetrabalhar.com java + vraptor java ruby postgresql mysql promo mysql casa 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
  • 158. Domine sua linguagem (sugestão para o bom programador)
  • 159. Domine sua linguagem api/framework a ponto de criticar os pontos negativos (sugestão para o bom programador)
  • 160. Domine outras linguagens... TANTO quanto. (sugestão para o bom programador)
  • 161. Nenhuma linguagem ou ([framework]) é ruim (sugestão para o bom programador)
  • 163. Nenhuma linguagem ou ([framework]) é ruim, salvo brain f*ck (sugestão para o bom programador)
  • 164. Todas são marotas * Contexto Pessoa Momento * salvo brain f#ck
  • 165. Domine suas escolhas para não ser dominado por elas. (sugestão para o bom programador) @sr_valeriano
  • 166. Domine suas escolhas para não ser dominado por elas. (sugestão para o bom programador) Obrigado! @sr_valeriano

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. Definir o que &amp;#xE9; preciso: exemplo do netflix, a n&amp;#xE3;o arquitetura.\n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. Ent&amp;#xE3;o o que voc&amp;#xEA; recomenda?\n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n