¿Qué elegiría para su proyecto entre .NET y Java en este momento? [cerrado]

13

Está comenzando un nuevo proyecto y tiene estas dos tecnologías para elegir, Java y .NET. El proyecto en el que está trabajando no implica tener características que faciliten la elección entre las dos tecnologías (por ejemplo, .NET tiene esto que necesito y Java no) y ambas deberían funcionar bien para usted (aunque solo usted necesito uno por supuesto). Ten en cuenta:

  • Rendimiento
  • Herramientas disponibles (incluso herramientas de terceros)
  • compatibilidad entre plataformas
  • Bibliotecas (especialmente bibliotecas de terceros)
  • Costo (Oracle parece intentar y monetizar Java)
  • Proceso de desarrollo (más fácil / más rápido)

También tenga en cuenta que Linux no es su plataforma principal, pero también le gustaría trasladar su proyecto a Linux / MacOs. Definitivamente, debe tener en cuenta los problemas que se han producido en torno a Oracle y la comunidad Java y las limitaciones de Mono y Java también. Se agradecería mucho que las personas con experiencia en ambos puedan dar una visión general y su propia visión subjetiva sobre qué elegirían y por qué.

    
pregunta 20.11.2010 - 15:59

6 respuestas

26

La decisión más importante (edición: técnica) es:

  • En este momento, ¿se comprometerá al 100% a usar Windows como su futura plataforma de implementación?

Si no, debes ir con Java.

La conclusión de Mono se usa frecuentemente para decir" Sí, .NET es multiplataforma ". ¿Qué tan válida es esa afirmación? era que Mono es solo una opción IFF que desarrollas contra ella.

Usted no puede esperar que las aplicaciones .NET funcionen fuera de la caja.

@Basic dijo que esto era más un comentario que una respuesta. Para ser precisos, considero que es una pregunta para ir a arriba de la lista, porque esta es quizás la decisión técnica más importante que debe tomar cuando se trata de .NET. Como dice Basic, él probará contra Mono, entonces eso está fuera del camino, y yo consideraría que Java y .NET son igualmente adecuados. Tengo muy poca experiencia con .NET, pero bastante en Java.

  • Rendimiento: Java funciona bastante bien, pero aún tiene un poco de tiempo de inicio. Esto se debe a que una JVM comienza desde cero cuando se inicializa, y el acceso aleatorio del archivo jar de la biblioteca en tiempo de ejecución es bastante lento cuando se necesita leer desde el disco. Los Java 6 recientes tienen un proceso en segundo plano para tratar de mantener los archivos jar de la biblioteca en tiempo de ejecución en la memoria caché del disco para que el acceso sea rápido cuando sea necesario.

  • Herramientas disponibles. Existen muchas herramientas, y hay muchas disponibles como código abierto de alta calidad. IBM tiene algunas herramientas muy avanzadas disponibles, pero también les lleva bastante dinero. Es posible que desee echar un vistazo a MyEclipse, que se gana la vida armando las mejores partes del mundo de Java y las hace accesibles a un bajo costo, para ver qué hay disponible. Netbeans tiene un editor de GUI muy agradable. JDeveloper tiene un buen depurador de Swing. El Sun 6 JDK tiene VisualVM, que es un buen generador de perfiles de nivel de entrada que puede analizar los programas que ya están en ejecución (lo que es una característica asesina).

  • Compatibilidad entre plataformas. Muy bien, tendiendo a excelente. La JVM es muy, muy confiable y predecible. Los problemas solo se muestran cuando las diferencias del sistema operativo se filtran, como separadores de archivos, sensibilidad de mayúsculas y nombres de archivos y comportamiento del menú.

  • Bibliotecas. Hay muchos y muchos de ellos están disponibles y son de uso gratuito, pero están escritos principalmente en Java, ya que es bastante difícil ingresar el código escrito en lenguajes que no son JVM.

  • Costo. Java está básicamente disponible gratuitamente. Lo que Oracle está indicando es que las herramientas eléctricas, probablemente provenientes de JRocket, tendrán un costo. También tenga en cuenta que el soporte extendido ("Java para empresas") también tiene un precio. Las plataformas que no son x86 son una raza en extinción, pero IBM tiene muchas posibilidades e IBM les proporciona una excelente implementación de Java. Este precio se considera parte del sistema operativo, probablemente para una mejor adopción.

  • Proceso de desarrollo. Se pasa mucho tiempo con Java investigando y eligiendo la tecnología adecuada y aprendiéndola, pero cuando se hace eso, creo que hay muchas tecnologías que son muy rápidas de desarrollar. La última versión de Java EE permite escribir páginas web muy potentes utilizando Facelets que se pueden volver a cargar al menos tan rápido como las páginas PHP.

Creo que a menos que no tenga experiencia ni en Java ni en .NET, usted ahorrará tiempo y dinero al elegir la tecnología con la que usted y su organización están más familiarizados.

    
respondido por el user1249 20.11.2010 - 16:03
19

Bien, tratemos de desglosar esto:

  

Ten en cuenta:

     

Herramientas de rendimiento disponibles (incluso herramientas de terceros)

Tanto la plataforma Java como la .NET tienen muchas buenas herramientas de prueba de rendimiento disponibles, sé que en el espacio de Java hay muchas herramientas gratuitas de código abierto que son adecuadas para la mayoría de los escenarios. No puedo hablar por el lado de .NET.

  

Compatibilidad entre plataformas

Java tiene una ventaja aquí: se requiere el proyecto Mono (o similar) para que .NET se ejecute en algunas plataformas. No estoy seguro de que Mono sea 100% a prueba de balas y tenga un buen rendimiento, algo que espero que alguien más pueda hacer.

  

Bibliotecas (especialmente bibliotecas de terceros)

Ambos tienen un fuerte apoyo aquí. Inicialmente, el ecosistema de Java abrió el camino (hay literalmente una biblioteca de código abierto gratuita para casi cualquier cosa que se pueda imaginar), pero diría que .NET ciertamente se ha metido en lo que importa (NHiberante por persistencia, NUnit para pruebas de unidad para nombrar dos básicos + estoy seguro de que hay un camión métrico más).

  

Costo (Oracle parece intentar y monetizar Java)

Todas las compañías intentan monetizar hasta cierto punto, pero en el caso de Java, creo que su declaración es un poco engañosa. Java fue de código abierto a partir de la versión 6 (el proyecto OpenJDK) y Oracle no ha mostrado inclinación a monetizar Java más allá de lo que Sun estaba haciendo. Entonces sí, venden servidores de aplicaciones y extensiones a la JVM (en particular, las extensiones de administración), ¿pero el núcleo de Java en sí? No, y nunca lo harán (esto ha sido declarado públicamente muchas veces).

Creo que tanto MS como Oracle se benefician masivamente debido a los ingresos indirectos con sus plataformas representativas.

Costo total de propiedad (TCO)? Ni siquiera voy a entrar en este debate, ya que no hay manera de demostrarlo (después de todo, la programación es una actividad humana creativa). Personalmente, creo que los sistemas basados en Java tienden a tener un costo inicial más bajo, ya que en la mayoría de los casos puede utilizar una pila de código abierto gratuita de arriba a abajo. Sin embargo, las grandes empresas tienden a preferir tener contratos de soporte para anular ese beneficio en particular.

  

Proceso de desarrollo (más fácil / más rápido)

¡Depende de lo que estés intentando construir! Yo personalmente argumentaría que son bastante parejos, aunque C # tiene algunas características adicionales en el lenguaje central sobre Java en este momento. Sin embargo, con los lenguajes (múltiples interoperables con Java) en la JVM (Groovy, Scala, Clojure, etc.) puede tener todas las funciones de lenguaje que desee.

.NET tuvo una clara ventaja en la creación de "elementos" de front-end web por un tiempo (Rapid Application Development, si lo desea), pero creo que JEE6 y / o Spring y otros frameworks web / app han cerrado esa brecha. / p>

  

También ten en cuenta que Linux no es   tu plataforma principal pero te gustaría   para portar su proyecto a Linux / MacOs como   bien. Definitivamente debes mantenerte   importa el problema que ha sido   que gira en torno a Oracle y Java   La comunidad y las limitaciones de mono.   y Java también. Seria mucho   Aprecia si personas con experiencia.   en ambos pueden dar una visión general y su   propia visión subjetiva sobre la que   elegiría y por qué.

Si desea migrar a Linux, UNIX y, en particular, a Mac OS, entonces, como se indicó anteriormente, Java tiene una ventaja.

Espero que ayude!

    
respondido por el Martijn Verburg 20.11.2010 - 16:41
4

Teniendo en cuenta tu lista de puntos, me dividiría y realmente dependería de lo que necesito construir.

.Net gana por estos aspectos:

  • Rendimiento
  • Proceso de desarrollo (más fácil / más rápido)

Java gana por estos aspectos:

  • compatibilidad entre plataformas
  • Bibliotecas (especialmente bibliotecas de terceros)

Es un empate para estos aspectos:

  • Costo (Oracle parece intentar y monetizar Java)
  • Herramientas disponibles (incluso herramientas de terceros)

.Net es, para todos los efectos, una pila de tecnología de plataforma única. Sí, hay Mono, pero hasta que Mono sea 100% compatible con la implementación de Windows, no ofrece una verdadera experiencia multiplataforma. El único subconjunto con el que podría contar para el soporte multiplataforma es lo que cabría en Silverlight.

Dicho esto, .Net tiene un mejor rendimiento percibido (mediciones reales TBD). A los ojos del usuario, el rendimiento percibido es lo único que importa. Después de haber desarrollado en Java durante los últimos 12 años y recientemente en .Net, puedo apreciar el poder de la plataforma.

Java, por otro lado, tiene un IDE mucho más rico para elegir, y el costo de estos IDE superiores es mucho menor que el costo de la variación .Net. Por otro lado, el costo de los motores J2EE profesionales empequeñece los costos del entorno de desarrollo. En .Net tengo la percepción de ser muerto a muerte. En Java existen soluciones a los enormes costos, que pueden compensarse fácilmente con el tiempo del desarrollador configurándolos. Fuera del IDE, para las herramientas que son importantes (perfilador, cobertura, etc.) los costos son iguales.

Al final, realmente depende de la necesidad . Si voy a desplegar en Windows de todos modos, entonces .Net no es una obviedad. Tengo clientes que son solo tiendas de Windows. Si tengo giong para desplegar en Unix o necesito soportar sistemas heterogéneos, entonces Java no es un pan comido. Incluso puedo ser radical y sugerir una pila de tecnología mixta. Después de todo, solo porque el cliente requiera que el servidor sea Unix no significa que lo ejecuten en sus escritorios. No todas las aplicaciones se convierten mejor en una aplicación web.

    
respondido por el Berin Loritsch 20.01.2011 - 14:24
4

Rendimiento - Incluso

Ambas plataformas funcionan extremadamente bien para prácticamente todas las aplicaciones.

Realmente no hay mucho para diferenciarlos, aunque mi experiencia subjetiva es que Java tiene una ligera ventaja para aplicaciones de ejecución prolongada, mientras que .Net es más rápido para el tiempo de inicio de la aplicación.

Herramientas disponibles (incluso herramientas de terceros) - Debatable

Depende de las herramientas que necesite y con las que esté familiarizado.

.Net ciertamente tiene algunas herramientas excelentes proporcionadas por Microsoft. Por otro lado, hay herramientas igualmente buenas en el mundo Java, por ejemplo, En el Eclipse, Netbeans de IntelliJ.

Compatibilidad entre plataformas - Java win

.Net está vinculado fundamentalmente a las plataformas de Microsoft (Windows, Xbox, etc.). Las implementaciones completas no están disponibles para ninguna plataforma que no sea Microsoft .

Mono es bueno, pero en realidad no te brinda la capacidad multiplataforma completa porque no admite todas las bibliotecas .Net (por ejemplo, no puedes esperar que todas las cosas de la GUI de Windows funcionen correctamente, a menos que si cambia a un conjunto de herramientas multiplataforma como GTK #, no podrá ejecutar su aplicación en diferentes plataformas)

Java es realmente portátil. No solo el lenguaje, sino mucho más importante, todas las bibliotecas de Java son portátiles. Siempre que se adhiera a bibliotecas Java puras (por ejemplo, Swing para GUI), su código se ejecutará en cualquier lugar donde tenga un entorno de tiempo de ejecución Java.

Bibliotecas (especialmente bibliotecas de terceros) - Java win

Probablemente, la mejor fortaleza de la plataforma Java es el vasto ecosistema de bibliotecas, especialmente bibliotecas de código abierto. Algunos ejemplos:

  • Todas las bibliotecas y herramientas de Apache
  • Todas las bibliotecas en el vasto ecosistema de Eclipse
  • Todas las bibliotecas contribuidas / mantenidas por Google
  • JBoss y todas las herramientas empresariales relacionadas mantenidas por Red Hat

Costo (Oracle parece intentar y monetizar Java) : Java gana si vas de código abierto, de lo contrario, incluso.

Puede tener una pila Java de código abierto al 100%, que es gratuita y no lo vincula a ninguna plataforma propietaria en particular. Esto es 100% gratis.

Alternativamente, puede comprar IntelliJ IDEA, ejecutar Java en Windows y usar una base de datos propietaria, en cuyo caso es prácticamente el mismo costo que una pila típica de Microsoft .NET.

Proceso de desarrollo (más fácil / más rápido) - Debatable

Esto probablemente depende más de la experiencia de sus desarrolladores con cada plataforma en lugar del atributo particular de la plataforma.

.Net ciertamente tiene algunas herramientas excelentes que pueden hacerte muy productivo para aplicaciones de GUI simples en Windows. No es sorprendente ya que este es el "punto óptimo" para el desarrollo de .Net.

Por otro lado, prefiero la pila de Java para el desarrollo del lado del servidor. Con herramientas como Maven y todas las capacidades de implementación / integración continua, puede establecer un proceso de desarrollo muy eficaz para aplicaciones robustas del lado del servidor.

El lenguaje # C # tiene algunas ventajas de productividad sobre Java. Pero, por otro lado, si actualmente se está desarrollando en la plataforma Java, la tendencia es no usar Java en sí, sino usar uno de los nuevos lenguajes JVM como Scala, Groovy o Clojure. Si lo hace, será mucho más productivo. que C # o Java.

    
respondido por el mikera 04.10.2011 - 08:56
3

.Net

Es difícil responder a esta pregunta sin ser subjetivo o en llamas (tengo la sensación de que voy a ser menos votado), pero .Net es un lenguaje en alza y Java parece estar atascado por cuestiones legales, además de disminuir. popular.

También .net hoy en día es, con mucho, un lenguaje mucho más cohesivo y moderno con excelente soporte para multinúcleo (Parallel.net) y programación asíncrona (extensiones reactivas), por no mencionar LINQ con el que no podría vivir. .Net también tiene varias herramientas gratuitas, pero Visual Studio Express, Sql Server Express, Web Matrix, etc.

Es cierto que Java tiene algunos beneficios multiplataforma. Tiene algunas opciones para .Net con mono, etc., lo que podría hacer para aplicaciones tradicionales o componentes de back-end, pero algunos dudan si está haciendo algo muy especializado (y no hablemos de WPF).

Otra opción si la plataforma cruzada es realmente importante es ir a Silverlight, personalmente no estoy muy interesado en las "aplicaciones" de Silverlight, pero al menos funciona.

La plataforma cruzada es el punto difícil, pregúntese si realmente es realmente necesario, al menos en este punto.

    
respondido por el Homde 20.01.2011 - 10:56
1

En nuestra organización, en este momento, elegiríamos Java. El motivo es simple: nuestro equipo de Java es más grande, tiene más experiencia y tiene mejores herramientas que nuestro equipo .NET (que también están lo suficientemente atados en el mantenimiento de los sistemas existentes, por lo que carecen de los recursos para asumir nuevos proyectos importantes) .
Dicho esto, si hubiera razones apremiantes para usar .NET (p. Ej., Los requisitos del cliente, algunos clientes pueden tener una gran base instalada de software .NET y desear que su nuevo sistema se ajuste a esa base, asumir el mantenimiento por sí mismos, etc.) hazlo y contrata contratistas para hacer el trabajo donde no podamos liberar a nuestra gente.
No forzaría a ninguna tecnología a un cliente en contra de sus mejores intereses, y algunos clientes simplemente se benefician (debido a su organización interna) más de uno que de otro debido a las inversiones necesarias para implementar el sistema (nuevamente, tenemos un cliente que ya tiene una serie de aplicaciones .NET en ejecución y cuenta con el personal que las respalda, no vamos a intentar forzarlas a contratar personal y comprar licencias de hardware y software para ejecutar una aplicación Java en forma paralela, y por supuesto lo contrario. También sea cierto. De hecho, les recomendaríamos que no lo hicieran si nos lo pidieran como una solicitud).

    
respondido por el jwenting 04.10.2011 - 09:57

Lea otras preguntas en las etiquetas