C# vs Java: ¿Qué lenguaje de programación es mejor para ti?

Si estás inmerso o iniciándote en el mundo de la programación seguramente has escuchado el dilema: C# vs Java ¿Qué lenguaje de programación de propósito general orientado a objetos es mejor para ti? 
Ambos lenguajes de programación tienen extensas bibliotecas que se pueden utilizar para crear aplicaciones de escritorio, web, dispositivos móviles y otras plataformas. Ambos tienes grandes comunidades de aficionados entusiastas y un sinfín de soporte online.

Con tanto en común, seleccionar el lenguaje de programación correcto requiere un enfoque más profundo. Vamos a echar un vistazo más de cerca a las similitudes y diferencias entre C# y Java.

Actualización: Este post lo escribí 2016, algunas cosas han cambiado como te podrás dar cuenta si lees los comentarios. No obstante, la mayoría de aspectos aquí descritos siguen y seguirán siendo válidos. 

Nota importante: Si deseas aprender Java, C# o cualquier lenguaje de programación, una buena opción para iniciar es Udemy.

¿Qué es C#?

C# es un lenguaje de programación de propósito general que apareció por primera vez en el año 2000, como parte de la iniciativa .NET de Microsoft. Fue diseñado para el Common Language Infrastructure(CLI). Las aplicaciones de C# se compilan en código de bytes que puede funcionar con las implementaciones de CLI. 

¿Qué es Java?

Inicialmente lanzado por Sun Microsystems en 1995, Java es un lenguaje de programación de propósito general que fue diseñado con el objetivo específico de permitir a los desarrolladores de “escribir una vez, ejecutar en cualquier lugar”.  Las aplicaciones Java se compilan en código de bytes que puede funcionar con las implementaciones de la máquina virtual de Java (JVM). Al igual que la CLI, la JVM ayuda a cerrar la brecha entre el código fuente y los 1’s y 0’s que entiende la computadora.
C# vs Java

C# vs Java: Principales similitudes

Los orígenes de Java y C# están estrechamente ligados a la transición de los lenguajes de programación de bajo nivel como C++, puesto que los lenguajes de programación de alto nivel que se compilan en código de bytes se pueden ejecutar en una máquina virtual. Esto viene con una serie de beneficios, más notablemente la capacidad de escribir código legible por el hombre, una vez que se puede ejecutar en cualquier arquitectura de hardware que tiene la máquina virtual instalada en él. Estas son algunas de las principales similitudes entre C# y Java:

* Garbage Collection. En lenguajes de bajo nivel, la gestión de memoria puede ser tedioso porque hay que recordar eliminar adecuadamente los nuevos objetos para liberar recursos. Ese no es el caso en C# y Java, donde la recolección de basura incorporada ayuda a prevenir pérdidas de memoria mediante la eliminación de objetos que ya no están siendo utilizados por la aplicación.

* Herencia única. Tanto C# y Java soportan una sola sola ruta de herencia de cualquier clase base a cualquiera de sus clases derivadas. Esto limita los efectos secundarios no deseados que pueden ocurrir cuando existen varias rutas entre múltiples clases base y clases derivadas.

* Interfaces. Una interfaz es una clase abstracta en donde todos los métodos son abstractos. Un método abstracto es uno que se declara pero que no contiene los detalles de su implementación. El código de administración de todos los métodos o propiedades definidas por la interfaz debe ser suministrado por la clase que lo implementa. 

C# vs. Java: Principales diferencias

Existen muchas similitudes entre ambos lenguajes de programación pero es importante recordar que C # tiene su origen en el deseo de Microsoft de tener un lenguaje propietario “similar a Java” para su propia la plataforma .NET. Al mismo tiempo, la comunidad de código abierto de Java continuó creciendo, y hay una carrera de armas técnica desarrollada entre los dos lenguajes de programación.  Estas son algunas de las principales diferencias entre C# y Java.

* Windows vs. Open-Source. Si bien existen implementaciones de código abierto, C# se utiliza sobre todo para el desarrollo de plataformas de Microsoft por medio del Framework de.NET. En el otro extremo del espectro, Java tiene un enorme ecosistema de código abierto y ganó un segundo aire a pesar de su edad, en parte gracias a la adopción de la JVM de Google para Android.

* Excepciones contraladas. Java distingue entre dos tipos de excepciones-marcado y sin marcar. C# eligió un enfoque más minimalista tan solo por tener un tipo de excepción. Mientras que la capacidad de capturar las excepciones puede ser útil, también puede tener un efecto adverso sobre el control de la escalabilidad y la versión.

* Polimorfismo. C# y Java tienen enfoques muy diferentes de polimorfismo. Mientras que Java permite el polimorfismo de forma predeterminada, C # debe invocar la palabra clave “virtual” en una clase base y la palabra clave “override” en una clase derivada.

¿Cuándo se debe usar C# o Java?

Con tanto en común entre ambos lenguajes de programación, final la decisión será tuya, dependiendo en gran medida de la plataforma que elijas para tu proyecto. C# se utiliza principalmente en las implementaciones de .NET Framework, Mono, y Portable.NET de CLI. Si tu software o aplicación web se está construyendo para Windows, C# funciona mejor con la suite de tecnologías de .NET.

Basados en lo anterior, si deseas desarrollar para Unix, Linux u otras plataformas que no son Microsoft, Java es la mejor opción. La comunidad Open Source está en constante creación de nuevas bibliotecas y herramientas. Hay que recordar también que Java es el lenguaje principal utilizado por Google para desarrollar Android, que es actualmente el mayor sistema operativo para dispositivos móviles.

Ten en cuenta que las ventajas mencionadas anteriormente son leves, ni uno ni otro lenguaje de programación es probable que desaparezcan en el corto plazo. Ambos lenguajes han existido el tiempo suficiente como para que realmente no haya nada que no se puede construir en uno que no se pueda construir en el otro. En pocas palabras: Elije el lenguaje de programación que mejor se adapte a tu proyecto o plataforma de elección.

Tú puedes dar tu punto de vista sobre este debate en los comentarios. Me sentiré muy agradecido si compartes este artículo en las redes sociales. 

28 Comentarios

Tu opinión es importante para mí, porque me ayuda a mejorar. Si te gustó el articulo o tienes alguna sugerencia, déjame tu comentario con tu nombre para poder responderte tan pronto como pueda.

  1. Yo estoy ahora aprendiendo ambos lenguajes y es cierto lo que dices que los dos son útiles según el proyecto , pero lo que no hay que olvidar es que trabajar con Java puede ser más ventajoso a la hora de crear aplicaciones para culaquier plataforma , porque .NET sólo sirve para Windows , aunque ya algunos móviles ya traen el Windows 10 incorporado.
    Saludos!

    ResponderBorrar
    Respuestas
    1. Gracias por tu valioso comentario Carlos. ¡Saludos!

      Borrar
    2. Ya tenemos APS NET CORE totalmente OPEN SOURCE

      Borrar
    3. Lol , que facil es 'redactar' blogs

      Borrar
    4. Eso no es así con .net Core, pues compila en Linux y muchas otras plataformas

      Borrar
    5. Me extraña que habiendo comentado recientemente no sepas o no investigues primero

      C# puede desarrollar para iOS, Android con Xamarin, para Linux existe MonoDevelop, Visual Studio ya corre en MAC OS X, ademas para desarrollo Web esta ASP.NET CORE que corre en Linux, OS X y por supuesto Windows...

      P.D. tambien existe SQL Server para Linux

      Borrar
    6. Eso no es del todo cierto.
      Para linux existe MonoDevelop pero se pueden hacer muy pocas cosas y en el visual studio para Mac solo se pueden programar aplicaciones de Xamarin no es como tal el visual studio tan completo de windows.

      Borrar
  2. La verdad como dijiste en el final casi de post, 'que se adapte a tu proyecto'.. En este caso mi proyecto sería crear un Asistente Virtual, en el caso de Java, no encuentro referencias o API's para usar el micrófono ni el sintetizador. En cambio en C# sí hay soporte para ello. Buen post :)

    PS: Si alguien cree que sí es posible en java (lo mencionado anteriormente), que me avise, se lo agradecería mucho.

    Mario.

    ResponderBorrar
  3. Como dijiste al final, 'que se adapte a tu proyecto'. Es que tengo un proyecto de crear un Asistente Virtual, en ese caso Java no he encontrado que tenga soporte para usar el micrófono ni el sintetizador de voz, en cambio C# si hay soporte para ello. Buen Post :)

    PD: Si alguien sabe que sí es posible (lo que dije anteriormente), espero con esperanzas sus comentarios acerca de ello xD, desde ya gracias y saludos cordiales.

    Mario

    ResponderBorrar
  4. No sé si lo tienes puesto, pero se debe poner el enlace a la fuente original, y más cuando es simplemente una traducción. Igualmente buen trabajo por traducirlo :)
    https://www.upwork.com/hiring/development/c-vs-java/

    ResponderBorrar
    Respuestas
    1. Se me escapó poner la fuente Samuel, pero ya está con tu comentario. !saludos!

      Borrar
  5. Para ser un artículo de 2016 parece que la información está un poco obsoleta. No mencionas que ahora todo se enfoca a .NET core. Que .NET es open source y puedes trabajar en Linux y Mac sin problemas.

    ResponderBorrar
  6. .net es multiplataforma... claro con sus diferencias.. pero desde que se esctibio este Blog.. ya existia MonoDevelop para desarrollar en .net en Linux..... solos se contradicen

    ResponderBorrar
    Respuestas
    1. "Contradecirse" significa afirmar una cosa y luego la contraria. Cuando afirmas "solos se contradicen", a quienes te refieres? El articulo puede estar equivocado, pero no se contradice.
      Si te refieres a "la gente" -en general-, "la gente" de internet, "los que escriben blogs"; entonces tienes razón: se contradicen unos a otros con frecuencia
      Si te refieres al autor o al artículo... pues no, vuélvelo a leer.

      Borrar
  7. Sin lugar a dudas prefiero Java, aunque C# este de moda; y principalmente porque no me gusta programar para microsoft por sus herramientas tan pesadas y viscosas que te obligan a tener un equipo de ultima generacion para poder desarrollar en ellas, ya que con equipo de gama media simplemente terminas con ganas de estamparlo contra la pared por la lentitud.

    Por otro lado si programas para Java puedes hacerlo desde cualquier sistema operativo , aunque c# tambien pero precisamente yo uso linux porque no me gusta usar microsoft por su lentitud asi que a mi linux no le meteria librerias para que corriera asp o c#.

    Y en cuanto a sus IDE la verdad me parece que microsoft sigue llevandose un golpe bajo ya que son programas que meten 100 mil funcionalidades que no usas pero las mas importantes tienes que instalarlas en otro programa aparte porque en el que usas no viene instalado es decir otra licencia. Es asi su modelo de negocio.

    Estos complican todo para que luego tengan que usar solo sus herramientas y no me gusta eso, llegaron a complicar tanto el html con el asp que es mucho mas facil y rapido hacer la misma webapp con php que con asp y sirven para lo mismo.

    Dicho de otro modo puedes poner el codigo html igual en php en una pagina estatica y te funcionara pero en asp sino marcas cada elemento con el runat pues no te correra. Detalles que hay que tener en cuenta que a veces fastidian y te pueden quitar tiempo.

    ResponderBorrar
    Respuestas
    1. Creo que no tienes ni idea.. primero para eso hay diferentes versiones del IDE... a mi me es mas que suficiente la edicion Community 2015 (que es gratis hasta para 5 desarrolladores o que factures menos de no se cuantos miles de dolares al año ) y corre perfectamente en una HP con 4 GB de Ram y un proceador Intel CoreDuo..... y en mi laptop AMD A6 QuadCore con 6 GB de Ram, va de sobra... y para herramientas pesadas y deboradoras de RAM tienes a NetBeans.... en caso de que solo quieras desarrollar WEB con ASP MVC o Core.... puedes usar perfectamente Visual Studio Code..

      y con respecto a ASP creo que vives en el pasado.. hoy se usa ASP NET MVC donde tienes todo el control del html y puedes usar bootstrap, jquery, javascript... eso del runat no se usa en MVC y menos en ASP NET CORE (que corre en Linux, Windows, OS X)

      Ademas se integra perfectamente con PostgreSQL, MySQL, Oracle, SQL Server, DB2, MongoDB, etc.

      Borrar
    2. Como ya te ha respondido leviatanMX, no tienes ni idea, o simplemente vives en el pasado.

      - Existen varios editores, tienes Visual Studio en varias formas (gratuitas y de pago), tienes Visual Studio Code, muy liviano. Y para nada es cierto lo que dices que requieres un equipo super potente, de hecho yo he programado en VS con hardware decente sin problemas.

      - Puedes programar en cualquier distro de Linux, Mac, Windows, Unix, etc. Por otra parte, ¿no te parece algo "tonto" decir "a mi linux no le metería librerías para que corriera asp o c#" cuando, 1) cualquier framework (no solo asp) requiere instalar dependencias, 2) asp core es super liviano, 3) como desarrollador, nunca debes cerrarte a cualquier plataforma, eso no te hace mejor desarrollador, al contrario, es algo infantil.

      - De nuevo demuestras un total desconocimiento sobre los IDE de MS, puedes desarrollar igual o hasta mejor que con netbeans con la edición community de VS, o con VS Code.

      - Por último, si, puedes pegar el HTML en cualquier editor, eso no tiene nada que ver con c# o asp.

      Borrar
  8. Gracias por la info. Yo siempre he programado php, pero para escritorio quise alguna vez aprender Java, pero no entendí nada xD. Ahora, por trabajo, me ha tocado aprender C#, y lo logré entender (llevo 2 meses apenas). Por eso mi duda en verdad es acerca de los IDE para Java, podrían por favor darme recomendaciones? Gracias de antemano!!

    ResponderBorrar
    Respuestas
    1. Quinquina, Eclipse y Netbeans son los mas conocidos y utilizados pero no los únicos. Gracias por compartir tu experiencia. ¡Saludos!

      Borrar
    2. https://www.diarlu.com/mejores-ide-programar-java/

      Borrar
  9. Intersante artículo, pero como desarrollador durante muchos años de C++ he de decir que el autor no tiene ni idea. Tan solo quiere malmeter por ampliar el artículo.

    *C++ NO es de bajo nivel, en todo caso sería un nivel medio, si quieres bajo nivel. Ensamblador.
    *Pone la herencia múltiple como una DESVENTAJA. Pues si quieres la usas y si no, pues herencia simple. Sin ir mas lejos hace poco usé herencia múltiple para hacer una clase que heredaba de SFML y Qt y así poder usar ambas liberías integradas a través de Qt Creator. Si no hubiera tenido C++ herencia múltiple me hubiera costado mucho más.
    *Tema de Recolector de Basura. Te arriesgas a que en un momento crítico a tu aplicación le de por hacer un recolectado de basura y por ejemplo en un juego te entre un "lagazo". El C++ a partir de la revisión 11, permite nuevos punteros inteligentes y junto con el RAII, el memory leak está casi olvidado.

    No digo que C++ sea mejor ni peor que C# o Java, sino que no es correcto lo que se dice de él. El autor parece que lo ha metido para hacer relleno y que le ocupe más.

    No tengo credibilidad con este artículo viendo como han tratado al C++. Sr. Redactor "Documéntese antes porfavor."

    ResponderBorrar
Publicar un comentario
Artículo Anterior Siguiente Artículo