java vs .net

Hola !!
Desde hace tiempo me hago esta pequeña pregunta…

Que sera mejor….¿Java o .net?

Algunos  dicen que es mejor .net(lo curioso es que trabajan en una empresa certificada por microsoft) y en otros lados he oido que es mejor java y la verdad no se que sea lo mejor

En internet me he puestoa investigar y he encontrado lo siguiente:

Transportabilidad: la versión 3.0 de .Net sólo está disponible en el .Net framework (creo que en Mono [máquina virtual de .Net en GNU/Linux] sólo está disponible la 2.0). No hay transportabilidad real. Repito: NO hay TRANSPORTABILIDAD real con .Net, lo que indica que estarás “encadenado” a Windows de por vida (o confiar en el proyecto Mono).

Antigüedad: Java tiene bastantes años más que .Net, por lo que es más sencillo encontrar código por internet, manuales y tutoriales.

Licencias: la máquina virtual de Java openjdk tiene licencia libre, y la oficial de Sun tiene CDDL (licencia casi de open source). Hay muchas máquinas virtuales comerciales y libres; desde la de IBM (comercial) hasta las libres de kaffe o la de GNU. .Net es código cerrado totalmente.

Entornos de desarrollo: aunque Visual Studio 2005 es muy profesional, es sencillo y está en español, hay más entornos tanto para Linux como Windows para el lenguaje Java. Además, el sistema de plugins de Eclipse permite que este IDE vaya incrementando su funcionalidad cada vez más.

Eficiencia: creo que la máquina de Java es más eficiente que el CLR de .Net, pero no te puedo dar muchos enlaces.

Libería de clases: .Net contiene más lenguajes que la JVM de Sun; de hecho, ésta sólo tiene Boo y Java. Java tiene un mayor número de clases para usar que por ejemplo, C#, pero toda clase y método que esté en un lenguaje de la plataforma .Net está en los demás, luego en realidad la cantidad de clases es inmensa. Pienso que Java gana, pero tampoco tengo fuentes, sólo es mi opinión.

Sintaxis: considero horrible la sintaxis de C# (cada método o función suele empezar en mayúscula) aunque se puede programar en Visual Basic o C++ en .Net. Por lo demás, la sintaxis de Java me gusta más.

Características de los lenguajes de cada VM: igualados, aunque C# tiene algunas características interesantes, como por ejemplo las propiedades en las clases, diferenciar entre variables pasadas por referencia o variab les sólo de salida, el uso de “override” en los métodos para sobreescribirlos… En realidad son pequeños detalles, que facilitan un poco el leer código. Pienso que .Net es superior en programación web, pero… no es multiplataforma.

En definitiva, ambos son muy similares pero Java tiene una experiencia difícil de superar y éste último se puede ejecutar sin problemas en Windows, GNU/Linux y MacOS.

Bueno esto lo encontre  aqui

Tambien encontre lo siguiente:

La JVM es mas eficiente que la plataforma Mono. .NET Framework de Microsoft no son multiplataforma.

Java y .NET tienen aspectos similares y cosas diferentes. Java es un lenguaje que se compila para correr en una maquina virtual JVM. Esta maquina virtual corre en casi cualquier sistema operativo: Windows, Linux, UNIX, Solaris, hasta en dispositivos mobiles. Es realmente fantastico ya que el mismo proyecto ya compilado como archivo .class o mejor .jar correra en cualquier otro sistema operativo sin ningun tipo de recompilacion. Basta con que des el archivo .jar y ya tienes una aplicacion completamente distribuitble. Incluso ademas si la combinas con las librerias SQLite puedes tienes en un tiro una aplicacion con base de datos totalmente portable y que se ejecutara en cualquier sistema operativo.

.NET no es multiplataforma y eso es algo que es importante resaltar. Hay un proyecto llamado Mono que hace los programas compilados con .NET corran sobre Linux y UNIX pero te sere sincero, todavia hay muchos cuelgues (te lo digo por experiencia propia). Este proyecto Mono incluye un compilador (2 versiones: mcs para net 1.1 y gmcs para net 2.0) y una maquina virtual (llamada mono) y es organizado por Miguel de Icaza. Mono es una maquina virtual que emula al .NET y trata de emular a Java en ser multiplataforma. Pero el estado de Mono es a verdad incompleto sobre todo en el paquete Windows Forms que no esta completamente portado y es inestable. Recuerda que aqui hay mucho trabajo de ingenieria inversa y eso siempre sera muy lento.

.NET aporta funcionalidad en que es posible ejecutar e interoperar diversos fragmentos de código escritos en distintos lenguajes, esto es, si codigas en C# o VisualBasic o J# todos estos lenguajes serán convertidos al lenguaje intermediario MSIL(”Microsoft Intermediate Language”) a través de un compilador determinado, este lenguaje intermediario es el que ejecuta el .Net Framework, de esta manera su código escrito en más de 20 lenguajes podrá interoperar. El codigo compilado desde cualquier lenguaje es compilado para correr sobre una maquina virtual que es el .NET Framework.
Mono trata de implementar este .NET framework.

Entonces aunque ambas son maquinas virtuales, la JVM y la .NET Framework son diferentes tambien, una es multiplataforma y la otra es solo para Windows. Una diferencia mas es que JVM es desde hace poco open-source desde que Sun la libero, asi que ahora es controlada ahora en su desarrollo por la comunidad y .NET si es controlada completamente por Microsoft.

Personalmente te aconsejaria ir por Java, dado que .NET es una plataforma privativa y siempre en el fondo estaras amarrado a Microsoft. Para Java tienes entornos de desarrollo muy bueno como Netbeans y Eclipse (ambos corren en Windows, Linux, etc). Ademas paquetes con clases en Java hay a montones, que te permiten hacer casi cualquier cosa, incluso un compilador para tu propio lenguaje (clases JLex y Java CUP). Conexion para base de datos las tienes con JDBC que te permite conectarte a casi cualquier gestor de base de datos: Postgres (la mejor base de datos libre), MySQL (tiene defectos en respecto a relaciones por sus tablas de tipo ISAM), SQLite (la mejor opcion si quieres hacer una base de datos de un solo usuario igualito que Microsoft Access y gratis), Oracle (que tiene una edicion libre personal para Linux y Windows)

Yo he comparado la performance actual en Linux Ubuntu de una aplicacion de ordenamiento de burbuja midiendo tiempo promedio y usando en cada medida un vector de 100 elementos con datos al azar, usando para compilarla el compilador C++ libre GNU, el compilador Intel C++ para Linux (libre tambien y se puede descargar de Internet), el compilador Java 1.6 y finalmente el compilador de Mono gmcs (para .NET 2.0) y los resultados son con respecto a performance:
de mejor a mas lento
1. Intel C++ Compiler y GNU g++ (empate, promedio de 0.24s para el algoritmo, ambos compilan a codigo maquina, puse nivel de optimizacion -O2)
2. Java 1.6 (promedio 0.34s)
3. Mono (usando gmcs para compilar y mono para correr: promedio 0.43s)

Algo interesante, he probado los tiempos tambien en Windows y los tiempos en Linux y son practicamente iguales, lo que indica que la JVM es superior a Mono en ambos sistemas. No he podido probar con Visual C++ 2005 asi que no podria decir si en codigo nativo en Windows es superior o igual o inferior a Linux.

Si quieres aplicaciones que compilen a codigo nativo tanto en windows como en Linux hay ademas un framework para C++ que se llama wxWidgets. Se programan con un IDE para C++ que trabaja tanto en Windows como Linux que se llama Code::Blocks. Es muy bueno y puedes construir aplicaciones graficas en minutos. Personalmente lo uso cuando quiero que mis aplicaciones sean muy rapidas ya que no compila a ninguna maquina virtual. Las clases provistas por la wxWidgets se parecen muchisimo a las MFC (Microsoft Foundation Classes) del Visual C++ asi que aprenderlas es muy directo. Las librerias wxWidgets tambien son libres y el Code::Blocks tambien. Para aplicaciones multiplataforma que quieres que sean de alta velocidad te las recomendaria sobre las librerias GTK y sobre las Qt (Qt no son gratuitas en Windows)

Finalmente mi recomendacion para aplicaciones con rapido tiempo de desarrollo, multiplataforma pero de verdad (no como con Mono), y que no estaras dominado a la larga por las decisiones de Microsoft, entonces usa Java + Netbeans + Swing + (Postgres o SQLite). No tendras que pagar a nadie por las herramientas de desarrollo y correra en cualquier plataforma: Windows, Linux (Ubuntu) o UNIX (PC-BSD). No aconsejo MySQL al menos por ahora (ya que la tabla por defecto ISAM no hacepta llaves foraneas e integridad referencial, el nuevo tipo de tabla InnoDB si).

Ahora si quieren hacer una aplicacion con alta performance compilado a codigo nativo, recomendaria usar Code::Blocks Nightly Build + GNU Compiler + WxWidgets 2.8

Este es otro ejemplo de una discusión en internet:

Perdona el doble post pero es que no puedo evitar contestar al FUD (pero tranquilo, no todo lo que leo es FUD xD) que veo por acá:

No soy un fanatico del software libre, aunque si me parece que es la opcion mas decente con respecto al sistema operativo. El sistema operativo y herramientas basicas de programacion deberian ser libres. Otra cosa son los programas en si (alli en mi opinion si podriamos hacer negocio por propiedad intelectual).

Ya. Como yo hago negocio con los programas en sí pues si vale la propiedad intelectual; pero como no lo hago con un SO o con herramientas de programación pues entonces ahí sí ya lo decente es el software libre…

Y si me vas a venir con “no lo digo por eso, sino que es que el SO es más seguro si es de código abierto” entonces TODO debe ser de código abierto, nada debe ser cerrado o sino ya no es decente.

Miguel de Icaza ha declarado reiteradamente que las patentes necesarias para la aplicación de las normas ECMA – 334 (C #) y ECMA – 335 (CLI) están disponibles en Microsoft “RAND + Royalty Free”. Esto pareceria un permiso efectivo de uso de la patente abierta de C#, y motivaria mas usar Mono. Pero perdonen, yo aun he visto una declaración oficial de Microsoft que este aceptando este royalty free.

Icaza nunca ha dicho tal cosa. Lo que ha dicho es que ya hay un acuerdo con MS para que las patentes que hay sobre el .NET framework no puedan ser usadas en contra de la comunidad. Además, las patentes no recaen sobre las normas ECMA o la BCL sino sobre las APIs extras que MS ofrece en su framework

En serio, ¿por qué buena parte de la comunidad del software libre se ha dedicado al FUD en contra de Mono?

Incluso si aceptamos este RAND+Royalty Free para usar C#/CLI hay que tener un acuerdo de licencia con Microsoft. Microsoft a la larga puede obligar a cualquier empresa que desarrolle a tener licencias para usar C# (si queremos ser pesimistas, includo el escritorio Gnome si lo programaran en C#).

Repito, no hay patentes sobre lo que hay en las normas ECMA. Por otro lado, lo que MS podría hacer el día en que se acabe el contrato es pedir al proyecto Mono que quite lo que está bajo patentes, no que no puede usar C# o la BCL (en pocas palabras, Mono no tiene porque dejar de soportar C#, eso no tiene sentido alguno).

Que institucion o empresa de prestigio dicta o usa C# con Gtk, lo mas usado es Java o .NET pero no Gtk#. Ni siquiera puedes poner eso en tu CV.

FUD. No hay como saber quien usa o no usa Mono internamente.

Programar con Mono y GTK# nos lleva a Sharpdevelop o Monodevelop y ambos IDEs no estan a la altura de Netbeans o Eclipse (y ambos libres), asi que si por madurez y si uno opta por una aplicacion profesional y no solo para experimentos, recomiendo Java.

Confiaré en que lo que dices en ese párrafo es porque no usas hace tiempo Mono.

1. Para personas que se inician Java+Netbeans es directo para aprender (en universidades, institutos, etc). A ver si Mono+Gtk# lo es. O habra que ver si instituciones de entrenamiento con prestigio o empresas grandes se deciden a programar en Mono+Gtk# (algo experimental) en lugar de .NET+Windows Forms o Java+Swing? (lo harian?)

Mono y GTK# no es algo experimental. Lo otro es que solo porque no hay empresas grandes que salen a gritar a los cuatro vientos que usan Mono no es razón para no usarlo, eso es ridículo ¿Después que será?, ¿que no usaré LISP o D porque no hay empresas gritando que lo usan (estos dos lenguajes tienen su uso en la NASA, por ejemplo)?.

2. Hay montones (literalmente) de librerias de clases disponibles en Java. Muchas de ellas son open-source (parece que los fanaticos de Microsoft, decir open-source es como una vulgaridad).

¿Eh?, los fanáticos no odian el open source, eso no tiene sentido porque para ellos eso también supone una ventaja.

3. Java tiene un conjunto de APIs totalmente multiplataforma, incluso para GUIs, multimedia, graficos, 3D, voz, telefonia mobil, y todas las futuras APIs (muy faciles de usar) seguiran siendo multiplataforma (Windows, Linux, …) Mono no tiene estas APIs, asi que hablar de multiplataforma con Mono es inmaduro. Microsoft usara seguro Direct Sound en C# y eso no es ni a balas multiplataforma.

Pero que seguridad para soltar semenjante estupidez. NO es posible que Microsoft use Direct Sound en un lenguaje. Si te refeires a la API pues no es ningún problema, Mono si se le da la puta gana puede implementar cosas propias de sistemas tipo Unix como POSIX… ¡Oh!, ¡espera!, ¡¡YA LO HACE!!

Al igual que en Java (es más, que en cualquier lenguaje), si usas algo propio del SO pierdes lo multiplataforma. Obviamente, MS no busca eso y por eso le vale poco buscar tal cosa en su framework, pero Mono sí.

4. Swing esta muy bien diseñada y usa los patrones de diseño MVC, en lo que se cae completamente Windows Forms.

Vale, ahí tienes razón. Pero recuerda, por usar .NET no necesariamente tienes que usar Windows Forms para interfaces gráficas al igual que en Java puedes usar SWT, o al igual que en C++ puedes usar cosas como Qt.

5. Java es mucho mas utilizado a nivel de estudiantes de postgrado con base solida en programacion orientada a objetos (OOP).

¿Y eso en que supone una ventaja? Claro, tampoco es una desventaja🙂.

6. Aunque no esta reconocida por un estandar internacional, Java es open-source controlado por por Sun y los miembros del JCP (los cuales son muchos, entre ellos Intel, Google, Samsung, Redhat, sino mira
http://jcp.org/en/home/index
). C# es un estandar tipo ECMA pero aparte de Microsoft pocas otras empresas han decidido implementarlo. Sun ademas segrega mucho menos que Microsoft con respecto a sus productos.

¿Y para que tener multitud de implementaciones? Tenemos la de MS (solo para Windows), la de Mono (multiplataforma) y DotGNU, ¿que ventaja supone tener multitud de implementaciones?

7. Otra cosa: el estandar C#/CLI ECMA solo es un subconjunto del framework .NET. Habra que ver si Microsoft decidira si enviara para estandarizacion las futuras APIs de .NET. (LO HARA?Huh?)

¿Para qué si Mono ya da APIs hasta extras?, ¿o es que MS tiene que enviar a estandarizar cada API del framework para que se considere C# algo útil?

Como nota final: mira nomas lo que dice Chris Williams, director de desarrollo de productos de Microsoft, que ellos aceptan la pirateria para motivar que la gente se familiarize con Microsoft y de alli al ocurrir eso pueden presionar con las leyes y obtener ganancias solo si ven que sera rentable (que tactica tan noble no?)

Una tática que también usan empresas como IBM, Sun y Google, ¿que creías?, ¿que solo MS busca la rentabilidad?

Usad lo que os guste, pero no vengan con el FUD clásico de que Mono está en fase experimental y de que no se pueden hacer grandes aplicaciones con él. Tampoco vengáis con que el estándar (sí, el ECMA) de C# está lleno de patentes porque eso es mentira.

Una de las personas involucradas en la discusion anterior tambien escribio esto:

Hola

dare mi opinion desde la perspectiva de los entornos de desarrollo y de la experiencia de un usuario final.

soy usuario de windows (XP SP2)y he tenido la posibilidad de probar el desempeño de dos IDE’s:

Net-Beans 5.5(Java+Swing) y MS Visual Studio 2005 (C++/C#+.NET),

y puedo decir que VS 2005 es muy superior en lo k a tiempos de respuesta se refiere (code-completion, intellisense y class-view) , por lo menos en mi maquina (celeron 2.4 GHz, 256 RAM) frente a Net-Beans (me consumia el 98% de la CPU, frente a un 30% del VS), cuyos tiempos de respuesta eran del orden de los segundos.

desde una perspectiva de un usuario final de PC SIEMPRE evito las aplicaciones hechas en java por el simple motivo de que son horrosamente lentas en comparacion con una aplicacion nativa analoga (BitComet(C++) vs Azureus, Visual UML vs Visual Paradigm, etc.).

Como desarrollador, nunca voy a usar este lenguaje, ya que:

* Los programas hechos con el no aprovechan al 100% la maquina del usuario.

* Utilizo solo librerias Multiplataforma (OpenGL/AL, HawkNL, DevIL, y wxWidgets).

* Y por ultimo, me dedico a un campo en el que Java nunca tendrá lugar: Aplicaciones multimedia de alto rendimiento.

En mi experiencia como desarrollador, recomendaria usar Java solo si es la opcion mas adecuada para resolver un problema, y no por un simple capricho personal

El .NET framework es mil veces más rápido que la JVM de Sun, esa es una realidad que cada uno puede (y debería) probar.

Otra cosa es que el que .NET framework sea joven ha supuesto también una ventaja al framework y a C#. Por eso tenemos sobrecarga de operadores, tipos sin signo, pasar tipos primitivos por referencia a los métodos, etc.

Que MS tenga control sobre el framework tiene sus ventajas y sus inconvenientes. El inconveniente más claro es que MS decide sobre el Framework y tiene unas licencias demasiado cerradas; pero como ventaja es que puede hacer cualquier cambio sin necesidad de preguntar (como lo tiene que hacer Sun a través del JCM (aunque en realidad SUN cuando se le dé la puta gana puede eliminar eso)) lo que ha hecho posible que tengamos grandes cambios en el framework y en C# sin tener que preguntar (buscad acerca de LINQ, por poner un ejemplo).

Sobre el entorno de VS decir que su consumo de RAM es menor, y que también soporta ser extendido por medio de plug-ins los cuales pueden programados en cualquier lenguaje que use .NET y C++.

Lo de la sintaxis prefiero no tocarlo porque me parece algo demasiado subjetivo (eso de mayúsculas por lo menos yo no le veo problema).

Así que como ven, .NET también tiene sus ventajas e inconvenientes, pero los inconvenientes más bien son por cuestiones de licencia, no de problemas técnicos en sí.

Una cosa que tengo que aclarar es que Mono no intenta ser una implementación 100% fiel al framework de MS, sino que intenta ofrecer un framework que funcione en varias plataformas (incluye a Windows) usando las ventajas que hay detrás de .NET, por lo tanto no es un problema que no sea una implementación 100% fiel al framework de MS (así como en Java no se usa WPF, pues si se usa Mono es cuestión de tampoco usarlo, por poner un ejemplo) y por eso ofrece también APIs propias (Mono.Cairo, Mono.Cecil, Mono.Posix, GTK#, etc).

Dicho esto, eso no elimina lo que dije antes y es que el lenguaje (oigase bien, el lenguaje) tiene muchas ventajas sobre Java al ser más joven, y además .NET tiene varias ventajas como el CLR.

Para concluir, que cada quien use lo que quiera🙂, eso sí, recomiendo siempre tener en mente las ventajas de C#, Java y sus respectivos frameworks (y reitero, probad a fondo Mono, que para programar ofrece muchas cosas y no solo es un .NET a medias que intenta implementar el framework de MS).

Este es otro comentario:

En lo personal me gusta más .NET que JAVA. Por las siguientes razones:

1. MSDN: Documentación de toda la plataforma .NET. No hay issue en .NET que no conozca el MSDN.

2. .NET con saco y corbata: básicamente .NET es una plataforma mucho más costosa que JAVA. Pero desde el punto de vista de negocios, .NET fue desarrollado para personas con dinero, grandes negocios, empresas mundiales y al trabajar con este sector los proyectos son mucho más grandes, con más expectativa y mucho más difíciles. Es un reto.

3. Sistemas en una semana: .NET te ofrece tantas ventajas para que el trabajo sea más rápido y lo digo porque me toco hacer un sistema en una semana con todas las de la ley(Arquitectura SOA a N capas).

4. Soporte: Para Microsoft partners hay soporte para todos sus productos 24 horas al día 375 días al año. Es decir que el primer inconveniente con tu aplicación se puede solucionar con una llamada. Algo que no me gusta mucho de sistemas operativos libres es que no me dan ese soporte. A quién llamo cuando tengo problemas al instalar Linux UBUNTU? a nadie! en estos momentos la página esta caída! puede ser gratis y todo pero lo barato te puede salir caro.

5. Muchas otras cosas más: herramientas y frameworks como -> AJAX.NET, silverlight, Workflow , comunication, presentation y muchas cosas más!
Yo he trabajado con las dos tecnologías y la verdad me aburrí de JAVA por que cualquiera implementación en formularios desktop es lenta tenga 2 gb de ram en mi pc corre lento.
Ahora es mi opinión muy personal del tema. No tengo nada contra JAVA pero .NET me parece mucho más divertido.
Acuérdense que los caprichos no le importan al usuario final. No piensen en ustedes mismo, sino en su usuario.

Una respuesta

  1. Hola.
    Respeto esta opinión.
    Pero me parece que en algunos aspectos o comentarios que estan relacionados o acotados a la experiencia propia de quién escribió el artículo.
    Mis saludos.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: