SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
Como ser feliz em
 apenas 3 passos
      O Segredo!
O que aprendi e quero
   passar adiante
   Lucas Húngaro - @lucashungaro
          http://busk.com
Parte 1 - Dicas e Truques
Serviços


• Hoptoad
• New Relic
Dicas


• Master/Slave
• Resque pwns Delayed_Job
• Fuja da Amazon (produção)
Plugins e Gems
• kasket
• resque
• oink + hodel_3000_compliant_logger
• bullet
• query_reviewer
• rails_indexes
Plugins e Gems
       • oink + hodel_3000_compliant_logger

Aug 12 11:31:15 Iron-Man rails[9541]: Memory usage: 101938 | PID: 9541
Aug 12 11:31:15 Iron-Man rails[9541]: Instantiation Breakdown: Total:
39 | User: 20 | FeedItem: 10 | Tag: 9
Caching

• Negligenciado
• Difícil em um nível “realista”
• “There are only two hard things in
  Computer Science: cache invalidation and
  naming things”
Caching


• Muleta (otimize primeiro)
• Para começar: kasket, cache-money etc
• Se é difícil invalidar, #comofas?
Caching

• Não invalidar!
• Ask for the thing you want
• O Segredo é a chave!
• Ou a chave é o Segredo?
Caching


• Demo
• Smart keys
Parte II - Evoluindo


• Frameworks induzem um bom início
• Comunidade “anêmica”
• Maturidade
Cargo Culting


• Filosofia e relacionamentos na equipe
• Código
Filosofia

• Pressão
• Hype
• Participar de um grupo
• Cool
Pressão

• “Se não usar X, não está fazendo direito”
• A ferramenta certa para o trabalho
• Para quem?
• Ex: Cucumber/Steak
Pressão

• Faca ruim ou técnica ruim?
• Ruim para a equipe
• Eu faço debugging com puts
• “It’s tempting for people to obsess over
  tools instead of what they’re going to do
  with those tools”
“The tone is in your
      fingers”
Código

• Entender o problema
• Não tente resolver o que não te incomoda
• Solução emergente
• “The worst misstep one can make in design
  is to solve the wrong problem.” – John
  Carroll
Atacando o “problema”
       errado

• Demeter: chamar um acessor em outro
  objeto é o verdadeiro problema?
• NullDB: acessar BD em teste é o verdadeiro
  problema?
Atacando o “problema”
       errado

• Demeter
 •   Replica funcionalidade do delegate (stdlib)

 •   Problema real é exposição indevida de
     comportamento
Atacando o “problema”
       errado
• NullDB
 •   Problema real é acoplamento da lógica à
     persistência

 •   Deve ser possível testar lógica independente
     da persistência por design
Atacando o problema
       errado


• Soluções não-eficientes se tornam padrões
It’s evolution baby!

• Fat Controllers
• Skinny Controllers, Fat Models
• Skinny Controllers, Sexy Models, Flexible
  Services ;)
• Domain-Driven Rails?
Fat Models

• Negócios + Persistência
• Quebra SRP
• CRUD básico: OK
• Excesso de callbacks
• Esconde o domínio
• Falta: flexibilidade, isolamento
Camadas   Tudo junto e misturado
Conceitos

• Muito difícil ensinar
• Maturidade através da experiência
• Acoplamento
• Coesão
• “Conascência” (conascence)
Mantra

Se é difícil de testar em isolamento, está mal
                    projetado
Acoplamento

• Serviços
• Inversão de controle
• Injeção de dependência
• Não, não estamos falando de Java! ;)
Acoplamento


• Demo
• ActivityService
• SearchService
Acoplamento
• SOLID, DDD
• Sandi Metz, Jim Weirich, Pat Maddox, James
  Golick, Cassio Marques
• “Parametrização”
• SRP! SRP! SRP! SRP! SRP! SRP!
• Think about concerns
Conclusão
• Repense “Fat Models”
• Domínios complexos exigem flexibilidade
• Lógica importante deve:
 • ser explícita
 • ter um nome
 • ter uma localização clara
Links

•   The Building Blocks of Modularity (ou Grand Unified Theory of Software Design) - http://is.gd/egHfv

•   SOLID Ruby - http://is.gd/eeyDn

•   Demeter is for Encapsulation - http://is.gd/eeyLx

•   Opinionated Modular Code - http://is.gd/eeyXm

•   Scaling to Hundreds of Millions of Requests - http://vimeo.com/12814529
Obrigado

Mais conteúdo relacionado

Semelhante a 3 passos para ser feliz

Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoPaulo Henrique da Silva
 
Testador Tipo T
Testador Tipo TTestador Tipo T
Testador Tipo TGTS-CE
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGNeubio Ferreira
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Railstchandy
 
Scrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviScrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviAri Amaral
 
Scrum Morreu ! Eu Sobrevivi
Scrum Morreu ! Eu SobreviviScrum Morreu ! Eu Sobrevivi
Scrum Morreu ! Eu SobreviviAri Amaral
 
Scrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviScrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviAri Amaral
 
O Scrum Morreu! Eu Sobrevivi!
O Scrum Morreu! Eu Sobrevivi!O Scrum Morreu! Eu Sobrevivi!
O Scrum Morreu! Eu Sobrevivi!Ari Amaral
 
Front-end javascript unit testing and mock
Front-end javascript unit testing and mockFront-end javascript unit testing and mock
Front-end javascript unit testing and mockfelipefsilva
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com PythonFrederico Cabral
 
Java e o mercado de trabalho
Java e o mercado de trabalhoJava e o mercado de trabalho
Java e o mercado de trabalhoClaudiney Marques
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...Cesar Augusto Nogueira
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLDickson S. Guedes
 

Semelhante a 3 passos para ser feliz (20)

Clean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimentoClean Code - Boas práticas para desenvolvimento
Clean Code - Boas práticas para desenvolvimento
 
Testador Tipo T
Testador Tipo TTestador Tipo T
Testador Tipo T
 
Testador tipo t
Testador tipo tTestador tipo t
Testador tipo t
 
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MGModelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
Modelagem Ágil - UaiJug TechDays 2013 - Uberlândia MG
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
Clean code
Clean codeClean code
Clean code
 
Dark Java (2009)
Dark Java (2009)Dark Java (2009)
Dark Java (2009)
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Design Patterns on Rails
Design Patterns on RailsDesign Patterns on Rails
Design Patterns on Rails
 
Potencializando a qualidade de código
Potencializando a qualidade de códigoPotencializando a qualidade de código
Potencializando a qualidade de código
 
Scrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviScrum morreu eu_sobrevivi
Scrum morreu eu_sobrevivi
 
Scrum Morreu ! Eu Sobrevivi
Scrum Morreu ! Eu SobreviviScrum Morreu ! Eu Sobrevivi
Scrum Morreu ! Eu Sobrevivi
 
Scrum morreu eu_sobrevivi
Scrum morreu eu_sobreviviScrum morreu eu_sobrevivi
Scrum morreu eu_sobrevivi
 
O Scrum Morreu! Eu Sobrevivi!
O Scrum Morreu! Eu Sobrevivi!O Scrum Morreu! Eu Sobrevivi!
O Scrum Morreu! Eu Sobrevivi!
 
Front-end javascript unit testing and mock
Front-end javascript unit testing and mockFront-end javascript unit testing and mock
Front-end javascript unit testing and mock
 
Domain Driven Design com Python
Domain Driven Design com PythonDomain Driven Design com Python
Domain Driven Design com Python
 
Java e o mercado de trabalho
Java e o mercado de trabalhoJava e o mercado de trabalho
Java e o mercado de trabalho
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQL
 

3 passos para ser feliz

  • 1. Como ser feliz em apenas 3 passos O Segredo!
  • 2. O que aprendi e quero passar adiante Lucas Húngaro - @lucashungaro http://busk.com
  • 3.
  • 4. Parte 1 - Dicas e Truques
  • 6. Dicas • Master/Slave • Resque pwns Delayed_Job • Fuja da Amazon (produção)
  • 7. Plugins e Gems • kasket • resque • oink + hodel_3000_compliant_logger • bullet • query_reviewer • rails_indexes
  • 8. Plugins e Gems • oink + hodel_3000_compliant_logger Aug 12 11:31:15 Iron-Man rails[9541]: Memory usage: 101938 | PID: 9541 Aug 12 11:31:15 Iron-Man rails[9541]: Instantiation Breakdown: Total: 39 | User: 20 | FeedItem: 10 | Tag: 9
  • 9. Caching • Negligenciado • Difícil em um nível “realista” • “There are only two hard things in Computer Science: cache invalidation and naming things”
  • 10. Caching • Muleta (otimize primeiro) • Para começar: kasket, cache-money etc • Se é difícil invalidar, #comofas?
  • 11. Caching • Não invalidar! • Ask for the thing you want • O Segredo é a chave! • Ou a chave é o Segredo?
  • 13. Parte II - Evoluindo • Frameworks induzem um bom início • Comunidade “anêmica” • Maturidade
  • 14. Cargo Culting • Filosofia e relacionamentos na equipe • Código
  • 15. Filosofia • Pressão • Hype • Participar de um grupo • Cool
  • 16. Pressão • “Se não usar X, não está fazendo direito” • A ferramenta certa para o trabalho • Para quem? • Ex: Cucumber/Steak
  • 17. Pressão • Faca ruim ou técnica ruim? • Ruim para a equipe • Eu faço debugging com puts • “It’s tempting for people to obsess over tools instead of what they’re going to do with those tools”
  • 18. “The tone is in your fingers”
  • 19. Código • Entender o problema • Não tente resolver o que não te incomoda • Solução emergente • “The worst misstep one can make in design is to solve the wrong problem.” – John Carroll
  • 20. Atacando o “problema” errado • Demeter: chamar um acessor em outro objeto é o verdadeiro problema? • NullDB: acessar BD em teste é o verdadeiro problema?
  • 21. Atacando o “problema” errado • Demeter • Replica funcionalidade do delegate (stdlib) • Problema real é exposição indevida de comportamento
  • 22. Atacando o “problema” errado • NullDB • Problema real é acoplamento da lógica à persistência • Deve ser possível testar lógica independente da persistência por design
  • 23. Atacando o problema errado • Soluções não-eficientes se tornam padrões
  • 24. It’s evolution baby! • Fat Controllers • Skinny Controllers, Fat Models • Skinny Controllers, Sexy Models, Flexible Services ;) • Domain-Driven Rails?
  • 25. Fat Models • Negócios + Persistência • Quebra SRP • CRUD básico: OK • Excesso de callbacks • Esconde o domínio • Falta: flexibilidade, isolamento
  • 26. Camadas Tudo junto e misturado
  • 27. Conceitos • Muito difícil ensinar • Maturidade através da experiência • Acoplamento • Coesão • “Conascência” (conascence)
  • 28. Mantra Se é difícil de testar em isolamento, está mal projetado
  • 29. Acoplamento • Serviços • Inversão de controle • Injeção de dependência • Não, não estamos falando de Java! ;)
  • 31. Acoplamento • SOLID, DDD • Sandi Metz, Jim Weirich, Pat Maddox, James Golick, Cassio Marques • “Parametrização” • SRP! SRP! SRP! SRP! SRP! SRP! • Think about concerns
  • 32. Conclusão • Repense “Fat Models” • Domínios complexos exigem flexibilidade • Lógica importante deve: • ser explícita • ter um nome • ter uma localização clara
  • 33. Links • The Building Blocks of Modularity (ou Grand Unified Theory of Software Design) - http://is.gd/egHfv • SOLID Ruby - http://is.gd/eeyDn • Demeter is for Encapsulation - http://is.gd/eeyLx • Opinionated Modular Code - http://is.gd/eeyXm • Scaling to Hundreds of Millions of Requests - http://vimeo.com/12814529