Microsoft MVP (Most Valuable Professional) otro año más, y el futuro del software

El pasado 1ro. de Octubre, me confirmaron que nuevamente, en este año que sigue, soy Microsoft MVP. Pueden ver detalles del programa en:


http://mvp.support.microsoft.com/


Quiero agradecer a Néstor Portillo (@nportillo) y Fernando García Loera (@ferglo) por su apoyo en todos estos años. También, a Carlos “Billy” Reynoso, quien me propuso como MVP en 2002 (vio la luz!! :-), luego de haberme convocado también en los 90 para participar de charlas y reuniones. Y a la gente del Microsoft User Group, del que participo desde hace casi 15 años, por el constante trabajo para armar una comunidad en la que podemos participar todos.


Me gustaría que otras empresas tuvieran un programa similar a los Microsoft MVPs. No sé si hay programas como éste en Oracle/Sun, IBM. En Argentina, la empresa que más se ha preocupado (con altibajos, hay que reconocer) ha sido Microsoft. Recuerdo los tiempos de Sun lanzando Java por estos lares, en los noventa. Estaba más preocupada por captar periodistas que a programadores. Si alguna vez me invitaron a una charla en los noventa, fue porque escribía para una revista, sino, ni enterados la gente de Sun de que hay programadores de este lado del ecuador.


Recuerdo mis primeros contactos con la tecnología Microsoft, al leer la Dr.Dobb’s Journal, donde se comentaban algunos productos. ¿Recuerdan Lattice C? Microsoft lo compró para ser su primer Microsoft C. ¿Alguien recuerda el Lisp de Microsoft? Creo que se lo habían comprado a una cía de Haway. Conocí más de la historia de esos tiempos en varios libros; en especial, recuerdo “Fire in the Valley”. También ahí aprendí de Apple, MITS y demás pioneros en la microcomputación. En esos tiempos, había multitud de “computadoras personales”, con distintos sistemas operativos y lenguajes. En muchas de ellas, Microsoft tenía software para ofrecer. Pero todos conocemos que el mercado despegó con la llegada de la IBM PC. Recuerdo que para editar con el edlin, booteaba con un diskette, lo retiraba, y ponía el segundo, porque ahí estaba el editor de línea. Como diría Olmedo: “Eramos tan pobres…. ” :-). Si bien llegó Apple a mi país, Argentina, en aquellos años había que ser descendiente directo de los que desembarcaron en el Mayflower para poder acceder al programa de desarrollo de aplicaciones de la empresa de la manzanita. Algunos detalles más de esos tiempos, en


Treinta años en desarrollo de software


Creo que, como entonces, vivimos tiempos fascinantes en el tema de desarrollo de software. Me gustaría escribir acá algunos puntos a estudiar, a seguir de cerca, en estos años que se vienen (espero que para mí, sean otros treinta años… :-)


Primero, quiero destacar la existencia de dos plataformas de desarrollo: Java y .NET. Entiendo por plataforma de desarrollo a lenguaje(s), librería de clases extensa, soporte de desarrollo de distinto tipos de aplicaciones (desde consola a web a distribuidas). En el 95, comencé a conocer Java, y desde entonces, me ha parecido una de las mejores cosas que ha pasado en la historia del desarrollo de software. Con todas las críticas que se le pueden hacer (EJB una terrible cosa que aún me dá escalofríos (antes de acostarme, veo abajo de mi cama a ver si hay algún Entity Bean escondido), Sun como karma, empresa que no supo mover a la comunidad de desarrollo, que en muchos casos se tuvo que arreglar sola (Hibernate como ejemplo?)), Java ha sido lo que hizo que las máquinas virtuales, clases y objetos, frameworks, threads, serialización, modelos de dominio, salieran de lo académico o del nicho, y pasaran a la corriente principal de desarrollo. Desde fines de los noventa, no he pasado casi una semana, sin dar algún curso o charla sobre Java, y tecnologías asociadas. Es un “must be know” para cualquier desarrollador de software de este milenio.


Y Microsoft, vió la luz, y se reinventó a sí misma: abandonó VB, VBScript, ASP, C++ con la infame MFC (Microsoft Foundation Classes), ATL, COM (que nunca despegó para multiplataforma, como hubiera querido Don Box, y aún Miguel de Icaza con el proyecto Bonobo), y cambió como empresa, por lo menos en las herramientas de desarrollo. Parecía como si hubiera hecho todo por otra empresa: no más COM como tecnología necesaria; teníamos al fin una máquina virtual (un empleado de Microsoft morirá en la tortura antes de llamar “máquina virtual” al CLR, pero, es lo que es.. :-); plétora de lenguajes nuevos, totalmente montados sobre esa máquina virtual. Realmente, es como si hubiera habido otra empresa que creó todo eso. Un gran movimiento por parte de Microsoft, que ha sabido adaptarse a los tiempos que le tocan: como ejemplo, recuerden el giro a Internet que dió la empresa, a finales del 95.


Así que tenemos dos temas para seguir con atención: Java y .NET.


Otros temas: el desarrollo de aplicaciones, ¿dónde va? Veo que sigue habiendo aplicaciones de escritorio. Pero preveo que la lucha y la innovación vendrán en otras áreas (enlaces al final):


- Aplicaciones Web: dentro de la empresa, los sistemas de gestión serán migrados a todo web. Si bien la interfaz web no es la mejor, la aparición de Ajax, librerías maduras de Javascript, tecnologías en el servidor (ASP.NET, ASP.NET MVC, veremos hacia donde va Java, luego de no haberse adoptado JSF por todo el mundo, Ruby y Python con desarrollo web), hoy no es descabellado ver cada vez más aplicaciones internas, expuestas en el browser.


- Rich Internet Applications: usar JavaFX, Silverlight, Air, o lo que aparezca. Pero crear aplicaciones, que mediante algún plugin liviano en el cliente, permitan tener la experiencia de usuario del tipo de aplicaciones locales que tenemos ahora.


- Software as a Service, tanto aplicaciones web (Google Apps) como RIA, el software de gestión y otros tipos, que hoy consumimos localmente, veo que estará cada vez más ofertado directamente en la web. Habrá que ver quienes serán el target: ¿las pequeñas empresas que no tienen un equipo de IT? ¿las medianas y grandes, que están cansadas de soportar un equipo de IT y desarrollo semi a a medida?


- Desarrollos Web2.0: la interconexión de aplicaciones mediante protocolos livianos (desde REST hasta cualquier otra cosa, olvidando los pesados Web Services, especificación que veo que se encamina a la over-complexity), modelos pubsub montados sobre Twitter o similares, la aparición de Service Bus online.


- Cloud computing: lo veo de dos formas: como una forma de virtualización as a service, y como una forma de aplicación escalable hacia afuera. La primera será más fácil de programar (es como venimos hasta ahora, pero “hosteando” en otro lado). Nos ahorramos el setup de la máquina, licencias, mantenimiento del equipo. Lo de escalable hacia afuera, más cercano a la idea de “cloud”, ejecutando en varias máquinas, habrá que estudiar cuán de difícil o fácil es el cambio de modelo de programación. Ejemplo: sharding de base de datos, ¿será lo suficientemente transparente para como venimos programando?


- Mobile: o debería llamarlo, la aparición del software en múltiples dispositivos. Esto es una rama que tenemos que estar atentos. La industria de desarrollo está por dar un salto, o ya lo está dando: tal vez, el mayor desde la aparición de la computadora personal. La cabeza de playa son los teléfonos móviles. Pero lo que veo es: sistemas operativos para pequeños dispositivos (Android, Windows Mobile) con soporte de desarrollo (Android SDK, .NET Compact Framework), que harán que podamos escribir software para casi cualquier cosa, cualquier “widget” que tengamos (teléfonos personales, otros dispositivos, aparatos inteligentes), comunicados por Internet. La convergencia de: dispositivos inteligentes, Internet, herramientas de desarrollo maduras, es “the next big frontier”.


- Lenguajes dinámicos: podrá haber lenguajes aislados (como los originales Ruby y Python) pero veo que cada vez más se montarán sobre las dos plataformas, .NET y/o Java. Veremos que pasa con esto: lo que veo, es que tienen comunidades fuertes, que impulsan nuevas cosas, nuevas ideas (o reimplementaciones frescas de otras ideas), que en otros ecosistemas más maduros es difícil de que prendan. Recordemos Ruby On Rails como un ejemplo.


- Web Semántica: ahí afuera hay un mundo de información, que por primera vez está disponible, no sólo para seres humanos, sino para nuestras aplicaciones. La aparición de formas de aprovechar inteligentemente esta montaña(cordillera diría) de información, es un camino que veremos donde llega. Las iniciativas de web semántica son lo más promisorio. Pero también puede que “la liebre salte por otro lado”: desarrollos aislados, que encuentren una forma de comunicarse o de aprovechar lo existente.


- Aplicaciones distribuidas: los que leen mi blog (yo, y mi tía Carlota), saben de mi interés en aplicaciones distribuidas. Habrá que seguir de cerca el tema message passing, o el más prometedor y flexible, agentes. Multithreading, multicore, son simplemente una antesala a Multimachine. Ese es el camino a al escalabilidad, y superar el bloque de la Ley de Moore: multicore está bien, pero multimachine is the solution (pregúntele a Google). Sharding de base de datos, escalabilidad, datos y objetos en memoria distribuida en máquinas (más barata y rápida que los discos).


- Memoria: El último párrafo me trae a cuento esto que siempre nombro: el uso intensivo de memoria. La memoria cada vez es más barata, y más accesible. Pensemos en qué tipo de aplicaciones podemos lograr. Me imagino una base de objetos o de datos, totalmente en memoria, en máquinas distribuidas, donde el file system sea solamente otra forma de backup.


- Concurrencia y Paralelismo: un tema a estudiar. Vean lo que va surgiendo con Clojure, Software Transactional Memory, hasta NetLogo. Vería de cerca paralelismo distribuido, como MapReduce, High Performance Computing, y alrededores.


- Lenguajes funcionales: recuerdo APL, pero no con cariño. Pero vean el surgimiento de Erlang, la forma en que se usó para el desarrollo de aplicaciones, el “revival” de Lisp con Clojure y cía, F# por parte de Microsoft, Haskell, algo mixto con Scala en Java. Sumaría a los declarativos, como Prolog. ¿Será el siglo del lambda? Para mí, es hermoso que esos temas vuelvan a estar en el tapete. Todo desarrollador de software debería sumergirse en estos temas, en lo que podría llamar, los lenguajes de los dioses.


- Modelos de aplicaciones: las aplicaciones cada vez son más complejas. Encarar el desarrollo basado prácticamente en lenguajes de tercera generación, sin haber elevado el nivel de abstracción, con tecnologías de base que van cambiando año a año, mes a mes, es un camino lleno de piedras y espinas. Yo apuesto a la aparición de modelos, Domain Specific Models, Domain Specific Languages, herramientas relacionadas (el camino más cercano es la generación de código), para hacer más fácil el domino de la complejidad y el cambio.


- Desarrollo ágil: en los tiempos que corren, el trabajo en equipo es indispensable. La cantidad de tecnologías, detalles, y requerimientos que precisa un software más o menos normal, implican que va desapareciendo el desarrollador de garage, en solitario. Las limitaciones de desarrollo en cascadas, el cambio en los requerimientos, porque hasta el ambiente externo cambia, éxitos cosechados por el programación extrema y disciplinas relacionadas, todo apunta a que tenemos que ir adoptando más y más el modo ágil de construir software.


- Inteligencia Artificial: como decía más arriba, es tiempo de que agentes. Incorporar lógica, razonamiento, modelos del mundo, inferencias, objetivos, ontologías, algoritmos genéticos, redes neuronales, en todo lo que se viene.


(ahora entenderán un poco más, a que van los códigos de código abierto que publico, como una especie de ejercicio personal para entrenarme en varios de los puntos de arriba).


No he dejado enlaces en el texto, pero muchos de estos temas, como verán, me interesan desde hace un tiempo, y estos son enlaces que he coleccionado:


http://delicious.com/ajlopez/distributedcomputing
http://delicious.com/ajlopez/artificialintelligence
http://delicious.com/ajlopez/agile
http://delicious.com/ajlopez/codegeneration
http://delicious.com/ajlopez/dsl
http://delicious.com/ajlopez/dsm
http://delicious.com/ajlopez/functionalprogramming
http://delicious.com/ajlopez/cloudcomputing
http://delicious.com/ajlopez/mobile
http://delicious.com/ajlopez/saas
http://delicious.com/ajlopez/ria
http://delicious.com/ajlopez/dynamiclanguages
http://delicious.com/ajlopez/semanticweb
http://delicious.com/ajlopez/hadoop
http://delicious.com/ajlopez/lisp
http://delicious.com/ajlopez/clojure
http://delicious.com/ajlopez/messaging
http://delicious.com/ajlopez/esb
http://delicious.com/ajlopez/scala
http://delicious.com/ajlopez/concurrency
http://delicious.com/ajlopez/parallel
http://delicious.com/ajlopez/stm


Tendría más para comentar, pero es hora de tomar mi medicación…:-)… Sí, ya sé, es la pastilla roja, no la verde.


Me parece suficiente para este post, ¿no les parece?


Lo que quería trasmitirles, es que aprovechen este tiempo. Hace treinta años, yo no tenía todo esto disponible: comunicación instantánea, acceso a recursos a un costo razonable, contacto con la comunidad, herramientas maduras, ideas bullendo. Y ahora está todo acá, servido para la próxima revolución.


Muchas de estas ideas, las comento en mis cursos, aunque no sé cuán bien pude trasmitirlas, o si se entendió algo del mensaje. Siempre veo que la gente pide cursos de un tema en particular, me gustaría en este post (como en otros anteriores) haber dado una visión más amplia de lo que hay en el mundo del desarrollo de software, hoy, y que sirva de ensayo futurológico, sin mayores pretensiones, de lo que puede venir como importante.


De alguna forma, en estos años, se decidirá el tipo de software que se ejecutará en las próximas dos décadas. Y como en las anteriores, el software seguirá cambiando la historia humana.


Pero el software no se hace solo. Como decía Alan Kay: “la mejor forma de predecir el futuro, es inventándolo”. Sean parte de todo esto.


Nos leemos!


Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez

This entry was posted in 10549, 10747, 1389, 1390, 3463, 7782. Bookmark the permalink.

2 Responses to Microsoft MVP (Most Valuable Professional) otro año más, y el futuro del software

  1. una recomendacion, podrias tener un tag centralizado en delicious, por ejemplo “desarrollo” y asi podrias publicar un solo link en vez de todos esos

    felicidades por tu MPV!
    salu2

  2. luis petek says:

    Gracias Angel.

    Para nosotros los simples mortales :

    ¿Debería ser una lista con calificadores de importancia o todos los temas son igualmente importantes?

    los tópicos que más me gustan o por los que pongo mas ‘fichas’ : Agentes, IA, Generación de código, paralelismo y agilidad.

    Una cosita Angel, al próximo NerdDinner trae a tu tía Carlota.

    Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>