10 problemas abiertos en informática práctica
A los que trabajamos en informática aplicada nunca nos darán el Premio Alan Turing por resolver algún enigma conceptual muy complicado. No obstante, nos enfrentamos a diario a problemas prácticos que nos hacen la vida muy incómoda.
Este artÃculo es una reflexión sobre algunos de mis problemas cotidianos, y una invitación a comentar posibles tácticas para solucionarlos.
por Sergio Montoro Ten, 12 septiembre 07
Problema Nº1: Programación colaborativa distribuida.
El nóbel de la informática práctica se lo llevará quien invente una metodologÃa sólida para desarrollar código igual que funcionan las redes P2P, dividiendo el trabajo en tareas de no más de 1 hora que puedan ser ejecutadas redundantemente por varios programadores geográficamente dispersos. Por ahora disponemos de herramienta de recogida de requisitos, diseño UML, control de versiones, testeo, bug trackers, etc. Pero los mejores programas (y casi los únicos que funcionan bien) siguen siendo desarrollados por un grupo muy reducido y cohesionado de programadores. No existe un genuino “divide y vencerás” aplicado a la producción de código. A más programadores implicados, menor productividad por programador y menor predictibilidad del resultado final del proyecto.
Problema Nº2: Productividad en el desarrollo de interfaces web.
El uso de HTML y JavaScript supuso un retroceso de 10 años en el estado del arte de las herramientas de desarrollo. Cuando ya tenÃamos VisualBASIC 4.0 con el cual te picabas una aplicación operativa en 3 dÃas, volvimos a usar diseño con lenguaje marcas que sólo funcionaba bien si lo editabas a pelo con UltraEdit, por no hablar de que el JavaScript ni siquiera tiene un debugger decente. Ahora los frameworks AJAX prometen el oro y el moro. O tienes la opción de casarte con Microsoft .NET. Mi amigo Javier Gallardo incluso dice que a ellos les va bien con Adobe Flex pero con cualquiera de estas cosas te la juegas a quedarte pillado a medio plazo.
Problema Nº3: La temporalidad en el modelo relacional.
¿Porque nadie ha implementado aún un modelo relacional extendido que incluya manejo de la temporalidad? Para poder expresar con naturalidad cosas como que un empleado perteneció a un departamento dado entre tal y cual fecha, por ejemplo. Los históricos y los solapamientos de fechas hay que manejarlos a mano en la base de datos. Lo cual resulta muy engorroso.
Problema Nº4: La multimoneda.
¿Porqué no existe un tipo moneda que funcione bien en las bases de datos? Me refiero a uno que te permita sumar 3€ con 5$ y te dé el resultado correcto en función de un tipo de cambio dado externamente.
Problema Nº5: Integridad referencial en los borrados.
¿Cómo borrar algo de una base de datos si infringir las reglas de integridad referencial? En realidad, la solución es simple ¡nunca borrar nada! sino en cambio dar bajas lógicas. Pero entonces ¿porqué no tenemos un procedimiento predefinido para las bajas lógicas?
Problema Nº6: Empotrar SQL y XML dentro del lenguaje.
¿Porqué seguimos usando APIs como JDBC? Acaso es tan difÃcil integrar el acceso a base de datos dentro de la sintaxis de un dialecto de un lenguaje multipropósito como Java. ¿Y porqué hay que seguir usando herramientas como Castor para generar un porrón de clases para leer un simple documento XML? Si XML es un estándar bien definido, incorporar su tratamiento en el lenguaje serÃa muy útil.
Problema Nº7: Punteros nulos e Ãndices fuera de rango.
La mayorÃa de los programas escritos en lenguajes modernos siguen estando plagados de punteros nulos e Ãndices de arrays fuera de rango. En Java al menos el recolector de basura te evita las pérdidas de memoria, y existen posibilidades para reemplazar con iteradores todos los accesos por Ãndice. Pero ya serÃa hora de que existiese un procedimiento formal para garantizar que al menos estos dos errores tan tÃpicos no tumbarán nuestro programa.
Problema Nº8: Scripts sucios para tareas cotidianas.
Cada maestrillo tiene su librillo, en forma de un puñado de subrutinas y programillas en lenguajes de scripting para cosas rápidas. Lo que se suele echar mucho de menos son herramientas realmente potentes para manipular ficheros de texto y cambiar cosas rápidamente en la base de datos, o generar informes, que es en lo que consisten la mayorÃa de las operaciones de mantenimiento rutinario de la programación de un sistema.
Problema Nº9: La documentación.
Vale, ahora tenemos Javadoc. Eso fue un verdadero avance. Pero, para documentar el modelo subyacente y la estructura del programa ¿qué usas? Y no me refiero a 4 diagramas UML muy bonitos pero que a la postre no te explican nada de nada en realidad sobre los entresijos del programa.
Problema Nº10: La mentalidad del de arriba.
Una herramienta para demostrar indiscutiblemente al de arriba que no tiene ni idea, que la informática no es la puñetera tienda del todo a veinte duros, donde cualquier cosa puede hacerse para mañana “tocando un poquito por ahÔ.
Me dejo con seguridad decenas de otros problemas comunes que estoy seguro que será muy interesante comentar y proponer soluciones.
12 septiembre 2007, 12:28
¡Buen artÃculo! Repecto al quinto problema, en Oracle (y en otros como MySql ahora que busco) existe hace tiempo la opción de crear una FOREIGN KEY en la creación de una tabla con “ON DELETE CACADE” que resulta en que al borrar una fila de la tabla Padre borra todos los registros de la tabla Hija. Es un TRIGGER encubierto, digo yo.