La vida como programador

Computer Troops - Licencia Algunos derechos reservados por JD Hancock

En Septiembre de 2016 alcancé 14 años de experiencia profesional como desarrollador. Este verano aprovecho para reforzar algunos conocimientos. Encuentro en mi libro una descripción de cómo es (o era) ser programador de los diferentes lenguajes: que si Ensamblador, que si Basic, que si Cobol, C, etc.

Se me ocurrió entonces hacer un artículo sobre cómo he vivido personalmente los diferentes entornos de programación en los que he trabajado.

Me considero un tío versátil y me pongo manos a la obra con lo que sea. Me gusta mucho indagar y conocer los entresijos, así que conseguí trabajar con dignidad en muchos entornos, algunos de ellos con escasa o sin ninguna formación previa.

Me formé en C++

En la Escuela Politécnica de Ingenieros de Gijón (Universidad de Oviedo) el Rey era el C++. Este lenguaje tiene la vocación de ser un lenguaje de alto nivel y, de hecho, es un lenguaje orientado a objetos. Es más, cuando estudiaba a mediados de los 90 ya contaba con objetos de tipo parametrizado, un concepto adoptado en 2006 por el CLR del Framework .NET 2.0 en sus Generics.

Pero además C++ tiene su contraparte en el uso de la máquina a bajo nivel: puede incluir incluso cadenas de ensamblador. Pero el aspecto por el que es más denostado el C++ es la gestión de memoria.

Homer con un angel y un demonio

Los dichosos punteros que han traído locos a todos los programadores de C++ en algún momento. Sin embargo, cuando llegas a entenderlos, los punteros aportan varias ventajas al desarrollador:

  1. Entender y manejar los distintos tipos de memoria (en particular STACK y HEAP) es muy útil también en otros lenguajes.
  2. Tener control sobre el uso de la memoria, en oposición al recolector de basura, permite realizar programas más ambiciosos sin temer a un parón en la ejecución. Ejemplos: la programación genética y los sistemas en tiempo real.
  3. Permite compartir memoria fácilmente entre distintos hilos de ejecución, distintos procesos e incluso distintos microprocesadores (dependiendo del equipo y el sistema operativo).
  4. Los punteros obligan a los programadores a ser conscientes de la gestión de los recursos: te acostumbras a cerrar todo lo que abres.

En la parte negativa, el C++ tiene una curva de aprendizaje de varios años, llena de baches, con un montón de incidencias que incluyen muchos casques debidos a la gestión de memoria que pueden ser muy complicados de solventar.

Y me formé en PHP

En los últimos años de carrera también aprendí PHP (3.0 y 4.0) que me inició en el mundo web. En sus inicios PHP tenía para mí el atractivo de la facilidad de codificación Backend, comparándolo con CGI.

En su punto débil estaba la gestión de datos no tipificada y que al ser interpretado y carecer del concepto de proceso, se interpreta en cada llamada todo el código necesario (acceso a datos, negocio).

Realicé un proyecto fin de carrera CGI con C++ y otro en PHP. Codirigí un proyecto fin de carrera de Gestión Administrativa de Alumnos.

Como programador de VBA

En 2002 terminé la carrera de Ingeniero en Informática. Después de años y años de esfuerzo y rompederos de cabeza, programando en C++ y dirigiendo proyectos fin de carrera, pasé un verano relajado en la oficina de unos conocidos.

Unos amigos me dieron la oportunidad de conocer su forma de trabajar y de ayudarles con Access y Excel. Creé una base de datos en Access para registrar una pequeña biblioteca y realicé un aplicativo para generar documentación de proyectos a partir de documentos base.

En Access se puede separar la parte gráfica de los datos y yo podía mejorar los aplicativos sin utilizar las bases de datos de producción. Utilizando Visual Basic para Aplicaciones podía hacer casi de todo, por su alta integración con el resto de MS Office y su alta vinculación a Windows.

Dos programadores dicen que es fácil

Esa experiencia veraniega me supuso el punto de entrada a mi siguiente proyecto.

Experto de Ofimática para Caja Cantabria

Aunque el sueldo era muy bajo y el puesto no iba a ser precisamente desafiante, decidí acudir. En 2002 se trataba de un proyecto a muy corto plazo. Sin embargo las palabras Caja Cantabria lucían muy bien en un Currículum Vitae en aquella época (y a mi parecer, en cualquiera). Acepté y allá me fui.

Como programador de VB.NET

En Caja Cantabria tenían una gran colección de aplicativos realizados en Access que hubo que convertir. El primero de ellos era una aplicación de gestión que realicé en Visual Basic .NET en 2003. Se trataba de una aplicación con Windows Forms con estructura MVC basada en DAO .NET y distribuida en varios equipos. Contaba con un módulo central que se encargaba de la facturación anual del servicio.

El .NET de 2003 comparte con el de 2016 lo más básico, pero el entorno de desarrollo ha mejorado en cada nueva versión del Framework.

Tom Hanks toca un teclado con un dedo

Lo mejor de .NET es que tiene una curva de aprendizaje de unas pocas semanas. Enseguida te haces a él. .NET ha adoptado y amoldado diferentes patrones y paradigmas de programación simplificando la vida a los programadores. Incluyendo Modelo-Vista-Controlador, diseño de software por capas, persistencia de datos, modelado de datos, comunicación SOA entre máquinas y procesos, y un largo etcétera.

En la parte negativa, al simplificar la vida al programador, .NET adapta las tecnologías – como SOA – facilitando la comunicación entre procesos .NET de la misma versión, pero complicándola en comunicación con otras versiones o incluso con otras tecnologías como Java. Cualquiera que haya intentado comunicar un servicio WebService .NET con un cliente Java, sabe a qué me refiero.

Además, algunos aspectos de la codificación varía de una versión del Framework a otro y no respeta la funcionalidad anterior, lo que nos obligó en algún caso a mantener distintas versiones del .NET Framework para correr aplicaciones de distintas generaciones. O a reescribir el código a la nueva versión.

Como programador de Lotus Notes

Lotus Notes es una herramienta de correo electrónico con su servidor de correo y sus clientes distribuidos. Pero además permitía crear aplicaciones para gestión de pequeños procesos de back office.

Pantalla de bienvenida de Lotus Notes

Características de una aplicación Lotus Notes:

  • Se ejecutan dentro de un entorno Lotus Notes, necesitas su cliente específico, que es el mismo que el del correo.
  • Puede ser local o en red. En ese caso los datos residen en servidor.
  • Básicamente recoge datos de formularios y los muestra en vistas (consultas) creadas por los programadores o por los propios usuarios.
  • Está muy orientado a Roles de usuario y Control de Acceso. Facilita mucho la gestión de flujos de trabajo. Contiene un sistema de seguridad basado en grupos (que se pueden asociar a LDAP) y en Listas de Control de Acceso propias.
  • Separa los datos y el interfaz mediante el uso de Plantillas.
  • Las aplicaciones eran accesibles como páginas web. De hecho muchas webs están hechas con Lotus Notes.

Inconvenientes de Lotus Notes.

  • Era un sistema propietario y monolítico. Toda la gestión es dentro del entorno Notes. La comunicación con otros sistemas era creando vistas específicas y volcándolas a discos o exponiéndolas en HTTP.
  • Dentro de Notes hay dos tipos de programación: @formulas y LotusScript
  • El LotusScript es “javascript” pero sólo en la sintaxis. Algunas características de JS no estaban incluidas.
  • Las @formulas no siempre funcionaban en el modo web. Así que había que revisar el código si la aplicación era accesible por navegador.
  • La ayuda de Lotus Notes (v6) no estaba actualizada y algunas @formulas que se decían compatibles con web no lo eran y viceversa.
  • El código estaba embutido detrás de los eventos de los controles de formulario y para modificarlo había que abrir cada formulario. No había librerías de código @fórmula. Eliminar un Bug significaba abrir decenas de propiedades de botones y controles.
  • Sí había librerías de LotusScript pero las funciones LotusScript no se podían llamar desde la versión web de las aplicaciones. Era obligatorio el uso de @fórmulas. Y todas no funcionaban. Y la ayuda te engañaba…

Y por último, con frecuencia las bases de datos se corrompían y no era posible volver a abrirlas con lo cual era obligatorio hacer frecuentes copias de seguridad. No había repositorio de software.

Lotus Notes es el entorno de desarrollo más odiado del mundo. Y como gestor de Correo tampoco tenía muchos amigos.

Pantalla Satírica de Lotus Notes

Como programador de Java / J2EE

La mayor parte de mi carrera profesional la he pasado programando en J2EE que corría en IBM Websphere Application Server.

En una primera etapa, hacíamos aplicaciones autónomas que consumían datos de Oracle. Utilizábamos un sistema de Single Sign On con tokens que facilitaba la vida a los usuarios.

En esta primera etapa empezamos a utilizar Javascript para mejorar los interfaces, y no meramente para comprobar formularios. También adoptamos iBatis, debido a que nuestras fuentes de datos eran muy heterogéneas.

En la segunda etapa pasamos a realizar Portlets para el servidor de aplicaciones de Vignette. Vignette utiliza EARs de J2EE que incrusta mediante Portlets propietarios y que llaman a nuestras aplicaciones. La gestión de usuarios se adquiere del portal de aplicaciones, que gestiona las autorizaciones.

En Java siempre trabajé con un modelo de capas. En la primera etapa teníamos 3 capas, presentación, negocio y datos – que gestionábamos con un patrón DAO. En la plataforma de mi segunda etapa la arquitectura estaba implantada por una consultora y hay alguna capa más que permite el desarrollo en paralelo por un número mayor de programadores, pero que dificulta los mantenimientos.

Ventajas de Java:

  • La sintaxis de java es prácticamente la misma que C++ (Javascript, C#, etc)
  • La curva de aprendizaje de Java es de pocos meses. Los nuevos contratados producen al 100% en nuestra arquitectura en apenas un par de meses.
  • Es un lenguaje multiplataforma: las aplicaciones se pueden migrar de un equipo Windows en un servidor Tomcat a un IBM Websphere sobre Linux RedHat sin codificar.
  • A pesar de ser propiedad de Oracle, su anterior propietario Sun Microsystems apostó por un lenguaje abierto y libre, por lo que existe una enorme cantidad de documentación, un montón de desarrollos y una comunidad de desarrolladores muy activa.
  • Es un entorno maduro y con mucho recorrido pero, a la vez, se adapta a las últimas tecnologías.
  • Favorece la integración de tecnologías de diferentes fabricantes utilizando estándares.

Inconvenientes de Java:

  • Es un lenguaje que crearon los propios programadores y querían tener control de todo: a más control, menos sencillez. Algunas tareas se complican innecesariamente. Sin embargo, como ya es un lenguaje veterano, existen abstracciones para simplificar tareas como la gestión de ficheros, comunicaciones, etc…

  • Subir de versión un determinado elemento de la arquitectura – ejemplo el gestor de datos – a veces supone una catarata de promociones de otros productos.
  • La curva de aprendizaje es algo mayor que .NET, por ejemplo.
  • Los desarrolladores tienen que aprender un montón de herramientas si quieren controlar todas las capas del desarrollo: Hibernate, Struts, JSP, etc.

Como programador de .NET (C#)

Se implantó un proyecto de Intranet basado en MS Sharepoint Portal Services en el cual participé como responsable de desarrollo y en el que desarrollamos unos WebParts (para mí, son portlets) de Sharepoint.

Utilizamos estos WebParts para comunicar el portal con las aplicaciones Java que ya teníamos implementadas. Codificamos el Single Sign On para que los usuarios no tuvieran que identificarse más allá del Sharepoint, apoyándonos en Kerberos para pasar un token de autenticación al Java (aplicaciones propias y otras aplicaciones de terceros en la nube).

En aquella etapa aprendí acerca de arquitectura .NET del repositorio de ensamblados y desarrollamos algunas piezas más para integrar en nuestra arquitectura.

La consultora realizó varias aplicaciones web que tuve que mantener a posteriori. En aquella época no existían ni LINQ ni WCF que nos hubiesen facilitado la vida.

Ordenador con arcoiris

La gran ventaja de .NET es que contiene tecnologías como WCF o Forms que simplifican la codificación en las capas que no son puro negocio. El Analista debe conocer todas las herramientas que .NET proporciona para elegir cuál se adapta mejor a cada proyecto.

La desventaja es que en algunos casos las tecnologías no son compatibles con sistemas diferentes del .NET. En muchos casos habrá que rehacer el código si surge esa necesidad.

Como programador Front-End

Desde que empecé mi carrera profesional me he dedicado en mayor o menor medida a la interfaz web: desde las aplicaciones NOTES en WEB, pasando por Java, Sharepoint, etc…

La base del desarrollo Front-End está en la división entre:

  • HTML que es la estructura que sostiene los documentos
  • CSS que es el lenguaje que le da forma y color
  • Javascript que es la programación que le da vida

Pero en los últimos años cada vez hay más frameworks y herramientas que nos ¿facilitan? la vida realizando algunas tareas por nosotros.

HTML5 llegó para simplificar la estructura de los documentos, sobre  todo en publicaciones, añadiendo marcas específicas para cada parte de la interfaz.

CSS3 Añadió modificadores sobre los diseños y cambió la forma en que damos glamour a las páginas, reduciendo el tiempo de desarrollo. Es la principal pieza de la implementación de estructuras responsive.

Javascript sigue siendo un lenguaje difícil de aprender, odiado por muchos, incomprendido. Pero las librerías como jQuery han permitido pasar del mero trámite de comprobar formularios a crear aplicaciones ricas.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *