¿El lenguaje de programación más odiado?
15/12/2011Los lenguajes de programación son una de las herramientas que podemos utilizar en nuestro trabajo informático. Como todas las herramientas, tienen sus limitaciones o pueden resultar inapropiadas para la tarea que tenemos entre manos. Esto en ocasiones puede generar rabia y frustración hacia un lenguaje en concreto. En esta entrada nos preguntamos: ¿cuál es el lenguaje de programación más odiado?
No es posible dar una respuesta única de cual es lenguaje de programación odiado, porque cada persona tiene su propia opinión – no hace falta más que ver las respuestas a esta pregunta en Stack Overflow o en Quora. Pero si hay algunos «sospechosos habituales» que aparecen repetidamente (algunos, lógicamente, son los lenguajes más populares) y algunos rasgos concretos de los lenguajes que suelen ser un imán para la críticas.
Propiedades inherentes al lenguaje
Algunas críticas a los lenguajes de programación se dirigen a la sintaxis y semántica del lenguaje, y se podría intuir que cual es el lenguaje de programación odiado. Por ejemplo:
– La posibilidad de no declarar los nombres y tipos de variables antes de usarlos (permite un código más conciso pero pueden aparecer errores en tiempo de ejecución, más difíciles de detectar que en tiempo de compilación).
– La existencia de variables por defecto que no necesitan declararse.
– La sintaxis elegida para delimitar el inicio y el fin de un bloque, como por ejemplo, los paréntesis en Lisp o la indentación en Python.
– La legibilidad del código escrito, una crítica que se dirige frecuentemente a Perl.
– La concisión del código generado, una crítica frecuente hacia Java.
– La falta de coherencia en el nombre de las funciones básicas que ofrece el lenguaje, como se le critica a PHP.
– La ausencia de determinadas funcionalidades existentes en otros lenguajes. Por ejemplo, en las versiones de Java previas a Java SE 5.0 se criticaba la falta de tipos genéricos en comparación con los templates de C++.
La implementación del lenguaje
En ocasiones, el problema no viene tanto del lenguaje sino de los componentes de dicho lenguaje: el compilador que genera código, el intérprete o la máquina virtual que ejecuta el código, las librerías del lenguaje, el entorno de debug, las herramientas para escribir documentación, …
Por poner un ejemplo, el lenguaje Java ha sido un lenguaje criticado por la eficiencia de su máquina virtual y más concretamente, su garbage collector (el módulo encargado de detectar y liberar la memoria que ya no está siendo usada).
Por otro lado, C++ tiene el dudoso honor de haber conseguir que Linus Torvalds le dedique piropos como «C++ is a horrible language» o «C++ leads to really really bad design choices». En este caso, los problemas mencionados hacen referencia a la falta de portabilidad de los programas que usan templates o la librería standard de C++, stl. Y ya no hablemos de los kilométricos mensajes de error que emiten algunos compiladores de C++ con los templates. Por ejemplo, aquí tenéis un divertido concurso para generar el mensaje de error más largo en C++ (con 102 bytes de código se generan 14Mb de mensajes de error).
En ambos casos, las buenas noticias es que estos problemas pueden arreglarse con el tiempo: los compiladores pueden generar código más eficiente, las librerías del lenguaje pueden ampliarse, … Las malas noticias: ¡los problemas también pueden empeorar! 🙂
El uso (y abuso) del lenguaje
Algunas características del lenguaje no son malas por sí mismas, pero pueden permitir o incluso alentar malas prácticas en la programación. Por ejemplo, veamos algunas críticas al lenguaje C. En C, la gestión de la memoria se realiza de forma manual: no se controla si se accede a una posición fuera de rango en un vector, es posible eliminar accidentalmente la marca de final en una cadena de caracteres, hay que controlar que no se accede a posiciones de memoria que se han liberado previamente, … No realizar estos controles permite generar un código muy eficiente, pero sin una buena disciplina por parte del desarrollador/a también abre la puerta a innumerables bugs y agujeros de seguridad. Como anécdota, el propio creador de C++, Bjarne Stroustrup, es autor de la siguiente perla:
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off.
Otro ejemplo de lenguaje que ha tenido su dosis de mala prensa es Visual Basic (aquí un club de fans… bueno, anti-fans). Pensado para facilitar el desarrollo de aplicaciones con interfaces gráficas, Visual Basic (pre .NET) no tenía un buen soporte a la programación orientada a objetos, factor que complicaba la organización del código en aplicaciones complejas. Combinado con otros factores como la eficiencia del lenguaje, críticas a sus sintaxis o los problemas de dependencias en el entorno Windows, Visual Basic reúne a un buen número de detractores.
Pues seré el único pero me encontraba más satisfecho con VB 6.0 (o puestos a añadir semejanzas, con 5.0) que ahora con VB.NET que se parece más a lo que esos «detractores» quieren.
Es más, los programas que hago aquí en casa para mis cosillas (una tonteria relacionada con un videojuego o algún año de estos un generador de apuestas de Euromillones) los hago en VB.NET, a falta de llegar a conseguir el Visual Cobol.
Pero bien, supongo que cuando nadas a contracorriente lees cosas como estas.
Hola Víctor,
Quizás el problema con VB 6.0 es que algunos pretendieron usarlo como una navaja suiza: para resolver todos los problemas. Hay proyectos para los VB es una elección excelente. Pero en otros no es la mejor elección… y esa reputación aún le sigue.
Un saludo.
Para mí, sin ninguna duda, PROLOG.
Es el infierno.
Pues Marc, no estás solo. En Facebook también hay un grupo de gente que lo «aprecia»: Prolog sucks.
Realmente Prolog es otra forma de pensar: mucha recursividad, todo son listas, hay que tener mucho cuidado con la unificación, debugar código puede ser auténtico infierno, etc. Aún así es un excelente lenguaje para determinado tipo de tareas, especialmente del ámbito de IA.
Aquí sugieres también un tema que no he mencionado en el artículo, la curva de aprendizaje: hay lenguajes que pueden ser más complejos de dominar que otros. Por ejemplo, para un programador habituado a los lenguajes imperativos, Prolog representará un reto mucho mayor que cualquier otro lenguaje imperativo.
Una de las 5 materias que tengo este semestre es precisamente IA. Hay un módulo, el último, en el que te enseña a programar en LISP. Viendo que no hay ningún ejercicio de programación en las 4 PAC’s, y que cuando le «eché un vistazo» vi tantos paréntesis que hasta dolía a los ojos, creo que ese módulo se quedará «en la trastienda» hasta que algún año de estos me decida por hacer mis propios bots de IA.
Supongo que es el problema de la costumbre. Que el primer lenguaje que tocara profundamente fuera VB (y el siguiente COBOL, también estructurado y no OOP) no ayudó para cuando me comenzaron a llenar la cabeza con las palabras «herencia», «clase», «atributos» para Java…
Yo difiero totalmente de los detractores de Prolog (incluido Marc ;P ). Comprendo la alergia que genera por ser tan alejado de los lenguajes iterativos, pero es tan… elegante. Como dice algún artículo, los lenguajes declarativos son (de hecho, «deberían ser») el «Caliz Sagrado» de la programación: el/la programador/a define cómo es el mundo, y un solver responde a las preguntas. ¿Qué más queremos? 😉
hola,
el peor es C++, sin duda, la paranoia personal de Bjarne Stroustrup, si hoy es martes, añado herencia múltiple…
lo que no sé es porqué no enseñamos Brainfuck, entonces ya no habría discusiones como ésta!!! El «Hello World!» es algo parecido a:
++++++++++[>+++++++>++++++++++>+++>+<<<++.>+.+++++++..+++.>++.<.+++.——.——–.>+.>.
saludos,
Julià
Yo siempre he dicho que el Visual Basic (pre-Net) es un lenguaje pensado para gente que NO quería aprender a programar. Y conozco BASIC desde la versión ROM de IBM. Siempre me ha parecido un lenguaje… no sé, un poco incoherente en la sintaxis de sus intsrucciones. Cierto que se puso algo de orden en VB5 y 6, pero aún así… Y en VB, el hecho de no poder hacer DLLs no registrables, es como una maldición gitana que te complica mucho el hecho de hacer aplicaciones «grandes». O eso pienso yo.
Considero que programar es mucho más que hacer un programa que haga (más o menos) lo que queremos que haga. Y esto se puede hacer en prácticamente cualquier lenguaje. Para mí, programar es escribir un código que, resumiendo mucho, sea fácil de mantener (sencillo, claro, evidente cuando se pueda), a ser posible bien documentado, por no hablar de la eficiencia (a menudo reñida con lo anterior)…
Creo que no conozco a nadie que haya trabajado profesionalmente en VB6 y cumpla esas condiciones. Puede que yo sea demasiado exigente, pero es lo que he visto.
Me he peleado con C (mucho), con C++ (menos), con COBOL (tal vez demasiado), con Java (menos de lo que me gustaría), con Pascal (hace tanto…)… y por supuesto con BASIC. Sinceramente, creo que BASIC (en todas sus versiones) es el peor de todos ellos.
Saludos, y buen fin de año.
tus argumentos sobre vb no son validos, ¿Probaste la ultima version de vb.net? si no lo has echo entonces no puedes hablar, es cierto que vb6 tenia sus problemas pero desde que existe .net no hay que recriminarle, entre c# y vb.net me quedo con vb.net y te aclaro que soy el mismo programador usando ambos. Manejo perfectamente las ultimas versiones de c# y vb.net, en materia de resultados es igual…en materia de productividad es vb.net mejor ya que no hay que apretar tantos malditos simbolos, y el codigo es mas legible….
Odiado: PROLOG
Amado: PHP, C++
Creo que ambos son de los lenguajes de programación más intuitivos que existen y para aprender a muchos nos vinieron tan bien que decidimos no salir de ellos.
a veces que pienso que los programadores c# que fastidian a vb.net, aprendieron a programar odiando desde su inicio. Yo aprendi con basic, luego con vb6 y ahora uso ambos. Yo aprendi sanamente y hoy puedo decir cual es mejor, en mi empleo uso c# porque me da de comer, es el laburo que consegui aunque trabaje 4 años con vb.net y yo siempre fui el mismo programador, solo crei en experiencia programando y no presumiendo la herramienta que elijo. Pienso que los que insultan a vb.net, insultan personas porque antes de aprender a programar aprendieron a odiar a nobles programadores que hacen la misma actividad.
Estoy de acuerdo en lo que se dice con respecto a odiar un lenguaje u otro, se hace parte de una pelea tonta. Por supuesto tengo mis gusto, programe en VB, VB.net y la verdad es que no me gustan, pero me gusta menos Java, y PHP. Honestamente no me siento a gusto con esos lenguajes, pero eso no los hace ser menos funcionales o que no los utilice. Los uso sin problema e intento hacerlo lo mejor posible. Pero me siento más comodo con Python, pero depende para hacer que, y es solo una cuestión de gusto… Lo importante es como programamos con las herramientas, y con algunas nos vamos a sentir más inspirados que con otras… Saludos…