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

13

Hay mucha conversación sobre las mejores prácticas 1 en desarrollo de software. He visto al menos tres puntos importantes que se discuten mucho 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 debe renunciar a una mejor práctica, o tal vez a la mayoría de las mejores prácticas, ya sea porque no parece aplicable o por limitaciones externas (tiempo, dinero, etc.) que hacen que la compensación sea poco práctica?

Algo que parece surgir con mucha 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 quizás con algo de polinización cruzada.

Cuando pienso en el sentido común en general, pienso en un conjunto de reglas que has aprendido o que te han enseñado y que te dan una base para razonar y tomar decisiones. Seguir el sentido común es una buena manera de evitar que te dispares toda la pierna. 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. Podría estar jugando un poco suelto con la definición aquí, pero creo que está 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 desastre incomprensible. Como ejemplos, cosas como: no usar una sola estructura global para mantener y comunicar el estado dentro de un programa no trivial; no usar variables / métodos / nombres de clase que son solo galimatías al azar; cosas que probablemente se parecen bastante a lo que llamamos antipatrones. 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 verse como el análogo práctico del aprendizaje de antipatrones.

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

¿Otros creen 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í, ¿vale la pena discutir esta noción? ¿Es algo que deberíamos impulsar 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 antipatrones parece razonable, la regla general es que los antipatrones solo se emplean si no hay otra manera, e incluso entonces solo en circunstancias muy limitadas. ¿Cuán flexible debería ser uno para permitir que una base de código se desvíe del sentido común? Parece irracional que la respuesta sea "en absoluto", porque a veces la conveniencia exige desviaciones. Pero parece un argumento diferente a cuando emplear una "mejor práctica". Quizás no lo sea; Si no lo crees, me gustaría saber por qué.

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

Otros pensamientos también son bienvenidos.


1 Tal vez sería mejor llamarlos "patrones de dominio comúnmente recurrentes", pero el nombre de "mejores prácticas" es lo suficientemente común como para que todos sepan lo que son, incluso si no están de acuerdo en que lo son. Si la "mejor" parte te molesta, imagina que reemplacé las "mejores prácticas" con algo menos autoritario.

Ed Carrel
fuente
2
Tener sentido común significa que puede usarlo para razonar los pros y los contras de varias soluciones y seleccionar la mejor para el problema. Alguien cuya experiencia consiste en leer un par de libros sobre patrones de diseño y mejores prácticas no entiende dónde y cómo aplicarlos.
Blrfl

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 un conjunto de reglas fijas sin pensar si se aplican a la situación actual.

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

El problema con el "sentido común" es que es demasiado 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 que su posición es "sentido común". Es bueno tener pero pobre como guía para que un equipo lo siga.

Michael Borgwardt
fuente
10

Creo que lo tienes al revés.

Cuando enseño a los programadores los conceptos básicos de seguridad, siempre les enseño a usar best practicesy, sin embargo, cuando trato con expertos en seguridad (o más programadores "con experiencia en seguridad") nunca discuto best practices, de hecho, a menudo los violaré.

Una mejor definición sería:

Las "mejores prácticas" son de sentido común de los expertos, y deberían ser aplicadas por no expertos.

Es decir, no puede reclamar "sentido común" hasta que tenga 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" del cortador de galletas.

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

Ávido
fuente
3
Ah, y si no está familiarizado con las mejores prácticas, tampoco tiene sentido común.
AviD
7

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

La disposición a experimentar con alternativas (en un código no crítico, por supuesto, preferiblemente proyectos personales y descartables) puede ayudarlo 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 en la aplicación de una buena técnica en el lugar equivocado, pero es muy fácil construir racionalizaciones falsas tanto para la aplicación excesiva como para la aplicación excesiva. aplicar menos 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". Imposible de evitar, de hecho, a veces un lado realmente tiene razón, y el otro realmente está equivocado, y sería irracional argumentar a favor del equilibrio. El problema aquí es que el verdadero infierno no está sopesando tanto una mejor práctica por relevancia, sino cuando dos opiniones conflictivas de mejores prácticas chocan.

Tratar con esto es probablemente mucho más sobre las habilidades de las personas que sobre las habilidades técnicas. Soy muy malo en eso :-(

A pesar de eso, sigue siendo importante aprender de la experiencia de otras personas, así como de usted mismo, es decir, descubrir cuáles son las mejores prácticas, por qué se usan y cuáles son las ventajas (y desventajas).

Steve314
fuente
6

Me parece que esta pregunta es un truco 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 la base de datos)

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

Al final, una mejor práctica es un patrón de meta diseño para resolver una congruencia particular de problemas 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 a través de múltiples conjuntos de problemas.

Patrick Hughes
fuente
Bueno ... es algo semántico u otro. No estoy seguro sobre el engaño. "Sentido común" no siempre significa lo que dice. Ha adquirido una sensación de no seguir el libro de reglas académicas, un aspecto de la cuestión de todos los cerebros y sin sentido común que básicamente se refiere a pensar más allá del alcance del libro de reglas. A veces, las mejores prácticas no son realmente aplicables: la realidad es demasiado compleja para que un conjunto finito de generalizaciones sea perfecta, por lo que hay momentos en los que tiene que usar su propia experiencia y, ejem, "sentido común".
Steve314
@Patrick: no era mi intención ser engañoso. Parte de mi pregunta sobre esta pregunta fue explorar la comprensión que tenía de estos dos conceptos, especialmente del "sentido común", hasta este punto. Cualquier engaño aparente es probablemente solo una señal de que mi intuición acerca de estas ideas no es perfecta.
Ed Carrel
5
Common sense = You.CommonSense

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

Interesante momento. La semana pasada, este artículo fue publicado 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 las situaciones cotidianas ... Y debido a que funciona tan bien en estas situaciones, estamos inclinados a confiar en él 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 SIEMPRE debemos usar un conjunto documentado de estándares y no confiar en nuestro propio sentido común!

Rory Alsop
fuente
Sesgo cognitivo ... otra vez. Y es por eso que necesita ser un experto reconocido, antes de confiar en su sentido común ...
Avid
2

El sentido común no corresponde al aprendizaje de antipatrones, ni es diferente ni contrasta con las mejores prácticas.

El primer problema con el sentido común es su nombre: lleva a la conclusión de que es común y 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 manera, y aun así solo bajo circunstancias muy limitadas

Tengo entendido que esta no es la forma en que surgen los antipatrones. Es de una acumulación de factores culturales y sociales; de ignorar las mejores prácticas y estándares durante un período sustancial; de ignorar los costos en el futuro para lograr beneficios a corto plazo, por ejemplo, para cumplir un plazo mediante el uso de una solución de atajo que es una pesadilla de mantenimiento; etc. Ningún cuerpo se propone adoptar un antipatrón deliberadamente, simplemente crecen.

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

En lo que respecta a las mejores prácticas, los primeros dos 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 decisiones (decisiones de diseño en particular) y la capacidad de aprender de otros. La desventaja de las mejores prácticas 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.

Chris Walton
fuente
1

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

Casi cualquier mejor práctica 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 globales 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 datos directos / datos abstractos, queda un poco menos claro. Más aún cuando comienzas a hablar sobre metodologías y prácticas de desarrollo.

En algunas situaciones, el sentido común y las mejores prácticas son incluso opuestos entre sí.

No existe un cuerpo directivo de mejores prácticas y ningún grupo único, incluso si existiera, podría definir cada "mejor" posible para cada situación posible. Muchas cosas etiquetadas como mejores prácticas son solo un mal marketing tratando de vender herramientas o capacitación de personas desinformadas.

Incluso cuando todo su 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 guía sobre qué considerar con más cuidado 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 prácticamente a no construir algo que el próximo desarrollador que tiene que trabajar odiará. Todos odian el código que no es su estilo, y todos culpan de todo a cualquiera que se vaya, por lo que, o bien se lo explicará al próximo desarrollador después de que se quejen de algo, o no va a estar allí y hablar mal independientemente de cómo lo codifique. Esto hace que esa preocupación sea irrelevante.

Cuenta
fuente
1

El sentido común no siempre produce 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.

DeadMG
fuente
0

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

Tanto para las mejores prácticas como para el sentido común, me gusta pensar en ellas como patrones; Recuerde la definición de un patrón: una solución en un contexto que resuelve 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 sobre su equipo cuáles son los patrones que usará en general. (Esto puede ser formal o informal, pero de cualquier manera, es mucho más grande que solo el libro Gang of Four. Esto incluye expresiones idiomáticas y bibliotecas auxiliares locales, no solo patrones publicados).

Si siente, según su experiencia, que en ciertas circunstancias, sería mejor no usar un patrón dado, sino hacer otra cosa, avísele a la gente. Probablemente el contexto o las fuerzas son diferentes aquí (o tal vez el contexto resultante no sería 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.

Sean McMillan
fuente
-1

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

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

Mattnz
fuente
Al jefe no le importa cómo racionalizas tu forma de actuar, le importa no tener problemas. Una solución se llama 'logrado por el sentido común' es tan bueno como uno hims 'logrado siguiendo las mejores prácticas'
keppla
Déjame reformular mi respuesta. Las mejores prácticas se utilizan a menudo como una excusa para la sobre ingeniería, en la medida en que son sinónimos en muchas casas de software. El sentido común se abstiene de la ingeniería excesiva en aras de la finalización exitosa (generalmente comercial) del proyecto.
mattnz
-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, 'sentido común' se usa cuando uno no quiere proporcionar pruebas o al menos argumentos para una forma 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 se racionalizaron como el sentido común son 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, demasiado para la URL)
  • las funciones no deberían 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 ralentizará. La única forma de escalar es acelerar el código mediante hacks y renunciando a la abstracción, de modo que la potencia de una máquina sea suficiente.

Lo curioso del "sentido común" es que no es tan común: elige dos equipos y déjalos que digan lo que piensan que es "sentido común" y disfruta de las guerras religiosas.

Por otro lado, 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', esperaría que se formulara con suficiente claridad para que pueda presentarse como un concepto ('programación estructurada' es la mejor práctica, 'los gotos son confusos, evítelos' es sentido común), y aplicado más de una vez, con buenos resultados.

keppla
fuente
¿Está diciendo que la "Mejor práctica" siempre es apropiada en cada situación, y donde la mejor práctica no se realiza conscientemente es mala ("no es buena").
mattnz
1
No, digo que la "mejor práctica" tiene una mayor probabilidad de no ser completamente irrazonable, porque sobrevivió a la "revisión por pares", al contrario del sentido común, que solo tiene que parecer razonable para una persona. No estoy en contra de implementar algo que uno considera "sentido común", estoy en contra de justificar cualquier cosa como sentido común.
keppla