.NET una maravilla tecnológica

*** Este articulo lo escribí en el 2009 para la universidad para una revista que nunca se publico, hoy lo publico para compartirlo con todos



Quien trabaje o estudie en el área de la informática sabrá que la tecnología .NET de Microsoft no es algo nuevo, de hecho tiene aproximadamente 6 años de existencia, desde entonces se ha popularizado mucho por varias razones, Microsoft lo ha impulsado mucho pues es su producto para competir con la otra gran tecnología de desarrollo empresarial Java de Sun Microsystems; segundo todas las nuevas características de la plataforma, las modificaciones a los lenguajes existentes y diseño de nuevos lenguajes dan como resultado un ambiente de programación que va directamente a la productividad, las aplicaciones son fáciles de programar, las interfaces gráficas de usuario GUI resultantes son muy elegantes con Look and Feel adaptativos y se integran perfectamente con el Shell gráfico de Windows, Servicios Web XML y muchas otras ventajas.

Sin embargo, mucha gente no sabe porque .NET alcanza estos logros, simplemente programa en .NET porque esta de moda, o porque es lo que enseñan en la universidad; a veces no nos interesa como funcionan las cosas mientras estas funcionen, no obstante echar una mirada al interior de .NET nos da la oportunidad de conocer todo lo que nos puede brindar esta excelente plataforma de desarrollo además de entender porque es una maravilla en términos de ingeniería 




El nacimiento de .NET

Casi siempre en la informática una tecnología nace con el objetivo de resolver un problema al que no se le ha dado una solución satisfactoria. El lenguaje ensamblador surgió por la necesidad de facilitar la engorrosa programación en lenguaje maquina. C nació por la ausencia de un lenguaje estructurado que hiciera mas fácil la programación para cualquier propósito y con un nivel de eficiencia cercano al ensamblador; C++ reemplazo a C por la capacidad de manejar proyectos de software grandes (mas de 100.000 lineas de código) de una manera mas natural gracias al concepto de programación orientada a objetos, además conservaba todas las ventajas de C; Java entra en escena por la aparición de internet y la necesidad de crear programas portátiles o independientes del sistema operativo.


.NET que formalmente se conoce como el CLI (Common Language Infrastructure) fue desarrollado por Microsoft por la necesidad de una plataforma orientada a la reutilización de componentes software además de que se requería urgentemente un reemplazo de la tan complicada API de programación Windows Win32. .NET conserva las ventajas de Java, las aplicaciones en .NET son portátiles siempre y cuando exista el .entorno de ejecución para la plataforma que se vaya a utilizar, sin embargo no esta atada a un solo lenguaje. Microsoft soluciona este problema de una manera muy elegante y que a nadie se le había ocurrido antes, aunque las técnicas utilizadas en .NET de alguna manera ya existían nadie las supo utilizar para diseñar una solución como .NET. 



La API Win32 traía muchos problemas en el desarrollo de software, no era una API bien estructurada, carecía de coherencia y la documentación de esta era algo confusa. Además de estos problemas normalmente cuando se quería trabajar o brindar soporte a varios lenguajes de programación por ejemplo para la programación del sistema operativo, se tenia que escribir una capa de software entre las API del sistema operativo y el lenguaje de programación deseado, estas capas de software son conocidos como bindings, el problema de esta manera de trabajar era que cuando se hacia una modificación en las API o se implementaba una nueva característica todos estos bindings tenían que ser modificados manualmente para añadir el soporte a las nuevas funcionalidades, además de esto el código de cada lenguaje no podía ser reutilizado entre si.



Microsoft en vez de utilizar la forma tradicional de trabajar con lenguajes de programación y compiladores de código fuente a código maquina nativo o interpretes empezó a utilizar algo parecido a Java. Java utiliza una tecnología de maquina virtual, el código fuente es compilado a código de una maquina ficticia, en Java este código intermedio se llama Bytecode, este código es ejecutado por la maquina virtual de varias maneras la mas empleada y exitosa hoy día es la compilación JIT, el Bytecode no es interpretado sino que es compilado en tiempo real a código nativo a medida que se necesita paso a paso, este método es el mejor hasta ahora en términos de rendimiento y se usa también en .Net; luego para dar soporte Java a cualquier sistema operativo solo es necesario disponer de la maquina virtual Java para dicho sistema operativo.

Sin embargo en el diseño del código intermedio esta la diferencia con Java; el código intermedio de .NET es el CIL (Common Intermediate Language) y fue diseñado para que fuera fácil traducirlo desde cualquier lenguaje fuente, a diferencia de Java que solo acepta código Java. Esto significa que programemos en C++ o en Visual Basic para el CLR Common Language Runtime (la maquina virtual de .NET) es indiferente. Esto da la posibilidad por ejemplo de declarar una clase en C++ y crear un objeto de esta en Visual Basic, de hecho la librería de clases de .Net es accesible desde cualquier lenguaje soportado por .NET. En este momento oficialmente .Net soporta C# (un lenguaje que diseño Microsoft especialmente para .Net), C++, Visual Basic.NET, J# sin embargo Microsoft y terceros han desarrollado y soportado mas lenguajes de programación como Boo, Nemerlie, Python, PHP y la lista sigue creciendo. 




C# merece una mención especial ya que Microsoft lo diseño para explotar toda la funcionalidad de .NET, este es muy parecido a Java. Microsoft sugirió a Sun Microsystems unos cambios que en general también la gente quería para Java pero Sun no acepto. Microsoft entonces intento hacer un lenguaje que le gustara a la gente, el resultado fue C# un lenguaje que comparte atributos con Java y añade otros, lenguaje orientado a objetos con comprobación de tipos, manejo de memoria inutilizada con el recolector de basura, permite el uso de variables no inicializadas, tipos enumerados, conversión automática de tipos simples, también permite el uso de punteros (aunque hay que usarlos con cuidado) y soporta estructuras. En definitiva un lenguaje elegante y muy expresivo es decir con menos lineas de código se expresan mas cosas, además al estar ligado a .NET es un lenguaje orientado a componentes.


.NET para todos los gustos

Microsoft pone a disposición de todo el mundo el entorno de ejecución .NET Framework y las herramientas de desarrollo básicas compiladores de linea de comando y documentación todo esto en el .NET Framework SDK, es cierto que trabajar desde la linea de comandos no es lo mas productivo por eso Microsoft también provee IDE de programación para cada lenguaje en versiones limitadas o Express como las llaman ellos. Visual C# .NET Express Visual Webdeveloper Express Visual Basic .NET Express Visual C++ .NET Express, todas estas herramientas estas disponibles gratis desde el sitio web de Microsoft.


Microsoft vende la suite de programación Visual Studio .NET en tres versiones Professional, Enterprise Developer y Enterprise Architect, las tres versiones traen toda la plataformas de desarrollo con algunos extras para necesidades diferentes, para mas información vaya al sitio web de Microsoft.



También en Software Libre

Es cierto que a pesar de que .NET tiene la posibilidad de ser multiplataforma Microsoft no ha querido implementar el framework para otros sistemas operativos diferentes a Windows 2000, Windows XP y Windows 2003, sin embargo la tecnología .NET es demasiado buena y de eso se dio cuenta la comunidad del software libre. El hacker mexicano Miguel de Icaza (creador de multiples programas populares en la comunidad como el navegador de archivos Midnight Commander, el entorno de Escritorio GNOME, el programa de Correo Evolution, la hoja de calculo Gnumeric entre otros) vio que Microsoft creo y estandarizo el Common Language Infrastructure (.NET) en la European Computer Manufacturers Association (ECMA), Microsoft también estandarizo una especificación del lenguaje C#.


Icaza vio en .NET una solución muy elegante que podía resolver también grandes problemas en el desarrollo de software en Linux. Decidió entonces empezar una implementación en software libre de la especificación del CLI y del lenguaje C#, esta implementación es llamada MONO. La gigantesca empresa Novell inc luego compraría Ximian la empresa de Icaza. Ahora MONO es impulsado por Novell como un gran entorno de desarrollo multiplataforma, MONO contrario a .NET si soporta los mayores sistemas operativos actuales como Windows, Linux Mac OS X, Solaris y otros menos populares.


El desarrollo de MONO a contribuido a que aplicaciones que se escriben en .NET pueden ser transportadas a Linux y otros sistemas operativos diferentes a Windows. Otro problema es que en Linux siempre a existido una competencia por desarrollar la mejor suite de desarrollo (lenguajes de programación y sus diferentes librerías) pero todas incompatibles entre si, toda la funcionalidad para cada lenguaje de programación debía ser escrita para ese particular lenguaje, lo que genera una duplicación de esfuerzos muy grande; Mono llega como una buena alternativa, ya en este momento Mono soporta muchos lenguajes de programación C#, Java, Python, Boo, Nemerlie, PHP, Monobasic (Una version propia compatible con Visual Basic) y la lista sigue creciendo. 



Microsoft estandarizo las partes mas complejas de .NET pero algunas librerías como WindowsForms quedaron fuera de la especificación estandarizada y están siendo patentadas. sin embargo el proyecto MONO implemento estas librerías para brindar compatibilidad con las aplicaciones .NET. pero se desaconseja su uso para evitar problemas jurídicos. Para llenar ese hueco el proyecto mono desarrollo sus propias API libres de código Microsoft con la funcionalidad de las librerías no estándares, entre estas esta GTK# que es una herramienta para construir interfaces gráficas de usuario, Gecko# librería para utilizar el motor de navegación de los navegadores de la familia Mozilla como el Firefox y otras. Todo el framework MONO y estas librerías son totalmente multiplataforma, sin embargo ya se han escrito otras librerías especificas para algunas plataformas para añadir funcionalidades mas ligadas al sistema operativo como Gnome# para Linux y Cocoa# para Mac OS X.

La tecnología .NET ya esta consolidada en plataformas Windows y es empleada con mucho éxito en el software libre y el sistema operativo Linux en particular ya esta dando sus frutos también, hay ya aplicaciones muy potentes de de muy alto rendimiento para ser una tecnología de maquina virtual. .NET esta disponible para cualquiera , los expertos hablan muy bien de .NET y C# esta al tope de popularidad en cuanto a lenguajes de programación según encuestas por la red; ya sea para utilizar académicamente o como negocio para pequeña mediana o grandes corporaciones .NET es una plataforma profesional, fácil, elegante, coherente.

Comentarios

Entradas populares de este blog

Y el mejor smartphone es...

Software libre como alternativa