Essa é uma revisão anterior do documento!
Tabela de conteúdos
Desenvolvimento de sistemas: boas práticas
Tentei reunir aqui boas práticas que gosto de usar para programar. São dicas pessoais que alguns podem preferir não usar, mas as obtive de várias fontes e muitas são de consenso geral. Algumas dicas são genéricas, outras mais adequadas a uma ou outra linguagem. Quando comecei a escrever estava programando principalmente em python, mas também frequentemente em shell (principalmente bash) e as vezes em php. No passado já programei em C, pascal, perl, fortran e talvez alguma outra linguagem que não estou lembrando agora.
Para escrever bom código
Geral
- Use um lint(ou linter) pra checar vários aspectos do código. Ex: https://www.pylint.org/
- Criar testes automatizados
- Não usar linhas maiores que 80 caracteres
- Crie e use bibliotecas de funções
Variáveis
- Dar nomes descritivos a variáveis e funções
- Adotar camelCase ou snake_case para nomear variáveis e funções
- Adotar maiúsculas para constantes
- Não usar números diretamente, crie uma constante que diga no nome o que ele é (ex: PI, RAIO_DA_TERRA, etc)
- Evitar variáveis globais
- Para definir valores default pode usar a passagem de parâmetro pra função
Funções / Objetos
- Descrever todas as funções
- Criar funções pequenas, segmentando o código
- Eliminar flags booleanos
- Ordem das funções de acordo com uso
- Nomes
- Nomes bem descritivos, como com as variáveis
- Procurar usar sempre os mesmos verbos pras mesmas ações, não usar obter, pegar, get, … escolher um.
- Evitar parâmetros desnecessários
- DRY (evitar ser repetitivo)
- Evitar efeitos colaterais
- Evitar variáveis globais!!!! (vale repetir)
Formatação
Lembre-se que outra pessoa pode mexer no seu código mesmo que você não preveja isso inicialmente. Além disso você mesmo pode não lembrar mais o que você fez.
- Indente sempre bem ou pode entender errado que comandos estão dentro de que estruturas. Com uma IDE isso é bem fácil
- O uso de um lint(er) pode ajudar a identificar algumas faltas de padrão
- Um formatador, como o black pra Python, ajuda a manter o código coerente (formatando coisas opcionais sempre da mesma forma) e legível
Testes automatizados
- Algumas linguagens já tem frameworks prontos para adiantar esse trabalho, como o pytest para Python, shUnit2 para Shell, PHPUnit etc
- Criar funções ou classes que recebam e retornem parâmetros testáveis
- Criar outro programa que teste, com os testes programados ou preparar trecho do programa para atuar nos testes
- Uso de
if __name__ == "__main__":
no Python para diferenciar quando o script está sendo chamado diretamente e quando está sendo carregado por outro, visando não executar o programa principal se estiver sendo testado
IDE
- Use checagem de sintaxe no VIM e auto compleção
- vim-syntastic
- vim-youcompleteme
Reuso
- Ao criar classes/códigos reusáveis, defina a versão (no nível da classe, não da instância)
- Ao criar número de versão no código use tipo string
ETC
Exemplo de cabeçalho padrão (python):
#!/usr/bin/python3 # -*- coding: UTF-8 -*- # # <Descrição> A segunda linha acima permite o uso de acentuação no arquivo # # # Historico # 27.11.2018 - <identificação da pessoa> - Criação # 13.12.2018 - <identificação da pessoa> - Lorem Ipsilum # # A Fazer # - Tarefa 1 # - Tarefa 2 # - subtarefa 2.1
Referências
- Referência boa de livros de algumas linguagens populares: https://goalkicker.com/
- Vídeo Python's Class Development Toolkit - bom para programar classes reutilizáveis, muitas dicas próprias de python.
- Cursos gratuitos da USP no Coursera: