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.
fonte
Respostas:
As melhores práticas são práticas que foram consideradas funcionais em um campo relativamente amplo de circunstâncias. O problema com eles é que A) a expressão às vezes é abusada para marketing e B) como regras fixas, elas não são flexíveis o suficiente; nenhum conjunto de regras fixas deve ser seguido sem pensar se elas se aplicam à situação atual.
As melhores práticas são ótimas quando vêm com explicações sobre por que são "melhores" e em que circunstâncias devem ser usadas. Então você pode pensar em quando não usá-los.
O problema do "senso comum" é que ele é flexível demais - pode ser usado para justificar praticamente qualquer coisa, e você não pode ter uma discussão racional quando as pessoas discordam e ambas afirmam que sua posição é "senso comum". É bom ter, mas ruim, como orientação para uma equipe seguir.
fonte
Eu acho que você tem ao contrário.
Ao ensinar aos programadores o básico sobre segurança, eu sempre os ensino a usá-los
best practices
, e ainda assim, ao lidar com especialistas em segurança (ou mais programadores "com experiência em segurança"), nunca discutireibest practices
, na verdade os violarei com frequência.Uma definição melhor seria:
Ou seja, você não pode reivindicar "bom senso" até ter experiência suficiente no campo especificado para entender as vantagens sutis; e, quando o fizer, não deverá mais seguir cegamente as "melhores práticas" do cortador de biscoitos.
As "melhores práticas" são um espaço reservado temporário até que você tenha experiência suficiente para usar seu próprio "bom senso".
fonte
Práticas recomendadas -> "primeiro, você aprende as regras". Experiência -> "então você aprende quando e como quebrá-las".
A disposição de experimentar alternativas (em código não crítico, é claro - de preferência projetos pessoais e descartáveis) pode ajudar a construir a experiência que você precisa.
O senso comum não é o mesmo que experiência, é claro, e você nem sempre precisa de muita experiência para ver a falha na aplicação de uma boa técnica no lugar errado - mas é muito fácil construir racionalizações falsas para aplicar demais e sub-aplicação de uma técnica, e como "senso comum" aqui claramente não é um conhecimento inato de programação, esse sentido é claramente "comum" somente dentro de grupos específicos.
É muito fácil "tomar partido". Impossível evitar, de fato - às vezes um lado está realmente certo, e o outro realmente está errado, e seria irracional argumentar por equilíbrio. O problema aqui é que o inferno real não pesa tanto uma prática recomendada por relevância, mas quando duas opiniões conflitantes sobre a prática recomendada colidem.
Lidar com isso provavelmente tem muito mais a ver com as habilidades das pessoas do que com as técnicas. Eu sou muito ruim nisso :-(
Apesar disso, ainda é importante aprender com a experiência de outras pessoas e com a sua - ou seja, descobrir quais são as melhores práticas, por que elas são usadas e quais são as vantagens (e desvantagens).
fonte
Parece-me que esta pergunta é uma artimanha semântica. Se usarmos essas definições, não há dúvida:
Prática recomendada: uma maneira comprovada em campo de resolver um problema em um determinado domínio (por exemplo, as práticas recomendadas em tempo real são totalmente estranhas às práticas recomendadas do banco de dados)
Senso comum: experiência profissional que serve para alertar o programador de armadilhas para evitar
No final, uma Melhor Prática é um padrão de meta-design para resolver uma congruência específica de problemas e é escolhida com base em experiências do mundo real, enquanto o Senso Comum é um guia para a solução de problemas com base na observação geral em vários conjuntos de problemas.
fonte
fonte
Momento interessante. Na semana passada, este artigo foi publicado discutindo por que o senso comum não é necessariamente ideal em todas as situações.
O senso comum é primorosamente adaptado para lidar com o tipo de complexidade que surge nas situações cotidianas ... E, como funciona tão bem nessas situações, estamos inclinados a confiar em todas as situações
(minhas palavras em negrito)
Basicamente - os humanos não são bons em usar o bom senso em áreas como esta em que não desenvolvemos um sistema arraigado; portanto, devemos SEMPRE usar um conjunto de padrões documentados e não confiar em nosso próprio senso comum!
fonte
O senso comum não corresponde ao aprendizado de antipadrões, nem é diferente ou contrasta com as melhores práticas.
O primeiro problema com o senso comum é o seu nome - leva à conclusão de que é ao mesmo tempo comum e sensato. Como comumente usado, está sujeito a ataques em ambos os casos. Usando seu exemplo:
Entendo que não é assim que surgem os antipadrões. É de um acréscimo de fatores culturais e sociais; desconsiderar as melhores práticas e padrões durante um período substancial; de ignorar os custos no futuro para obter benefícios a curto prazo - por exemplo, cumprir um prazo usando uma solução de atalho que é um pesadelo de manutenção; etc. Nenhum corpo decide adotar um antipadrão deliberadamente - eles apenas crescem.
Da mesma forma, o senso comum é usado com muita frequência para significar "o que é feito com frequência" e justificando a falta de pensamento, discernimento e trabalho duro na resolução do que está envolvido no fornecimento de uma solução. Também é usado como justificativa para "é do jeito que eu faço, então, obviamente, é senso comum" - e como uma defesa contra críticas e críticas.
No que diz respeito às melhores práticas, os dois primeiros parágrafos de Michael são um excelente resumo de quais devem ser as melhores práticas - um recurso para ajudar todos a melhorar o que fazem. Também fornece transparência nas decisões (principalmente decisões de design) e a capacidade de aprender com os outros. A desvantagem das melhores práticas é quando ela gera uma cultura de lista de verificação - "Marquei todas as caixas, então o que fiz deve ser bom" - sem aplicar pensamento, cuidado e atenção à natureza da aplicabilidade da lista de verificação.
fonte
Este é um argumento de declive escorregadio que muitas vezes se transforma em uma guerra religiosa.
Quase todas as melhores práticas podem ser combatidas com um caso válido para fazer o oposto.
Algumas práticas recomendadas são mais "melhores" que outras. As variáveis de estado global quase sempre são melhor executadas de maneira diferente e o GOTO geralmente é uma má ideia, mas quando você entra nos argumentos padrão / antipadrão ou dados diretos / dados abstratos, fica um pouco menos claro. Ainda mais quando você começa a falar sobre metodologias e práticas de desenvolvimento.
Em algumas situações, o senso comum e as melhores práticas são opostas.
Não existe um corpo diretivo de boas práticas e nenhum grupo, mesmo que exista, poderia definir todos os "melhores" possíveis para todas as situações possíveis. Muitas coisas rotuladas como melhores práticas são apenas um marketing ruim, tentando vender ferramentas ou treinamento desinformados a indivíduos.
Mesmo quando toda a sua equipe concorda que algo é melhor, nem sempre é possível implementá-lo dessa maneira por vários fatores restritivos.
IMHO, você deve usar as melhores práticas como um guia sobre o que considerar com mais cuidado em seu design. Você pode ter um motivo válido para se desviar, mas provavelmente precisará garantir que todos os demais membros da equipe concordem antes de você criar algo estranho.
Alguns dos argumentos sobre as melhores práticas após esse ponto se resumem a não criar algo que o próximo desenvolvedor que precisa trabalhar nele odeie. Todo mundo odeia código que não é o estilo deles, e todo mundo culpa tudo de quem sai, então você vai explicar isso para o próximo desenvolvedor depois que resmungar sobre alguma coisa, ou você não estará lá e será maltratado independentemente de como você o codifica. Isso torna essa preocupação principalmente irrelevante.
fonte
O senso comum nem sempre produz os melhores resultados. As melhores práticas, no entanto, foram tentadas. Isso faz das melhores práticas uma fonte de informações mais confiável.
fonte
As melhores práticas não são as melhores e o bom senso não é comum. ;-)
Para práticas recomendadas ou bom senso, gosto de pensar nelas como padrões; Lembre-se da definição de um padrão: Uma solução em um contexto que resolve forças em um contexto resultante .
Para qualquer coisa que você queira fazer, você deve conhecer o contexto ao qual se aplica, as forças que resolve e o contexto resultante que cria. Em seguida, decida em sua equipe quais são os padrões que você geralmente usa. (Isso pode ser formal ou informal, mas, de qualquer forma, é muito maior do que apenas o livro da Gangue dos Quatro. Isso inclui expressões idiomáticas e bibliotecas auxiliares locais, não apenas padrões publicados.)
Se você sentir, com base em sua experiência, que, em uma determinada circunstância, seria melhor não usar um determinado padrão, mas fazer outra coisa, informe as pessoas. Provavelmente, o contexto ou as forças são diferentes aqui (ou talvez o contexto resultante seja indesejado.) Não me importo se é uma reunião, um comentário de código ou o quê, mas se você deixar claro que quebrou o padrão de propósito , você estará milhas à frente.
fonte
A melhor prática é o que eles ensinam na escola; o senso comum é o que o chefe quer que você formule. O primeiro cria software que atende a certos padrões de elegância, estilo e afins. Este último paga as contas / faz o dinheiro para que você seja pago a cada semana.
Um é arte, o outro negócio, muitos de nós esquecemos.
fonte
Para exagerar um pouco: a diferença é senso comum é preconceito, a melhor prática é (deveria ser) ciência
Na minha experiência, o 'senso comum' é usado quando não se deseja fornecer provas ou pelo menos argumentos para uma maneira de fazer as coisas. Isso não significa que o caminho esteja necessariamente errado, mas também não significa que seja bom.
Entre as coisas que encontrei, que foram racionalizadas como sendo senso comum, estão essas jóias.
O engraçado do "senso comum" é que isso não é tão comum: escolha duas equipes e deixe que elas declarem o que consideram "senso comum" e desfrutem das guerras religiosas.
Por outro lado, como 'melhores práticas', consideraria maneiras de fazer as coisas, que têm um pouco mais de 'revisão por pares'. Para considerar algo como uma 'melhor prática', eu esperaria que ela fosse formulada com clareza suficiente para que possa ser apresentada como um conceito ('programação estruturada' é a melhor prática, 'gotos são confusos, evitá-los' é senso comum) e aplicado mais de uma vez, com bons resultados.
fonte