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.