miércoles, 21 de agosto de 2013

Porqué lo pasé bien programando

Hace muchos años que ya no desarrollo software ni programo sistemas, mi carrera profesional hace ya bastante tiempo me llevó más por la línea de gestión de equipos humanos y gerenciamiento de áreas de sistemas, y creo que sin duda todo ello ha contribuido a mi crecimiento como persona y como profesional. Sin embargo, aquella época en la que me tocó abordar proyectos de programación por mi cuenta o con equipos muy pequeños, quedo grabada en mi recuerdo como uno de los períodos en que mejor lo pasé trabajando.

Me gustaría recordar con Uds. una de estas experiencias, e indagar en las razones por las cuales entonces disfruté el trabajar en estos proyectos, y las enseñanzas que estos me dejaron.

La experiencia que voy a relatar ocurre durante la segunda mitad de los años 80, mientras trabajaba en la gerencia de desarrollo tecnológico en Sonda. En este grupo, para entonces a cargo de Hermann von Borries, gran ingeniero y amigo, y uno de los mejores programadores con los que me ha tocado trabajar, abordamos diversos proyectos innovadores de desarrollo de herramientas de software, que fueron la base para la construcción de diversos sistemas de información que Sonda comercializó entre los años 80 y 90.




Por entonces, nuestro grupo apoyaba el desarrollo de una plataforma base para implementar sistemas transaccionales para sucursales bancarias, incluyendo desde los terminales de los cajeros hasta los servidores para la autorización de las transacciones, mercado para entonces dominado por IBM. Esto porque Sonda se había puesto como objetivo proveer una solución para bancos basada en los sistemas computacionales de Digital Equipment Corporation, compañía de la cual era distribuidor exclusivo y cuyos computadores comercializó con gran éxito.

Dentro de las múltiples componentes de software que requirió esta iniciativa, una de ellas correspondió al desarrollo de un "middleware" que permitiera la interconexión e intercambio de mensajes entre los terminales de caja implementados usando computadores personales y los sistemas centrales que procesaban las transacciones activadas desde las cajas.  Esta aplicación debía operar en los computadores VAX con sistema operativo VMS, y la comunicación con las cajas se basaba en el protocolo DECnet, propietario de Digital.

Requisitos esenciales a lograr eran un alto rendimiento, coherente con el procesamiento de transacciones en línea en un entorno bancario, y diversas funcionalidades de configuración, administración y soporte para los administradores de sistema. Otro requisito era asegurar la continuidad de aplicaciones que habían sido previamente desarrolladas usando un sistema de comunicaciones basada en protocolo SNA/SDLC.

Para lograr lo anterior fue necesario investigar las capacidades del sistema operativo VMS a nivel de programación de sistema, que permitieran entre otros: alto rendimiento, mediante el uso de áreas de memoria compartida entre procesos; sincronización entre tareas, mediante colas de mensajes;   interfaz de administración, mediante un intérprete de comandos, y facilidades de traza y registro para altos volúmenes transaccionales, mediante el uso de archivos circulares y escritura a nivel de bloques.

El sistema lo programamos en FORTRAN, un lenguaje de programación cuyo origen fue el desarrollo de modelos matemáticos, algoritmos y cálculo numérico, y no precisamente la programación a nivel de sistemas. Pero ello no fue un obstáculo mayor y, al contrario, el conocimiento previo del lenguaje fue una ventaja (casi todos los ingenieros usamos FORTRAN alguna vez en la universidad).

Fue un momento importante cuando vimos materializados nuestros esfuerzos con un sistema que funcionaba de hecho muy eficientemente, y que nos permitió comunicar las cajas y otros tipos de terminales, con aplicaciones centrales procesadoras de las transacciones. El sistema lo bautizamos con el nombre MIRROR, siguiendo la analogía del reflejo óptico en un espejo que permite hacer llegar la luz a un lugar específico, de la misma forma nuestro sistema permitía que los mensajes recibidos desde un origen pudieran ser re-dirigidos, mediante reglas parametrizables, a una aplicación determinada en el computador local o a otro computador en otra ubicación, construyendo de esa manera una red de procesamiento distribuido.

Algunos años después re-hicimos el sistema para ambientes Unix y Windows, en ese caso, programado en lenguaje C, sobre protocolo TCP/IP y utilizando las características propias de esos sistemas operativos, generándose así un producto que funcionaba en una variedad de ambientes con similares formas de operación y administración, y que, de hecho, fue utilizado en múltiples proyectos de Sonda tanto en nuestro país como en el exterior, y que todavía figura operando en mas de alguna instalación por allí.

Recordando esta experiencia trato de identificar las razones de porqué ha quedado grabada en mi memoria con un grato recuerdo, y se me ocurren algunas:
  • Cuando acometimos el diseño del sistema teníamos una idea bastante precisa de adonde queríamos llegar, pero en el camino fuimos imaginando e incorporando nuevos conceptos y funcionalidades. Este proceso creativo, donde tuvimos amplia libertad, fue probablemente parte de porqué esto fue muy entretenido.
  • Los múltiples desafíos que teníamos que cumplir nos obligaron a buscar soluciones particulares y a investigar y aprender sobre capacidades del sistema operativo que podíamos usar en nuestro beneficio.
  • La programación, es un acto solitario, que requiere espacios de tranquilidad y concentración, y en ese estado se puede alcanzar altos niveles de productividad. La concentración puede llegar a ser tal, que no es raro que la solución a un problema surja en espacios inesperados, como la ducha o  incluso durante el sueño.
  • Por último, ver funcionando lo que alguna vez imaginamos representa una satisfacción difícil de expresar. 
Cuando converso con ingenieros y programadores que han producido módulos relevantes de sistemas o sistemas enteros ellos solos o como parte de equipos mas bien pequeños, con gran libertad para abordarlos, y que además disfrutan de su trabajo, veo que estos módulos o sistemas suelen tener menor cantidad de errores y mejor desempeño en general. 

Todo esto además ha sido ampliamente estudiado. El clásico texto Software Engineering Economics de Barry Boehm publicado en 1981, ya indicaba que la capacidad del equipo de trabajo era por lejos el factor de mayor incidencia en la productividad del desarrollo de software.

Considerando todo lo anterior mi conclusión es que es clave identificar y potenciar estos talentos, dándoles posibilidad de crecimiento y desarrollo en la línea de especialización técnica. Sin embargo, en la generalidad de los casos esto no es así.  En la gran mayoría de las empresas a nivel nacional, el trabajo netamente técnico, como el de los programadores, no tiene líneas de desarrollo profesional que apunten a su perfeccionamiento y excelencia, mas bien al revés, los buenos profesionales que quieren crecer, deben forzosamente alejarse de eso que hacen bien para pasar a labores de dirección o gestión. A veces esta transición es exitosa, a veces no tanto, y es probable que en algunos casos, talentos  técnicos importantes se desaprovechen. 

Esto, por cierto, es totalmente distinto en países desarrollados como Estados Unidos y Europa, donde los especialistas técnicos talentosos y motivados son altamente valorados y tienen líneas de desarrollo profesional que potencian sus capacidades. 

Como siempre, en nuestro país han habido y hay excepciones, pero son pocas, y de momento, solo confirman la regla. 

5 comentarios:

  1. Carlos, excelente tu reflexión sobre una actividad tan satisfactoria para los desarrolladores y tan conflictiva con los "clientes". Gracias por compartirla.

    Jaime Callejas.

    ResponderEliminar
  2. Gracias Carlos por esta reflexión, viviendo plenamente el proyecto de integración del Core Bancario me sentí muy identificado con tus palabras...

    Danilo Leiva.

    ResponderEliminar
  3. Excelente Carlos.

    En el desarrollo, tener un buen equipo con el que poder compartir e intercambiar ideas es tan importante como estar solo con el computador y poder crear arte digital.

    ResponderEliminar
  4. Estoy totalmente de acuerdo, de hecho, esa es probablemente una de las razones por la cual el proceso se enriquece y el resultado mejora.

    ResponderEliminar
  5. Carlos, llevo más de 20 años programando y estoy completamente de acuerdo con tus palabras. El placer de ver funcionando lo que imaginamos representa una satisfacción difícil de expresar.

    Por ejemplo, tuve la suerte de implementar el programa que generaba los cupones para el sorteo de la pareja feliz de RedCompra en TBK y cuando veo el sorteo imagino que siguen utilizando la lógica que yo desarrolle hace varios años.

    Gracias por compartir tus experiencias y hacernos recordar las nuestras.

    Osvaldo Valenzuela

    ResponderEliminar