Si tiene una experiencia de varios años trabajando con Java y una experiencia de varios años trabajando con C # y .NET, valoraría su opinión sobre las diferencias de productividad de desarrollo de software entre estos dos entornos. Uno de nuestros clientes está considerando reemplazar su solución de software existente. Como el reemplazo requerirá aprox. De 10 a 15 años de trabajo, una opción para Java o .NET, en función de las diferencias de productividad entre ellos, puede influir significativamente en la inversión requerida y el tiempo de comercialización.
¿Podría proporcionarnos una indicación de las diferencias de productividad de desarrollo de software entre Java y C # /. NET? Preferiría recibir una respuesta de la siguiente manera:
Mi experiencia se basa en X años de experiencia trabajando con Java y X años de experiencia trabajando con C # /. NET. Java es X% más productivo que C # .NET o C # /. NET es X% más productivo que Java si tiene en cuenta lo siguiente.
fuente
Respuestas:
Mi experiencia se basa en 10 años de experiencia trabajando con Java y 3 años de experiencia trabajando con C # /. NET. Java es 0% más productivo que C # .NET. Esto se basa en la escritura de aplicaciones de servicios de fondo.
C # /. NET es quizás un 5% más productivo que Java para escribir aplicaciones de usuario. Pero entonces no he hecho esto durante casi 5 años en Java y el nuevo editor de interfaz de usuario de Netbeans podría haber cerrado la brecha.
¿Quieres aumentar la productividad? CI (idealmente entrega continua) y pruebas automatizadas. La productividad obtenida por la elección de idioma / plataforma / IDE en cualquier idioma / plataforma / IDE importante es bastante pequeña.
fuente
He trabajado en proyectos tanto en la universidad como en el mundo real ™ usando Java y C # durante 5 años.
Sin duda, disfruto usando C # más debido a su brevedad y al uso de azúcar de sintaxis. Raramente encontrará un
Factory.GetFactory(OfFactory.GetFactory(Factory));
código en C #. Es más fácil de leer y seguir porque la sintaxis es más pequeña y más sucinta.¿Con cuál serás más productivo? Eso depende del tipo de proyecto.
¿Estás diseñando una aplicación de escritorio para Windows? Entonces C # es la mejor opción debido a su potente IDE Visual Studio y .NET Framework hace que la creación de GUI sea muy simple.
Francamente, me alegro de que ya no uso Java (hace más de un año) porque recuerdo cuán horriblemente detallado tenía que ser el código. Un ejemplo rápido es el manejo de excepciones. Si su código puede generar una excepción, debe tener en cuenta todas las excepciones posibles. Esto convierte rápidamente el código trivial en una línea 20 + monstruosidad.
C # no es como una mano, si decide dejar su código abierto, usted debe decidirlo como desarrollador.
C # también ha hecho muchas adiciones durante el año que hacen que sea un placer usarlo. Lambdas, delegados, función anónima (a la Ruby), muchas pequeñas cosas buenas que encontrarás a medida que avanzas.
fuente
If your code can throw an exception you must account for every single exception possible.
No veo el inconveniente de esto, al menos esto crea conciencia de los problemas ... aunque, podría ser solo yo.He trabajado extensamente con Java (desde 1996) y .Net (desde 2002) y en 2010 tomé la decisión de ir con Java en mi empresa sobre la base de que sería el entorno más productivo en general .
Tenga en cuenta que defino la productividad del desarrollo de software en términos de valor empresarial creado por unidad de costo / recurso, de principio a fin (es decir, debe analizar la productividad de todo el ciclo de vida del software, incluida la implementación y el mantenimiento, no solo el codificación inicial !!).
Aquí están los elementos clave de mi razonamiento:
object.getSomeProperty()
vs.object.SomeProperty
o usen una clase interna anónima vs. una lambda, simplemente no habrá una diferencia apreciable en la ventaja competitiva de su empresa ...Entonces, si bien hubo muchas consideraciones complejas, en general estoy bastante contento con la elección de ir a Java, y tomaría la misma decisión hoy (a principios de 2012).
Probablemente el único caso en el que iría con .Net sería si estuviera desarrollando una aplicación de escritorio solo para Windows (donde la ventaja de .Net es claramente enorme).
fuente
Tengo: Java 10 años, C # 8 años
Voto Java por
fuente
Java: 5 años (no continuo)
C #: 7 años
No creo que pueda cuantificar la productividad de esa manera. Eso depende en gran medida del desarrollador individual y del proyecto. Utiliza lo que tus desarrolladores saben.
Editar:
definamos "aplicación empresarial típica" como:
Tanto Java como C # pueden hacer eso. No se trata tanto del lenguaje, sino del framework / runtime. Nuevamente, use lo que sus desarrolladores saben. Pueden aprender un nuevo idioma y un nuevo marco, pero lleva tiempo asimilarlo. Sería cierto para una aplicación de escritorio. Ambos lenguajes se pueden usar con numerosas herramientas / librerías GUI, pero todos tienen diferentes enfoques y filosofías.
fuente
Tengo más de 10 años de experiencia con Java (¡desde la versión 1.1, de verdad!) Y 7 años de experiencia con .NET (C # en su mayoría).
Tienes que tomar una decisión muy seria, pero sobre todo deberías tratar de dividir en un par de escenarios:
Aplicación de escritorio
Si está desarrollando una aplicación de escritorio, debe elegir la plataforma principal con la que trabajará. Si se trata de una plataforma de Microsoft, use .NET, no hay mejor solución que la plataforma desarrollada por la nave madre. Si se trata de un escenario Linux o multiplataforma, considere Java o cambie a una solución basada en web.
Aplicación basada en web
Esta es una decisión muy difícil de tomar porque cada uno tiene su propia fuerza y debilidad. Aquí hay algunos:
DO#
Fortaleza: actualmente tiene más impulso para crear nuevas características en el lenguaje y la plataforma / marco. Todo proviene de un proveedor y definitivamente esta es una ventaja. También puede utilizar algunos componentes muy potentes como DevExpress, por ejemplo (Java ni siquiera se acerca a tener algo como lo que el equipo de DX ha reunido a lo largo de los años y esto representa un gran aumento de la productividad).
Debilidad: para la aplicación empresarial .NET no es tan maduro como Java. No tiene tantos proveedores que crean software empresarial en .NET como lo tiene para Java.
Java
Fortaleza: Más maduro (ya explicado) y tiene una gran comunidad con varios grandes proyectos de código abierto que pueden ayudar. Varios .NET llamados proyectos de código abierto son realmente solo una copia de proyectos de Java.
Debilidad: Oracle posee Java (lo sé, no el JCP) y definitivamente es un riesgo a tener en cuenta. Sus intenciones no son muy claras y personalmente no me gusta a dónde va el lenguaje en este momento (sé que muchos desarrolladores de Java tienen preocupaciones similares).
Aplicación del lado del servidor
Básicamente son los mismos argumentos que las aplicaciones basadas en la web, pero como no tiene que preocuparse demasiado por la interfaz de usuario, Java se fortalece en este caso. Pero, de nuevo, si la plataforma es principalmente Windows .NET, podría ser una mejor opción.
Consideraciones generales
En general, en mi opinión, .NET tiene la ventaja principalmente debido a la estrecha integración de Visual Studio 2010 (sin duda el mejor IDE disponible), MS SQL, Entity Framework, IIS, etc. Todo esto representa un gran aumento de la productividad y tengo mucha experiencia que lo demuestra. También trabajo con desarrolladores en su mayoría de Java que recurrieron a .NET y comparten básicamente la misma opinión.
Creo que también es un buen punto que Microsoft es más fuerte que nunca, lo que significa que .NET estará allí por un tiempo. Entonces, cuando veo 10-15 años por delante, me siento más seguro con .NET que Java.
fuente
Soy un estudiante recién graduado de la universidad, pero he tenido experiencia comercial con ambos idiomas, dando un total de aproximadamente 3 años de Java y 4 años de C # .Net (nota .net significa que puede usar C #, VB.net, C ++ CLI, y J # y F #).
Declararé ahora que mi preferencia general es C # sobre Java, mientras que ambos tienen una sintaxis similar. Me gusta el poder del marco .Net sobre la compatibilidad cruzada del sistema operativo de Java. Debe tener muy en cuenta lo que necesita para construir. ¿Es solo una aplicación de escritorio? ¿Necesita conectividad con otros clientes, por lo que otros escritorios, móviles, sitios web?
** La discusión sobre IDE se perdió cuando se cerró la pregunta en Stackoverflow. Lo esencial es que Java tiene muchos IDEs gratuitos, pero en mi opinión no se comparan con el poder y los complementos de Visual Studio. Pero tenga en cuenta los costos de Visual Studio por licencia.
Debe ver qué habilidades tiene su equipo de desarrollo, ya que esto tendrá un impacto inicial. Lo que es más rápido está aquí o allá dado un usuario experimentado en cualquier idioma / marco. Lo cual supongo que trae el punto de que no debes considerar el lenguaje, ya que el lenguaje es solo la sintaxis, sino las herramientas y el marco de trabajo que el lenguaje está utilizando.
fuente
Con la similitud en la sintaxis y las herramientas, las ganancias de productividad de C # o Java no son de un orden de magnitud para hacer una diferencia significativa en su proyecto de trabajo de 10 a 15 años. Miraría más de cerca cuestiones como:
Sugeriría que, en mi opinión, la premisa detrás de la pregunta es que "las diferencias de productividad entre (C # y Java) pueden influir significativamente en la inversión requerida y el tiempo de comercialización" no es cierto. No dudo que habría alguna diferencia, pero no sería significativa.
fuente
Cambié de un lado a otro entre Java y .NET, comenzando con Java 1.2 hasta 1.6 y .NET 1 hasta 4.0, a lo largo de aproximadamente 10 años de experiencia laboral profesional (siendo un programador C / C ++ antes de eso).
En un momento, como .NET 2.0, diría que Java y C # serían casi iguales, especialmente para el trabajo de back-end. Las construcciones del lenguaje aún eran muy similares. .NET probablemente habría ganado ventaja en la programación de IU de escritorio, debido al diseñador de WinForms en Visual Studio, y Java habría tenido ventaja en cosas de Web / Server, principalmente porque no estaba atrapado con IIS.
Ahora moviéndome a .NET 3.5 y 4, doy la ventaja de productividad a .NET, sin dudas. En mi opinión, esto se debe principalmente a que .NET es un lenguaje que evoluciona mucho más rápido, ya que MS puede tomar decisiones de lenguaje relativamente rápido, en lugar de impulsar cambios a través de la política del PCJ. Grandes mejoras son la
var
palabra clave, la totalidad de LINQ, métodos de extensión, el operador nulo coalescencia??
,dynamic
y probablemente mucho más grandes cosas que realmente aumenta la productividad.Ahora, dicho esto, el lenguaje "más productivo" para un proyecto es casi siempre aquel con el que la mayoría de los desarrolladores se sienten más cómodos y experimentados. La curva de aprendizaje es siempre la principal causa de pérdida de productividad.
fuente
Una cosa que he notado es que muchas tiendas C # /. NET tienen una actitud de "no inventado aquí" y prohíben todas las bibliotecas de terceros / código abierto, mientras que muchas tiendas Java están más dispuestas a usar bibliotecas de código abierto. También parece haber más bibliotecas disponibles para Java. Incluso si observa algunas geniales bibliotecas de terceros en .NET, por ejemplo, NHibernate, NPOI, Spring.NET, etc., son puertos de las bibliotecas de Java y, por lo tanto, están detrás de ellas. Ciertamente parece que muchas de estas innovaciones llegaron primero a Java y después de un tiempo se creó un puerto .NET. Desde la perspectiva de la biblioteca, parece que Java gana en términos de nuevos descubrimientos innovadores.
Aún así, Microsoft crea algunas bibliotecas oficiales, por ejemplo, ASP MVC, LINQ, etc. Pero a menudo, al igual que con ASP MVC, las bibliotecas de terceros como Struts, Spring MVC, etc. ya estaban fuera de Java y Microsoft ingresó tarde en el paradigma web del controlador de vista de modelo.
Por supuesto, muchas de estas bibliotecas ahorran mucho tiempo y lo hacen más productivo. El lenguaje central al lenguaje central C # y Java no son tan diferentes y para mí está demasiado cerca de llamar. Agregue al ejército de bibliotecas de terceros y la escala ciertamente se inclina hacia Java. Aún con una tienda abierta, gran parte de esa inclinación se equilibra. Es solo que muchas tiendas .NET tienen la actitud de no inventar aquí, mientras que muchas tiendas Java son lo que sea necesario para hacer el trabajo ... Esto es cierto incluso dentro de la compañía en la que trabajo, el equipo .NET no obtiene mucho (debido a la gestión) mientras que el equipo de Java tiene muchas bibliotecas / utilidades de terceros aprobadas. Además, con .NET, muchas de las cosas buenas no son gratuitas (por ejemplo, antes de NPOI si quería trabajar con documentos de Office de Microsoft, la mayoría de las soluciones [sin contar la automatización de Office] no eran gratuitas.
fuente
Me hice esta pregunta mucho: ¿cuál es mejor? C # o Java?
Te daré un consejo y este es la conclusión de mi investigación: ninguno de ellos es mejor, solo el idioma que conoces bien y con el que puedes hacer muchas aplicaciones fascinantes es el mejor.
Aprenda a programar y luego entrenarse mucho usando un idioma y cuando sea perfecto escribiendo código con él, piense en otros idiomas y créame, aprenderá los otros idiomas como un pedazo de pastel.
fuente