Share
Embed
A ferramenta ideal: uma questão de perspectiva
Como aproveitar o que a sua ferramenta preferida tem de melhor, sem ter que lidar com o que ela tem de ruim? Esse talk é sobre uma experiência vivida durante o desenvolvimento de uma plataforma de ensino online para qual uma das soluções que se provou mais efetiva foi o uso não de uma única linguagem ou framework. Mas sim de tecnologias específicas para problemas específicos e pontuais. Um ponto importante e crítico dessa abordagem é a integração de todos esses micro sistemas.
Ricardo Valeriano
July 07, 2012
Transcript
166 slides
-
List<Categoria> categorias = new ArrayList<Categoria>(); for(Produto p : produtos) categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) { Categoria c = categorias.get(i); if(categorias.lastIndexOf(c)!=i) { categorias.remove(c); i--; } } double total = 0; for(Produto p : produtos) { total += p.getValor(); } Java Monday, August 6, 12 -
List<Categoria> categorias = new ArrayList<Categoria>(); for(Produto p : produtos) categorias.add(p.getCategoria());
for(int i=0;i<categorias.size();i++) { Categoria c = categorias.get(i); if(categorias.lastIndexOf(c)!=i) { categorias.remove(c); i--; } } double total = 0; for(Produto p : produtos) { total += p.getValor(); } Java realm ente, é dem ais! Monday, August 6, 12 -
unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas
<< produto.categoria end end Ruby Monday, August 6, 12 -
unicas = [] for produto in produtos unless(unicas.include? produto.categoria) unicas
<< produto.categoria end end Ruby Monday, August 6, 12 -
unicas = produtos.map{|p| p.categoria}.uniq total = produtos.inject(0){|tot, p| tot +
p.valor} Ruby Monday, August 6, 12 -
unicas = produtos.map{|p| p.categoria}.uniq total = produtos.inject(0){|tot, p| tot +
p.valor} Ruby Monday, August 6, 12 -
Ruby unicas = produtos.map(&:categoria).uniq total = produtos.inject(0){|tot, p| tot +
p.valor} Monday, August 6, 12 -
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 -
Ruby unicos = produtos.map(&:categoria).uniq total = produtos.map(&:valor).inject(:+) Ruby é D+
realm ente, é dem ais! Monday, August 6, 12 -
Scala class Compra() { lazy val produtos = Produtos.all }
Monday, August 6, 12 -
Scala class Compra() { lazy val produtos = Produtos.all }
BONUS ROUND: public lazy! Monday, August 6, 12 -
Scala class Compra() { lazy val produtos = Produtos.all }
class Compra(produtos:List[Produto]) { } BONUS ROUND: public lazy! Monday, August 6, 12 -
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 -
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 -
O que buscamos em uma linguagem? Poder o que posso
fazer? Expressividade como posso fazer? Monday, August 6, 12 -
O que buscamos em uma linguagem? Poder o que posso
fazer? Expressividade como posso fazer? Monday, August 6, 12 -
Usei o cartão de crédito da minha mãe pois estava
sem dinheiro. Monday, August 6, 12 -
Usei o cartão de crédito da minha mãe pois estava
sem dinheiro. + 20 sílabas Monday, August 6, 12 -
I’ve used my mom’s credit card ‘cause I had no
money. Monday, August 6, 12 -
I’ve used my mom’s credit card ‘cause I had no
money. + 17 sílabas Monday, August 6, 12 -
Súmemo jão. Mó perreio! Utilizei do cartão da senhora minha
mãe, certo? Prá adquirir uns bens, na humildade mêmo, tá ligado? Monday, August 6, 12 -
>>> FORM AL <<< 12 sílabas ت হযࢲ ষই ٘
ो. Monday, August 6, 12 -
‘A medida que diminuem as palavras, aumenta a ambiguidade’ José
Valim - GuruSP Monday, August 6, 12 -
Então... o que queremos afinal? MAIS poder MAIS expressividade MAIS
concisão Monday, August 6, 12 -
Então... o que queremos afinal? MAIS poder MAIS expressividade MAIS
concisão Monday, August 6, 12 -
‘you can accomplish more in smaller yet readable code’ Matz
(on Ruby) Monday, August 6, 12 -
(re) Conheça bem as desvantagens. (sugestão para o bom programador)
Monday, August 6, 12 -
O mais importante em um projeto é escrever código bonito.
Monday, August 6, 12 -
O mais importante em um projeto é escrever código bom.
Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end fonte pequena? Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end agora sim? fonte 16 Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12 -
def _read_attribute(attr_name) attr_name = attr_name.to_s attr_name = self.class.primary_key if attr_name
== 'id' value = @attributes[attr_name] unless value.nil? if column = column_for_attribute(attr_name) if unserializable_attribute?(attr_name, column) unserialize_attribute(attr_name) else column.type_cast(value) end else value end end end 23... mas e se... mas e se... mas e se... mas e se... mas e se... mas e se... Monday, August 6, 12 -
Muito if? Ruby? Java? C++? C#? Scala? JavaScript? Basic? A
nova linguagem do mês? Monday, August 6, 12 -
Para evitar abusar das desvantagens. (sugestão para o bom programador)
Monday, August 6, 12 -
‘o teu “overuse” é muito bom prá você mas a
desgraça dos outros’ Jay Fields Monday, August 6, 12 -
Quem está há mais de 2 anos no mesmo projeto?
Monday, August 6, 12 -
‘pfvr néam? amanhã você vai sair do projeto!’ Random Scumbag
Monday, August 6, 12 -
Seja o principal crítico de suas escolhas (sugestão para o
bom programador) Monday, August 6, 12 -
‘Quando quebra o projeto em vários, fica mais fácil de
ver que para uma parte do projeto Alberto (oderski) Souza uma linguagem é mais interessante’ Monday, August 6, 12 -
require "sinatra" require "json" Sequel.connect ENV["DATABASE_URL"] require "interest" get "/"
do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response params end def ok_response(params) respond_with params end def error_response(params) respond_with(params, { errors:["unable to set up interest"] }) end def respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})" end interestie Monday, August 6, 12 -
require "sinatra" require "json" Sequel.connect ENV["DATABASE_URL"] require "interest" get "/"
do interest = Interest.new params[:interest] interest.save ? ok_response params : error_response params end def ok_response(params) respond_with params end def error_response(params) respond_with(params, { errors:["unable to set up interest"] }) end def respond_with(params, json_data = {ok:"ok"}) "#{params["callback"]}(#{json_data.to_json})" end interestie Monday, August 6, 12 -
Quando não usar o Rails? Quem melhor que o José
Valim para dizer? Monday, August 6, 12 -
Não escolha sempre a sua linguagem preferida. (sugestão para o
bom programador) Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor exercícios RoR Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor exercícios RoR + 1 projeto scala + play Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor exercícios RoR + 1 projeto scala + play mountable engine RoR Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor pagamentos java analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor pagamentos java analisador 1 sinatra exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel sugest java analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus scala + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12 -
alunos java + vraptor Baseado nisso alumni.caelum.com.br RoR ondetrabalhar.com ruby
gnarus java + vraptor casa do código java + RoR pagamentos java métricas java + octave interestie sinatra + sequel sugest java promo RoR analisador 1 sinatra analisador 2 java exercícios RoR + 1 projeto scala + play mountable engine RoR + 6 projetos RoR + 1 ‘página’ js aws tickets RoR + projetos sinatra + sequel mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql postgresql Monday, August 6, 12 -
Reparou? RoR ruby java + RoR sinatra + sequel RoR
sinatra RoR mountable engine RoR RoR alunos java + vraptor alumni.caelum.com.br ondetrabalhar.com gnarus java + vraptor casa do código java métricas java + octave interestie sugest java promo analisador 1 analisador 2 java exercícios + 1 projeto scala + play + 6 projetos + 1 ‘página’ js aws tickets + projetos mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql pagamentos RoR sinatra + sequel postgresql Monday, August 6, 12 -
Reparou? RoR ruby java + RoR sinatra + sequel RoR
sinatra RoR mountable engine RoR RoR alunos java + vraptor alumni.caelum.com.br ondetrabalhar.com gnarus java + vraptor casa do código java métricas java + octave interestie sugest java promo analisador 1 analisador 2 java exercícios + 1 projeto scala + play + 6 projetos + 1 ‘página’ js aws tickets + projetos mysql mysql mysql mysql mysql redis redis solr postgresql postgresql postgresql postgresql postgresql postgresql pagamentos RoR sinatra + sequel postgresql Monday, August 6, 12 -
Domine sua linguagem (sugestão para o bom programador) api/framework a
ponto de criticar os pontos negativos Monday, August 6, 12 -
Domine outras linguagens... TANTO quanto. (sugestão para o bom programador)
Monday, August 6, 12 -
Nenhuma linguagem ou ([framework]) é ruim (sugestão para o bom
programador) Monday, August 6, 12 -
Nenhuma linguagem ou ([framework]) é ruim, salvo brain f*ck (sugestão
para o bom programador) Monday, August 6, 12 -
Todas são marotas * Contexto Pessoa Momento * salvo brain
f#ck Monday, August 6, 12 -
Domine suas escolhas para não ser dominado por elas. (sugestão
para o bom programador) @sr_valeriano Monday, August 6, 12 -
Domine suas escolhas para não ser dominado por elas. (sugestão
para o bom programador) Obrigado! @sr_valeriano Monday, August 6, 12