Silly Bytes has moved - Silly Bytes se trasladó

www.sillybytes.net

28 mar. 2016

Why do I hate Java? / Por qué odio Java?

http://www.vocativ.com/culture/fun/civet-coffee

Everything is an object...

... No, it's not!

Not everything is a object. Have you ever carefully read Java code? It's full of actions dressed like objects: Mutator, Traverser, Factory, Maker, Creator, Generator, Mediator, Eliminator. So you don't mutate, traverse or create anything, instead you force an object that can do that.

Ok some of that stuff can be useful for well used design patterns and a good design, but most of the time is not!









Don't force objects everywhere. Classes are good when they fit though, and a good language has OOP as a feature.

As Steve Yegge puts it in his article: Execution in kingdom of nouns, verbs should not be second class citizens.

Java stupidity causes lots of astonishment and improper behaviors that you are forced to get used to.

S.O.S

Ok, you hit a problem, javac is throwing a completely incomprehensible error and of course you go to Google hoping you get some answers, and you do:
  • Click that button
  • A pop up widow appears
  • Fill up those text fields
  • Mark that check box
  • Click the yellow icon
  • Click "ok"
  • Then restart your IDE
 Are you fucking kidding?


The freaking 99% of "solutions" you find are a sequence of clicks and actions in a graphical user interface of an IDE, What if I'm not using that specific IDE? What if I'm not using an IDE at all!!?? Are you people stupid? I'm probably not even in a Xorg server session and writing the code comfortably in my preferred text editor in a nice tmux or screen session, how I'm I supposed to "click" here and there? I have no icons!

How is that an error produced because Java can't find a library of something similar requires a sequence of GUI actions using a mouse? And worse, how is that the ONLY way to fix it!?

You guys are aware that code is plain text right?... RIGHT??

Use and IDE!

James Gosling (aka Java's father) says: Don't use Emacs.

Yes, if you're writing Java and you're not using an IDE, but a good text editor instead, you're going to have some tough moments, but for a good reason. Java programming gets hard with Vim or Emacs because Java sucks very hard, and this symptom tells more about the language than it says about de editors.

The language needs and is dependent on a huge, bloated and sometimes slow tailored program to use it. The IDE becomes a really big support to hold everything where the language fails.

So the language is not aimed for humans, it requires an extra layer, an interface (the IDE) for the user to actually use.

More on that in this post: Why I hate IDEs

IDE dependent projects

If you project use, lets say, Eclipse, the other person will have to use it as well if she doesn't want to die trying to maintain it in Netbeans for example. Yes it is possible, but you get headaches to.

Found a nice example in the internet about something you need? Great! Lets hope it uses the exact same IDE you use though...

Have you tried to compile an IDE generated project without the IDE? If your not feeling extremely adventurous or not willing to do it with lots of horrible hacks, then you better go and install that stupid IDE.

IDE dependent projects is already too bad, but projects that are dependent on the IDE specific version?? Yeah... You might as well go and shoot yourself in the head now.


Why documentation when you have a mouse?

Real documentation is almost inexistent if the IDE has an automagical GUI button for doing that, so if you have to do it, you must use the IDE so you can press the goddammit button!

Trying to write a SOAP interface for a JSF application? No problem just click here and there!. But if you don't use the IDE you're pretty screwed because good documentation about how to actually write it, it's stupid or non existent.

Documentation becomes optional if the IDE has button for doing it.

Automation is good!, but if you have to use an IDE to implement a SOAP web service in a stupid JSF application because there is no other way in which you don't have to go through a traumatic process, then you are under lots of shit!
Note that I'm using SOAP as example just for the sake of the argument, there are plenty of other examples, each of those with more or less documentation.

Conclusion

  • There are lots of stupid programmers, and Java is on of the things to blame.
  • If you can't easily write software in a language without an IDE, then the language sucks.
  • Because of the Java dependency on IDEs as (bad programming language enablers)[https://dzone.com/articles/ide-bad-programming-language], lots of the problems with Java are just the intersection with IDE's problems.





 

Todo es un objeto...

... No, no lo es!

No todo es un objeto. Ha leído alguna vez código Java? Está repleto de acciones disfrazadas como objetos: Mutator, Traverser, Factory, Maker, Creator, Generator, Mediator, Eliminator. De forma que no se muta, recorre o crea nada, en cambio se fuerza un objeto que puede hacerlo.

Ok, algunas de esas cosas pueden resultar legítimamente útiles para patrones de diseños bien utilizados y obtener un buen diseño, pero la mayor parte del tempo no lo es!

No fuerce objetos por todas partes. Las clases son buenas cuando se ajustan a la idea y un buen lenguaje cuenta con capacidades OOP como una característica.

Como Steve Yegge lo planteó en su articulo: Execution in kingdom of nouns, los verbos no deberían ser ciudadanos de segunda.

La estupidez de Java causa asombro y comportamientos a los que uno está forzado a acostumbrarse.


S.O.S

Ok, Se topó con un problema, javac lanza un error completamente incomprensible y, por supuesto, se dirige a Google esperando obtener respuestas, y las consigue:
  • Click sobre ese botón
  • Una ventana emergente aparece
  • Llene aquellos campos de texto
  • Marque ese check box
  • Click sobre el icono amarillo
  • Click "ok"
  • Luego reiniciar el IDE
Me estas jodiendo?

El desgraciado 99% de las "soluciones" que se encuentran son una secuencia de clicks y acciones en una interfaz gráfica de usuario de un IDE, Qué ocurre si no estoy usando ese IDE en particular? Quizás no estoy ni siquiera en una sesión Xorg y estoy escribiendo mi código desde la comodidad de mi editor de texto preferido en una agradable sesión de Tmux o Screen, cómo estoy supuesto a hacer "click" aquí o allá? No tengo iconos!

Cómo es posible que un error producido porque Java no puede localizar una librería o algo similar requiere una secuencia de acciones en una GUI usando un mouse? Y peor aun, cómo es posible que es la UNICA solución!?
Ustedes están consientes de que el código es texto plano verdad?... VERDAD??

Usa un IDE!

James Gosling (el padre de Java) dice: No use Emacs.

Claro, si se escribe Java y no se usa un IDE sino un buen editor de texto, uno se somete a momentos difíciles, pero esto debido a una buena razón.

La programación en Java se torna difícil con Vim o Emacs porque Java apesta mucho, y este síntoma habla más sobre el lenguaje que sobre los editores.

El lenguaje necesita y es dependiente de un enorme, sobrecargado y algunas veces lento programa creado para usar el lenguaje.

El IDE se convierte un soporte para sostener todo aquello en lo que el lenguaje fracasa.

Así que el lenguaje que no está pensado para humanos, requiere una capa adicional, una interfaz (el IDE) para el real uso del usuario.

Más sobre el tema en el post: Por qué odio los IDEs


Proyectos dependientes de un IDE

Si su proyecto usa, digamos, Eclipse, la otra persona deberá usarlo también si no quiere morir en el intento de mantenerlo en Netbeans por ejemplo. Si es posible, pero se obtienen dolores de cabeza.

Encontró un ejemplo útil en Internet sobre algo que necesita? Genial! Roguemos que use exactamente el mismo IDE...
Ha intentado compilar un proyecto generado en un IDE sin el IDE? Si no se siente extremadamente aventurero o no esta dispuesto a hacerlo sin varios horribles hacks, entonces mejor instale ese estúpido IDE.

Proyectos dependientes de un IDE ya son lo bastante malos, pero proyectos dependientes de una versión especifica de un IDE?? Si... Podría también simplemente dispararse en la cabeza ahora.

Para qué documentación cuanto tienes un mouse?

La documentación real es casi inexistente si el IDE tiene un botón automagico de la GUI para hacerlo, así que si tiene que hacerlo, más le vale usar el IDE de forma que pueda presionar el condenado botón!

Intentando escribir una interfaz SOAP para una aplicación JSF? No hay problema, solo haga Click aquí y allá!. Pero si no use el IDE entonces está bastante jodido porque documentación sobre como escribir la funcionalidad es estúpida o no existe.

La documentación se vuelve opcional si el IDE tiene un botón para hacerlo.
La automatización es buena!, pero si se tiene que usar un IDE para implementar un servicio web SOAP en una estúpida aplicación JSF porque no hay otra forma en la que no se necesite atravesar un proceso traumático, entonces usted está enterrado en mierda!

Nótese que estoy usando SOAP como ejemplo únicamente por el beneficio del argumento, existen varios otros ejemplos, cada uno de los cuales tiene más o menos documentación.


Conclusión

  • Existen muchos programadores estúpidos, y Java es una de las cosas a las que culpar.
  • Si no puede escribir software cómodamente sin un IDE, entonces el lenguaje es una porquería.
  • Debido a la dependencia de Java con los IDEs como (posibilitadores de malos lenguajes)[https://dzone.com/articles/ide-bad-programming-language], muchos de los problemas de Java no son más que la intersección con los problemas con los IDEs.