Java vs. .NET

El otro día, estaba por terminar mi día de trabajo en equipo, cuando escucho algunas palabras fuertes llegando desde otro equipo:

“Recórchilis!”
”Cáspita!”

Bueno, eran un poco más fuertes… ;-)… Y estaban dedicadas a Java. Dos programadores .NET estaban tratando de armar un programa Java que se comunicara con un servidor web, servicio REST supongo, con autenticación. Y estaban luchando con la librería y el lenguaje Java.

Eso lo he visto en varios desarrolladores .NET que en algún momento tienen que trabajar en Java. ¿Es así? ¿Es Java más difícil de programar, más “convoluted”?

Recuerdo aquel viejo “sketch” de Les Luthiers, cuando Yugurtu Ungue le escribe desde EE.UU. a su tío en Africa: “Trabajo en una serpiente gigante que va por un camino de metal” y el tío contesta “Ah! Es lo más parecido a un tren que escuché en mi vida!” Ver

http://www.youtube.com/watch?v=QfB7N_z7dJM

http://www.youtube.com/watch?v=1WqMOXXcQ9c

http://www.youtube.com/watch?v=x2aRiZCM0i8

;-)

Algo así digo yo cuando me describen a .NET: “Es lo más parecido a Java que escuché en mi vida!”. ;-)

Java aparece al público en 1995 de la mano de Sun. Y fue el primer lenguaje/tecnología que llevó a las masas: objetos con garbage collector, una amplia librería de clases, y una máquina virtual que puede ejecutarse en distintos sistemas, sin necesidad de recompilar (fuera las incompatibilidades de portar int de C de Unix a otro Unix, por diferencias de tamaño). Y eso fue bueno: yo nunca llegué a tocar VB6, y me libré de usar Threaded Apartment Model, COM+, y esa cosa trasnochada que eran los recordset desconectados en ADO. Eso sí era “convoluted”!

Lo que pasó, es que Microsoft consiguió mejorar todo eso, con la llegada de .NET, con un mejor tooling inicial y una librería de clases “afiatada” luego de la experiencia de Java. Hasta hizo pruebas de usabilidad y mejoró la librería (un poco) en la siguiente versión. Por ejemplo, aparecieron File.ReadAllLines al ver que los programadores .NET tenía dificultad en entender los streams y readers (justamente, ese era uno de los temas que el equipo que mencioné arriba estaba luchando, creando InputStream, Reader, BufferedReaders y demás en Java). Mientras tanto, Java sufría las especificiaciones J2EE de Sun: parecía que las había escrito el “enemigo”. A Java lo salvó la comunidad open source: desde Tomcat hasta Hibernate, hasta el notable Eclipse. A .NET lo salvó Microsoft: siguiendo un crecimiento natural, mientras que en Java todavía estamos esperando la llegada de closures naturales en el lenguaje. Hasta la movida de Microsoft de publicar C# y .NET como standard, permite el nacimiento del proyecto Mono, y hoy tenemos .NET multiplataforma.

A Java lo salvan también IBM con su apoyo a Eclipse, la fundación Apache, Spring Framework, Hibernate (vean cómo influyó en EJB 3, demasiado tarde) y otros proyectos de código abierto. Es gracias a esos movimientos que tenemos unas IDE open source en Java: Eclipse. Tal vez su gran característica (flexibilidad, todo es un plugin) conspira con la experiencia Out of the box que nos da Visual Studio. Cada Eclipse de cada máquina/equipo, en una consultora, es un Eclipse distinto ;-). Otro caso, Jboss Application Server, con microkernel: con un problema (su herencia de EJB, JEE), tan flexible, que termina siendo un mundo complicado comparado con las tecnologías servidoras que tenemos en .NET.

Pero vean algunas cosas: eso que pasó en Java, la aparición temprana de tantos frameworks y librerías, también hace que hoy, un proyecto Java, es un modelo para armar. Tantas opciones (y además dispares) agrega complejidad. Vean cómo todo esto propulso la aparición de Spring Framework (para poder ligar multitud de librerías dispares) y ese agitador de discos duros que se llama Maven. Muchos aman a Maven, un automatizador de builds y manejador de proyectos, porque soluciona un problema que NO TENDRIA QUE SER PROBLEMA: manejar la complejidad. Yo sigo pensando que Ant es mucho más entendible. Vean que tanto Spring Framework como Maven no han tenido necesidad de ser usados en .NET.

Vean cómo la complejidad de especificaciones como los Web Services han sido resueltos de distinta forma por Java/Sun y .NET/Microsoft. Mientras que tenemos WCF (complicado de configurar, pero empaquetado simplemente) en .NET, del lado de Java tenemos DECENAS de .jars (librerías) para construir la librería Metro.

Espero que NuGet no agregue esa complejidad de opciones en .NET: por lo menos, lo que me trae NuGet queda dentro de la solución que manejamos, y al contrario de Maven, se ocupa de ese solo tema: ser un package manager.

Hoy hay una comunidad de Java altamente activa, pero algo golpeada por la compra de Sun por Oracle. Hay también una gran actividad en el soporte y difusión de lenguajes dinámicos sobre la JVM, notablemente Scala, Clojure y Groovy. Hay algo menos en .NET (donde Microsoft “mató” IronRuby, IronPhyton, esperemos qué hace con Javascript). Pero hay una gran comunidad de proyectos de código abierto, o directamente consumibles via NuGet.

No tengo una conclusión para el post, mas que un resumen: Java es el padre de gran parte de .NET, Java tuvo una historia accidentada, tiene una comunidad altamente activa, pero su futuro es incierto de la mano de Oracle. Hay dinamismo en pasar de Java a JVM + lenguajes. .NET sigue su futuro, en aplicaciones servidoras? (¿qué pasará con las interfaces de usuario?). Java y tooling es más áspero o complejo en el lado de Java que del lado de .NET.

Y si Uds. trabajan en .NET, es gracias a que en la historia apareció Java.

Nos leemos!

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

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

9 Responses to Java vs. .NET

  1. Carlos says:

    Que quisiste decir con “Vean que tanto Spring Framework (..) no han tenido necesidad de ser usados en .NET” ?

  2. Ricardo Satavicius says:

    Angel: Bueno … es que tus desarrolladores .NET ni siquiera leyeron los libros básicos de Java SE … cursos 110 y 275 … que querés !! … garrá los libros que no muerden !! … ahí está re-clarito, clarito …

    estos pibes de ahora … si hubiesen laburado con VB3,4,5 y 6 no estarían llorando tanto …

    y Carlos: Spring es como la boligoma; sirve para pegar todo (o pegotear) -libs, APIs- lo que necesitas. En .NET no necesitas nada … tenés toda la librería completa (mueble y libros) y si necesitas algo solo es agregar un libro más … en Java tenés que agregar un nuevo mueble con sus libros …

  3. Carlos says:

    Entiendo tu punto, yo particularmente desarrollo en .NET usando Spring .NET para usar IOC, existe algo desarrollado por Microsoft ?

  4. Armando says:

    “Y si Uds. trabajan en .NET, es gracias a que en la historia apareció Java.”

    Y los que trabajan en java es gracias a que han salido cosas antes, y así. No es una pregunta.

  5. Mario Grillo says:

    Java es un excelente lenguaje, y .NET le debe mucho a Java, sin embargo debido a la rigidez de SUN y ahora de Oracle, hay muchas cosas que ahora tiene .NET que hacen falta en Java, a mi me ha tocado pasar de .NET a Java y aunque el cambio no me costo tanto (uso ports de java a net como NHibernate, Castle Windsowr para IoC/DI) siempre pregunto a mi equipo de desarrollo si hay cosas similares de .NET en Java como clases parciales, tipos dinamicos (introducidos a partir del fx 3.0), clases anonimas, lambda expressions y la respuesta es no.

  6. Aqui está mi opinión al respecto sobre Java versus C#: http://goo.gl/fb/y11HV.

    Aparte de eso, Spring no es simplemente para “pegar cosas”. De la forma en que lo enfocas parecería que comparas a Spring con un “using System.Something” en C#. Nada más lejos de la realidad.

  7. Ricardo Satavicius says:

    Santiaguito Valderrama, no voy a perder más tiempo que el que gasto en escribir esto … La respuesta de Spring está a tono con la pregunta, y habla solo sobre la funcionalidad comentada en el párrafo de AJL … Y se nota tu “tono” de “Java fanboy” … (tal vez de “Globant fanboy” ??) … No serás vos uno de los Angry Birds ? … Yo por mi parte, al tener 46 años y 29 de activo profesional de sistemas, no soy fanboy de nada y solo de alguien : mi querida hijita Cassandra …

  8. Gilberto Vento says:

    Honestamente no estoy de acuerdo con muchas de las cosas que dice el articulo

    “maven resuelve un problema que no existia” realmente no, el problema siempre ha existido, se llama manejo de dependencias y en .net tambien existe.

    “eclipse a impulsado java” y que hay de netbeans y jidea, eclipse es el peor de los ides de java sin embargo es el mas usado, pero cualquier programador java que use netbeans o idea te dira que jamas usaria eclipse.

  9. ariel says:

    Creo que ambos lenguajes son excelentes opciones de trabajo o como hobby o como lo quieras desarrollar.
    Pero esta tambien muy claro que la plataforma .net, es mas todo el ecosistema microsoft esta hoy dia mucho mas avanzado que la plataforma java.
    c# tiene funcionalidades que aun java no posee. Tal vez con java8 se haga realidad el sueño de las lambda tan utiles para simplificar codigo y ayudar a la legibilidad de un codigo mas limpio. Pero aun le falta mucho a Java para llegar al actual c#.
    Tube el agrado de poder probar una aplicacion escrita en visual studio mas precisamente en c# y correrla en linux sin cambiar una sola linea de codigo. Hablo de una aplicacion en 3 capas, nhibernate en datos, spring para ioc y winforms y como dije, sin cambiar ni una sola linea de codigo ni siquiera para los winforms que los levanto sin dramas, cosa que fue lo que mas me sorprendio.
    Todo esto gracias a mono y monodevelop hoy desarrollar en linux con c#, acceso a datos con un excelente orm como nhibernate y haciendo uso de spring para inyectar dependencias que mas se puede pedir para poder llegar a linux en forma tan practica cuando hace unos años era impensable, era una caracteristica que hacia superior a java y que ahora ya no es un problema. Java ya no tiene ni eso, ni la exclusibidad de multiplataforma ya que mono va con linux, android, osx. Gran acuerdo de Microsoft con Novell, gran acuerdo que beneficia a la plataforma .net a nuevas fronteras.
    Programo en ambos lenguajes y alguno mas, no soy fan de ninguno, pero reconozco la superrioridad de c# sobre java hoy en dia. Es algo logico, java nacio de c, c# de java.
    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>