lunes, 14 de septiembre de 2009

Java versus C#, ¿por qué aprender y cual?

El objetivo de este post es explicar un poco mi discutible visión sobre estos lenguajes de bytecodes de propósito general, anticipando que soy una persona partidaria de java y argumentando un poco por qué elijo Java.

En primera instancia voy a explicar por qué comparo java con c# y no con otros lenguajes de bytecodes como Ruby o Python.

Nota para el que está leyendo: Lo que sigue hasta el próximo título importante no hace al agrumento del tema asíque se puede saltear sin perderse nada.

Principalmente Ruby y Python quedan fuera de alcance son de tipos dinámicos; (y tirando un pequeño agite) personalmente elijo Python simplemente porque ya el nombre Ruby me suena a marica, y por lo poco que he visto de como se escribe, lo veo muy poco masculino a mi gusto.

Antes de seguir con Java y C# voy a explicar a qué me refiero por código masculino. No es una comparación sexista sino que si colocaramos una escala graduada con masculino de un extremo y femenino en el otro extremo y aclarando que mientras más uno se tiene que ensuciar las manos más se acerca uno al lado "masculino" o sea a nivel MACHO se encuentra el assembler un poquito mas abajo C, java se encuentra en la mitad y Ruby se encuentra del lado femenino.

Máquina Virtual

Java tiene una máquina virtual que corre en muchas plataformas y sistemas operativos, inclusive la mayoría de los teléfonos celulares y microcontroladores. En cambio la plataforma .net sólo corre bajo Windows, ocasionalmente corre en "Mono" (implementación libre y para linux de .net) pero ésta depende de la volundad de que Microsoft quiera exigir aplicar las leyes de patentes de soft o no. Otro tema es que me he topado con casos en que las máquinas virtuales más nuevas de .net no corren aplicaciones anteriores al ser actualizadas.

Estructura de las Bibliotecas.

Las bibliotecas de Java y la arquitectura sugerida para las aplicaciones se encuentran Diseñadas siguiendo los patrones de diseño para soft orientado a objetos y las mejores prácticas de diseño que pueden aprenderse de los libros y la experiencia, de esta forma un programador formado correctamente no tiene que introducir cochinadas en su soft para lidiar con las fallas de diseño de la plataforma.

En contraste la biblioteca de la plataforma .NET se encuentra pensada para ser intuitiva sólo para alguien que no tiene la mas mínima idea de programación, lo cual le genera dependencia hacia la plataforma, imposibilita el entendimiento de lo que se está haciendo y quien comienza con ésto sólo puede trabajar en la programación utilizando esta plataforma porque posiblemente no entienda otras. Evidentemente esta forma de hacer las cosas no sólo es cochina sino que posee un alto acoplamiento, baja cohesión, y posiblemente haya que tapar demasiadas cochinadas para dejar una aplicación bien diseñada.

Bibliotecas externas disponibles

Java posee una gran comunidad por lo que podemos encontrarnos con bibliotecas que aceleran nuestro trabajo en todas las formas, colores y sabores. En contraste la comunidad de C# no es tan amplia por lo tanto no existen tantas herramientas.

Entornos de Desarrollo

Al ser Java un lenguaje libre y abierto, podemos encontrarnos con IDEs multi plataforma y de gran utilidad como Netbeans o Eclipse, (y muchos muchos otros) de gran poder y sin costo de compra de licencias. Gracias a mono, C# ha ganado lugar en linux con IDEs como MonoDevelop, pero principalmente quien desarrolle en Windows tendrá su copia pirateada de Visual Studio (el cual cuesta sus buenos dólares de licencia para el que piense uaslo en serio), o la versión poco poderosa y gratuita.

Legibilidad del Código
Para quien se encuentre acostumbrado a programar en C++, seguro que encontrará mas legible a C#, pero, C++ es en sí MUY poco legible para quien no lo conoce, por lo cual desde mi punto de vista, ésto no es más que un defecto. Para quien se encuentre acostumbrado a leer código c, Java será muy fácil de comprender. Igualmente éste punto es medio subjetivo, pero pienso que convenciones como iniciar nombres de atributo con un guion bajo (no obligatorio, pero buena práctica en C#) o denotar la herencia con ':' por decir algo, solo "ennegrece" el código.

Interfaces de Usuario

El tema de la "belleza" de las interfaces de usuario es el punto fuerte de C#, en efecto dicho lenguaje trae todo tipo de herramientas para hacer pantallas bien agradables, Java tiene nativamente a Swing (y al viejo y peludo AWT) pero Swing no satisface 100% las necesidades de una apariencia "nativa" y un Look and Feel uniforme que es lo que principalmente atrae al usuario final, sin embargo vienen frameworks externos para solucionar estos problemas.

Conclusiones
C# puede parecer para la persona poco experimentada como la opción "mas fácil" de aprender pero no acompaña a los programadores en su aprendizaje y eventualmente los guía hacia el "estanque" donde están metidos todos los programadores que se la jugaron por Microsoft y que todavía creen que a la computadora la mueve un duende mágico. Java provee flexibilidad y alta portabilidad y se adapta a una GRAN variedad de situaciones, sin contar que es un lenguaje libre.

Para el lector: si leyó hasta acá, espero haberlo convencido.

Saludos!

No hay comentarios.:

Publicar un comentario