Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mantendo as aparências

Mantendo as aparências

Apresentação do capitulo 2 "Mantendo as aparências" do livro "Como ser um programador melhor" do Pete Goodlife.

Projeto de "Leitura Coletiva" de livros técnicos no Gaveteiro.

Fcced4ae869ba4632fecfef5c4189075?s=128

Luiz Rocha

June 24, 2016
Tweet

Transcript

  1. http://shop.oreilly.com/product/0636920033929.do

  2. Mantendo as aparências 2.

  3. Primeiro: definição básica

  4. Bons programadores escrevem código bom

  5. Programadores ruins.. nem tanto

  6. Certo?

  7. None
  8. Errado.

  9. A diferença é de atitude

  10. É querer escrever o melhor código possível

  11. ̣ Claro ̣ Correto ̣ Fácil de ler ̣ Revele

    sua intenção ̣ Feito para ser mantido ̣ Minimize bugs
  12. Melhor possível

  13. Você se importa com seu código?

  14. Apresentação é comunicação eficaz

  15. bool ok = thisCouldGoWrong(); if (!ok) fprintf(stderr, "Error: exiting...\n"); exit(0);

  16. SSL GOTO Fail http://google.com/search?q=ssl+goto+fail

  17. hashOut.data = hashes + SSL_MD5_DIGEST_LEN; hashOut.length = SSL_SHA1_DIGEST_LEN; if ((err

    = SSLFreeBuffer(&hashCtx)) != 0) goto fail; if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; err = sslRawVerify(...);
  18. hashOut.data = hashes + SSL_MD5_DIGEST_LEN; hashOut.length = SSL_SHA1_DIGEST_LEN; if ((err

    = SSLFreeBuffer(&hashCtx)) != 0) goto fail; if ((err = ReadyHash(&SSLHashSHA1, &hashCtx)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &clientRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0) goto fail; if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) goto fail; goto fail; if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0) goto fail; err = sslRawVerify(...);
  19. Nomes definem contexto

  20. bool numberOfGreenWidgets; string name; void turnGreen();

  21. numberOfGreenWidgets name turnGreen

  22. ̣ Apresentação inconsistente ̣ Nomenclatura confusa Baixa qualidade

  23. Lembre-se de quem vai ler o código

  24. Apresentação

  25. Quem vai ler o código, afinal?

  26. ̣ Compilador, Máquina Virtual ̣ Seres humanos: ๏ você, naquele

    momento ๏ você, semanas depois ๏ seus colegas ๏ futuros mantenedores
  27. Crie uma boa estrutura

  28. ̣ Separe blocos por propósito ̣ Mantenha blocos pequenos ̣

    Ordem do código importa ̣ Público antes do privado
  29. Mantenha consistência visual

  30. Use as convenções da comunidade

  31. http://airbnb.io/projects/ruby/ https://github.com/styleguide/ruby https://github.com/bbatsov/ruby-style-guide

  32. EditorConfig FTW

  33. Nomenclatura

  34. ̣ Variáveis ̣ Funções, Métodos ̣ Objetos, Classes ̣ Namespace

    ̣ Tipos ̣ Tabelas, Colunas, DB ̣ Cache
  35. Identidade

  36. ̣ Evite redundância ̣ Seja claro ̣ Seja idiomático ̣

    Seja preciso
  37. Caso Recente…

  38. class Product has_many :related_products end

  39. class Product has_many :related_products end retorna produtos relacionados, certo?

  40. None
  41. +----+------------+------------+--------------+ | id | product_id | related_id | relationship |

    +----+------------+------------+--------------+ | 1 | 1 | 8526 | related | | 2 | 1 | 2 | related | +----+------------+------------+--------------+
  42. Código é para ser lido e compreendido por pessoas

  43. Perguntas?

  44. Gaveteiro