Cosas que odio de los lenguajes de programación

Nota: Llevo casi un año escribiendo de a poquito el articulo por el móvil y tal. Le he metido un empujón para que salga antes de terminar el año.

Ya son muchos años, soy un perro viejo en esto de picar código, posiblemente…tu lector puede que seas un tierno cachorrito lleno de ilusión…pero bueno ya te irás siendo un perro apaleado.

Dicen que «no hay bala de plata» a la hora de resolver un problema de programación, que cada lenguaje es bueno para una cosa, y creo que desde mis años perrunos opino que es cierto.

También dicen «cuando tienes un martillo entre manos, todo son clavos», y eso veo que le pasa a los cachorritos, por ejemplo ahora (cuando estoy escribiendo estas líneas) esta de moda el rollo de node Js y javascript, y los cachorritos lo quieren usar para todo.

Pero bueno viendo algunos lenguajes, os voy a relatar mis odios mas ocultos…o no tan ocultos:

  • Perl: lo odio casi completamente, aunque si tuviera que odiar algo particularmente, es los sigils, que son esos pequeños simbolitos que acompañan a las variables para diferenciarlas de palabras reservadas y tal, que en lenguajes como PHP son muy útiles, básicamente porque solo hay el $ y resalta visualmente donde están las variables y te la libertad de usar $return sin problemas por ejemplo. Pero Perl es un infierno de simbolitos, que unos hacen que la variable sea un puntero o un array o un hash. ¿Alguien tiene una chuleta o cheatsheet con lo que hace cada uno y como se puede volver atrás….porque pasa como con los punteros en C que se te pierde la variable…pero mas raro?
  • Javascript: todo lo he escrito en el futuro pasado en Sigo pensando que javascript apesta, resumen no hay sleep, y es multihilo pero no te deja manejarlos. Añado que se esta llenando de capas y capas de abstracción en plan como java.
  • PHP: lo quiero es un fiel compañero que me ha dado de comer muchos años, pero como buen amigo tiene sus pequeñas manías que le respetas pero están ahí. A ver no nos llevemos las manos a la cabeza, pero PHP fue un lenguaje de programación inventado a caballo que refleja un poco los problemas del caos ordenado de la gestión de proyectos de software libre, y no es un lenguaje muy estandarizado su idioma, como el español con los verbos irregulares que sabiamente los niños regularizan pero los castran para que siga siendo así el español. Hay un documento o paper (como dicen los modernitos) muy famoso sobre el caos ordenado que es,  PHP: a fractal of bad design. Quizá lo que a mi me molesta es que no tenga hilos (pero por lo menos no los tiene de verdad, no como javascript que te los niega),  que sea de tipado dinámico las variables que te da problemillas (que han resuelto en el 7 pero que lo están volviendo un poco C). Bueno si hay una cosa si que odio es la lista de parámetros por defecto en las funciones te vuelve loco cuando solo tienes que meter el último y tienes que mirar el código fuente la función para poner a mano los anteriores, python lo arreglo esto bastante bien.
  • Java: la eterna promesa, es como medio novia que te traiciona una y otra vez pero vuelves a sus brazos, mi ultima vez fue cuando comenzó Android, creía que esta vez si…pero no otra vez la traición…sigue siendo un lenguaje que primero tienen sobrecargado el operador + para strings pero tu no puedes, con capas de capas de abstracción para causar erecciones poderosas en teóricos de la programación pero que no se manchan las manos a diario. Es un cristo programar en Android y encima parece que programas como el viejo asqueroso m$-visual basic te salen la aplicación visualmente fea y cuadriculada con miles de lineas y cosas complejas como que no puedes acceder al valor seleccionado de una lista o combobox sino que necesitas otro objeto iterador. He visto lineas de 300 y pico caracteres para abrir una base de datos y no se perderán como lagrimas en la lluvia porque las cárnicas (consultoras) que venden carne de informático al peso siguen con proyectos de mierda en java con miles de capas.
  • Python: que no tenga un switch (perl tampoco lo tiene) y te hace llenar el código lineas y lineas de if – else – elif …hay gente lo pregunta en stackoverflow Replacements for switch statement in Python?, por lo demás mas o menos no tiene mucho problemas, salvo el tema de los tipos mutables y no mutables que es un poco lio pero no mucho. Y bueno que tampoco hay manera de definir variables estáticas dentro de una función…que también lo comentan por stackoverflow What is the Python equivalent of static variables inside a function? . Parece que este lenguaje de programación ha sido tocado por el dedo de dios, me tengo que poner seriamente con django porque puede ser una alternativa a mi querido PHP.
  • C#: otro que odio del todo porque es un producto comercial de micro$oft que lo venden como un lenguaje de programación y es un feto mal parido hijo de m$ visual basic (si lo has sufrido veras que tiene mucha mierda parecida). Pero por desgracia se esta poniendo de moda gracias a Unity3D y parece que la siguiente versión de Godot va a incluirlo en su hermano gemelo libre Mono así que habrá que empezar a aceptarlo.
  • Resto: o ya no se usan o son tan producto comerciales que no merece gastar caracteres en este texto. Y C, ASM es como las matemáticas hay que aprenderlo y respetarlo por ser old school…C++ pues tampoco me pegado mucho para odiarlo.

Hay un wiki que también trata nuestros odios en los lenguajes de programación: YourLanguageSucks

Y vuestros odios sobre lenguajes de programación cuales son…comentad…confesar…calmad vuestra alma.

18 comentarios sobre “Cosas que odio de los lenguajes de programación”

  1. C: ni el estandar, ni las librerias son especificas, por ejemplo las funciones en string.h devuelven 0 para error o cualquier cosa distinta a cero… acaso generan un valor aleatorio?. El nuevo estandar en lugar de corregir estos detalles parchea inconvenientes agregando mas librerias, solucionar declaraciones como signed long int por int64 es bueno, claro, si no te obligara a incluir una libreria de pormedio.

    Lisp: Declarar variables es mas feo que apalear focas, orejeras () por todos lados

    Bash/Make: solo tocar en caso de emergencia

    C++: lo olvide

    Go: aun estoy verde para odiarlo

        1. Pues siento ser una voz discordante, pero que «te obligue a identar el código en bloques» python es una ventaja para tener un código fuente limpio y claro….el problema es que la gente disfruta de ametrallar con espacios las lineas para identar…con lo bonito que son los tabuladores…aunque haya tenido mi epifanía con ellos….

          1. que no se mal entienda, estoy a fabor de la diversidad y la indetacion, solo que con llaves el editor sabe lo debe hacer, a la forma python, el alcance debe señalarse a mano pelada, tab a tab a tab

    1. Bash el problema que tira de los comandos de sistema, hay gente que estandariza (que no usa comandos que no vengan de serie en cualquier GNU/Linux…no recuerdo como se llama cuando un bash esta estandarizado) los scripts y quedan chulos. Makefile tanto de lo mismo.

      Cierto es que el manejo de las cadenas de texto en bash es un dolor de cabeza, y el rollo de tener que definir el token para romper una lista a iterar con IFS.

      Lips me tengo que poner con el, por cierto muy gracioso lo de las orejeras y las focas apaleadas.

      1. bash/make, ademas utilizan signos «extraños» que no le ayudan a ser legible para los no iniciados (y los que no estan a diario en ello). eso sin mencionar la falta de otros tipos de variable a demas de texto y enteros (de texto)

        los lispers (seguidores de lisp) supuestamente les llaman orejeras (earmuffs).

        en lisp TODO alcance es explicitamente indicado mediante (), en python con \t, en go te obligan a seguir un estilo de indentacion a 4 espacios con separacion de un espacio entre palabras clave a exepcion del inicio y cierre de parentesis y en C confian en el buen gusto del programador, el contexto (if, for, while, do-while) y {}. un tema complejo a la par de los sistemas de documentacion.

        1. Si cierto, ahora que me acuerdo lo de if [ $? -eq 0 ] …respetando espacios da su jaqueca a parte de los inventos que hay para manejar cadenas ${texto:7:3} y seguro que hay mas…

  2. El único que realmente detesto es TCL, su sintaxis es muy confusa (creo que la cagaron con ese enfoque de «todo es una cadena») y nunca se molestaron por hacer un port decente para Windows. Recuerdo que cuando me toco usarlo no tenia soporte para objetos, UTF8 ni programación funcional. Afortunadamente parece estar bastante muerto hoy en día por lo que es poco probable que tenga que volver a lidiar con esto en el futuro.
    Con Bash creo que lo único que me jode es que la sintaxis sea tan quisquillosa a veces; como cuando asignas una variable y no puedes dejar espacios entre el signo = o tienes que poner un punto y coma en ciertos lugares al hacer un if o bucle en una sola linea para que no de error.
    En cuanto a tu post:
    * Opino casi lo mismo de Javascript (aunque lo de las capas extras son chorradas que no me van ni me vienen). Lo que mas me molesta son los gilipollas que quieren usar Electron para todo, aun cuando no es practico tener un Chromium corriendo por detrás y paquetes de alrededor de 100 MB por cada puñetero programa.
    * Java nunca me gusto mucho, Jython o Kotlin se me hacen mas interesantes (la misma JVM pero sin tener que lidiar con la tediosa verborragia de Java), incluso podría considerar a Scala o Clojure sino fuera por que el paradigma funcional no me atrae mucho mas allá de la comprensión de listas, funciones lambda y alguna cosilla mas.
    * Desde hace tiempo el articulo de PHP: Un fractal de mal diseño cuenta con una traducción al español.
    * Lo de que Python no tenga un switch se puede resolver mas o menos bien con lo que explican aquí (dependiendo del caso).
    * C# me da igual pero al menos parece que últimamente se están esforzando para que funcione mejor en Linux. El que se use en Unity no es ningún merito, en especial cuando se puede descompilar fácilmente (dudo que muchos desarrolladores se molesten en proteger sus jueguitos).
    Por cierto, el enlace al articulo de la wiki ahora es https://wiki.theory.org/index.php/YourLanguageSucks (aunque no estaría de mas que lo actualizaran un poco).

    1. Muchas gracias por el largo comentario, perdón porque el plugin askismet te lo sentenciara como spam (creo que por tener varios links).

      TCL nunca lo he usado, es como Lisp que tampoco lo he tocado y toda la gente me habla del infierno de los paréntesis u orejeras con este lenguaje. ¿Donde programaste con TCL en la uni o en algún curro?

      Si lo de electron, es pan para hoy y hambre para mañana, es como hace muchos años cuando la gente usaba Flash para hacer aplicaciones de escritorio espectaculares como fuegos artificiales pero inútiles como estos.

      Gracias por el link de la traducción de el famoso articulo PHP fractal bad design.

      Y por el link del wiki de porque apesta un lenguaje.

      1. A TCL me toco usarlo hace como 10 años para manejar Windrop (un bot de chat, seguramente habrá mejores pero es lo que encontré en aquel entonces) y tenerlo funcionando ocasionalmente en un canal de IRC del que era administrador.
        Imagino que si hubiera usado el Eggdrop original habría sido menos problemático pero en ese entonces no tenia Linux. Uno de los problemas que tuve con esto fue al momento de obtener texto de unas paginas debido a que con algunas no funcionaba ya que tenia que especificar la codificación para que pudiera mostrar texto en Unicode (por eso dije que no tenia soporte para UTF8 pero seria mas bien una generalización ya que me parece que por defecto usa la codificación del sistema o la del propio script).
        Si quieres hacerte una idea de como es la sintaxis del lenguaje este manual te puede resultar útil. En su momento me sirvió cuando tuve que meterle mano a los scripts de Windrop.
        En cuanto a Electron esto resume bastante bien lo que pienso al respecto (olvide ponerlo en el otro comentario).

        1. Electron, no se si lo he dicho antes, pero me recuerda mucho a como cuando la gente usaba macromedia flash para hacer aplicaciones de escritorio.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.