Java sigue los pasos de C#?

Luego de mucho tiempo sin postear quiero tocar un punto que genera debates acalorados y mi intención, valga la aclaración, no es iniciar ese debate aquí, mi intención es exponer mi percepción de la realidad y escuchar sus opiniones. Hace quince años o un poquito más Java era visto como una innovación y permítanme decirle que incluso me tuvo cautivado algunos años, era un lenguaje que emanaba promesas de ejecución multi-plataforma, un lenguaje que nos alejaba de los dolores de cabeza (necesarios en se entonces) de los punteros y que impulsaba la orientación a objetos en un mundo procedural y desordenado.

Hace ocho o diez años, Java era el ejemplo a seguir (y en otros sentidos a evitar) por un nuevo y raro espécimen de C llamado C#, Java lideraba el mercado junto a otros lenguajes que no le hacían sombra o bueno no la sombra suficiente, como ser Delphi (que buenos tiempos), pero después de todo Java era aquello que se tenía que mirar antes de seguir el camino, en esa época me encontraba trabajando en la Empresa Nacional de Telecomunicaciones de mi país y como era previsible se usaba Java y mas específicamente J2EE como plataforma de desarrollo, laburaba en la integración de un portal y SAP/R3, mediante un concepto incipiente en ese entonces, servicios web, en esa época prematura y emergente de la plataforma .NET ocurrió mi transformación y mi mirada definitiva hacia Microsoft, en aquella época donde compañeros de trabajo con mucha más experiencia que yo en Java y en la vida profesional, desmerecían el esfuerzo inicial de Microsoft, época en la que me anime a realizar una afirmación temeraria durante una reunión de colegas, “.NET en diez años tomaría el liderazgo como plataforma de desarrollo”.

Hoy a casi diez años de aquella osada frase, puedo afirmar que mi predicción se va cumpliendo, quizá aun no se tenga el liderazgo total como plataforma de desarrollo, pero puedo afirmar con total convicción, que los papeles han empezado a invertirse, hoy por hoy las miradas de “lujuria” no van en un solo sentido sino en ambos, hoy no es solo uno el que anhela lo que el otro tiene, Java ahora sigue o pretende seguir el ejemplo de lo que C# y .NET están apuntalando.

En este punto es necesario mencionar aquellos elementos que generan esos deseos lujuriosos que siente Oracle (nuevo dueño de Java), entre los más notables están:

  • La característica de ejecución multilenguaje en la plataforma .NET, actualmente Java es el lenguaje abanderado de J2EE y aunque existen varios otros lenguajes que se ejecutan sobre la JVM/JRE el objeto de deseo, son los lenguajes dinámicos introducidos recientemente por Microsoft en la plataforma, en este punto Java tiene limitaciones para la implementación del soporte en la modificación dinámica de clases y métodos, base para la construcción de lenguajes dinámicos, esto es una promesa pendiente para la versión 7 de Java.
  • Expresiones Lambda & LINQ, la elegancia y simplicidad de estas características dentro del .Net Framework 3.0 son irreproducibles en Java o J2EE, aunque actualmente existen intentos aislados y desde mi punto de vista, infructuosos, aun estamos un poco lejos de ver algo similar a LINQ en Java, encontramos a un sbql4j, un Quaere, un Guice, pero repito todos ellos intentos aislados e infructuosos, a excepción quizá de un concepto nuevo a ser introducido en la versión 7 de Java, llamado Closures un concepto similar a las expresiones lambda.

En estos dos simples ejemplos vemos como la realidad ha cambiado, pero quizá Uds. se preguntaran: ¿Son esos dos simples puntos, razón suficiente para afirmar que .Net dominara el mercado de desarrollo?, ¿Cual es la razón por la que sostengo mi afirmación inicial de un .Net dominante? Esta viene de leer y conversar con varios programadores de Java  que perciben al igual que yo, la lentitud de reacción, evolución y adaptación que sufre esta plataforma y esta sensación se ha visto acrecentada desde la reciente adquisición de SUN por parte de Oracle, tampoco no es un secreto que existen grandes diferencias entre aquellos que mantienen el lenguaje y aquellos que lo usan e incluso diferencias al interior de la coalición de compañías que usan J2EE y a su vez lo mantienen, esto otorga una ventaja innegable a .NET, que no tiene que satisfacer los deseos contradictorios de varias empresas, pues solo pertenece a Microsoft, lo cual permite que esta ultima sea comparada con una liebre a lado de una tortuga, por los mismos prestigiosos y reconocidos usuarios en el mundo J2EE. 

Quizá esta exposición puede ser criticada de trivial y superficial pero tampoco deseo entrar en una polémica de característica por característica, costo/beneficio, etc. Algunos también opinan que no existe debate o no debería existirlo, luego de comprender correctamente el concepto de inter-operabilidad, a todo esto les dejo algunos links: 

En cualquier sentido habrá que esperar la versión 7 de Java, que trae muchas promesas, pero mientras esta versión es ampliamente aceptada pasara un tiempo, un muy buen tiempo, en el cual seguramente Microsoft seguirá su imparable camino de innovación y mejora, que lo alejara más aun de J2EE y lo acercara cada vez a un estado dentro de mis pronósticos.

14 comentarios en “Java sigue los pasos de C#?

  1. Estamos totalmente de acuerdo, pero de todas formas me parece que obvias el punto principal que tiene cada uno en su favor:

    – Java es multiplataforma casi todo sistema tiene hoy en día una máquina de ejecución de Java. En cambio .NET no es así, Mono no corre como debería.

    – La compilación y ejecución de .NET es mucho más eficiente. Y en eso debe trabajar más Java, el hecho de que el bytecode sea interpretado es un lastre que debe solucionar con la inclusión de un compilador Just In Time.

  2. MMMmmm…
    @Eugenio, creo que Enrique comparaba más los lenguajes que las plataformas, por lo que los puntos que tu mencionabas no entrarían dentro de esta comparación (aunque son sin duda interesantes).

    Hay gente que opina (y como todo con cierta parte de razón) que un lenguaje no es “mejor” simplemente por estar evolucionando más, ni porque se le vayan añadiendo más características. La cuestión clave es si esas características ayudan a solucionar problemas que serían bastante más complejos (o tediosos) sin ellas.
    En mi opinión p.ej, el soporte de expresiones lambda es un punto a favor, mientras que me gusta más el soporte de tipos anónimos que tiene java…

    Por otro lado, java supera claramente a .NET en la adopción de frameworks y similares… No digo que sea un caso general, pero “apenas” se hablaba de MVC hasta que microsoft sacó ASP.NET MVC, o p.ej. “apenas” se hablaba de conceptos de DI hasta que MS sacó Unity. O poca gente trabajaba con ORMs hasta que MS sacó EF o Linq2Sql. Para mucha gente de .NET sólo existe lo que hace Microsoft (yo siempre digo que para bien o para mal MS tiene un enorme poder de difusión), y en eso en el mundo java nos llevan una enorme ventaja.

    Un saludo!
    PD: Enrique… coincido contigo en la compra de Sun por parte de Oracle… veremos como afecta.

  3. Bueno, añadí esos puntos ya que Enrique si que comento características de la plataforma como la posibilidad del tipado dinámico.

    Sobre todo porque ambos lenguajes sin una plataforma que les de apoyo no conseguimos nada.

  4. @Eduard: “Por otro lado, java supera claramente a .NET en la adopción de frameworks y similares… No digo que sea un caso general, pero “apenas” se hablaba de MVC hasta que microsoft sacó ASP.NET MVC, o p.ej. “apenas” se hablaba de conceptos de DI hasta que MS sacó Unity. O poca gente trabajaba con ORMs hasta que MS sacó EF o Linq2Sql. Para mucha gente de .NET sólo existe lo que hace Microsoft (yo siempre digo que para bien o para mal MS tiene un enorme poder de difusión), y en eso en el mundo java nos llevan una enorme ventaja.”

    Totalmente de acuerdo.
    En demasiadas ocasiones miramos el ombligo de Microsoft cuando muchas de las “modas” ya existen desde hace tiempo en otras tecnologías o lenguajes diferentes de los que ofrece Microsoft.
    ¿Qué es lo que hay que hacer?.
    En mi opinión ser siempre críticos con todo, incluido con lo que adoramos o nos sentimos más a gusto como las tecnologías Microsoft. Siempre hay margen de mejora y nadie es perfecto, y Java no es tampoco la excepción. 🙂

  5. @Ernesto, disculpa si te he entendido mal, pero .NET no heredó los eventos porque los incluyera Delphi.
    Los eventos de hecho no llegaron de la mano de Delphi, y Microsoft ya los usaba desde hacía mucho tiempo atrás.

  6. No debemos olvidar que .net y en concreto c# fue practicamente un clon de lo que en su dia era Java, tampoco que ha dia de hoy Java es la plataforma de desarrollo mas grande que existe, muy por encima de .net, por consiguiente un mercado muy grande que no debemos despreciar. Siempre he pensado que somos los desarrolladores los que marcamos la diferencia, no existen buenos o malos lenguajes, existen buenos o malos desarrolladores.

    Un saludo.

  7. Soy usuario de tecnología Microsoft desde siempre. Y siempre me llamó la Java, de alguna u otra forma. Hasta que decidí ‘asomarme’ al mundo de Java. Les confieso que regresé muy rápidamente a .NET. Y puedo aportar a este debate de .NET|Java con mi punto de vista: [.NET] Solo me concentro en la solución que tengo que desarrollar. [Java] Realmente tengo que dedicar más tiempo en la plataforma que en la solución.

  8. @tandher: Lógico, “usuario de tecnología Microsoft desde siempre” y “‘asomarme’ al mundo de Java”, si en lugar de eso tu caso fuese “usuario de Java desde siempre” y “‘asomarme’ al mundo de Microsoft”, seguramente con Java sólo te concentrarías en la solución. y con .Net tendrías que dedicar más tiempo a la plataforma que a la solución.

    Es una cuestión de práctica.

    A mi me da igual el lenguaje y la tecnología, solo importa que el equipo de cada proyecto conozca las tecnologías que involucra tiene que conocer.

  9. Omitiendo el ambiente web y móbiles, ¿Qué opinan del desarrollo para escritorio en estas plataformas?

    Desarrollo para ambas tecnologías, y muy a pesar de que me encanta la multiplataforma de Java debo reconocer que lo que es programacion para aplicaciones de escritorio es un poco más tardado programar en Java, creo que ahí .NET le lleva mucha ventaja. Aunque bueno Ustedes, expertos, ¿Qué piensan?

  10. Bueno yo puedo hablar por la experiencia propia vivida y tambien por la que veo vivir a compañeros en mi empresa, que tiene varios proyectos, Java aun no se “libera” de algunas doctrinas rigidas, que re-lentizan la programacion, un ejemplo claro es hacer a mano la programacion de “eventos” mediante el patron observador, cuando nativamente podrian colocarle algo que simplifique esa tarea, no digo que este ma usar el patron solamente que podriamos hacerlo mas “rapido”.

  11. No se ha hablado absolutamente nada acerca de Groovy. Por otra parte el día en que la plataforma .NET sea multiplataforma realmente se podrá decir que es la plataforma dominante sin lugar a ninguna discusión. Mientras tanto a mi parecer estos no pasan de ser juicios de valor.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *