Sé que el título suena un poco fuerte. Además, aclaro que no quiero restar importancia a ninguna de estas dos tecnologías, no va por ahí el calificativo. Lo que sucede es que desde que empecé en el mundo de desarrollo de software he visto esta discusión. Es más, no han sido pocas las veces que me he enfrascado en debates en blogs, foros y ambientes laborales sobre esta rivalidad, para resaltar las bondades de una tecnología sobre la otra. He visto desarrolladores que defiende a capa y espada su decisión, cayendo muchas veces en un fundamentalismo innecesario.
Por eso quiero dar mi punto de vista sobre este tema. Cuando digo que es una discusión bizantina me refiero a que es probable que en un debate entre un java fanboy y un dotnet fanboy ninguno salga ganando, es decir, ninguno podrá «evangelizar» al otro hacia su grupo. Es inútil tratar de convencer que tu tecnología es mejor para todos los casos, porque no es verdad. Menos aún desmereciendo completamente al rival.
Una pelea de poder a poder
Java es un excelente lenguaje de programación, JavaSE/JavaEE es una excelente plataforma de desarrollo. Pertenece a un grande de la industria como es Oracle, además de contar el respaldo de gigantes como IBM, RedHat, entre otros. Además, en sus últimas versiones el lenguaje Java ha implementado muchas funcionalidades que ya estaban presentes en .NET, lo que contribuye un poco a quitarle esa fama de dinosaurio que se había ganado últimamente. Finalmente, el crecimiento de Android le ha dado un empuje (algo indirecto, pero real) a la plataforma.
Por su parte .NET también es una excelente plataforma de desarrollo, por algo hay desarrolladores que tiene blogs dedicados a esta tecnología. Además pertenece a una empresa como Microsoft, que no es poca cosa. Esta empresa tiene más del 90% de participación en el mercado de sistemas operativos de escritorio, a pesar que hace años Linux y OS X han ganado terreno, no es un porcentaje que vaya a variar mucho, por lo menos en el mediano plazo. Es cierto que ha disminuido el uso de PC’s en favor de dispositivos como tablets y smartphones; pero es un terreno donde Microsoft también está dando la pelea, aunque hay que reconocer que le está costando bastante.
Factores decisivos
Dicho lo anterior, creo que la decisión sobre qué tecnología usar depende de varios factores, algunos de requerimientos (no funcionales) y otros subjetivos. A continuación enumero algunos de los que, desde mi punto de vista, podrían inclinar la balanza hacía uno de los lados. No todos los factores tienen el mismo peso, cada uno lo pondera de distinta forma. Inclusive, hay algunos de ellos que pueden ser decisivos por sí solos.
Para el caso de Java, algunos escenarios que podrían ser ideales para esta tecnología serían:
- Quieres desarrollar aplicativos multiplataforma. Es uno de los puntos fuertes de Java, una característica que está en su ADN. Es cierto que para .NET existen iniciativas muy valiosas como Mono, pero no es algo natural.
- Tienes en mente el desarrollo de aplicativos para Android a corto o mediano plazo. En este escenario ayudaría mucho incorporarte al mundo Java, ya que es el lenguaje bandera de esta tecnología y te ayudará mucho saberlo cuando concretes ese objetivo. Sé que para .NET existe Xamarin, un producto muy interesante y valioso, pero al igual que el punto anterior, lo natural en el mundo Android es Java.
- Te gusta disponer de una variedad de herramientas para tus desarrollos. Si para ti es un beneficio tener muchas opciones para escoger entre IDE’s, frameworks, servidores de aplicaciones, etc., el mundo Java te encantará.
- Si estás en la «onda» GNU/Linux y Open Source, probablemente te guste más el mundo Java. Esto lo digo principalmente por la afinidad de las empresas involucradas, pero no quiero entrar al debate libre vs propietario, me parece que no tiene mucho sentido porque ni Java es totalmente libre, ni .NET es totalmente propietario. Además, dicho debate podría calzar para otra discusión bizantina.
En cambio, si estás en alguno de los siguientes escenarios, podrías considerar seriamente la opción .NET:
- Si estás, o posees, una empresa que ya tiene una inversión en productos Microsoft (Windows Server, Windows, Office, Exchange, SharePoint, capacitaciones, etc.), entonces .NET es la opción natural para aprovechar lo invertido. Además ganarás en performance, porque los desarrollos en .NET generalmente corren mejor en ambientes Windows que los desarrollos hechos en Java (es una opinión discutible, pero por experiencia propia he comprobado que tiene mucho de cierto).
- Si estás en contra del estigma que tiene Microsoft de ser una empresa maligna, pertenecer al lado oscuro de la fuerza y tener como único objetivo hacerte infeliz, seguramente estarás satisfecho con sus productos. Además, la división de desarrollo de la compañía le está dando (desde hace varios años) un impulso muy fuerte a la plataforma .NET. Para los desarrolladores dotneteros a veces nos resulta algo difícil seguir el paso a las actualizaciones y nuevos productos que se presentan con frecuencia.
- Si te parece que el hecho de estar «atado» a un sólo vendedor es un beneficio y no un defecto, entonces .NET es una buena decisión. Hay que destacar la uniformidad en las herramientas de desarrollo que existen en .NET: el IDE por defecto es Visual Studio (un producto de gran calidad), el servidor web por defecto es IIS, el framework MVC por defecto es ASP .NET MVC, etc. El beneficio de esto es que reduce mucho la complejidad de manejar todas las herramientas, además que a donde vayas te encontrarás con un ecosistema muy similar al tuyo; a diferencia de Java que en algunos casos es muy difícil manejar la complejidad en una PC de desarrollo, y se agrava más el asunto dado que dicha PC es un universo propio.
Y el ganador es…
Los ganadores somos nosotros, que tenemos dos excelentes plataformas de desarrollo para elegir, y si queremos (y el tiempo nos da) podemos elegir ambas. Pienso que debemos ser más prácticos y constructivos sobre este asunto, evitando las peleas que no tienen sentido o están entrampadas, invirtiendo ese tiempo en conocer más a fondo nuestra tecnología favorita. Tampoco pretendo que este post sea un debate entre software libre y software propietario, pues ya he mencionado que en ambos bandos hay ropa tendida.
Con este artículo quise hacer una breve reflexión sobre esta discusión, no con el ánimo de imponer mi forma de pensar o mis opiniones, sino para contribuir a que los debates sobre este tema sean más prácticos y sustentables. Sé que habré obviado algunos factores, pero espero que con tus comentarios (estoy seguro que muy valiosos) se enriquezca este post.