Estoy empezando a darme cuenta de que el desarrollo de software es (entre otros) un proceso en el que nos hacemos preguntas constantemente. Preguntas sobre la calidad del código, separación de inquietudes, minimización de dependencias, ...
Pero la pregunta principal es: ¿hasta dónde puede ir sin terminar en un hospital psiquiátrico?
Estoy solicitando un nuevo trabajo. Ayer estuve con un posible futuro empleador que quería probar mis capacidades de programación. Uno de los ejercicios fue: explicar lo que hace este código. Pasé por un código de la aplicación (winforms en vb.net) que desarrollan (es una aplicación administrativa para un hospital). Esto me dio la oportunidad de ver realmente cómo se acercan a las cosas y fue bastante decepcionante.
Algunos ejemplos:
- Vi en algún lugar: llame [inserte el nombre de la subrutina aquí] - > Me sorprendió: ¿no es eso algo de VB6?
- Tienen un archivo de datos separado, que utiliza ado.net, pero un método que tuve que examinar devuelve un conjunto de datos a la capa de llamada. Por lo tanto, como datos separados o no, la aplicación está vinculada a ado.net (lo que tampoco podría ser un problema si nunca cambian a otro enfoque de acceso a datos).
- Ese conjunto de datos se lee como está, por lo que aún es un enfoque centrado en los datos (por supuesto, se puede argumentar cuánta lógica / comportamiento puede incluir en clases como "Paciente" o "Examen de análisis de laboratorio".
- También creo haber visto la construcción de una consulta SQL por concatenación de cadenas.
- Utilizan procedimientos almacenados (que, para mí, significa: dispersión de la lógica)
- no se mencionan vistas / controladores: todo se basa en la forma
- Lo más feo que vi fue:
If TestEnvironment.IsTesting then someVar = [some hard coded value] else someVar = [some dynamically retrieved value] end if [remainder of the function here]
Es tan diferente de lo que aprendí en la escuela: capa de dominio (capa de presentación, prueba de unidad, pruebas de unidad, (agnóstico de la persistencia), ...
Así que reformulo mi pregunta: ¿cuán fundamental o dogmático debería ser? ¿Hasta qué punto debe un programador respetar sus principios o simplemente escribir el código que hace el trabajo?