Antes de empezar a escribir, tengo que confesar que hay un poco de bias por mi parte en esta discusión: anteriormente he expresado mi ira públicamente contra Microsoft por su actitud en el mercado móvil, y para nadie de los que me conocen es un secreto la antipatía que he ido creando para cada uno de sus productos a medida que pasa el tiempo.
Por este motivo, a partir de ahora lo que van a leer es la opinión de una persona que no comulga con Microsoft, pero que va a tratar por todos los medios de ser lo más objetiva posible en sus opiniones. Sigan a su propio riesgo.
That being said, el motivo del post es que en los últimos días he tenido la oportunidad de participar en tres discusiones diferentes que envuelven a Java y .NET. Como siempre pasa en estos casos, nunca el bando rojo ha podido convencer al bando azul, ni el bando azul al rojo. Después de pocas palabras, todo se convierte en una discusión de fanboys cada uno defendiendo a muerte su partido, sin escuchar razones, y muchas veces perdiendo la objetividad en lo que se dice.
Y yo soy otro más que se lanza a discutir, y del mismo modo que los demás pierde toda cordura posible hasta llegar al punto donde lo único importante es ganar la pelea. Este es mi momento, y mi oportunidad para expresar mi opinión en oración completa, así que aquí les va.
El lenguaje Java vesus el lenguaje C#
C# gana la pelea por mucho, y no creo que ni los más fanáticos puedan rebatir este argumento. El lenguaje C# es mucho más poderoso que Java, está mucho mejor estructurado y mejor pensado. Es más moderno, y desde su creación ha evolucionado considerablemente hasta convertirse en lo que particularmente considero como el lenguaje de programación de alto nivel más poderoso que existe para el desarrollo de aplicaciones comerciales.
A pesar que la sintaxis de ambos lenguajes es muy parecida, C# incluye elementos que hacen de la programación una actividad verdaderamente placentera para los programadores. Para citar algunos ejemplos, podemos darnos un paseo por sus especificaciones: lambda expressions, dynamics, optional and named parameters, partial classes, events, delegates, objects and collection initializers, extension methods, variable type inference, por solo citar algunos. La lista sigue y sigue, y a Java no le queda otra que mirar y bajar la cabeza. En este terreno no hay batalla posible.
Y sí, hay cosas que extraño del Java cada vez que me toca programar en C#, pero en honor a la verdad son muy pocas comparado con las nuevas posibilidades. La flexibilidad de los enum en Java es algo que me encanta, o los static imports, instance initializers, y anonymous classes. Hay más, por supuesto, pero muy pocas armas para discutir lo indiscutible.
Actualizaciones a ambos lenguajes
Nadie es más lento que el calentamiento global. Nadie, a no ser por el comité encargado de llevar adelante las especificaciones de Java. Y en honor a la verdad, como usuario al fin y al cabo, no tengo idea de si es un comité de burócratas o una comunidad de programadores. No lo sé, y no me importa mucho. Lo único que sí me interesa es que cada nueva actualización al lenguaje tarda años y años.
Y estamos en el otoño de 2011, donde la tecnología sigue avanzando a velocidades supersónicas, y cada vez hace más falta que las herramientas se muevan a la misma velocidad que las ideas, pero el Java sigue con el mismo traje de principios del 2000, a no ser por una corbata nueva que compró con la versión 1.7. El mundo parece pasar sobre sus cabezas, y ellos no se enteran. A veces me pregunto si serán los mismos miembros del W3C. ¿Quién sabe?
Por su parte, Microsoft ha sido extremadamente puntual con el C#. Sin lugar a dudas la compañía ha estado volcada todos estos años en poner su lenguaje estrella en el lugar que le corresponde. Bien por ellos.
Herramientas de desarrollo
El Visual Studio .NET ha avanzado mucho, pero con el perdón de sus adeptos, está a años luz del Eclipse para Java. La velocidad con la que se desarrolla en Eclipse gracias a cada uno de los detalles pensados para el día a día de un programador es incomparable con lo que puede hacerse en Visual Studio.
Una de las herramientas más populares para Visual Studio es el ReSharper, que viene precisamente a cubrir un hueco que Microsoft no ha sabido llenar. Así y todo, mi veredicto es que Visual Studio .NET + Resharper + 5 años sigue siendo mucho menos que Eclipse.
Comunidad
Sí, yo soy consciente que la comunidad de C# es inmensa, vibrante, y vanguardia nacional, pero aún está muy lejos de conquistar lo que ya ha logrado la de Java. Ponerse a hablar sobre el número de personas que predica en cada bando es tonto y con poco sentido. Yo prefiero concentrarme en lo que han logrado esas personas en todos estos años.
El número de soluciones que podemos encontrar en Internet para resolver determinado problema sigue siendo mayor en Java que en C#. Proyectos como los del Apache Software Foundation son vitales en el mundo del software, y C# aún no está en ese punto. Todo lo que gira alrededor de Microsoft tiene poca relación con el mundo open source (kudos para ASP.NET MVC), y eso repercute en la percepción de los desarrolladores sobre su comunidad.
Las posibilidades de encontrar una plataforma de lanzamiento de cohetes al espacio desarrollada por alguien más, que podamos utilizar y / o modificar son mucho mayores si miramos dentro de la bolsita de Java. Es probable que no nos interesen los cohetes, pero el mismo principio aplica para todo. En este punto, Java se lleva la corona.
¿Y quién apuesta por cada uno de estos lenguajes?
Y del mismo modo que las personas compran ropa en la tienda porque sus artistas favoritos la usan, yo tengo la tendencia de fijarme en quiénes gastan su dinero en desarrollar soluciones en determinados lenguajes de programación. El modus operandi para llevarse una idea de forma rápida es revisar las ofertas de trabajo de las compañías líderes en la industria. Vamos a descontar las obvias: Microsoft va con C# y Oracle con Java.
A partir de allí veamos algunas de las más importantes: Google, Apple, Cisco, Intel, IBM, Emerson, AT&T, Twitter, HP, Verizon, Facebook, Motorola, Netflix, Comcast, y Disney. Si alguien no ha oído hablar de alguna de estas 15 compañías, que levante la mano. Quince de las más poderosas ofertan trabajo para desarrolladores en Java. Ninguna, repito, ninguna de ellas hacen mención al .NET o al C#. Me parece que esto debe significar algo, ¿verdad?
Conclusiones
Hay para los dos. El C# como mejor lenguaje y ejemplo de innovación. El Java con mejor comunidad, IDE, y respaldo. A partir de este punto es difícil decidirse por el uno u el otro si hiciésemos de árbitros en una pelea de boxeo, pero la buena noticia es que los programadores no somos árbitros, y mucho menos tenemos que casarnos con alguno de ellos.
¿Por qué en vez de discutir tanto sobre cuál es mejor, simplemente no sacamos provecho de ambos? Adquirir experiencia en .NET y Java es una cualidad muy valiosa y bastante rara de encontrar. Cada cual es muy poderoso en su nicho, y si nosotros podemos abrir la puerta de ambos mundos, tendremos una ventaja competitiva inigualable.
Varias veces he oído que "no trabajo para Android porque es en Java", o "C# no sirve porque no es open source". Parcializaciones de este tipo están muy lejos de beneficiarnos como profesionales. Deberíamos ser capaces de entender ambos y utilizarlos en nuestro provecho cuando se presente la ocasión. Cada cual con sus ventajas y problemas, es particularmente útil en diferentes contextos. De nuestra parte queda conseguir la llave para ambos, o simplemente limitar nuestras posibilidades.
Excelente aporte!!
ReplyDeleteAdrian Fols
www.startframe.net
es el mejor comentario que he visto en la red..actualmente me encuentro estudiando los 2s --.net con c# y java...
ReplyDeleteMuy buen comentario Santiaguito. Prefiero Java y puedo argumentar más. La comunidad Java es aplastante. La cantidad de proyectos Free-Open Sources es incontable. El repositorio Central de Maven esta que mete miedo de la cantidad de artefactos.
ReplyDeleteC# como lenguaje esta que corta, eso si, pero no es como pa morirse tampoco.
Un abrazo
Lago