¿Java se pondrá al día con C #? [cerrado]

17

Hoy publiqué una pregunta preguntando qué lenguaje C # o Java sería mejor para mí estudiar. Tuve algunas respuestas geniales. Una cosa que surgió fue que quizás Java ahora está bastante por detrás de C # con nuevas características. Vi algunos enlaces web y la mayoría señaló lo que tenía C # y lo que Java no tenía.

Entonces, mi pregunta para todos ustedes es si Java volverá a ponerse al día con C #. Y si tuviera que adivinar dónde estaría dentro de 5 años. ¿Tendría todas las cosas que quizás ahora faltan? ¿Qué tal Java 7?

MandyNelson
fuente
77
-1, presuntivo e hipotético. Cambiaría a +1 si el título cambiara a "¿Está Java detrás de C # y, de ser así, cómo podría ponerse al día?"
Nicole
2
¿Java y C # se pondrán al día con Scheme? Avísame cuando obtengas funciones anónimas de primera clase, cierres y continuaciones.
dietbuddha
55
@dietbuddha: Prefiero no ensuciar mi código con )'s, muchas gracias.
Josh K
1
@JoshK preferirías llenarlo con; y}, ¿verdad? LISP parece usar muchos paréntesis porque cada función los usa, y anida muchas funciones en él.
YuriAlbuquerque

Respuestas:

32

Las características del lenguaje son una parte muy pequeña de lo que hace que Java y C # funcionen. En última instancia, estas son partes de ecosistemas J2EE y .NET más grandes.

Ambos tienen sus propias fortalezas y deberían crecer más en los próximos 5 años.

Shamit Verma
fuente
19
+1 para "Las características del lenguaje son una parte muy pequeña de lo que hace que Java y C # funcionen"
Craige
1
Sí, las API y las bibliotecas son, en muchos sentidos, mucho más importantes.
Michael K
2
De acuerdo, pero las preguntas son sobre el lenguaje y no sobre el ecosistema;)
Philippe
1
Realmente odio votar +1 en respuestas muy cortas, pero aquí tienes algo. Me encantaría verte expandir esta respuesta.
Nicole
3
Preguntas dice: "qué lenguaje C # o Java sería mejor para mí estudiar" y "dónde estaría dentro de 5 años", ambos aspectos dependen más del ecosistema que del lenguaje.
Shamit Verma
16

Hubiera dicho que hasta que Oracle entró en escena. Lo cual es triste, porque realmente disfruté el salto en las funciones que Java y C # tuvieron durante los últimos seis años más o menos.

Jesse C. Slicer
fuente
2
¿Por qué crees que Oracle saboteará Java?
2
Simplemente no creo que la cultura corporativa allí tenga la misma agilidad que Sun tenía al incorporar funciones.
Jesse C. Slicer
8
@Glenn, la demanda de Oracle vs Google me muestra que no "obtienen" código abierto, y eso significa que las grandes empresas tienen menos probabilidades de elegir Java para el desarrollo futuro. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena
Oracle podría no exactamente "atornillar Java", sino la JVM. En este momento tienen un proyecto para combinar dos implementaciones JVM que han adquirido JRockit de BEA y HotSpot para Sun. Mientras lo hacen, omitieron por completo el proyecto Da Vinci Machine.
vartec
2
Estoy mezclado en Oracle. El traje de Android está un poco apagado, pero contribuyen al kernel de Linux y son los principales desarrolladores del sistema de archivos Btrfs. Oracle parece "obtener" código abierto mejor que Microsoft, pero eso no dice mucho.
jonescb
6

Como lenguaje, no amplío Java para agregar innovación a un ritmo significativo, principalmente porque aquellos en la comunidad de código abierto que están a la vanguardia tienen más probabilidades de centrarse en los nuevos lenguajes JVM, como Scala, Clojure, Groovy, JRuby y JPython.

Además, el compromiso de Java con la compatibilidad con versiones anteriores significa que agregar funciones de lenguaje es inherentemente más difícil que en los primeros días del lenguaje.

Eric Wilson
fuente
5

El gran signo de interrogación aquí es Oracle. Sun realmente ralentizó las cosas para Java en la última media década más o menos. La esperanza de muchos en la comunidad de Java era que Sun escindiera Java o lo vendiera a alguien que pondría muchos recursos y esfuerzo. Si bien Oracle ciertamente podría hacer eso, es una gran empresa con muchos grupos con sus propios intereses creados. Mi conjetura, y es solo eso, una conjetura, es que Oracle permitirá que Java se estanque y lo use principalmente como una herramienta para demandas de patentes.

Tal vez lo venderán a Google por una gran cantidad de dinero y todos estarán felices. Está en manos de salas de juntas y abogados en lugar de ingenieros y diseñadores de software.

En el lado bueno de las cosas, incluso sin mejoras, Java es un buen lenguaje y tiene un buen ecosistema a su alrededor. Aunque personalmente prefiero C # y el mundo .net, Java sigue siendo una gran opción. En el futuro, el tiempo lo dirá, pero a partir de ahora, Java no está del todo mal. (Se excluyen las bibliotecas de fecha y hora ... wow, son esas siempre feas y desordenadas)

Jason
fuente
1
Hay bibliotecas de terceros ahora para superar los problemas de fecha / hora.
Michael K
1
Oracle estaba usando Java junto con PL / SQL como lenguaje para programas que vivían dentro de la base de datos, al menos a partir de 10 g. Oracle usa mucho Java. Si esto significa que tomarán Java en una dirección que me gusta es cuestionable, pero no lo van a matar.
David Thornley
4

No hay nada con lo que ponerse al día, por lo que la pregunta no tiene sentido.

El hecho de que Java no replica exactamente C # no significa que sea "inferior" de alguna manera, es simplemente diferente. También podría preguntar cuándo C # se "pondrá al día" con Cobol.

jwenting
fuente
23
No estoy de acuerdo C # y Java son similares en muchos aspectos, mucho más que C # y COBOL. Recuerdo que un día leí que "C # es lo que Java debería haber sido". En resumen, creo que C # y Java están compitiendo directamente, y después de haber trabajado con ambos tengo que decir que tengo muchas características de C # en Java, pero no al revés ...
Philippe
¿Encontró situaciones en las que podría usar C # o Java? Es decir, situaciones en las que el desarrollador podría elegir. Por lo general, una tienda ya tendría preferencias / prejuicios / sesgos y la elección entre idiomas en el mismo ecosistema. Por ejemplo, entre Java y Scala o entre C # y F #
Shamit Verma
2
No estoy de acuerdo con toda la decisión de diseño que C # tomó, pero al igual que Java, conscientemente se propusieron hacer un reemplazo de C ++, y con el ejemplo de Java antes que ellos, agregaron deliberadamente algunas características críticas que Java dejó fuera. Entonces, si crees que esas características son buenas, entonces Java tiene que "ponerse al día" con C # Específicamente, la capacidad de crear objetos en línea para que todo lo orientado a objetos no TENGA que estar hinchado, y creo que constante. Los delegados son una nueva característica que incorporaron, no es que no se puedan construir como una estructura de datos de la biblioteca. ¡Diría que ambos tienen que ponerse al día con C ++!
Dov
@Philippe, no te dejes atrapar por su contraejemplo. Podría haber dicho con la misma facilidad "¿Cuándo C # se pondrá al día con Java?". Su punto sigue siendo que no hay una razón objetiva por la que Java esté detrás de C #; Todo es preferencia personal.
jonescb
Nadie está hablando de la replicación, pero C # tiene algunas características esenciales que Java está considerando implementar AHORA (como lambdas, que se emulan con una implementación de objeto feo).
YuriAlbuquerque
4

La cuestión de si C # o Java está por delante del otro está en debate, pero en lugar de centrarme en las características del lenguaje de uno u otro, preferiría centrarme en lo que implica evolucionar un lenguaje. Es un hecho con el que no creo que nadie discuta: Java es anterior a C #.

Problemas para cambiar el funcionamiento de un idioma:

  1. Si rompes la compatibilidad con versiones anteriores, molestas a muchos desarrolladores
  2. Si molestas a tus desarrolladores, pasan a otro idioma que los soporte mejor. Por lo tanto, no hay razón para seguir trabajando con el idioma.
  3. Java tomó algunas decisiones de diseño desde el principio con la presión de llevar el lenguaje al mercado. La esperanza era regresar y completar algunos de los espacios en blanco. Esas decisiones aún afectan el lenguaje porque los mantenedores no quieren violar el primer punto.
  4. Java abrió mucho territorio nuevo y demostró de una vez por todas que un lenguaje recolectado de basura se puede tomar en serio, y tener un rendimiento lo suficientemente bueno para la mayoría de las personas.
  5. C # entró más tarde y aprendió muchas de las lecciones con las que se topó Java, por lo que pudieron evitar algunas de las limitaciones técnicas que Java tiene debido al punto 3.
  6. Las nuevas características del lenguaje tienen que resolver un problema real de una manera sensata. No todas las funciones de idioma tienen sentido en el contexto del idioma al que está intentando agregarlo. Es por eso que, a pesar de sus similitudes, Java y C # continuarán siendo lenguajes diferentes.

Entonces, ¿C # tiene más funciones de lenguaje que Java? Creo que sí. ¿Son útiles? Creo que sí. ¿Eso significa que C # es mejor o más maduro que Java? Con lo que no estoy de acuerdo. Son diferentes, simples y simples. Java nunca tendrá todas las características de C # ya que C # nunca tendrá todas las características de Java.

Una de las características de Java, la capacidad de escribir un programa en Windows e implementarlo en Unix o Mac, nunca sucederá directamente por el soporte de Microsoft. ¿Porque preguntas? No es porque Microsoft sea malvado (si eso es cierto o no, realmente no me importa). Es porque aprendieron una lección que Sun nunca aprendió: escribir una vez que se ejecuta en cualquier lugar comercializa los sistemas operativos y el hardware. Si le interesa ganar dinero con las ventas de su sistema operativo, no desea que sea trivial cambiarlo y aún así tener una aplicación funcionando. Si lo hizo, no puede obtener ningún beneficio del sistema operativo porque siempre hay opciones más baratas.

Berin Loritsch
fuente
¿Por qué importa que Mono no sea ejecutado por MS? Mono funciona muy bien. No lo subestimes.
Kugel
No es una excavación en Mono, pero no todas las API de .NET son compatibles directamente. Si bien están avanzando y han recorrido un largo camino, existen limitaciones, especialmente en las aplicaciones de escritorio. No estoy seguro de qué tan cerca ha estado Mono o si legalmente puede llegar a implementar Winforms o WPF. Sin embargo, para el trabajo estrictamente del lado del servidor, estoy bastante seguro de que es compatible. No lo he investigado recientemente.
Berin Loritsch
Creo que "la capacidad de escribir un programa en Windows e implementarlo en Unix o Mac, nunca sucederá directamente por el soporte de Microsoft" se ha refutado ahora
JoelFan
Cuando escribí la respuesta, no fue así. Entonces, ¿C # ha escrito Microsoft un tiempo de ejecución y bibliotecas que funcionan en Mac y Unix? Mono no es directamente de Microsoft, aunque podría tener algunos desarrolladores de Microsoft trabajando en él. Todavía tengo dudas sobre una aplicación de escritorio desarrollada en WPF que funcione para Linux. El lado del servidor solo puede estar bien.
Berin Loritsch
1

Java realmente no necesita nuevas "características" más que C o C ++. Es un lenguaje bien diseñado para el desarrollo orientado a objetos. Las adiciones que se pueden hacer están en la creación de bibliotecas para realizar una amplia gama de tareas. Lo mismo ocurre con C #: la mayoría de las funciones se están agregando para que el lenguaje haga más cosas. Personalmente, creo que la mayoría de esas características no son necesarias: los punteros en OO realmente son muy esponjosos a menos que esté trabajando a nivel de hardware (en ese punto, probablemente sea mejor usar algo como C). Además, se supone que ejecutar en una VM dificulta el acceso directo al hardware, si no es que imposible.

Unix comenzó la tendencia de crear módulos que hacen una cosa muy bien. Creo que tanto Java como C # se están yendo un poco de las manos en el arrastre de características. Es mejor crear un núcleo fácilmente extensible que un "lenguaje" gigante multipropósito que es más como un marco. Para , Java cumple este requisito mejor que C #.

Michael K
fuente
77
El lenguaje sin la lambda adecuada no es un lenguaje utilizable. Si esa característica se agrega a Java, estaría de acuerdo con el resto de sus argumentos. Sin eso, Java no es extensible en absoluto, apenas es utilizable.
SK-logic
2
@Craige Personalmente (opinión) No me gusta tener características sintácticas. Quiero que el lenguaje esté fuera de mi camino, muy mínimo.
Michael K
1
@Michael: no logro establecer la conexión entre un lenguaje que tiene características sintácticas y un lenguaje que se interpone en tu camino. El hecho de que un idioma tenga dichas funciones no significa que deba utilizarlas. Tome los métodos getter y setter de C # por ejemplo. El 90% del tiempo, eso le ahorrará escribir cientos de líneas de código redundante. Sin embargo, aún puede escribir el suyo si lo desea.
Craige
1
@Craige, si el idioma tiene características, tus herramientas deben saber sobre ellas, al menos. Y el poder del ecosistema Java está principalmente en sus herramientas, que son posibles por completo debido a la simplicidad minimalista del lenguaje.
SK-logic
1
@SK, no entiendo cómo puedes decir que un idioma con lambda no se puede usar. C no tiene lambdas, y C ++ los tiene en C ++ 0x y la gente ha estado usando estos lenguajes durante décadas. Simplemente porque prefiere una programación funcional que no invalide la programación imperitiva.
jonescb
1

No hay nada malo con muchas de las características que C # está agregando, pero dada la velocidad a la que están cambiando el idioma, conscientemente hacen que Mono sea difícil, si no imposible, de mantenerse al día. Si es así, digo que estamos esperando que C # se ponga al día con Java en términos de la gama de sistemas en los que puede desplegarse. No es suficiente simplemente ejecutar en Windows.

Dov
fuente
0

No voy a comenzar un foro de discusión, pero creo que Java estuvo aquí mucho antes de C # y, en realidad, C # parece más una replicación que Java.

En cuanto a responder a su pregunta: Java y C # son lenguajes diferentes, por lo tanto, no puede compararlos solo por sus características. Lo que puede hacer en Java no puede hacerlo en C # y viceversa.

Finalmente, esto es como comenzar un tema de Windows vs Linux.

Adam Arold
fuente