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: 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.
Muy buena informacion
ResponderBorrarGracias por comentar Alex. ¡saludos cordiales!
BorrarGracias..
ResponderBorrar¡Saludos!
ResponderBorrarYo 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.
ResponderBorrarSaludos!
Gracias por tu valioso comentario Carlos. ¡Saludos!
BorrarYa tenemos APS NET CORE totalmente OPEN SOURCE
BorrarLol , que facil es 'redactar' blogs
BorrarEso no es así con .net Core, pues compila en Linux y muchas otras plataformas
BorrarMe extraña que habiendo comentado recientemente no sepas o no investigues primero
BorrarC# 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
Eso no es del todo cierto.
BorrarPara 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.
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 :)
ResponderBorrarPS: Si alguien cree que sí es posible en java (lo mencionado anteriormente), que me avise, se lo agradecería mucho.
Mario.
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 :)
ResponderBorrarPD: 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
Gracias por compartir tu experiencia Mario. ¡saludos!
BorrarNo 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 :)
ResponderBorrarhttps://www.upwork.com/hiring/development/c-vs-java/
Se me escapó poner la fuente Samuel, pero ya está con tu comentario. !saludos!
BorrarPara 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.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"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.
BorrarSi 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.
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.
ResponderBorrarPor 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.
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..
Borrary 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.
Como ya te ha respondido leviatanMX, no tienes ni idea, o simplemente vives en el pasado.
Borrar- 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.
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!!
ResponderBorrarQuinquina, Eclipse y Netbeans son los mas conocidos y utilizados pero no los únicos. Gracias por compartir tu experiencia. ¡Saludos!
Borrarhttps://www.diarlu.com/mejores-ide-programar-java/
BorrarIntersante 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.
ResponderBorrar*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."
Gracias por el consejo. ¡Saludos!
BorrarC es nivel medio, C++ es nivel alto.
Borrar