ruby sadism - ryan davis

Post on 28-Jun-2015

4.443 Views

Category:

Economy & Finance

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Versão em português da apresentação "Hurting Code for Fun and Profit" que o Ryan Davis deu na GoRuCo 2008.

TRANSCRIPT

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

www.akitaonrails.com(Fabio Akita)

goruco2008.confreaks.com/04_davis.html

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Machucando Código

por Diversãoe Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Criando Expectativa

• 142 slides em 30 minutos.

• Isto será rápido.

• Não é a forma como normalmente apresento.

• É mais sobre melhorar você do que o código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

UmaHistória

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Código Legado

• Qualquer código que você não escreveu é legado.

• Toda empresa tem tonelada de legados.

• Mesmo startups.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ou:

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

New Place, Inc.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

@#$%!!!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

CRAC

K!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

BLAM!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

SNICK!CR

ACK!

BAM!!!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

YAY!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Moral desta história?

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Pessoas vão te incriminar se machucá-las

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Código não.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Esta apresentação é um evento de “saída”

para mim

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Meu nome é Ryan, e…

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

…adoro machucar código…

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

…e estou Bem!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Por que machucar código?

• Machucar código é divertido!

• Pode te tornar um programador e testador melhor.

• Pode tornar o código mais limpo, claro e fácil de testar, escrever e manter ... até pode torná-lo mais rápido.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Sadismo Ruby:nomeA tendência de derivar prazer infringindo dor ao software.Esp. mal software.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

É apenas outra maneira de enxergar desenvolvimento de

software

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Eu dou risada toda vez que acho código que

posso punir.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Código com complexidade que conheço, eu posso

resolver.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

É sobre mudar sua perspectiva sobre

código ruim.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Torne divertido descobrir e corrigir e fará isso mais vezes.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Sadismo Ruby vêm em várias formas:

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Matar um bug escrevendo um teste.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Lendo código esperto demais e se coçar para quebrá-lo em pedaços.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Explodindo mal design, tornando-o mais rápido

com menos código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

e muito, muito mais.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Um Exemplo

• Um projeto rails de mídia social de 2 meses foi arrastado por 12 meses.

• Ligando ActiveRecord a WebDAV. Emulando o banco de dados inteiro via propriedades WebDAV.Desnecessariamente complexo e lento!

• Então, arranquei o WebDAV num fim de semana.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Terminado em 74.77783 segundos.622 testes, 2502 asserções

Depois:

Antes:

Terminado em 5.258559 segundos.330 testes, 961 asserções

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Tempo de Teste em 6 Meses

Post DAV

DAV

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Por alguma Razão as pessoas amam complexidade.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Elas festejam nisso.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

A comunidade Ruby não se parece única

nesse sentido.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Eu não sou uma dessas pessoas.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Mas, eu costumava ser uma delas.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Eu melhorei...

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

...e você também pode melhorar.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

20071984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004

10

0

1

2

3

4

5

6

7

8

9

Year

Fu/Sty

le U

nit

s

Pascal

C

Logo

UNIX/

Smalltalk/

OO Epiphany

C++

Ruby

Ruby

Sadism/

Asceticism

Perl/

Python/

etc

BASIC

Minha História de Programação

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ascetismo Ruby:nounCaracterizado por ou sugerindo a prática de severa auto-disciplina & abstenção de todas as formas de indulgência.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Flageladores

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Testar Antes é uma forma de auto-

disciplina.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

YAGNI é uma forma de abstenção.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ascéticos:

Vida Real™ Ruby

Evite possessões materiais.

Evite complexidade extra.

Auto-disciplina para chegar à alta

espiritualidade.

Auto-disciplina para melhor entender a si e

a mente do código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

O que é indulgência?

• Código desnecessariamente complexo e que tenta se esperto demais.

• Código ou design que você não imediatamente precise. Os “e se”.

• Débito Técnico.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Débito Técnico

• Pular design é como pegar dinheiro emprestado.

• Refatoramento é como o princípio de pagar de volta.

• Juros são pagos com tempo gasto com complexidade.

—Ward Cunningham–ComplexityAsDebt, c2.com

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

80:20 ou Princípio de Pareto

• Na maioria dos sistemas existe desequilíbrio entre produtores/consumidores, dinheiro/pessoas, etc.

• 85+% da terra é ocupada por 5% das pessoas.

• 80% do tempo é gasto com 20% do código.

• Use essa tendência para focar esforços de forma eficiente e objetiva.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Sinal : Barulho

• Normalmente relacionado a 80:20.

• Foque no que é importante.

• Minimize interrupções e tarefas irrelevantes para ter mais tarefas reais concluídas.

• Como meu gerente favorito gosta de falar:

• Grandes Crocodilos, Pequenos Crocodilos, Pântano.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Em outras palavras:

“A obrigação do desenvolvedor é garantir que o código sendo escrito mostre da maneira

mais clara sobre como a solução foi entendida no momento da sua escrita.”

–Ward Cunningham, c2.com

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Um Exemplo

• test/unit & rspec são reis de testes/specs mas são realmente grandes.

• O mspec de Brian Ford (do rubinius) é mais novo, pequeno, & compatível com rspec.

• O bacon de Christian Neukirchen & test/spec são alternativas minimalistas de spec.

• miniunit vai mais fundo: test+spec+mock < 1kloc.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

0

3,750

7,500

11,250

15,000

test/unit mspec rspec

12,862

6,476

2,464

7,785

2,763

3,571

lib test/spec

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

0

3,750

7,500

11,250

15,000

bacon miniunit test/spec

1,115578310

833395298

lib test/spec

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

0

300

600

900

1,200

bacon miniunit test/spec

1,115

578

310

833

395

298

lib test/spec

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Acredito que sadismo e ascetismo Ruby são

muito poderosos.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Mas chegar lá não é fácil.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Requer entender a si mesmo tão bem

quanto se entende o código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Desenvolvimento Orientado a

Introspecção

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Como faço melhor?Como não vi aquele bug?Onde estou perdendo em clareza?Como posso usar melhor minhas ferramentas?Onde desperdiço meu tempo?Como me foco melhor?Onde estou me segurando? estou errado?

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Faça essas perguntas constantemente!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-Melhoria:Leia!

• 1 livro nerd / mês = 12× média da indústria.

• c2.com & outros wikis c/ pessoas espertas.

• Fique tão próximo dos experts quanto posssível.

• Alguns blogs espertos.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ignorância NÃO é boa

“Pessoas que fazem coisas de mal jeito, [...] normalmente são altamente confiantes em

suas habilidades, de fato, mais do que pessoas que fazem as coisas direito.”

Erica Goode, NYTreportando em Dr. David Dunning, Cornell

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-Melhoria:Foco!

• Fique longe de:

• WTF, coding horror, forums idiotas.

• Um bilhão de blogs em seu leitor de feed.

• Toneladas de mailing lists super-ativas.

• Trabalhe no que é realmente importante.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

–7 Habits of Highly Effective People–Covey

Urgente Não Urgente

Importante

Não Importante

PressãoApagar Incêndios

Projetos orientados a datas

PrevençãoPlanejamento Pró-ativo

Implementando SistemasPrevenção de Cansaço

InterrupçõesApagar alguns IncêndiosMaioria das Reuniões

TVYoutube

Outras perdas de tempo

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

• Aprenda uma nova linguagem por ano.

• Aprenda suas ferramentas, a fundo. Agora mais a fundo.

• Examine seus hábitos de desenvolvimento.

• Codifique com outras pessoas.

• Estude alguma coisa não orientada a código.

• Pessoas de multi-disciplinares sempre são mais interessante e codificam melhor.

Auto-Melhoria:Cresça!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-Melhoria:Empurre!

Escreva mais código. Muito.

Quantidade > Qualidade (algumas vezes)

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Desafio dos Potes

• Um professor de potes disse à metade da classe que suas notas dependeriam de uma única peça que eles produziriam no final do curso.

• Ele disse à outra metade que suas notas seriam baseadas no volume de todas as peças criadas.

• Qual metade você acha que produziu melhores peças ao final?

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

“A função da grande maioria dos trabalhos artísticos é simplesmente lhe ensinar como

fazer a pequena fração de sua arte que levanta vôo.

Uma das lições básicas e difíceis que todo artista precisa aprender é que mesmo as

peças fracassadas são essenciais.”

—Art & Fear—Bayles & Orland

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

• Seja competitivo. Competição é prática.

• Desafie o Status Quo.

• Eles estão quase sempre errados.

• (Mesmo quando estão certos)

Auto-melhoria:Pressione, mais!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Não seja uma ovelha!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-melhoria:Sinta!

• Deixe as opiniões fluírem. Tenha opinião!

• Mas não as deixe mandar em você.

• zentest, flog, & heckle todos vieram do amor por boas ferramentas de desenvolvimento.

• vlad & image_science vieram do ódio de código impossivelmente complexo.• Eu gastei 10 hrs debugando UM problema de

capistrano antes de escrever vlad.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-melhoria:Feedback

• Use feedback:

• Peça por ele.

• Ouça ele.

• Retroalimente o feedback.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Auto-melhoria:Feedback

• Use feedback:

• Peça por ele.

• Ouça ele.

• Retroalimente o feedback.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Encontre seu balanço

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ferramentas que podem

ajudar

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

autotest

• Você provavelmente não tinha percebido que usar autotest é uma forma de sadismo e ascetismo ruby, não é?

• Pobre cara do Doom ...

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

autotest

• Você provavelmente não tinha percebido que usar autotest é uma forma de sadismo e ascetismo ruby, não é?

• Pobre cara do Doom ...

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

• Relator de complexidade baseado em métricas ABC.

• Nota Flog é correlato com complexidade de teste.

• Quanto maior a nota flog, mais difícil de ter um teste completo (& bom).

Flogclass Test def blah # 11.2 = a = eval "1+1" # 1.2 + 6.0 + if a == 2 then # 1.2 + 1.2 + 0.4 + puts "yay" # 1.2 end endend

Test#blah: (11.2) 6.0: eval 1.2: branch 1.2: == 1.2: puts 1.2: assignment 0.4: lit_fixnum

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

main#none: (22.9) 7.0: to_proc_normal 3.3: assignment 3.1: branch 2.0: inject 1.8: constantize 1.8: association 1.6: columns 1.6: options 1.4: [] 1.4: block_pass 1.4: map 1.2: include? 1.2: keys

Complexidade Desnecessária 1if MODELS.keys.inject(true) {|b, klass| b and klass.constantize.columns.map(&:name).include? association.options[:foreign_key]} then # ...end

1linha if(!) 132caracteres 132 méd carac22.9flog

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Complexidade Desnecessária 2

main#none: (23.5) 7.5: to_proc_normal 4.7: assignment 3.4: branch 2.2: inject 1.9: constantize 1.7: columns 1.5: block_pass 1.5: map 1.5: association 1.3: include? 1.3: keys 1.3: options 1.1: []

fk = association.options[:foreign_key]if MODELS.keys.inject(true) {|b, klass| b and klass.constantize.columns.map(&:name).include? fk} then # ...end

3linhas 144caracteres 48 méd carac.23.5flog

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Complexidade Desnecessária 3

main#none: (22.8) 7.0: assignment 6.0: to_proc_normal 4.5: branch 2.3: map 2.2: inject 1.6: constantize 1.5: association 1.4: columns 1.3: include? 1.3: options 1.3: keys 1.2: block_pass 1.1: []

fk = association.options[:foreign_key]columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) }if columns.inject(true) {|b, column| b and column.include? fk} then # ...end

4linhas 182caracteres 45 méd caract23.5flog

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Complexidade Desnecessária 4

main#none: (20.8) 6.0: to_proc_normal 4.6: assignment 3.3: branch 2.3: map 1.6: constantize 1.5: association 1.4: columns 1.3: keys 1.3: options 1.2: block_pass 1.2: include? 1.1: [] 1.1: all?

fk = association.options[:foreign_key]columns = MODELS.keys.map { |key| key.constantize.columns.map(&:name) }if columns.all? {|column| column.include? fk} then # ...end

4linhas 165caracteres 41 méd carac20.8flog

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Complexidade Desnecessária 5

main#none: (15.9) 5.9: assignment 4.5: branch 2.3: map 1.6: constantize 1.5: association 1.4: columns 1.3: name 1.3: options 1.3: keys 1.2: include? 1.1: [] 1.1: all?

fk = association.options[:foreign_key]columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } }if columns.all? {|column| column.include? fk} then # ...end

4linhas 172caracteres 43 méd carac15.9flog

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Complexidade Desnecessária 5

main#none: (15.9) 5.9: assignment 4.5: branch 2.3: map 1.6: constantize 1.5: association 1.4: columns 1.3: name 1.3: options 1.3: keys 1.2: include? 1.1: [] 1.1: all?

fk = association.options[:foreign_key]columns = MODELS.keys.map { |key| key.constantize.columns.map { |c| c.name } }if columns.all? {|column| column.include? fk} then # ...end

4linhas 172caracteres 43 méd carac15.9flog

Muito mais limpo, claro e rápido

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ferramentas de Cobertura

São excelentes para mostrar buracos.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

…mas…

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

De jeito nenhum significam qualidade

dos testes.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

"Temos 100% de cobertura"

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

… E daí?!?

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Você pode ter 100% de cobertura com 0

asserções.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

(ou, mais freqüente:más asserções)

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Exemplo absurdoclass Vida def significado 42 endend

class TestVida < Test::Unit::TestCase def test_significado real = Vida.new.significado esperado = 6 * 9 assert_equal esperado, real endend

VIVA!100% de

cobertura!

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

O que 100% de cobertura significa

então?

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Cobertura é o Raio-X do mundo do código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Raios-X são ótimas ferramentas, mas não a use quando você está

sangrando.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Heckle

• Ferramenta mais sádica que escrevi.

• Muda sua implementação (em tempo real) para verificar se seus testes são bons.

• Se seus testes passam depois disso, você está perdendo casos.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Para Repetir

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Divirta-se machucando código ruim e você terá

menos deles com o tempo.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Pratique severa auto-disciplina & abstenção.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Evite complexidade.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Pratique Desenvolvimento

Orientado à Introspecção.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Conheça-te.Melhora-te.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Use todas as ferramentas que puder.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Mas use a ferramenta certa para o trabalho.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Tenha uma opinião&

Sinta seu código

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Para Fechar

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Frank Herbert estava errado

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Medo não é o assassino da mente

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Apatia é o assassino da mente

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Você precisa se importar pelo código

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Ame-o

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

ou o Odeie

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Qualquer um é melhor do que Apatia

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Preferível ao desenvolvedor que diz

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

“Apenas sou pago para escrever código”

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Você vai acabar tendo que manter o código deles

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

(porque eles vão embora)

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Odiando o código deles.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

O impacto deles no projeto.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Na produtividade e moral da equipe.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Portanto, Ame o código…

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

…ou o Odeie.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Se você o amar:

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Cuide dele.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Faça o crescer.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Torne-o maravilhoso.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Se você o odiar:

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Machuque-o.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Despedace-o.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Reescreva-o.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Seja apaixonado pelo que está trabalhando.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Caso contrário você está morto por dentro

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

…assim como seu código.

GoRuCo 2008

Ryan Davis, Seattle.rbMachucando Código por Diversão e Lucro

Obrigado.

top related