¿La diferencia entre las mejores prácticas y el sentido común?

13

Hay mucha conversación sobre las mejores prácticas 1 en el desarrollo de software. He visto que al menos tres puntos principales generan mucha discusión tanto en SE como en otros lugares:

  • ¿Qué califica como mejor práctica y por qué?
  • ¿Vale la pena discutir las mejores prácticas en primer lugar, porque es razonable afirmar que ninguna práctica es una "mejor" práctica?
  • ¿Cuándo debería renunciar a una mejor práctica, o quizás a la mayoría de las mejores prácticas, ya sea porque no parece aplicable o debido a restricciones externas (tiempo, dinero, etc.) que hacen que la compensación sea impráctica?

Algo que parece surgir con menos frecuencia, pero más que nunca, es una noción de sentido común en el desarrollo de software. La experiencia reciente ha traído esta noción al frente de mi mente nuevamente.

Mi impresión inicial es que es una discusión diferente a las mejores prácticas, pero tal vez con alguna polinización cruzada.

Cuando pienso en el sentido común en general, pienso en un conjunto de reglas que has aprendido o te han enseñado que te dan una base para razonar y tomar decisiones. Seguir el sentido común es una buena manera de evitar que te quites la pierna entera. Pero más allá de una línea de base bastante baja, el sentido común da paso a la necesidad de tomar decisiones educadas, y las decisiones educadas pueden incluso anular el sentido común cuando la evidencia parece lo suficientemente convincente. Puede que esté jugando un poco suelto con la definición aquí, pero creo que es lo suficientemente cerca como para encabezar mi ejemplo.

Cuando pienso en el sentido común en el desarrollo de software, pienso en todas las reglas de higiene básica para evitar que una base de código se descomponga rápidamente en un lío incomprensible. Como ejemplos, cosas como: no usar una estructura global única para mantener y comunicar el estado dentro de un programa no trivial; no usar variables / método / nombres de clase que son solo tonterías aleatorias; cosas que probablemente se parecen mucho a lo que hemos llegado a llamar anti-patrones. Cuando se aplican las mejores prácticas, el análogo práctico a los patrones de aprendizaje, la aplicación del sentido común podría considerarse como el análogo práctico de los antipatrones de aprendizaje.

Con esto en mente, me gustaría plantear algunas preguntas para las que ver las respuestas de otros podría ayudarme a razonar a través de esto.

¿Creen los demás que existe una noción de sentido común en el desarrollo de software? Estaría interesado en conocer el razonamiento de cualquier manera.

Si es así, ¿es una idea que vale la pena discutir? ¿Es algo que deberíamos presionar tanto como a veces hacemos con las mejores prácticas? ¿Es algo por lo que valga la pena presionar aún más?

Si la analogía con los anti-patrones parece razonable, la regla general es que los anti-patrones solo se emplean si no hay otra forma, e incluso entonces solo en circunstancias muy limitadas. ¿Qué tan flexible debe ser uno para permitir que una base de código se desvíe del sentido común? Parece irrazonable que la respuesta sea "en absoluto", porque a veces la conveniencia exige desviaciones. Sin embargo, parece un tipo de argumento diferente al usar una "mejor práctica". Tal vez no lo sea; Si no lo cree, me gustaría saber por qué.

Esto es mucho más abierto y tal vez digno de una pregunta de seguimiento, ¿qué tipo de recomendaciones señalaría que parecen ser asuntos de sentido común?

Otros pensamientos también son bienvenidos.

1 Tal vez sería mejor llamarlos "patrones de dominio recurrentes", pero el nombre de "mejores prácticas" es bastante común para que todos sepan lo que son, incluso si no están de acuerdo. Que ellos son. Si la "mejor" parte le molesta, imagínese que reemplacé las "mejores prácticas" con un sonido menos autoritario.

    
pregunta Ed Carrel 24.07.2011 - 08:57

12 respuestas

10

Las mejores prácticas son prácticas que se ha comprobado que funcionan bien en un campo de circunstancias relativamente amplio. El problema con ellos es que A) a veces se abusa de la expresión para marketing y B) como reglas fijas, no son lo suficientemente flexibles; no se debe seguir ningún conjunto de reglas fijas sin pensar si se aplican a la situación actual.

Las mejores prácticas son excelentes cuando vienen con explicaciones por qué son "mejores" y en qué circunstancias deben usarse. Entonces puedes razonar sobre cuándo no usarlos.

El problema con el "sentido común" es que es también flexible: se puede usar para justificar casi cualquier cosa, y realmente no se puede tener una discusión racional cuando las personas no están de acuerdo y ambos afirman su La posición es "sentido común". Es bueno tener pero pobre como guía para que lo siga un equipo.

    
respondido por el Michael Borgwardt 24.07.2011 - 10:18
10

Creo que lo tienes al revés.

Cuando le enseño a los programadores los aspectos básicos de la seguridad, siempre les enseño a usar best practices y, sin embargo, cuando trato con expertos en seguridad (o más programadores "con experiencia en seguridad") nunca discutiré best practices , de hecho lo haré A menudo los violan.

Una mejor definición sería:

  

Las "Mejores Prácticas" son el sentido común de los expertos, ya que deben ser aplicadas por no expertos.

Es decir, no puedes reclamar el "sentido común" hasta que tengas suficiente experiencia en el campo dado para comprender las sutiles compensaciones; y cuando lo haga, ya no debería seguir ciegamente las "mejores prácticas" de las cookies.

Las "mejores prácticas" son un marcador de posición temporal hasta que tenga la experiencia suficiente para usar su propio "sentido común".

    
respondido por el AviD 25.07.2011 - 10:14
7

Mejores prácticas - > "Primero, aprendes las reglas". Experiencia - > "entonces, aprendes cuándo y cómo romperlos".

La voluntad de experimentar con alternativas (en código no crítico, por supuesto, preferiblemente proyectos personales y desechables) puede ayudar a construir la experiencia que necesita.

El sentido común no es lo mismo que la experiencia, por supuesto, y no siempre se necesita mucha experiencia para ver la falla al aplicar una buena técnica en el lugar equivocado, pero es muy fácil construir falsas racionalizaciones para ambos. -la aplicación y la aplicación insuficiente de una técnica, y dado que el "sentido común" aquí claramente no es un conocimiento innato de la programación, ese sentido es claramente "común" solo dentro de grupos particulares.

Es muy fácil "tomar partido". De hecho, es imposible evitarlo: a veces, un lado realmente tiene razón, y el otro realmente está equivocado, y sería irracional defender el equilibrio. El problema aquí es que el verdadero infierno no pesa tanto una de las mejores prácticas por relevancia, sino que cuando dos opiniones conflictivas de mejores prácticas chocan.

Es probable que lidiar con esto sea mucho más sobre las habilidades de las personas que sobre las habilidades técnicas. Soy muy malo en eso :-(

A pesar de eso, aún es importante aprender de la experiencia de otras personas, así como de su propia experiencia, es decir, averiguar cuáles son las mejores prácticas, por qué se usan y cuáles son las ventajas ( y desventajas) son.

    
respondido por el Steve314 24.07.2011 - 19:05
6

Me parece que esta pregunta es un engaño semántico. Si usamos estas definiciones, entonces no hay duda:

Mejores prácticas: una forma comprobada en el campo de resolver un problema en un dominio determinado (es decir, las mejores prácticas en tiempo real son totalmente ajenas a las mejores prácticas de base de datos)

Sentido común: experiencia profesional que sirve para advertir al programador de las dificultades que debe evitar

Al final, una Práctica recomendada es un patrón de diseño meta para resolver una congruencia de problemas en particular y se elige en base a experiencias del mundo real, mientras que Common Sense es una guía para la resolución de problemas basada en la observación general en múltiples conjuntos de problemas.

    
respondido por el Patrick Hughes 24.07.2011 - 18:34
5
Common sense = You.CommonSense

Best practices = Sum(Experts.Experience + Experts.CommonSense)
    
respondido por el Benjol 25.07.2011 - 11:11
4

Interesante momento. La semana pasada este artículo se publicó discutiendo por qué el sentido común no es necesariamente ideal en todas las situaciones.

El sentido común está exquisitamente adaptado para manejar el tipo de complejidad que surge en situaciones cotidianas ... Y porque funciona tan bien en estas situaciones, nos inclinamos a confiar en en todas las situaciones

(mis palabras en negrita)

Básicamente, los humanos no son buenos para usar el sentido común en áreas como esta donde no hemos desarrollado un sistema arraigado, por lo que deberíamos SIEMPRE utilizar un conjunto de estándares documentado y no confiar en ¡Nuestro propio sentido común!

    
respondido por el Rory Alsop 25.07.2011 - 10:24
2

El sentido común no se corresponde con el aprendizaje de patrones anti, ni es diferente de, o en contraste con las mejores prácticas.

El primer problema con el sentido común es su nombre: lleva a la conclusión de que es tanto común como sensible. Como se usa comúnmente, está sujeto a ataques en ambos casos. Usando tu ejemplo:

  

los antipatrones solo se emplean si no hay otra forma, e incluso entonces solo en circunstancias muy limitadas

Tengo entendido que esta no es la forma en que surgen los anti-patrones. Es a partir de una acumulación de factores culturales y sociales; de ignorar las mejores prácticas y estándares durante un período sustancial; ignorar los costos en el futuro para lograr beneficios a corto plazo, por ejemplo, para cumplir con una fecha límite mediante el uso de una solución de atajo que es una pesadilla de mantenimiento; Ningún organismo se propone adoptar un anti-patrón deliberadamente, simplemente crece.

Igualmente, el sentido común se usa con demasiada frecuencia para significar "eso se hace comúnmente", y justifica la falta de pensamiento, conocimiento y trabajo arduo para resolver lo que implica proporcionar una solución. También se usa como justificación para "es la forma en que lo hago, así que obviamente es de sentido común", y como una defensa contra la crítica y la crítica.

En lo que respecta a las mejores prácticas, los dos primeros párrafos de Michael son un excelente resumen de lo que deberían ser las mejores prácticas: un recurso para ayudar a todos a mejorar lo que hacen. También proporciona transparencia de las decisiones (decisiones de diseño en particular) y la capacidad de aprender de los demás. La desventaja de la mejor práctica es cuando genera una cultura de lista de verificación: "He marcado todas las casillas, así que lo que he hecho debe estar bien", sin aplicar el pensamiento, el cuidado y la atención a la naturaleza de la aplicabilidad de la lista de verificación.

    
respondido por el Chris Walton 24.07.2011 - 14:54
1

Este es un argumento de pendiente resbaladiza que a menudo se convierte en una guerra religiosa.

Casi cualquier práctica recomendada se puede contrarrestar con un caso válido para hacer lo contrario.

Algunas mejores prácticas son más "mejores" que otras. Las variables de estado global casi siempre se hacen mejor de una manera diferente y GOTO suele ser una mala idea, pero cuando entras en los argumentos de patrón / antipatrón o de datos directos / datos abstractos se vuelve un poco menos claro. Más aún cuando empiezas a hablar sobre metodologías y prácticas de desarrollo.

En algunas situaciones, el sentido común y las mejores prácticas están incluso en oposición entre sí.

No hay un órgano rector de mejores prácticas y ningún grupo, incluso si existiera, podría definir cada "mejor" posible para cada situación posible. Muchas cosas etiquetadas como mejores prácticas son simplemente malas prácticas de marketing que intentan vender herramientas o capacitación a personas no informadas.

Incluso cuando todo tu equipo está de acuerdo en que algo es mejor, no siempre es posible implementarlo de esa manera por varios factores limitantes.

En mi humilde opinión, debe utilizar las mejores prácticas como una guía sobre qué considerar más cuidadosamente en su diseño. Es posible que tenga una razón válida para desviarse, pero probablemente deba asegurarse de que todos los demás miembros del equipo estén de acuerdo antes de ir y construir algo extraño.

Algunos de los argumentos sobre las mejores prácticas después de ese punto se reducen a no construir algo que el próximo desarrollador que tiene que trabajar en él odiará. Todo el mundo odia el código que no es su estilo, y todo el mundo culpa a todo lo que se va, por lo que o bien se lo explicará al siguiente desarrollador después de que se quejen de algo, o no va a estar allí y se hablará mal independientemente de cómo lo codifiques. Esto hace que la preocupación en su mayor parte sea irrelevante.

    
respondido por el Bill 24.07.2011 - 17:35
1

El sentido común no siempre da los mejores resultados. Sin embargo, se han probado las mejores prácticas. Esto hace que las mejores prácticas sean una fuente de información más confiable.

    
respondido por el DeadMG 25.07.2011 - 11:45
0

Las mejores prácticas no son las mejores, y el sentido común no es común. ;-)

Ya sea para las mejores prácticas o el sentido común, me gusta pensar en ellos como patrones; Recuerde la definición de un patrón: una solución en un contexto resolviendo fuerzas en un contexto resultante .

Para cualquier cosa que desee hacer, debe conocer el contexto al que se aplica, las fuerzas que resuelve y el contexto resultante que crea. Luego, decida en su equipo cuáles son los patrones que usará en general. (Esto puede ser formal o informal, pero en cualquier caso, es mucho más grande que solo el libro Gang of Four. Esto incluye idiomas de idioma y bibliotecas locales de ayuda, no solo patrones publicados).

Si cree, según su experiencia, que en determinadas circunstancias, sería mejor no usar un patrón dado, sino hacer otra cosa, avisar a la gente. Probablemente el contexto o las fuerzas sean diferentes aquí (o quizás el contexto resultante no sea deseado). No me importa si es una reunión, un comentario de código o qué, pero si deja en claro que ha roto el patrón a propósito , estarás millas por delante.

    
respondido por el Sean McMillan 25.07.2011 - 14:57
-1

La mejor práctica es lo que te enseñan en la escuela, el sentido común es lo que el jefe quiere que te forme. El primero crea un software que cumple con ciertos estándares de elegancia, estilo y similares. El último paga las facturas / gana el dinero para que usted reciba el pago cada semana.

Uno es arte, el otro negocio, muchos de nosotros lo olvidamos.

    
respondido por el mattnz 25.07.2011 - 09:27
-1

Exagerar un poco: la diferencia es que el sentido común es el prejuicio, la mejor práctica es (debería ser) la ciencia

En mi experiencia, el 'sentido común' se usa cuando uno no quiere proporcionar pruebas o al menos argumentos para una manera de hacer las cosas. Eso no significa que el camino sea necesariamente incorrecto, pero tampoco significa que sea bueno.

Entre las cosas que encontré, que fueron racionalizadas por ser de sentido común están estas gemas.

  • el método HTTP es en gran medida irrelevante, use GET cuando transmita poca información, use POST cuando transmita más (es decir, mucho para la URL)
  • las funciones no deben ser demasiado pequeñas, porque es difícil recordar lo que hacen. una función grande es preferible a 5 más pequeñas, porque puedes leerla como una sola
  • la base de datos y el servidor web DEBEN ejecutarse en la misma máquina, de lo contrario, el servicio web se desacelerará. La única forma de escalar es acelerar el código mediante hacks y evitando la abstracción, para que la potencia de una máquina sea suficiente.

Lo gracioso de 'Sentido común' es que no es tan común: elige dos equipos y deja que digan lo que piensan que es 'sentido común' y disfruta de las guerras religiosas.

Por otra parte, como "Mejor práctica" consideraría formas de hacer las cosas, que tienen un poco más de "revisión por pares". Para considerar algo como una "mejor práctica", espero que se formule lo suficientemente claro para que pueda ser presentado como un concepto. (La 'programación estructurada' es la mejor práctica, 'los gotos son confusos, evitarlos' es de sentido común) y se aplican más de una vez, con buenos resultados.

    
respondido por el keppla 25.07.2011 - 11:53

Lea otras preguntas en las etiquetas