Clean Code

9.379 visualizações

Publicada em

Publicada em: Tecnologia, Diversão e humor
3 comentários
22 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
9.379
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5.228
Ações
Compartilhamentos
0
Downloads
66
Comentários
3
Gostaram
22
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Clean Code

  1. 1. Rodrigo Branas – @rodrigobranas - http://www.agilecode.com.brIntrodução ao Clean Code
  2. 2. @rodrigobranas rodrigo.branas@gmail.com http://www.agilecode.com.brFormação AcadêmicaCiências da Computação – UFSCGerenciamento de Projetos - FGVCertificaçõesSCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
  3. 3. Rodrigo Branas – rodrigo.branas@gmail.com10 anos de experiência na plataforma Java1000 horas em sala de aulaMais de 50 palestras em eventosLíder da área de desenvolvimento na GenneraAutor da revista Java MagazinePalestranteInstrutor da Academia Java e Agile da GlobalcodeCriador dos treinamentos de Clean Code, Selenium eMaven da Agile CodeTrabalhou com as empresas:EDS, HP, GM, Citibank, OnCast, Globalcode, V.Office, Dígitro, Softplan, Unimed, Suntech, Vale do Rio
  4. 4. O conteúdo deste treinamento vai afetar na sua zona de conforto
  5. 5. Sobre o que vamos falar?
  6. 6. Profissionalismo e Felicidade!
  7. 7. Insatisfação com o fracasso!
  8. 8. Existe diferença?
  9. 9. Insatisfação com o trabalho
  10. 10. Você se sente profissional?
  11. 11. Você se sente profissional?
  12. 12. Você se sente profissional?
  13. 13. Poderia ser mais produtivo?
  14. 14. Sensação de impotência
  15. 15. Se sente sempre fazendo umtrabalho braçal e desgastante?
  16. 16. Qual é a diferença entre cansaço e stress?
  17. 17. Já teve vontade de largar tudo?
  18. 18. O que mais motiva um desenvolvedor?
  19. 19. “Quem trabalha apenas pelosalário, ganhe o que for, será sempre mal pago.” (Autor desconhecido)
  20. 20. “Qual é a sua obra? Quando você se for, o vai restar?” (Mario Cortella)
  21. 21. Afinal, quanto custa a bagunça para a empresa?
  22. 22. Alta rotatividade
  23. 23. Demora no lançamento de novas funcionalidades
  24. 24. Dificuldade na hora de realizar qualquer modificação...
  25. 25. Alta incidência de bugs?
  26. 26. Quanto custa a falta deconfiança do seu cliente?
  27. 27. Quanto tempo você perdetentando entender o código para corrigir um bug?
  28. 28. Conclusão: Passamos a maiorparte do tempo lendo o código!
  29. 29. Evolução da Produtividade Uncle Bob – Robert C. Martin
  30. 30. Debate: Dois programadores são mais produtivos que um? (Pair)
  31. 31. O que é Clean Code?
  32. 32. Você teria medo de tomar o remédio?
  33. 33. Código feito com cuidado
  34. 34. Que revela suas intenções
  35. 35. Simples
  36. 36. Fácil de entender
  37. 37. “Qualquer tolo consegue escrevercódigo que um computador entenda.Bons programadores escrevem código que humanos possam entender.” (Martin Fowler)
  38. 38. Funcionar é o mínimo que se espera.
  39. 39. Qualidade Externa x Interna
  40. 40. Qualidade externa é aquela que você percebe logo de cara. Se ausabilidade da interface for ruim, aperformance for sofrível e defeitos acontecem com frequência, a pessoa logo percebe e sequer compra o software.
  41. 41. Qualidade interna é aquela que você só percebe com o tempo.Infelizmente o comercial não vende esse tipo de qualidade. Noentanto, é ela que atrasa o negócio e mata a empresa aos poucos, sufoca e aumenta oscustos. É ela que gera boa parte da rotatividade.
  42. 42. Como medir a qualidade do código?
  43. 43. Linhas de código?Número de métodos?Número de classes?Linhas de código por método?Complexidade ciclomática?Número de estruturas de decisão? ?
  44. 44. WTF?
  45. 45. WTF?WTF?
  46. 46. WTF?WTF?WTF?WTF?
  47. 47. Dificuldade para entender
  48. 48. Nível máximo de sujeira
  49. 49. Debate: Até que ponto vale apena continuar mantendo um projeto vivo?
  50. 50. Falar é fácil!
  51. 51. O desafio é criar código de qualidade!
  52. 52. No entanto, falar é o primeiro passo rumo a melhoria!
  53. 53. Quatro estágios necessários para adquirir novos hábitos
  54. 54. Estágio 1“Inconsciente e sem habilidade” Ignoramos o comportamento e o hábito
  55. 55. Estágio 2“Consciente e sem habilidade”Conhecemos o comportamentomas ainda não temos o hábito de aplicá-lo”
  56. 56. Estágio 3 “Consciente e habilidoso”Nos sentimos confortáveis com pela prática que vamos adquirindo com o tempo
  57. 57. Estágio 4“Inconsciente e habilidoso”O hábito se torna uma coisa natural
  58. 58. Escrever código limpo requer muita prática e habilidade!
  59. 59. Começando a treinar
  60. 60. Nomes estranhos
  61. 61. Limitação histórica
  62. 62. 1. READ INPUT TAPE A1, B1, C1;2. 501 FORMAT A1;3. IF (A1) 777, 777, 7774. IF (B1) 888, 888, 8885. IF (C1) 999, 999, 9996. STOP 17. 799 S = FLOATF(A1 + B1 + C1) / 2.08. WRITE TO TAPE S9. END PROCESSAs linguagens não ajudavam
  63. 63. Os ambientes não ajudavam
  64. 64. Os computadores não ajudavam
  65. 65. Recebendo a herança maldita!
  66. 66. Aprendendo com os mestres
  67. 67. 1. // Descrição da maquina2. String m_desc;3. // Resultado parcial da soma4. int s1;5. // Cor dos olhos6. String cOlhos;7. // Valor do índice temporário8. int aux;
  68. 68. Revelando a intenção
  69. 69. 1. // Descrição da maquina2. String m_desc;3. // Resultado parcial da soma4. int s1;5. // Cor dos olhos6. String cOlhos;7. // Valor do índice temporário8. int aux;
  70. 70. 1. // Descrição da maquina2. String descricaoDaMaquina;3. // Resultado parcial da soma4. int resultadoParcialSoma;5. // Cor dos olhos6. String corDosOlhos;7. // Valor do índice temporário8. int valorDoIndiceTemporario;
  71. 71. 1.2. String descricaoDaMaquina;3.4. int resultadoParcialSoma;5.6. String corDosOlhos;7.8. int valorDoIndiceTemporario;
  72. 72. 1. String descricaoDaMaquina;2. int resultadoParcialSoma;3. String corDosOlhos;4. int valorDoIndiceTemporario;
  73. 73. Não seja genérico
  74. 74. 1. // Processa folha de pagamento2. void processa();3. // Calcula o imposto de renda ret.4. void calcula();5. // Renderiza o relatório de alunos6. void renderiza();7. // Totaliza as estatísticas da ligação8. void totaliza();
  75. 75. 1. // Processa folha de pagamento2. void processaFolhaPagamento();3. // Calcula o imposto de renda ret.4. void calculaImpostoRetido();5. // Renderiza o relatório de alunos6. void renderizaRelatorioAlunos();7. // Totaliza as estatísticas da ligação8. void totalizaEstatisticasLigacao();
  76. 76. 1.2. void processaFolhaPagamento();3.4. void calculaImpostoRetido();5.6. void renderizaRelatorioAlunos();7.8. void totalizaEstatisticasLigacao();
  77. 77. 1. void processaFolhaPagamento();2. void calculaImpostoRetido();3. void renderizaRelatorioAlunos();4. void totalizaEstatisticasLigacao();
  78. 78. Simplificando estruturas de decisão
  79. 79. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (hora > 22:00 || hora < 06:00) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
  80. 80. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if () {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
  81. 81. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
  82. 82. 1. ...2. double calculaValorDaCorrida() {3. if (ehBandeiraDois()) {4. return distancia * 3.90;5. } else {6. return distancia * 2.10;7. }8. boolean ehBandeiraDois() {9. return hora > 22:00 || hora < 06:00;10. }11. ...
  83. 83. Magic numbers
  84. 84. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * 3.90;6. } else {7. return distancia * 2.10;8. }9. }10. ...
  85. 85. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia *;6. } else {7. return distancia *;8. }9. }10. ...
  86. 86. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * PRECO_B_2;6. } else {7. return distancia * PRECO_B_1;8. }9. }10. ...
  87. 87. 1. class Taximetro {2. ...3. double calculaValorDaCorrida() {4. if (ehBandeiraDois()) {5. return distancia * PRECO_BANDEIRA_2;6. } else {7. return distancia * PRECO_BANDEIRA_1;8. }9. }10. ...
  88. 88. Saindo do labirinto
  89. 89. 1. double calculaValorDaCorrida() {2. if (hora > 22:00 || hora < 06:00) {3. return distancia * 3.90;4. } else {5. if (diaDaSemana eq Domingo) {6. return distancia * 2.9;7. else {8. return distancia * 2.10;9. }10. }
  90. 90. Distância da margem
  91. 91. 1. double calculaValorDaCorrida() {2. if (hora > 22:00 || hora < 06:00) {3. return distancia * 3.90;4. } else {5. if (diaDaSemana eq Domingo) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
  92. 92. 1. double calculaValorDaCorrida() {2. if () {3. return distancia * 3.90;4. } else {5. if () {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
  93. 93. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. } else {5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10. }
  94. 94. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10.
  95. 95. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. } else {8. return distancia * 2.10;9. }10.
  96. 96. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9.10.
  97. 97. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9.10.
  98. 98. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * 3.90;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * 2.9;7. }8. return distancia * 2.10;9. }
  99. 99. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia *;4. }5. if (ehHorarioDeDomingo()) {6. return distancia *;7. }8. return distancia *;9. }
  100. 100. 1. double calculaValorDaCorrida() {2. if (ehBandeiraDois()) {3. return distancia * PRECO_BANDEIRA_2;4. }5. if (ehHorarioDeDomingo()) {6. return distancia * PRECO_DE_DOMINGO;7. }8. return distancia * PRECO_BANDEIRA_1;9. }
  101. 101. Medo de estragar algo?
  102. 102. Test-Driven Development
  103. 103. Economize, teste mais cedo!
  104. 104. Ferramentas – Hudson + Sonar

×