o que aprendi e quero passar adiante - dev in sampa 2010

34
Como ser feliz em apenas 3 passos O Segredo!

Upload: lucashungaro

Post on 19-Jan-2015

1.336 views

Category:

Technology


0 download

DESCRIPTION

Apresento nessa palestra técnicas, dicas e truques que aprendi durante mais de 2 anos trabalhando com aplicações Ruby e Rails em produção.

TRANSCRIPT

Page 1: O que aprendi e quero passar adiante - Dev in Sampa 2010

Como ser feliz em apenas 3 passos

O Segredo!

Page 2: O que aprendi e quero passar adiante - Dev in Sampa 2010

O que aprendi e quero passar adiante

Lucas Húngaro - @lucashungarohttp://busk.com

Page 3: O que aprendi e quero passar adiante - Dev in Sampa 2010
Page 4: O que aprendi e quero passar adiante - Dev in Sampa 2010

Parte 1 - Dicas e Truques

Page 5: O que aprendi e quero passar adiante - Dev in Sampa 2010

Serviços

• Hoptoad

• New Relic

Page 6: O que aprendi e quero passar adiante - Dev in Sampa 2010

Dicas

• Master/Slave

• Resque pwns Delayed_Job

• Fuja da Amazon (produção)

Page 7: O que aprendi e quero passar adiante - Dev in Sampa 2010

Plugins e Gems

• kasket

• resque

• oink + hodel_3000_compliant_logger

• bullet

• query_reviewer

• rails_indexes

Page 8: O que aprendi e quero passar adiante - Dev in Sampa 2010

Plugins e Gems• oink + hodel_3000_compliant_logger

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

Page 9: O que aprendi e quero passar adiante - Dev in Sampa 2010

Caching

• Negligenciado

• Difícil em um nível “realista”

• “There are only two hard things in Computer Science: cache invalidation and naming things”

Page 10: O que aprendi e quero passar adiante - Dev in Sampa 2010

Caching

• Muleta (otimize primeiro)

• Para começar: kasket, cache-money etc

• Se é difícil invalidar, #comofas?

Page 11: O que aprendi e quero passar adiante - Dev in Sampa 2010

Caching

• Não invalidar!

• Ask for the thing you want

• O Segredo é a chave!

• Ou a chave é o Segredo?

Page 12: O que aprendi e quero passar adiante - Dev in Sampa 2010

Caching

• Demo

• Smart keys

Page 13: O que aprendi e quero passar adiante - Dev in Sampa 2010

Parte II - Evoluindo

• Frameworks induzem um bom início

• Comunidade “anêmica”

• Maturidade

Page 14: O que aprendi e quero passar adiante - Dev in Sampa 2010

Cargo Culting

• Filosofia e relacionamentos na equipe

• Código

Page 15: O que aprendi e quero passar adiante - Dev in Sampa 2010

Filosofia

• Pressão

• Hype

• Participar de um grupo

• Cool

Page 16: O que aprendi e quero passar adiante - Dev in Sampa 2010

Pressão

• “Se não usar X, não está fazendo direito”

• A ferramenta certa para o trabalho

• Para quem?

• Ex: Cucumber/Steak

Page 17: O que aprendi e quero passar adiante - Dev in Sampa 2010

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”

Page 18: O que aprendi e quero passar adiante - Dev in Sampa 2010

“The tone is in your fingers”

Page 19: O que aprendi e quero passar adiante - Dev in Sampa 2010

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

Page 20: O que aprendi e quero passar adiante - Dev in Sampa 2010

Atacando o “problema” errado

• Demeter: chamar um acessor em outro objeto é o verdadeiro problema?

• NullDB: acessar BD em teste é o verdadeiro problema?

Page 21: O que aprendi e quero passar adiante - Dev in Sampa 2010

Atacando o “problema” errado

• Demeter

• Replica funcionalidade do delegate (stdlib)

• Problema real é exposição indevida de comportamento

Page 22: O que aprendi e quero passar adiante - Dev in Sampa 2010

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

Page 23: O que aprendi e quero passar adiante - Dev in Sampa 2010

Atacando o problema errado

• Soluções não-eficientes se tornam padrões

Page 24: O que aprendi e quero passar adiante - Dev in Sampa 2010

It’s evolution baby!

• Fat Controllers

• Skinny Controllers, Fat Models

• Skinny Controllers, Sexy Models, Flexible Services ;)

• Domain-Driven Rails?

Page 25: O que aprendi e quero passar adiante - Dev in Sampa 2010

Fat Models

• Negócios + Persistência

• Quebra SRP

• CRUD básico: OK

• Excesso de callbacks

• Esconde o domínio

• Falta: flexibilidade, isolamento

Page 26: O que aprendi e quero passar adiante - Dev in Sampa 2010

Camadas Tudo junto e misturado

Page 27: O que aprendi e quero passar adiante - Dev in Sampa 2010

Conceitos

• Muito difícil ensinar

• Maturidade através da experiência

• Acoplamento

• Coesão

• “Conascência” (conascence)

Page 28: O que aprendi e quero passar adiante - Dev in Sampa 2010

Mantra

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

Page 29: O que aprendi e quero passar adiante - Dev in Sampa 2010

Acoplamento

• Serviços

• Inversão de controle

• Injeção de dependência

• Não, não estamos falando de Java! ;)

Page 30: O que aprendi e quero passar adiante - Dev in Sampa 2010

Acoplamento

• Demo

• ActivityService

• SearchService

Page 31: O que aprendi e quero passar adiante - Dev in Sampa 2010

Acoplamento

• SOLID, DDD

• Sandi Metz, Jim Weirich, Pat Maddox, James Golick, Cassio Marques

• “Parametrização”

• SRP! SRP! SRP! SRP! SRP! SRP!

• Think about concerns

Page 32: O que aprendi e quero passar adiante - Dev in Sampa 2010

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

Page 33: O que aprendi e quero passar adiante - Dev in Sampa 2010

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

Page 34: O que aprendi e quero passar adiante - Dev in Sampa 2010

Obrigado