A diferença entre boas práticas e bom senso?

13

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.

Ed Carrel
fonte
2
Ter bom senso significa que você pode usá-lo para raciocinar os prós e contras de várias soluções e selecionar a melhor para o problema. Alguém cuja experiência consiste em ler alguns livros sobre padrões de design e práticas recomendadas não entende onde e como aplicá-los.
Blrfl

Respostas:

10

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.

Michael Borgwardt
fonte
10

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 discutirei best practices, na verdade os violarei com frequência.

Uma definição melhor seria:

As "melhores práticas" são senso comum de especialistas, como devem ser aplicadas por não especialistas.

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".

Ávido
fonte
3
Ah, e se você não conhece as melhores práticas, também não tem bom senso.
AviD 25/07
7

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).

Steve314
fonte
6

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.

Patrick Hughes
fonte
Bem ... é semântico uma coisa ou outra. Não tenho certeza sobre truques. "Bom senso" nem sempre significa o que diz. Ele adquiriu um senso de não seguir o livro de regras acadêmico - um aspecto do senso comum, que não se refere ao senso comum, que se refere basicamente a pensar além do escopo do livro de regras. Às vezes, as melhores práticas não são realmente aplicáveis ​​- a realidade é complexa demais para que qualquer conjunto finito de generalizações seja perfeito -, há momentos em que você precisa usar sua própria experiência e - ahem - "bom senso".
Steve314
@ Patrick: não era minha intenção ser enganador. Parte da minha pergunta foi explorar o entendimento que eu tinha desses dois conceitos, especialmente o "senso comum", até o momento. Qualquer truque aparente é provavelmente apenas um sinal de que minha intuição sobre essas idéias não é nem de longe perfeita.
precisa
5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)
Benjol
fonte
2
... * Marketing
keppla
4

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!

Rory Alsop
fonte
Viés cognitivo ... de novo. E é por isso que você precisa para ser um reconhecido especialista, antes de confiar no seu bom senso ...
Avid
2

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:

anti-padrões são empregados apenas se não houver outra maneira, e mesmo assim somente sob circunstâncias muito limitadas

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.

Chris Walton
fonte
1

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.

Conta
fonte
1

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.

DeadMG
fonte
0

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.

Sean McMillan
fonte
-1

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.

mattnz
fonte
O chefe não se importa com o modo como você racionaliza sua maneira de agir, ele se preocupa em não ter problemas. Uma solução que você chama 'alcançado pelo senso comum' é tão boa para hims como um 'alcançado seguindo as melhores práticas'
keppla
Deixe-me reformular minha resposta. As práticas recomendadas costumam ser usadas como desculpa para o excesso de engenharia, na medida em que são sinônimos em muitas casas de software. O senso comum está abstendo-se de excesso de engenharia no interesse da conclusão bem-sucedida (geralmente comercial) do projeto.
mattnz
-1

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 método HTTP é amplamente irrelevante; use GET ao transmitir poucos dados, use POST ao transmitir mais (ou seja, muito pelo URL)
  • as funções não devem ser muito pequenas, porque é difícil lembrar o que elas fazem. uma grande função é preferível a 5 menores, porque você pode lê-la como uma
  • o banco de dados e o servidor da Web DEVEM ser executados na mesma máquina, caso contrário, o serviço da web ficará lento. A única maneira de escalar é acelerar o código por meio de hacks e renúncia à abstração, para que o poder de uma máquina seja suficiente.

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.

keppla
fonte
Você está dizendo que "as melhores práticas" são sempre apropriadas em todas as situações e, onde as melhores práticas não são conscientemente realizadas, é ruim ("não é bom").
mattnz
1
Não, eu digo que "Melhores Práticas" tem uma chance maior de não ser completamente irracional, porque sobreviveu à "revisão por pares", ao contrário do senso comum, que apenas parece razoável para uma pessoa. Não sou contra a implementação de algo que se considera "senso comum", sou contra justificar qualquer coisa como senso comum.
keppla