Tendencias del Desarrollo de Software (I)

Antes que nada, muchísimas felicidades a todos Uds. colegas y lectores de esta maravillosa comunidad, después de laburar más de lo normal y luego de unas merecidas vacaciones, vuelvo a las andadas, escribiendo las cosas que suben a mi cabeza.

En esta ocasión deseo compartir con Uds. algunas de mis percepciones de cómo está evolucionando el desarrollo de software hoy en día. La verdad que se me hace muy complicado empezar a enfocar esta entrada, esto es debido a que muchas de las cosas que han ocurrido en el pasado, han influido enormemente en cómo se hace el software hoy, además que existen una infinidad de temas de los que quizás están pensando, voy a tocar, sin embargo dando algunas vueltas he decidido escribir de dos temas importantes: Donde va el desarrollo con .NET y que pasa o pasará con SOA.

Cada día recibimos noticias acerca de cómo Microsoft va moldeando un nuevo y más versátil Framework, creo que ya varios escribieron sobre eso en la comunidad, pero lo que ocurre mas alla de la vista de Microsoft es otra historia, en esa otra visión vemos a una comunidad que ha adaptado .NET como una alternativa confiable y ha construido software sobre esta plataforma, pero si miramos mas detenidamente, ella está formada creciente y recientemente, por personas que vienen de usar J2EE y que me gusta llamarlos «los conversos» sean estos voluntarios u obligados, estas personas están dia a día aportando a la plataforma viejas ideas (de su antiguo mundo J2EE) y exportando estas hacia .NET.

Existen mucho software que seguramente se les viene a la mente al leer esta frase, entre ellos JUnitàNUnit, Hibernate
à
NHibernate, CruiseControlàCruiseControl.Net, Struts
à
NStruts y muchos otros y cuando digo muchos son realmente muchos, algunos de ellos con poca actividad otros sin crecimiento otros con mucho mas y pueden encontrar más en este sitio, pero el común denominador es que nos invaden ideas viejas J y no me malinterpreten, no digo que este mal, solo me sorprende la cantidad de cosas que se están reinventando, en nuestra plataforma favorita. Esta tendencia, sin lugar a dudas no va a detenerse, ha de ir sentando raíces para quedarse y en muchos casos para transformar radicalmente el Framework .NET. Debemos admitir que J2EE ha estado en el negocio del desarrollo «profesional» un poquitín más que .NET y de ahí que esta comunidad conversa ha de traer ideas frescas y novedosas para nosotros, pero ya digeridas en esa otra realidad, una de ellas y la que mas me ha llamado la atención es la implementación de un recientemente conocido (para mí) patrón arquitectural llamado «Naked Objects» la traducción podría resultar desconcertante, así que prefiero dejarlo en ingles J, este patrón que personalmente lo he visto implementarse de manera intuitiva en productos como el uruguayo Deklarit o el publicitado y nunca bien apreciado Genexus, en ambos casos la idea de un modelo de objetos que guía el desarrollo está fuertemente arraigada, con sus matices y variaciones y ya venía madurando, con bastante éxito debo decir, por la cantidad de usuarios que pueden contarse en ambas herramientas, quizá algunos discrepen conmigo de la pureza de la implementación de Naked Objects en estas herramientas y es justamente ese mi punto, la idea de implementar este patrón ha ido merodeando la cabeza de muchas personas y me incluyo entre ellas y como todos podemos afirmar, la implementación de un patrón es diferente de implementación a implementación.

En J2EE se ha realizado un esfuerzo un tanto diferente, digamos que «desde cero» siguiendo lo aprendido del largo camino de evolución de este patrón ha creando un producto llamado Naked Objects Framework, que siguiendo lo explicado anteriormente ha tenido su hermano mellizo llamado Naked Objects.NET (nombre bastante original) que a diferencia del anterior es un producto comercial, lamentablemente añadiría, aunque existe una versión gratuita, es bastante limitada.

¿Que nos permite hacer este producto? Básicamente sentarnos a modelar y generar a partir de este modelo, generar las diferentes capas que componen nuestra aplicación, incluida la necesaria capa de presentación, ventanas y controles incluidos. El modelo lo controla todo, incluyendo las modificaciones, la teoría que nos guía es que los requerimientos son expresados y volcados en el modelo, cuando un requerimiento cambia, por ende el modelo ha de cambiar y esto disparará la serie de cambios en las diferentes capas de la aplicación. La esperanza de los creadores de estos productos es una premisa del patrón, que indica, que al existir una correspondencia de 1:1 entre la interface de usuario y el modelo, se obtiene una mayor calidad en el diseño orientado a objetos y mayor agilidad de desarrollo.

Sin embargo, a este punto voy a permitirme discrepar de esta tendencia, como les comente anteriormente conozco los productos que han implementado este patrón y he utilizado los mismos, no a gran escala pero si lo suficiente para observar sus fortalezas y limitaciones. Entre sus fortalezas sin lugar a dudas esta lo que he mencionado anteriormente, son herramientas ideales para desarrollo ágil, nos ayudan a pensar mas en orientación a objetos y a abstraernos de los detalles de la implementación, pero, se encuentran limitadas ante requerimientos de alta interacción, es decir frente a interfaces (hablemos mas directamente) que deben ser programadas con altos niveles de interacción entre componentes o con el usuario, no digo que no puedan utilizarse o realizarse cosas complejas, solo que nos limita la complejidad que agregan para realizar estas tareas. En ningún punto y bajo ninguna circunstancia deseo desmerecer o minimizar la utilidad de estas herramientas, solo darles el lugar que creo que deben tomar y es el de ser herramientas de apoyo y no centrar toda nuestra expectativa del desarrollo en ellas.

Bueno, a donde va todo este discurso, una parte está destinada a aquellas personas que creen que lo que existe en .NET es totalmente original y a mostrarles una interesante realidad, nada es original todo es evolución por decirlo menos J, otra parte destinada a aquellos que mira a herramientas como Genexus con total orgullo y expresar un comentario que hace bastante quería hacerlo y una otra parte a reafirmar el hecho de que las herramientas de terceros y tarde o temprano las herramientas incluidas en el framework.NET, vendrán de nuestro vecino J2EE como lo han estado haciendo, esto quizá, es algo que ya todos sabíamos, bueno no todos, lo novedosos es que ahora que lo percibo y escribo, deseo que se apuren a traer más cosas de allá para acá J, obviamente existen un creciente número de cosas que van de aquí para allá también pero eso es tema de otra entrada.

Se me hizo extensita esta entrada por lo que decidí dividirla en una segunda parte que estaré publicándola el fin de semana, donde veré un poco de lo que es y será SOA, siempre de acuerdo a mi modesta percepción.

Saludos.