domingo, 25 de junio de 2017

Programar y TI no se trata de hipsters

Curiosamente, en estas últimas semanas me he topado con el concepto de que hay plataformas y lenguajes hipsters.  Al principio pensé que era mas en términos de broma y analogía, pero muchos si lo toman en serio.
Lo primero es que programar no se trata de poses ni tiene que ver con la "cultura contemporanea"
La simple idea de programación y TI hipster me lleva solo a entender que la gente que dice eso, sólo están tratando de hacer como que programan y como que entienden y lo hace para su "startup" y se llena de muchos términos técnicos que no entienden y ni siquiera saben su orígen; pero que a muchos de ellos no les lleva a algún camino a largo plazo.
Programar no es de millenials, ni de hipsters, ni de ninis, ni todas las definiciones que son tan usadas en las "redes sociales".  Como que cualquier actividad humana y que se hace con el espíritu de crear, el hecho de programar es poner el ingenio de la persona para resolver un problema o mostrar un concepto o manipular información.
Los lenguajes de programación, que los que se auto nombran hipsters de TI, creen que son el resultado de una revolución para el cambio. No es por ahí, obedece mas a  una evolución mas que una revolución. Y por esto me dedico en esta entrada, a recordar como hemos llegado a esto.
Cada generación cree que tiene un lenguaje de programación que de a verdad va a solucionar los problemas. En su momento, los que vivieron la aparición de Pascal así vieron reflejado el requerimiento de poder pensar de manera modular sus soluciones. Y llego C y muchos vieron que la necesidad de tener un lenguaje con un mínimo de sintaxis, alto desempeño y portable, y fue la respuestas para la programación de sistemas. Por varios años así fue, en revistas como Dr. Dobbs o Byte (cuando era una referencia digna de respetar), todos planteaban soluciones a diversos problemas. Solo que en esos tiempos, no se decían hippies o algo así.
Vino después la ola de programación orientada a objetos, resultando en un C++ que de repente complicaba la sintaxis, mientras otros lenguajes como Smalltalk, Eiffel, Modula, Objective C llegaron a implantar el enfoque de manera elegante. Un resultado que conozco como la cumbre de ese enfoque, es la plataforma de NeXT que hoy ni esos llamados hipsters tienen en la mente, pero cuyas ideas las usan prácticamente todo el día en sus dispositivos inteligentes.
La capacidad de los sistemas operativos para ayudar que los lenguajes de programación tuvieran la capacidad de cargar de manera dinámica bibliotecas de código fuente, abrió la pauta para tener módulos de software cambiantes y donde el polimorfismo se podía explotar al máximo. De ahí salieron las DLL ( en 16 o 32 bits y que son  segmentos de código ejecutable) o los .so en plataformas UNIX.
No basto esto, por que el modelo cliente-servidor ya ofrecía la promesa de dividir el procesamiento del código fuente de aplicaciones en por lo menos en dos computadoras. Al principio empezó con Llamadas a Procedimientos Remotos (RPC) y que aprovechó la empresa Sun Microsystems que hasta su eslogan era "la red es la computadora".  Sin embargo, el mundo de los programadores orientados a objetos también quizo tener su enfoque de objetos distribuidos, y nació CORBA y DCOM; que hoy pocos se han de acordar, salvo los que los usaron en la práctica.
En ese momento, era ya complicado el hacer labores de programación en lenguajes como C++. Y llegó en ese momento un lenguaje orientado a objetos que seguía la corriente de C pero mas simple en sintaxis que los primeros esfuerzos. Me refiero a Java, si aquel cuya versión alfa podía ser utilizado en 1995 y que de manera acelerada fue adoptado por una generación "joven" (si, en esos tiempos teníamos 25 a 35 años de edad los que empezamos dicha adopción) y en un abrir y cerrar de ojos, Java se utilizó para implantar con éxito lo que no se pudo con los antecesores. Mientras la gran parte de la comunidad de programadores estabamos ciegos en pensar todo con Java, afortunadamente lenguajes como Python o Ruby estaban dando pasos hacia lo que viene.
Java aún sigue siendo uno de los más utilizados y que se enseñan en las Universidades. Al mismo tiempo, apareció un lenguaje cuya estabilidad dependía de la carrera por conquistar a los usuarios de Internet, me refiero a Javascript, y que por varios años no fue pensado como opción y del lado de Java o C# se prefería realizar la manipulación dinámica del HTML y engordar un poco más al servidor, de ahí marcos de trabajo como Struts hasta llegar al frankestein llamado JavaServerFaces.
Con el fin de la carrera de los navegadores, JavaScript se vio beneficiado y tuvo estabilidad, al mismo tiempo que la implantación de HTML5 se hizo viable. Pero el estado era un modelo de arquitectura de servidor con componentes complicados (si, JEE me refiero a ti y a tus EJBs de entidad).
Aún, los primeros intentos de aplicaciones móviles, estaban con este enfoque, aún recuerdo Java MicroEditon y sus midlets, y donde el poder de procesamiento de los dispositivos móviles era nada, frente a lo que hoy tenemos.
Aunque Java se puso a dieta, gracias a los esfuerzos de la comunidad de Spring, el lenguaje se volvía cada vez menos intuitivo, presionado también por que C# lo supero. Java 5 tomo el concepto de Generalidad, anotaciones, pero ya no era lo mismo que en 1995.
Llegó la era de XML como formato para lograr la interoperabilidad y como cualquier tecnología, tuvo sus abusos. Los "hipsters" de esos tiempos no avanzaban si no podían abrir una etiqueta (es broma). Se conjunto con SOA (mal entendido como WebServices)
Mientras, Ruby on Rails mostró una buena lección a la comunidad Java (que algunos no la entendieron del todo bien y crearon Grails) y se mostró que un enfoque ligero es más poderoso que el estándar de J2EE. Agregar que Java cayó en las manos de Oracle.
Llega 2011, y con ello ya suena el término de computación en la nube y las aplicaciones móviles cambien el enfoque ante la aparición de plataformas como iOS, Blackberry (RIP) y Android. Quedan obsoletos los planteamientos de plataformas de Java (y me refiero al Application Development Framework de Oracle), mientras que en un giro inesperado, Microsoft si reacciona y empieza a adoptar los principios de programación que la comunidad está fuertemente impulsando.
Al mismo tiempo que los métodos ágiles son cada vez utilizados (y a veces mal utilizados) para enfocarse a tener soluciones de valor, le tecnología de hardware ayuda a que el software aproveche el poder de virtualización de procesamiento, almacenamiento y redes. El concepto de cliente-servidor, se puede llevar al máximo, y de hecho esa relación cliente-servidor, se vuelve par-a-par (P2P y no hablo de Napster). Pequeños componentes de código fuente se pueden asignar a una unidad (virtualizada) de procesamiento y con mínimos recursos, de hecho se generan imágenes mínimas o contenedores. Es lo que se le llama microservicios (algunos dicen que es la evolución de SOA, pero no es cierto).
Agregado que hoy tenemos lenguajes con un enfoque menos complicado que Java o C#. Muchos de ellos influenciados por lenguajes funcionales (Haskell por ejemplo) ; o lenguajes como Go o Rust. Mientras tanto, Java 8 y superior siguen estando cada vez más complicados.
¿Y hoy dicen que usar microservicios, nube,  agilidad, lenguajes no tan conocidos es hipster?  Es una equivocación.
En el JavaOne del año 2001, Sun Microsystems anuncia JXTA, una plataforma P2P.

Hace dos años, platicando con un amigo, le decía que si haciamos una revisióna lo que definió el equipo de Bill Joy, este modelo sirve tanto para microservicios e IoT.  Ni siquiera existía el concepto de hipster.
En conclusión, creo demuestro que decir que TI o programación es hipster, solo es una muestra de que la persona que lo dice le falta un poco de preparación y de experiencia (como dice Stallone, te hace falta mas box), y solo muestra que está ignorando el pasado.  Si el lector de esta entrada, después de controlar el enojo que le estoy haciendo pasar,  le recomiendo vaya a consultar libros de texto de Tannenbaum (como el de arquitectura de computadores, sistemas operativos, ambientes distribuidos) o libros de C, UNIX de los grandes, entre otros, donde desde ahí se hablan de muchas ideas que por fortuna la tecnología hoy ya nos habilita.
Y si eres alguien que han querido impresionar con el termino hipster en TI, por favor, usa algo de lo que aquí expreso y trata de argumentar contra esa falacia. Hoy en día lo que necesitamos es que los que estamos en el ámbito de TI seamos serios y al mismo tiempo creativos y alejarnos de poses.