Há muita conversa sobre as melhores práticas 1 no desenvolvimento de software. Eu já vi pelo menos três pontos principais discutirem bastante no SE e em outros lugares:
- O que qualifica como uma prática recomendada e por quê?
- As melhores práticas valem a pena discutir em primeiro lugar, porque é razoável afirmar que nenhuma prática é uma "melhor" prática?
- Quando você deve renunciar a uma prática recomendada - ou talvez a maioria das práticas recomendadas - ou porque não parece aplicável ou devido a restrições externas (tempo, dinheiro, etc.) que tornam a troca impraticável?
Algo que parece surgir com muito menos frequência, mas mais do que nunca, é uma noção de senso comum no desenvolvimento de software. Experiências recentes trouxeram essa noção à minha mente novamente.
Minha impressão inicial é que é uma discussão diferente das melhores práticas, mas talvez com alguma polinização cruzada.
Quando penso no senso comum em geral, penso em um conjunto de regras que você adotou ou aprendeu que lhe dão uma linha de base para raciocinar e tomar decisões. Seguir o bom senso é uma boa maneira de evitar que você tire toda a sua perna. Mas, além de uma linha de base bastante baixa, o senso comum dá lugar à necessidade de tomar decisões educadas, e as decisões educadas podem até substituir o senso comum quando as evidências parecem suficientemente convincentes. Eu posso estar jogando um pouco frouxamente com a definição aqui, mas acho que está perto o suficiente para liderar meu exemplo.
Quando penso no senso comum no desenvolvimento de software, penso em todas as regras de higiene básica para impedir que uma base de código se decomponha rapidamente em uma confusão incompreensível. Como exemplos, coisas como: não usar uma única estrutura global para manter e comunicar estado dentro de um programa não trivial; não usar nomes de variáveis / métodos / classes que são apenas rabiscos aleatórios; coisas que provavelmente se assemelham ao que passamos a chamar de antipadrões. Onde a aplicação das melhores práticas é o análogo prático dos padrões de aprendizagem, a aplicação do bom senso pode ser vista como o análogo prático dos antipadrões de aprendizagem.
Com isso em mente, gostaria de fazer algumas perguntas para as quais ver as respostas de outras pessoas pode me ajudar a entender o caminho.
Outros acreditam que existe uma noção de bom senso no desenvolvimento de software? Estaria interessado em saber o raciocínio de qualquer maneira.
Se sim, vale a pena discutir essa noção? É algo que devemos pressionar tanto quanto às vezes fazemos com as melhores práticas? Vale a pena pressionar ainda mais?
Se a analogia com os antipadrões parecer razoável, a regra geral é que os antipadrões são empregados apenas se não houver outra maneira, e mesmo assim apenas em circunstâncias muito limitadas. Qual deve ser a flexibilidade de permitir que uma base de código se desvie do senso comum? Parece irracional que a resposta seja "nem um pouco", porque às vezes a conveniência exige desvios. Mas, parece um tipo diferente de argumento do que quando empregar uma "melhor prática". Talvez não seja; se você não acha, gostaria de saber o porquê.
Isso é muito mais aberto e talvez digno de uma pergunta subsequente por si só, que tipo de recomendações você apontaria para isso parecem questões de bom senso?
Outros pensamentos também são bem-vindos.
1 Talvez seja melhor chamá-los de "padrões de domínio comumente recorrentes", mas o nome "melhores práticas" é comum o suficiente para que todos saibam o que são, mesmo que não concordem. Se a parte "melhor" o incomoda, imagine que eu substitui "melhores práticas" por algo menos autoritário.