Viajero en el tiempo

java vs .Net

Publicado por jcrs en Octubre 24, 2007

boxeo.jpg

no se trata de una pelea (aunque quisisera verla ) solo se trata de las ventajas de cada uno de ellos(java y C#) tratare de ser lo mas imparcial posible aunque prefiera java .

ventajas de .Net (msdn2.microsoft.com)

  • Modelo de programación mejorada: los lenguajes de .NET Framework proporcionan construcciones y funcionalidades previamente no disponibles para los desarrolladores de SQL.
  • Seguridad mejorada: el código administrado ejecuta un entorno de Common Language Runtime que se aloja en el motor de la base de datos. De esta forma, los objetos de base de datos de .NET Framework estar más seguros que los procedimientos almacenados extendidos disponibles en versiones anteriores de SQL Server.
  • Tipos y agregados definidos por el usuario: los tipos y agregados definidos por el usuario son dos nuevos objetos de base de datos administrados que expanden el almacenamiento y las funcionalidades de generación de consultas del servidor SQL Server.
  • Entorno de desarrollo común: el desarrollo de la base de datos se integra al entorno de desarrollo de Microsoft Visual Studio. Los desarrolladores utilizan las mismas herramientas para desarrollar y depurar objetos de base de datos y secuencias de comandos que las que usan para escribir componentes y servicios de .NET Framework de nivel medio o nivel de cliente.
  • Mejor rendimiento: algunas funciones, como aquellas que ejecutan operaciones matemáticas en cada fila de una base de datos, pueden funcionar mejor cuando son ensamblados compilados que se integran a partir de un proyecto de Visual Basic, Visual C# o Visual C++ en lugar de escribirse en Transact-SQL, que es código interpretado. Por ejemplo, se lograrán mejoras de rendimiento para las funciones, particularmente aquéllas que realizan operaciones con números enteros. Sin embargo, los procedimientos almacenados que sólo tienen acceso a datos no funcionarán mejor.
  • Riqueza del lenguaje: Visual Basic, Visual C# y Visual C++ proporcionan funcionalidades que no están disponibles en Transact-SQL, como las matrices, el control de excepciones sofisticado y la reutilización de código.
  • Reutilización de Código: es posible crear y distribuir con mayor facilidad una biblioteca de ensamblados administrados que una secuencia de comandos de Transact-SQL.
  • Extensibilidad: mediante la utilización de Visual Basic, Visual C# o Visual C++, es posible crear dos objetos de base de datos que no se pueden crear mediante Transact-SQL: agregados y tipos definidos por el usuario.
  • Utilización de conocimientos existentes: es posible utilizar y mejorar sus conocimientos en los lenguajes y desarrollar entornos en los que ya existe experiencia para crear objetos de base de datos.
  • Experiencia del desarrollador más enriquecida: al desarrollar objetos de base de datos mediante la plantilla del proyecto de SQL Server, se cuenta con integración completa con el sistema de proyectos, como por ejemplo, generación, depuración e implementación a varios servidores.
  • Estabilidad y confiabilidad: los objetos de base de datos que se crean utilizando Visual Basic, Visual C# o Visual C++ son más seguros, estables, sólidos y confiables que los procedimientos almacenados extendidos, que podrían generar pérdidas de memoria u otros problemas que reducen el rendimiento y la confiabilidad del servidor. Cuando se ejecutan procedimientos almacenados creados mediante Visual Basic, Visual C# o Visual C++ el procedimiento almacenado no realiza administración de memoria ni subprocesamiento y, por lo tanto, se controlan de manera más sólida.
  • Seguridad: al utilizar objetos de base de datos creados mediante Visual Basic, Visual C# o Visual C++, la seguridad de acceso a código de aquellos lenguajes se combina con los permisos basados en usuario en el servidor SQL Server.
  • parece que todas estas ventajas dejarían KO a Java y a cualquiera que se cruce en su camino pero java reaccionara to be continued….

    6 comentarios para “java vs .Net”

    1. Abelardo Jara escribió

      La Java Virtual Machine es mas rapida que Mono en 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

      Visiten mi blog http://www.pintucoperu.wordpress.com
      Muchos saludos,
      Abelardo

    2. jcrs escribió

      gracias abelardo por tu comentario muy completo no había tenido tiempo de realizar una comparación entre las dos pero con tu comentario para que; es ma publicare tu comentario si no te importa

    3. Mandracke escribió

      Dare mi humilde opinión, ALi = Java, Tyson = .Net

      Round One Fight

      Ali es más benéfico, que disblos digo?? osea puedo hacer aplicaciones para vender a 1 centavo que le sirva a la gente y no se harán lios con la licencia xq es gratuita, a Tyson le gusta la plata y los que lo utilicen tendran que pagar sus licencias y si todos no pueden pagar sus licencias???
      Ali pelea para el pueblo no para hacerse rico, y mira que su fama esacompañada luego, Tyson pelea por el dinero. Ahora mira como terminaron ambos y hago una alusión a como terminará esa pelea Java vs .Net.

      Ahora si va mas ficcion (Como me gustan los juegos)

      KO Winner is Java

    4. Abelardo Jara escribió

      Hola Juan Ramon, tambien graias por tu comentario en mi blog, bueno aqui queria enviarte tambien un analisis que he hecho de la licencia GPL de Java vs ECMA de Mono y C#. Muchos saludos y felicitaciones por tu blog, Aqui va:
      Leer la licencia GPL de java vs ECMA de Mono y C#.

    5. jcrs escribió

      mandrake comparto tu opinión trate de ser imparcial pero Java is winner

    6. nice! i’m gonna make my own blog

    Escribe un comentario

    XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>