My Blog

Tuesday, September 07, 2004

Nota de Opinion: Lenguajes de Programacion

Para variar entre capitulos de venganza, agenda personal, cuaderno de anotaciones y links, recordatorios, etc, pense usar mi blog para su uso mas difundido: escribir una nota de opinion. El tema: los lenguajes de programacion.

El objetivo de este articulo es presentar mi vision sobre los lenguajes/tecnologías de programacion Delphi(para win32), Java y .NET (C# en particular). Antes que nada aclaro que mi experiencia es más basta para el primer lenguaje, no obstante, siempre ando curioseando sobre el los otros dos.

Por donde empezar? Veamos los puntos fuertes de cada uno y, como es un articulo de opinion,¿Cuál hay?, vamos a darle rienda suelta a mi subjetividad y ver que más me gusta de cada uno de ellos.

Empecemos por Delphi. Me gusta la sintaxis de Delphi, suele ser muy legible con sus correspondientes Begin y End. También me gusta que no sea Case Sensitive.
Una cosa importante que me parece es la posibilidad de tener bien separada la seccion de interface de implementacion pues cuando tengo que ver un programa escrito en java por lo general me mareo buscando la declaración de los métodos que busco. Tener esa separacion es genial y te ahorra el constantemente ir a la documentacion en HTML como se hace en Java o los lenguajes de .NET.

Uno de los puntos fuertes que me encantan de Delphi es que ademas del lenguaje es la IDE y la VCL. Aunque no muy explotada, los componentes de Delphi tienen muchas ventajas que no vi en otros lenguajes. Programar un componente es ponerse en una posicion en la que el usuario es otro programador. Se le pueden hacer editores de propiedades muy ricos. Por ejemplo para modificar una propiedad de un objeto en tiempo de diseño que sea por ejemplo el pais (un simple string o enumerado) : teniendo el componentito (objeto) tirado en nuestro form podemos hacer un editor de propiedades donde para modificar esa propiedad hacemos click sobre el inspector de objetos se abra un mapa mundi donde el mismo programador elije el pais clickeandolo en el globo terrestre. Si, ya se que a nivel practico no parece un ejemplo muy feliz, pero no me van a decir que no suena lindo. En Java como existen varias IDEs estas cosas por lo que vi no se pueden hacer. Delphi es el Lenguaje, la IDE y la VCL.

Esto trae sus ventajas y sus descentajas. Delphi fue pensado para hacer aplicaciones rapidas y la forma como esta concebido tiende a tentar a los programadores a hacer Drag and Drop de botones, y tener clases formularios con muchisimas lineas de codigo.

Hay que notar algo. Con la tendencia a que las aplicaciones sean Web y el hecho de pensar en el diseño de la aplicacion antes de tirarse a programar, hacer diagramas de clases, etc. Las aplicaciones estan tendiendo a no ser componentes dentro de formulario. Esto hace que el hecho de tener un editor de propiedades hermoso no aporte mucho porque probablemente el componente que hayamos hecho para otro programador en vez de usarlo en tiempo de diseño tenga que instanciarlo a mano en tiempo de ejecucion en alguna de las clases que definio como parte de su sistema. Tal vez el concepto de Tiempo de diseño que propone Delphi no aporte tanto como hace unos años. Me pareció que .NET trata de rescatar este aspecto e incluirlo para aplicaciones web ASP.NET.

Creo que algunos me dirian un vende-patria porque programo en Delphi y parece que estoy hablando en contra de el. Con mucho dolor Delphi me parece que delphi esta perdiendo mucho terreno. El Delphi 8 ya es para .NET y me da toda la impresion que la gente de borland quiere que se deje de usar la VCL para pasar a las clases de .NET.

La verdad es que me encanta Delphi. Programo en él y si tengo que elegir algun lenguaje para hacer alguna cosa para mí siempre termino haciendolo en Delphi. Delphi es poderoso en toda la programacion orientada objeto y presenta la flexibilidad para poder explotar la API de windows, COM y hacer cosas como programar un hook a la API de windows. No me digan que eso no es divertido?. Dudo que esas cosas se puedan hacer en java. Incluso le veo ventajas, por ejemplo, para hacer juegos. Al poder compilar todavia para win32 me parece por el momento el mas indicado de los tres para hacer un juego en DirectX u OpenGL. Bueno, para el 2007 se prevee computadoras a 10 GHz asi que para ese entonces creo que se va a poder migrar cosas como el quaek 3 a Java usando la API 3d del lenguaje. La gente de .Net diria que tranquilamente se pueden hacer juegos en .NET con su Managed DirectX. Creanme que si tuviera más tiempo libre lo probaría.

Hay muchas mas ventajas o cosas interesantes que le encuentro a Delphi, pero por ahora vamos a dejarlas de lado para no hacer el articulo demasiado largo. Al ser un articulo de opinion pretendo escribir las cosas tal cual atraviesan mi conciencia pero sin excederme en algo que nadie quiera leer.

Vamos a pasar a Java. Java tiene un monton de cosa interesantes. La comunidad Java parece ser inmensa y dentro de estar todos on-fire con el lenguaje. También tenemos lo de multiplataforma y esas cosas que no vamos a discutir porque supongo que ya se discutio mucho sobre ese tema.

Java tiene un par de cosas que a simple vista me tientan muchisimo. Primero: metodos virtuales por defecto. Realmente no entiendo porque en C# no adoptaron ese camino. Lei un articulo al respecto en donde sus desarrolladores justificaron porque tomaron esa decision basandose en el pragmatismo (lo practico, mas adecuado para el mundo real) y otras justificaciones que no me convencieron el lo mas minimo. De hecho muchos patrones de diseño como el decorator tienen mas sentido si todos los metodos ya son virtuales. ¿Y si quiero decorar algo que ya esta hecho qué? ¿Tengo que ir a la declaracion de la clase que quiero decorar y poner todos los metodos como vituales?

Yo le realizaba muchas criticas a java de cosas que le faltaban al lenguaje y sin embargo no las voy a mencionar aqui. ¿Porqué?. Lei la especificacion de la última version de java y tuve que ponerme a respirar dentro de una bolsa de plastico de la emoción. Incluyeron cosas como generics y enumerados... Delphi no tiene generics y que vien me vendrían. Incluso escribo esto y me agito. Seamos sinceros, es una actitud de nerd, pero bueno.

Me pregunto si toda esas funcionalidades se van a incorporar en el java para telefonos celulares. Como programador frustrado de juegos que termino programando aplicaciones de gestion (:P) hacer jueguitos simples en mi tiempo libre para celulares me resulta una idea de lo mas atractiva. Claro que me encantaria disponer de los Generics, enumerados y todas esas cosas que las nuevas versiones de Java me ofrecen.

Otra cosa interesante es lo siguiente. Ultimamente lei sobre Programacion Orientada a Aspectos. Por lo poco que lei estoy convencido que es el proximo paso que tiene que dar la programacion . Muchas limitaciones que encontré a pueden ser solucionadas con la AOP. Pero igual le falta mucho camino por recorrer.

Sobre este punto Java parecer esta tomando la iniciativa. Vi un compilador que se llama AspectJ y unas cosas que se llaman CGLIB proxies. Estos ultimos los usa Hybernate para hacer proxies dinamicos a las clases de negocio persistentes. Habiendo estado programando un framework de persistencia para Delphi y habiendo puesto un generador de código para que me haga un proxy por cada clase de negocio (para lo que necesité un parser de codigo) veo bien clara la ventaja que me hubiera proporcionado una cosa asi en Delphi.

Vamos a ensuciar un poco a java en pos de Delphi. Que feo que me resultan crear las aplicaciones SWING o AWT. Si bien las ides como NetBeans lo hacen fácil sigue siendo más enroscado y para una aplicacion chiquita de windows ni lo dudaria en hacerla en Delphi antes que en Java. Hay que reconocer que eso de los punteros a funciones (o eventos) si bien es discutible puede resultar una solución de lo más que elegante.

Ni hablar si quiero usar la API de windows.

Y .NET? Bueno... no vamos a hablar mucho de .NET por una cuestion de longitud del articulo, pero vamos a ver una cosa muy interesante que vi en .NET y me parece completamente logica y correcta. Poder hacer override (como los metodos no son virtuales por defecto tampoco en C# hay que hacer override, aunque creo que nada impide hacer un lenguaje que compile a .NET y tenga los metodos virtuales por defecto . Taria bueno no?:) )y en el metodo de la subclase cambiarle el tipo del parametro de modo que sea alguno perteneciente a una subclase del tipo de parametro que recibia el padre. Creo que si leen el ultimo renglon unas dos o tres veces omitiendo el parentesis se entiende y me ahorro de escribir un ejemplo. En Java y Delphi ésto último no se puede hacer.

Aqui en este artículo estamos discutiendo a nivel lenguaje, nada mas que eso. Cada lenguaje con su correspondientes plataformas abarcan conceptos mas amplios y variables adicionales que podrian intervenir a la hora de juzgar uno y otro lenguaje y el cuando usar uno u el otro. Aqui solo hablamos de los lenguajes en sí.

No esta mal por ser mi primer articulo de opinion eh. Espero que no sea demasiado largo. Como ultimas palabras voy a decir: Aguante Delphi!. Le prometo que si alguien me regala el dinero suficiente como para poder programar a mi gusto sin trabajar voy a hacer una IDE en la que programes en Delphi (sin virtuals ni override porsupuesto pero con editores de propiedades), te traduzca los fuentes a Java y luego te lo compile.














1 Comments:

  • Esteban, muy buena nota de opinión... Coincido con vos en muchos aspectos, aunque no puedo opinar de Java porque no lo manejo demasiado, aunque algo sí de C#.
    Espero leer otros artículos como éste en el futuro.
    Quizás dentro de unos días, cuando salga a la luz Delphi 9? Te cambiará tu forma de pensar o te harás más adicto a Delphi? Yo me inclino por lo segundo, lo mismo que me pasará a mí.
    Faltan 3 días para la presentación oficial del nuevo producto en Borcon 2004, y nosotros en esta parte del mundo. http://www.borland.com/conf2004/
    Buena suerte!!!

    By Blogger Daniel Alvarez, at September 8, 2004 at 5:32 AM  

Post a Comment

<< Home