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.