Java - Por que java es tan patetico?

 
Vista:
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 02/01/2018 20:42:09
Si comparamos a java con cualquier lenguaje estático moderno (por ejemplo C#, F#, Kotlin, Scala, e incluso TypeScript, ni hablemos de lenguajes mas avanzados como Idris o Haskell), vemos que java se queda totalmente atras en términos de riqueza del lenguaje, expresividad, productividad y digamos subjetivamente "belleza".

El codigo java en general es horriblemente tedioso, dificil de leer y escribir, innecesaria y vomitivamente repetitivo, carente de constructos y features que en otros lenguajes son moneda corriente como ser properties, operadores sobrecargados, generics (de verdad), string interpolation, null propagation, type inference, y un largo etc. Al mismo tiempo el type system de java presenta un soporte inexistente para value types (ni siquiera se puede hacer un List<int> en java), y el lenguaje carece que facilidades para el uso de Union Types, pattern matching, yield, y una cantidad enorme de features que si quieren puedo armar una lista y nombrarlos uno por uno.

En contraposicion, los lenguajes modernos en su mayoría presentan un superconjunto de las facilidades que se encuentran en java. Es decir, dado cualquier lenguaje (por ejemplo C#), éste posee TODAS las características de java, y muchísimas más que no se encuentran en java.

Por qué se da este fenómeno? cuales son las ventajas del lenguaje desde el punto de vista del desarrollador individualmente? Me refiero a qué ventajas se encuentran al escribir código java versus por ejemplo Kotlin, desde un punto de vista estrictamente técnico y no desde la mirada de recursos humanos que está feliz de conseguir por 2 dolares al año cientos de monitos que programen en java, cosa que no se da con lenguajes más avanzados por ejemplo F# o Scala?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-3
Responder

Por que java es tan patetico?

Publicado por Tom (1563 intervenciones) el 03/01/2018 10:14:17
Te pasas de sensible con lo del patetismo. Y de indocumentado con lo de las carencias de java (quizás estás demasiado pendiente de "la teoría").
Tienes "null propagation" con el tipo Optional (busca un poco y encontrarás ejemplos en google).
Tienes "string interpolation" (al estilo c) con String.format() (y con printf()) Lo que no hay que olvidar es que los String en java son inmutables.
¿ Properties ? Cuando hacen falta están (mira javaFX)
¿ Son necesarios los operadores sobrecargados ? ¿ No es mucho más claro usar un método específico ?
¿ Qué problema tienes con los generics de java ? ¿ Has echado un ojo, al menos, a algún tutorial ?
Value Types ... se lleva discutiendo desde 2013 ... no parece que haya mucha presión para implementarlos en la jvm (¿será porque no son imprescindibles ?) ¿ No puedes vivir sin un List<int> ? Pues usa List<Integer> con el box/unbox automático ni te enterarás.
¿ Type inference no hay en java ? No digas chorradas. Lo mismo para el pattern matching.
Efectivamente, no hay uniones, consigues lo mismo (si quieres) con un buen diseño de clases e interfaces. Desde que empecé a "jugar" con java hace unos años, ya no uso uniones en c, rara vez las necesito.
¿ yield ? ¿ te refieres a multithreading o a qué ?

El resto de la cantidad enorme de features, no puedo comentarlas, pero imagino que serán del mismo tipo que las anteriores.

¿ Ventajas de Java ? Multiplataforma y multipropósito. Rápida curva de aprendizaje. Es fácil de leer y escribir (mi opinión es tan válida como la tuya ¿no?). Alta productividad. Enorme cantidad de "bibliotecas" disponibles, libres o propietarias (al hilo, facilidad para la reutilización). Enorme cantidad de documentación, tutoriales, ejemplos, ... disponible.

Por cierto, todo vale para algo, pero nada vale para todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
4
Comentar
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 03/01/2018 14:13:13
Por supuesto que la sarta de idioteces que dijiste son falsas. Excepto la parte donde tu opinion es valida. Sos libre de seguir usando un lenguaje ridiculo y dinosaurio. Yo ahora tengo cosas que hacer. Cuando pueda te muestro como son los lenguajes modernos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 359
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Nicolas (137 intervenciones) el 03/01/2018 16:12:09
Agustin.
Y para que pierdes el tiempo pasando por acá??
Enfocate en "tu" ó "tus" lenguajes de programación fantabulosos que te llevarán al éxito en ésta vida y el más allá.
Jajajaja.
Hay gente para todo en ésta vida eh.
Suerte pila pibe.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 03/01/2018 16:39:33
Por supuesto que los comentarios ad hominem de un ignorante que solo conoce 1 lenguaje son completamente irrelevantes.

Despues te atiendo cuando pueda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar
sin imagen de perfil
Val: 147
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Yamil Bracho (2302 intervenciones) el 03/01/2018 17:07:32
Discutir sobre cual es el mejor lenguaje de programacion es como discutir que marca de auto es mejor...
Siempre que me preguntan eso y sobre todo estudiantes de informatica, le respondo con otra pregunta y es "Que lenguaje de programacion conoces ?" y cuando me responden "X" les dijo pues "X" es el mejor lenguaje de programacion porque es el que mas conoces...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 03/01/2018 20:12:06
Esa respuesta solamente aplica a noobs que no saben nada. Cuando uno conoce docenas de lenguajes y maneja un mayor umbral de abstracción se puede hacer una evaluación objetiva sobre cuales lenguajes tienen un umbral de abstracción menor. el umbral de abstracción de java es menor a casi todos los lenguajes estáticos modernos, de ahí que usar java se "siente" como volver 15 años al pasado y usar una versión (por ejemplo) de C# del 2003.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-3
Comentar
sin imagen de perfil
Val: 147
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Yamil Bracho (2302 intervenciones) el 03/01/2018 20:29:28
Al parecer el español no es uno de los lenguajes que mas dominas.
Lo que trataba de decir que si alguien conoces Java mas que otros lenguajes de programacion entonces Java es lo mejor.
Si conoces o has trabajado mas con C# entonces, c# es el mejor..
Y asi sucesivamente...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 03/01/2018 20:36:32
Falso, capo.

Yo no escribí una sola línea de java en toda mi vida, y puedo decir sin miedo de equivocarme que java es un dinosaurio patético e idiota, ya que en este punto es una versión mal hecha de C# 3.0 del año 2007. Y ni siquiera porque C# en esa epoca ya tenia properties, generics de verdad, value types, LINQ, y un largo etc.

En contraposicion, vos no me podes nombrar NI UNA SOLA (1) ventaja / language feature de java que no haya estado en C# hace 10 años. Ni hablemos de lenguajes más modernos como Kotlin o Scala.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-4
Comentar
sin imagen de perfil
Val: 147
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Yamil Bracho (2302 intervenciones) el 03/01/2018 20:57:27
Pero no puedes amarrarte a un sola lenguaje. Que pasaria, por ejemplo, si te llega un contrato bastante sustancioso y te dicen que debes trabajar con Java... Lo rechazarias? ? Si conoces C#, Java se te va a ser muy facil y si conces Java, C# se te hara muy facil.

Por cierto me gusta mucho Kotlin pero tambien me gusta Go y Swift y son cosas que tengo que aprender. Otro que me gustaba era Forth, en fin hay miles de cosas que aprender y sobre todo hay que estar con mente abierta a aprenderlas para sacar partido de ese conocimiento..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
3
Comentar
sin imagen de perfil
Val: 959
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Por que java es tan patetico?

Publicado por Agustin (139 intervenciones) el 05/01/2018 00:44:54
Bueno ahora que tengo un rato libre te paso a atender:

1 - El tipo Optional<T> en java es ridiculo, inservible y de ninguna forma reemplaza al soporte a nivel de lenguaje para null progragation.

Como java no tiene Value Types, el siguiente código es valido en java:

1
2
3
4
public Optional<string> javaEsUnAsco()
{
    return null;
}

Lo cuál demuestra que en realidad el optional no sirve para nada, porque es una clase como cualquier otra y puede ser null.
En lenguajes modernos con soporte para option types, como F#, el compilador OBLIGA a que el propio option no sea null, y además obliga a matchear sobre el valor para evitar NullReferenceException:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let devuelveOption(): string option =
   null // no compila
 
let devuelveOption(): string option =
   "hello, world!" // no compila, string no es convertible a string option
 
let devuelveOption(): string option =
   Some("hello, world!") // valido
 
let stringOpcional = devuelveOption()
 
Console.WriteLine(stringOpcional) // no compila, string option no es convertible a string
 
Console.WriteLine(stringOpcional.Value) // warning: el valor puede ser nulo
 
match stringOpcional with
| Some s -> Console.WriteLine(s) // valido
| _ -> ()

Y de todas formas, nada de todo esto se relaciona en forma alguna con el punto que mencioné en el primer post, sobre null propagation, que es algo diferente:

https://davefancher.com/2014/08/14/c-6-0-null-propagation-operator/

sirve para evitar millones de if (.... != null) cuando uno navega un grafo de objetos (nótese como esto es totalmente diferente del propósito del option type)

Ejemplo:

1
var calle = persona?.Direccion?.Calle ?? "[Sin calle]";

en C# es equivalente a:

1
2
3
4
5
6
7
8
9
string calle;
if (persona != null && persona.Direccion != null && persona.Calle != null)
{
    calle = persona.Direccion.Calle;
}
else
{
    calle = "[Sin calle]";
}

Esa facilidad en java no existe, por lo tanto java es inferior, y ninguna clase Option<T> que no sirve para nada porque puede ser null arregla el lenguaje.

Por último cabe mencionar que como los generics de java no sirven para nada, ni siquiera se puede tener un Option<int> en java.


2 - string interpolation:

String.format() no es no lo mismo que soporte para string interpolation a nivel de lenguaje: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/interpolated-strings

ejemplo en C#:

1
2
3
4
5
var nombre = "Juan";
var edad = 20;
var profesion = "escritor";
 
var mensaje = $"Hola. Me llamo { nombre }, tengo { edad } años y soy { profesion }";

es muchísimo más legible que su equivalente usando string.Format():

1
var mensaje = string.Format("Hola. Me llamo {0}, tengo {1} años y soy {2}", nombre, edad, profesion);

Por supuesto java NO soporta string interpolation a nivel de lenguaje, por lo tanto java es inferior.

Properties:

Por supuesto que java NO soporta properties, como SI lo hacen TODOS los demás lenguajes modernos:

Ejemplos:

C#:

1
2
3
4
5
6
7
8
9
public class Persona
{
        public string Nombre { get; set; }
        public string Apellido { get; set; }
        public string Empresa { get; set; }
        public string Email { get; set; }
        public string Telefono { get; set; }
        public string UserName { get; set; }
}

F#:

1
2
3
4
5
6
7
8
type Persona {
    Nombre: string
    Apellido: string
    Empresa: string
    Email: string
    Telefono: string
    UserName: string
}

Lo mismo en Kotlin, Scala, TypeScript, Swift y cualquier otro lenguaje estático moderno.

En java NO existe esta facilidad y se requieren una tonelada de "getters" y "setters", lo cual ni siquiera voy a ejemplificar porque me da asco tener que escribirlo. Por lo tanto java es inferior.

Por supuesto JavaFX es un framework de GUI (que por cierto es una copia barata y patética de WPF, como no podría ser de otra forma), y claramente no tiene NADA que ver con cuestiones a nivel de lenguaje.

Operadores sobrecargados:

Había un ejemplo muy clarito en whyjavasucks.com que mostraba con ecuaciones y cálculos aritméticos usando el tipo BigDecimal en java y su equivalente Decimal en C# como la versión de C# era infinitamente más legible.
El sitio no existe más, así que voy a poner un ejemplo rápido acá:

C#

1
2
3
4
5
var saldo = 10000m; // m es el sufijo en C# para System.Decimal
var tasaDeInteres = 0.033m;
var diasDeAtraso = 5m;
 
var calculodeInteres = (saldo * (tasaDeInteres / 20) + (diasDeAtraso / 4m * (saldo + (10m / saldo));

java:

1
BigDecimal calculodelinteres = (saldo.multiply(tasaDeInteres.divide(new BigDecimal(20))).add(diasDeAtraso.divide(new BigDecimal(4)).multiply(saldo.add(new BigDecimal(10).divide(saldo)));

Por supuesto este calculo no tiene sentido como calculo de interes, es completamente random, pero lo hice con el propósito de ilustrar cómo la versión de java es completamente ilegilble, imposible de seguir, mentalmente gravosa y por lo tanto mucho mas propensa a errores, frente a la versión de C#. Por lo tanto java es inferior.

Generics:

Me encanta porque me mandás a leer un "tutorial" como si yo fuera un noob. Si no sabes cuales son los problemas con los generics de java te recomiendo que vos leas un tutorial de generics de cualquier lenguaje moderno estático para que veas como son los generics de verdad.

Te dejo esto:

1
https://stackoverflow.com/questions/355060/c-sharp-vs-java-generics

Y un ejemplo bien cortito de algo que no podés hacer en java nunca en tu vida:

C#:

public void Ejemplo<T>() where T: new() => new T();

Por si no lo entendés (es probable que un programador java no entienda lenguajes modernos), se está devolviendo una nueva instancia de T.

Otro ejemplo:

var lista = new List<int>();

en java no se puede definir un generic de T donde T sea un tipo primitivo, se necesita esa idiotez de "wrappers" que son inservibles, ensucian el código y desperdician memoria a lo loco. Por lo tanto java es inferior.

Type inference:

Seguramente como programas en java vivís en un termo en 1999 y ni te enteraste, pero para la próxima versión de java están planeando agregar el keyword var, algo que C# tiene desde hace 10 años. Por lo tanto java es inferior y esto lo reconoce hasta el propio oracle cuando lo único que hace es imitar a C# con 10 años de atraso.

Pattern matching: el ejemplo de F# que di arriba muestra el uso de matching en un lenguaje estático moderno. Nuevamente como vivis en 1999, te conviene buscar un "tutorial" para que veas de qué se trata. Por supuesto java no soporta nada de esto, por lo tanto java es inferior.

Con respecto a Union Types, comparás con C, mientras yo comparo con lenguajes estáticos modernos como F# o Scala.

Ejemplo:

F#:

1
2
3
4
type Persona =
   | Alumno of Curso: string * Edad: int
   | Profesor of Materia: string
   | Rector of NumeroEscuela: int

Es un ejemplo tonto, pero son 4 líneas, y para lograr lo mismo en java tenes que hacer 1 clase abstracta y 3 clases concretas, con un monton de setters y getters y una cantidad enorme y vomitiva de código inservible. Por lo tanto java es inferior.

Si no sabes lo que es yield te conviene leer un tutorial, te dejo uno: https://www.dotnetperls.com/yield

Claramente java no tiene nada similar a esto, por lo tanto java es inferior.

Como conclusion te podes dar cuenta que mientras los lenguajes modernos son más ricos, claramente java es pobre en features y facilidades. Por lo tanto se confirma mi afirmación de que java es patético, al ser comparado con lenguajes modernos.

Y otra reflexión final: también se confirma mi afirmación de que los programadores java viven en 1999 y no tienen ni noción de cómo son los lenguajes estáticos modernos, ya que NINGUNA de las cosas que afirmaste son ciertas. Y como desafío te invito a que hagas el mismo ejercicio que yo hice, pero al revés, buscando por ejemplo ventajas del lenguaje java que no existan en C#, F#, Kotlin, Scala, TypeScript, o Swift.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar