El problema con los árbitros es que conocen las reglas, pero no conocen el juego
Roberto Fontanarrosa.
El desarrollo de sistemas es algo bastante divertido, te enfrentas con problemas tan comunes y tan triviales, o a veces tan complicados y difíciles de resolver, que terminas volviéndote un tanto loco.
Como en todo, hay ciertas cosas que sabemos que se tienen que hacer, pero que por alguna u otra razón decidimos no hacer. Lo malo es que en estas decisiones nos llevamos entre las patas a algún pobre inocente, el cual, cuando le toca hacer su labor, termina sufriendo por que simples reglas no se siguen.
Estos son algunos errores comunes contra los que me he enfrentado.
1.- Inventar el hilo negro.
El hilo negro: Dícese de una hebra delgada, larga y de color negro, que se utiliza para coser. El hilo negro es una tecnología tan ancestral pero tan poderosa, que aun se utiliza en los trajes, vestidos, camisas, etc. El hilo negro es tan común y tan usado, que es difícil imaginar la vida sin su existencia.
¿Y que tiene que ver con el desarrollo?
Bueno, el hilo negro en realidad es un Mexicanismo, entiendase como una frase común de la cultura Mexicana. Decimos y hablamos del hilo negro como un artilugio muy viejo con lo que tenemos que hacer cosas novedosas.
En la programación pasa algo similar, generalmente nos enfrentamos con el problema de hacer cosas nuevas y de vanguardia, para lo que necesitamos técnicas, tecnología y herramientas no tan nuevas (como el hilo negro), por ejemplo un sistema de venta en linea, en el que utilizamos una base de datos. Tal vez la idea novedosa sea la tienda en línea, pero un sistema que almacene información en bases de datos no lo es tanto, y mucho menos lo que esto implica, consultas, operaciones, cálculos, etc.
Hay dos maneras de hacer esto, comenzando de cero (inventando el hilo negro) o consiguiendo hilo negro, el mismo que ha sido inventado, probado, depurado y lo mejor de todo, alguien ya sabe que hacer en caso de que algo no funcione. Para casi todos los lenguajes y entornos de desarrollo hay repositorios de clases o librerías las cuales nos ayudan a hacer tareas repetitivas y comunes: clases que hacen el manejo de bases de datos, sanitizacion de datos, validación de información, reporteadores, generadores de gráficas, efectos visuales, etc.
La mejor medicina para no inventar el hilo negro es la experiencia y el conocimiento de tu lenguaje.
2.- No pensar en el mañana.
¿Alguno vio volver al futuro? Bueno, una de mis escenas favoritas es cuando Marty y el doc se toman una foto en 1885 en el reloj del ayuntamiento. Este reloj se vuelve un icono de la ciudad y aparece en los años venideros y en la revoltura temporal de la trilogia.
Bueno, hay una realidad un problema con el desarrollo de sistemas: No van a durar tanto como un reloj en el ayuntamiento. Sin embargo debemos de pensar en el futuro de un sistema.
Me parece increible como todavia se utilizan sistemas que tienen tantos años como mi Madre, sobretodo en el ambito financiero o de correduria de bolsa. Son sistemas que se hicieron pensando en que durarian muchos años con vida.
Tal parece que actualmente no nos preocupamos por el ciclo de vida del software y muchas veces pareciera que nos preocupamos mas por sacar el proyecto o sistema a tiempo, mas que por hacerlo funcional y duradero, siendo que le podemos sacar mas provecho a un trabajo hecho a conciencia y bien cimentado, lo cual nos permitiria reducir costos de mantenimiento (muchas veces estos sobrepasan el costo del proyecto original).
Usabilidad, portabilidad, estandarizacion, modulizacion, etc., son un ejemplo de guias basicas que hay que seguir. Si tu haces un sistema que sea facil de usar, que sea ligero y se ejecute en la mayor parte de las plataformas, en el que implementes estandares de uso o de desarrollo, o en el que agregar modulos sea tan facil y menos doloroso, te garantizo que a futuro alguien te lo agradecera, ya sea quien lo usa o quien lo modifica.
3.- Programo luego pienso.
¿Cuantas veces te han dicho que dices las cosas sin pensarlas? En lo que a mi respecta me lo dicen cada lunes, martes, jueves y sabado. Digo cosas tales que despues de decirlas me quedo como 'oh oh' y despues viene el homeristico 'Douh' y despues me gustaria tener una maquina del tiempo para no decirlas.
Bueno, en lo que respecta al desarrollo, muchas veces nos dicen que tenemos que hacer algo, y sin siquiera pensarlo ya estamos codificando.
La codificacion debería de ser el 3er paso (claro según la metodología en cascada, la mas común):
- Análisis
- Diseño
- Codificacion
- Pruebas
- Mantenimiento
Muchas veces omitimos los dos primeros pasos y nos sentamos directamente a codificar, siendo que en ningún momento nos dimos a la tarea de analizar el problema o diseñar algoritmos para resolver los problemas.
Uno de los principales inconvenientes de esto, es que terminamos saltando u obviando problemas que pudieron haber surgido y resuelto en la etapa de diseño, y terminamos re haciendo trabajo. Otro inconveniente pudiera ser que terminamos haciendo sistemas poco mantenibles y mal hechos que después nos cuesta mas hacerle una corrección (nos lleva al punto anterior)
4.- ¿Y la documentación apá?
- Mijo, algun dia todo esto sera suyo
- Y la cheyenne apa
Cuando comencé a trabajar en esto del desarrollo, comence como un pragramador mas o menos idealista, que debia de documentar todo lo que hacía, pero me tope con una limitante: El tiempo vs la documentacion. Era una pelea a 9 rounds, las cuales las ganó el tiempo. Entonces me limite a programar sin documentar.
Cuando entré a una nueva empresa, lo primero que dije fue "Por que no hay nada documentado" y recordé al pequeño programador idealista, que no documentó su trabajo.
Creo que se sintió igual de frustrado el niño de la cheyenne, por que no pudo tener la herramienta que le haría mas fácil su trabajo. Así como yo no tuve la mía: La documentación.
La documentación es un caso particular en el desarrollo de sistemas, todos los que nos dedicamos a esto sabemos que hay que hacerlo, pero no lo hacemos. Muchas veces por que nos topamos con el mismo detalle, el tiempo. No nos damos el tiempo para documentar el trabajo. Esta es una malísima practica de desarrollo, y no para nosotros, si no para la persona que le damos resultados, por que el día que no estemos, alguien va a extrañar la documentación.
Para combatir esto, necesitamos mucha paciencia, y necesitamos educar a nuestros clientes (internos o externos), compañeros de trabajo o superiores, que es algo necesario. Algún día todo eso sera suyo y no sabemos que vaya a pasar, o si alguien se lleve información en su cabeza, si alguien no entienda lo que hicimos o alguna otra situación que tenga que ver con falta de información.
Hay que darnos el tiempo para documentar, hay que hacer incapie en este detalle. Si claro, toma tiempo y esfuerzo, pero paga a largo plazo, es una excelente inversión de tiempo.
5.- El lenguaje incorrecto en el momento incorrecto.
Si vas a china, habla chino. Me imagino llendo a china y tratando de preguntar donde esta el baño, creo que seria algo complejo para encontrar un simple sanitario.
En el desarrollo de sistemas, existen varios lenguajes, varios estilos de programacion y cada uno es mejor para algo, tiene un desempeño superior o es mas simple de trabajar bajo alguna condicion.
El caso tipico en aplicaciones para internet es el ya famoso asp vs php. Cada uno tiene sus pros y sus contras. Por ejemplo:
Es mejor utilizar asp en ambientes windows.
Php es mas rapido usando archivos bajo unix.
Asp tiene mejor integracion con SQL server.
Php se desempeña mejor con mysql.
Asp tiene muchos productos.
Php tiene mayor numero de soporte de usuarios.
Etc
¿Con que voy a esto?
Cuando tengas que hacer un desarrollo de sistemas, tienes que tener el suficiente conocimiento de que es lo que vas a hacer para tomar la mejor decision y hacerlo con la mejor herramienta. Un sistema puede ser una hoja de calculo en excel o una macro en word. No necesitas herramientas complicadas que despues sea un proyecto insostenible.
Un ejemplo es un sistema 'checador' (entradas y salidas). En donde trabajo alguien hizo un sistema de checador en php, muy bueno funcionaba genial, codigo de barras, reportes, facil y sencillo. Pero se le olvido que era un servidor con salida a internet. Despues de algun tiempo, algun vivales, se dio cuenta que podia checar desde casita sabiendo la ip del servidor, algo que una persona comun no sabe, pero sí, si es una persona que tenga conocimientos intermedios de informatica.
En este caso una solucion muy buena hubiera sido un sistema en visual basic, con una base de datos en access. No hubiera tomado mucho tiempo, hubiera sido facil de desarrollar y sin los problemas de tener el sistema publico en internet.
Hay que saber que vamos a hacer, y no querer hacer un sistema en Java cuando una hoja de calculo de excel pueda hacer lo mismo. Mucho depende claro esta de la persona que nos pide el trabajo, pero hay que saber aconsejar y darle asesoria para que no metan las cuatro patas y tu hayas sido complice del delito.