¿Es Python un lenguaje en extinción? Un amigo de mi abuela es informático del MIT. Me dijo que no debería aprender Python porque es un lenguaje moribundo, y que debería aprender Assembly porque es mejor que Python.

Hype

No. No está muriendo. Está al final de su fase de hype.

Mira, hay más de 100 respuestas a tu pregunta pero hasta donde pude leer ninguna de las respuestas apuntaba a este importante factor: el hype.

Python tiene fortalezas y debilidades. Como lenguaje informático está diseñado para deletrear problemas a un ordenador de forma que pueda entender y ejecutar las soluciones. El punto fuerte de Python es la creación rápida de prototipos de problemas complejos. Su debilidad es la velocidad, la eficiencia y la disminución radical de ambas si los problemas se hacen cada vez más grandes, así como tiene problemas masivos, si los datos que tiene que manejar se hacen más grandes que un tamaño trivial. Y lo trivial hoy puede convertirse en gigas.

Competencia

Python es un lenguaje de scripts. Tiene su lugar en el nicho de los usuarios, donde lucha con Perl, Ruby, Bash, Zsh, Lisp y Lua. Ha sustituido el uso de Basic en el entorno informático moderno. Tal vez haga mejor el trabajo de Basic, o tal vez no. Yo creo que no, porque Basic sigue siendo el factor 30 más rápido. Pero el aumento de los lenguajes de scripting se debe principalmente al alto factor de la ley de Moore de los años hasta el 2004, donde la ganancia de velocidad era de alrededor del 50% cada año. Desde 2004 se está ralentizando a sólo un 10% al año y esto lo cambia todo.

Con el metal haciendo el trabajo de hacer los programas más rápidos por sí solo, no había mucha necesidad de una fase de optimización de un proyecto en los últimos 20 años. Y fue el auge de los scripts. Pero eso cambia ahora.

Es, de hecho, un cambio de juego, donde el uso de VHLL como Python u otros scripts será reemplazado cada vez más por lenguajes no prototipo pero máquina cerca de soluciones como C y Asamblea. El auge del ensamblador es también una advertencia para todos los que no creen en esto. Ha empezado a atraer a más y más gente, porque si ahora quieres una ganancia de velocidad de tus programas, tienes que cambiar a algunos lenguajes reales. Y con lenguajes reales me refiero a la clase de C y ASM y no tiene mucha competencia en su campo.

Pero Python no está muriendo. Un downsize en su uso al campo, donde es bueno no está muriendo, está al final de su ciclo de Hype.

main-qimg-15c4f067c8cace904f582edcd4e5d9d2

Debilidades

Verás, Basic era y sigue siendo un lenguaje muy bonito y es mucho más fácil de aprender que Python. Tiene un nivel de estandarización pobre, pero como lenguaje para principiantes Basic es mucho más fácil de aprender. Pero Basic siempre tuvo el olor de diletantismo con él, porque muchas personas sin educación formal de CS y sólo un conocimiento superficial de la programación lo estaban utilizando. La aplicación típica era en hojas de Excel por ejemplo.

Pero ese es el típico lenguaje de scripting a nivel de usuario. Donde Python también ha marchado, por decir algo.

¿Así que Python está muriendo? No. Y veremos programas en Python durante mucho tiempo, que tantos proyectos trabajan con ese lenguaje. Pero su competencia empezará a explotar su debilidad para quitarle sus baluartes, que de momento ostenta.

En un mundo, donde el 60% de los licenciados en CS, incluso, no saben programar, son necesarios algunos lenguajes sencillos, de nivel infantil, como el Basic. Lo malo es que Python no está en el nivel infantil donde está Basic. Pero intenta cosechar el mismo reino. Y por eso digo que Python no está haciendo un buen trabajo.

Critiqué su uso en la Raspberry Pi por ejemplo. Because a simple loop isn’t doing what it should.

  1. for i in range(1,10): print i 

will produce the numbers 1…9. Sí, eso no es muy intuitivo. A Basic

  1. for i=1 to 10: print i: next 

will produce 1…10 like you would expect.

This funny behavior of Python comes from the idea, that an array of size ten will be numbered from 0 to 9, but that’s quite a brainfart, I think. Porque si cuento del 1 al 10, quiero contar del 1 al 10, no del 1 al 9. Es una forma muy peculiar de resolver este problema, al menos. El problema se resuelve en Lua, por cierto, numerando los arrays del 1 al 10 para un array de tamaño diez. Lo cual es una forma mucho mejor de abordar el problema, en mi opinión, la forma correcta de alto nivel para contar los elementos de un array, ¿no?

Y estos son los factores que hacen que Python baje de su fase de hype a algo donde otros pueden atacar su posición. Ruby lo hace, C#/Mono lo hace por ejemplo, así como el viejo rey de la colina Perl, nunca subestimes el poder de Perl y el ensamblaje en línea que puede hacer. Perl es brutal. Volviendo a los arrastrados Ruby y C#, no es que ambos lenguajes sean mejores en ello, pero empiezan a arrastrar. Los lenguajes de shell scripting como Zsh y Bash también están arrastrando su posición, por cierto. Mucha gente comenzó a escribir programas reales en Zsh, es decir – wtf? Los profesores afirman que lenguajes como Haskell o Scala son más «puros», lo cual me parece una idea terrible. Típicos lenguajes a nivel de profesor sin alcance de aplicación real. Lenguajes de paradigma ideológico los llamo yo, lenguajes que prohíben más de lo que permiten. Con eso Python es mucho mejor, Python permite muchas cosas que los profesores odian. Lo cual es bueno. Hace un lenguaje fácil y simplifica la ortografía de los problemas. Puede lanzar algunos bugs desagradables, pero ese no es el problema aquí. Buscamos un lenguaje fácil. Fácil y seguro está en el extremo diferente de la línea.

Pero la verdadera caída viene con aplicaciones recodificadas en C/ASM. Que superarán a las soluciones en Python por un factor de 30 a 100. Tal vez incluso más alto. Y ASM está en alza, sube más rápido que Python en este momento, que está parado y ha tocado techo, diría yo. Basic está volviendo con .NET, que acabo de ver y no me sorprende. Pero creo que no es Visual Basic sino más bien algo como Gambas donde vemos el futuro de Basic. No tendrás un .NET hinchado en dispositivos más pequeños como la Raspberry Pi, donde Gambas, de hecho, está funcionando de forma excelente. Pero, sí, está volviendo.

Por cierto, no doy demasiado en el índice de Tiobe, pero no hay demasiadas estadísticas para esto de otra manera. Por ejemplo Tiobe se equivoca mortalmente con C.

Pero el bajo nivel de educación de los programadores de bibliotecas para Python, pues mucho para Python es hecho por programadores no profesionales, por ejemplo en el campo de la ciencia, la eficiencia de las bibliotecas y la práctica de codificación es pobre en comparación con C por ejemplo.

Es un lenguaje para principiantes y se obtiene un montón de cosas de biblioteca de mierda para principiantes con eso. Es un problema y todo programador de Python lo sabe. Yo hice Python comercial y fue lo primero que descubrí. Muchas bibliotecas no significa muchas bibliotecas buenas. He visto cosas peores, la mierda de Java por ejemplo es la peor. Eso sí que es una mierda, Python no es tan malo pero es bastante malo.

Yo llamo a algunas bibliotecas malas código «estilo arquitecto» en contraste con código «estilo ingeniero». No quieres vivir en una casa que fue construida por un arquitecto y que nunca ha visto las habilidades de un ingeniero. Confía en mí en eso.

Python es un lenguaje prototipo y esto lo puedes ver en las librerías.

Fuertes

Aún así, muchos científicos de otros campos distintos al de la informática, que tienen que programar también, están eligiendo Python para sus proyectos. Y no es una mala idea. Porque hay muchas librerías por ahí para biología por ejemplo, Numpy para numérica, para algoritmos genéticos está el paquete DEAP y todo eso está muy bien. Python es el nuevo Basic. Toda esa gente que necesita soluciones programadas pero no son programadores, nunca se han sumergido en el tema toman un lenguaje fácil, que les proporciona muchas de las estructuras de programación superiores, para que simplemente puedan usarlas, para que no tengan que romperse la cabeza.

También con Django tiene un pie en la puerta de la Web. Todavía hay algunos problemas de limitación con ese marco Django y la gente tiene que poner un montón de trabajo en eso.

Esto lo digo con prototipos rápidos. Los proyectos de Python como iPython y iPython3 soportan este aspecto de prototipado muy eficientemente.

Python no está muriendo. Pero recibe una paliza en este momento y le cuesta mantener su posición de «Rey de la Colina».

Lenguajes de scripting mejores y más delgados

Mi lenguaje de scripting favorito personal, por cierto, es Lua. Porque creo que con sólo unos 100kb de sobrecarga para ese lenguaje no es tan arrastrado y acaparador de memoria como lo es Python (¡Java es peor! Evité hablar de Java, para evitar un despotrique), Lua hace todo lo que un buen lenguaje de scripting debe hacer, pero tiene sus límites, donde realmente necesita que algunos lenguajes reales como C o ASM se encarguen del trabajo pesado. Lua es fácil de importar a cualquier proyecto C. Sólo unos pocos comandos y puedes controlar/configurar a través de Lua. Y 100k es un precio que suele merecer la pena pagar.

Es muy rápido y eficiente para un lenguaje de scripting y me gustaría ver más en el futuro. Es fácil de aprender, tiene un límite incorporado en la funcionalidad que tiene que ser mejorado por los lenguajes duros y es pequeño y rápido.

Todo lo que un buen lenguaje de scripting debe ser. ¿Python? Tiene debilidades, debilidades muy catastróficas y con las CPUs en un punto casi muerto de desarrollo en este momento todo el progreso que pueda tener sólo es capaz de lograr sobre el uso de lenguajes duros de nivel de máquina como «C». Duro, no me refiero a difícil de aprender, sino duro como el metal.

Y hasta en la Raspberry Pi la gente empieza a cambiar de momento.

Python no está muriendo. Ni mucho menos. Pero caerá durante un tiempo y luego empezarán a usarlo de verdad, donde tenga sentido. Y no sólo en todas partes y su madre.

Aquí los problemas de rendimiento a nivel empresarial con Python: Por qué CCP sigue usando Python 2

Mejores lenguajes de nivel principiante

Para los lenguajes de nivel principiante ya mencioné Gambas, al que se le debería dar un poco más de amor por la documentación en mi opinión, para impulsarlo. Me encanta el lenguaje Scratch para principiantes, pero tristemente es una porquería orientada a Flash, pero la idea es bastante buena, así que deberías echar un vistazo a Snap!, Blockly, o Stencyl y el lenguaje Logo de toda la vida.

main-qimg-dea4828ff0f3df1e4b5c8273410c4a00

Y dale un vistazo serio a Gambas, por favor. Los lenguajes de aprendizaje orientados a los bloques son muy bonitos, de hecho. Encontré esos lenguajes en acción para los niños de mi antiguo colegio, niños de diez a doce años programando robots con eso, que andaban por todos los pasillos y estoy seguro que el profesor no lo permitía para nada. ¡Pero se divertían mucho con eso! Sí.

Hay lenguajes para todos los propósitos que a un humano se le puedan ocurrir. Describir todo tipo de problemas o aplicaciones a un ordenador. Y algunos lenguajes son realmente mejores con eso que Python. Deberías aprender al menos tres lenguajes en tu vida: un lenguaje de unión del tipo scripting como Python, Lua, lo que sea, un lenguaje metálico como C y supongo que un lenguaje ensamblador. Sólo para tener una idea de lo que realmente se hace en los ordenadores. Los niños a menudo han perdido la conexión con el metal a través de toda esta mierda de alto nivel que se interpone en su camino de la curiosidad y todos esos lenguajes a nivel de profesor que tratan de prohibirles hacer cosas, dictándoles que ciertas cosas son malas sin probarlo nunca. Sin dejarles tener su propia experiencia.

Y eso es lo que quieren tener los chavales: experiencia propia.

Experiencia y conocimiento limitados

Y por eso los paternales HLL están en un punto muerto y de repente unos jóvenes revoltosos vuelven a salir con Assembly y destrozan la mierda hinchada de sus padres y profesores. Como aprendimos las técnicas de ingeniería inversa crackeando juegos sencillos en nuestros ordenadores infantiles y luego salimos a la naturaleza y rompimos VAX y PDP-11 y otros mainframes con las mismas habilidades que obtuvimos de eso – escandalizando a los administradores de sistemas adultos que todos afirmaban que sus sistemas eran «seguros». Mentira. Nunca subestimes el poder anárquico de un niño curioso. Aprenderán que algunas de las porquerías hinchadas están haciendo un buen trabajo en algunos problemas, pero en general tienen razón, creo:

Vayan y derriben al Rey de la Colina, niños. Arrastrad las falsas suposiciones y el rendimiento cojo, sustituidlo por algo fresco y nuevo y magro e inteligente. HLL es para gente mayor. Tengo un amigo en sus 20 años iniciales que realmente odia Scratch. Y entiendo por qué. Scratch es la forma en que los profesores trataron de forzarlo a la computación. Scratch le oculta toda la verdad y sus programas eran como factor 1000 o 10000 más lentos que los programas de los adultos. Un niño quiere al menos ser tan bueno. Y puede serlo!

¡No me malinterpretes, me encanta Scratch! Si lo ves te tiene que encantar. Pero los niños quieren más que eso. Al menos yo quería más de pequeño. Y hay que darlo. Python es una especie de Scratch en cierto modo.

Scratch está muy bien y me encanta para mostrar a los niños cómo funciona. Pero después de eso, es el momento de abrir el capó y ver lo que realmente ocurre dentro. A mí me pasó lo mismo en su día con el Commodore Basic V2. Lo disfruté durante una semana de entusiasmo, descubrí que mi competencia era mucho mejor y más rápida y no fui capaz de acercarme a ella, pero quise hacerlo: así que aprendí ensamblador después de una semana.

La revolución de los jóvenes

Y eso es también la «muerte» de Python. Los chavales querrán aprender más sobre informática. Querrán echar un vistazo bajo el capó. Y descubrir cómo pueden hacer estragos en el código de su padre.

main-qimg-592c08635e38e6d8033644342791d9e2.webp

Cómo hacer que se sienta orgulloso. «Mira, papá, he hecho tu programa en mi Raspberry Pi y soy como diez mil veces más rápido que tu programa». Y sonreirá y su padre estará tan orgulloso de su hijo, que casi explotará.

El ASM es el verdadero lenguaje revolucionario de nuestro tiempo. Y mucha gente no puede ver por qué. Pero es tan fácil: un niño quiere que su padre esté orgulloso de él. Que le reconozcan que es igual, que es útil. Para hacer algo mejor de lo que ellos pueden hacer.

Y eso es lo que representa ASM y Python no tanto -si no se trata de prototipos, quiero decir.

El Terminator no tenía código Python en su visual, no tenía LISP ni siquiera C. Era Assembly MOS6502. Y eso es lo que quieren los niños, nada menos. No quieren un programa de lavado con un litro de suavizante. Al menos no aquellos, que quieren cambiar las cosas. Y para poder cambiar las cosas, necesitas el poder para hacerlo. Y no vas a conseguir la potencia por algo que es demasiado lento para un cambio.

ASM permite a la Raspberry Pi hacer reconocimiento visual por OpenCV. Eso está codificado y funciona mejor en algo pequeño como la Raspberry Pi que en mi PC de escritorio más de 600 veces más rápido. ¿Adivina por qué? Porque cosechan lo que hay en lugar de desperdiciar todo el potencial por algún paradigma cuestionable, en cambio lo cosechan. Tal vez eso esté mal. Pero son los niños los que deben averiguarlo. Y mi apuesta es por ellos no por Python.

Y aunque se equivoquen y fracasen en mostrarnos su poder, aprenderán probando que más de diez años en la universidad pueden. Porque sus profesores son analfabetos de ASM y muchas veces no saben realmente de qué hablan, cuando hablan de lenguajes ensambladores. O resulta que ignoran el precio que hay que pagar por cualquier lenguaje de alto nivel. Y un precio que hay que pagar por ser perezoso.

main-qimg-c54155bb6cecff9457299265868f03e2