Programación

¿Acabaremos programando todos en ensamblador?

Un lenguaje de programación es un lenguaje que media entre el que nos es familiar a los humanos y el que reconocen las computadoras. Los lenguajes de alto nivel nos resultan más cómodos; los de bajo nivel, más crípticos. Todos conocemos, pienso, el trade-off.

Ahora todo el mundo programa en Python. Pero los hay que lo hacen de una manera rara:

Hay un nuevo tipo de programaciónn que llamo [Andrej Karpathy] “programación de vibraciones”, en la que te entregas por completo a las vibraciones, adoptas exponenciales y te olvidas de que el código existe. Es posible porque los LLM (por ejemplo, Cursor Composer con Sonnet) se están volviendo demasiado buenos. Además, solo hablo con Composer con SuperWhisper, por lo que apenas toco el teclado. Pido las cosas más tontas como “reducir el relleno en la barra lateral a la mitad” porque soy demasiado vago para buscarlo. “Acepto todo” siempre, ya no leo los diffs. Cuando recibo mensajes de error, simplemente los copio y pego sin comentarios; generalmente, eso lo soluciona. El código crece más allá de mi comprensión habitual, tendría que leerlo realmente durante un tiempo. A veces, los LLM no pueden corregir un error, así que simplemente busco alternativas o pido cambios aleatorios hasta que desaparece. No está tan mal para proyectos de fin de semana intrascendentes, pero sigue siendo bastante divertido. Estoy desarrollando un proyecto o una aplicación web, pero en realidad no es programación: solo veo cosas, digo cosas, ejecuto cosas y copio y pego cosas, y en general funciona.

Más ideas alrededor de la sentencia de lo del bono social de la luz

[En esta entrada abundo en lo escrito la semana pasada sobre el mismo asunto centrándome esta vez en la extraña interpretación que hace el derecho de la automatización, los algoritmos, la IA y todas esas cosas.]

I.

Comienzo con un par de historias que al principio podría parecer que no vienen al caso.

Realicé mi primera declaración de la renta allá por el 93. En esa época, uno iba a un estanco y por 45 pesetas adquiría un sobre grande en el que venían:

Ideas alrededor de la sentencia de lo del bono social de la luz

I.

En España se ideó un sistema para que los menesterosos disfrutasen de luz cuasigratuita al que se le dio el nombre de bono social eléctrico (o similar). Para recibirlo, el interesado tiene que acreditar una serie de hechos objetivos; luego, un algoritmo determinista —del que la ley y sus reglamentos son el seudocódigo— determina la procedencia o no del bono. Ese algoritmo se implementó en un programa llamado BOSCO.

Mnemo, la aplicación

Mnemo es una pequeña aplicación que he construido para ayudarme a recordar esas cosas que me consta que se me van a olvidar: palabras, conceptos simples, nombres de personas, etc. Externamente se ve como un canal (privado) de Telegram en el que un par de veces al día me aparecen notificaciones con un resumen de la cosa.

Internamente, es la combinación de tres cosas:

  • Una base de datos en Notion.
  • Un bot de Telegram.
  • Un workflow de n8n que corre en mi servidor local y que orquesta todo el proceso.

La base de datos la actualizo manualmente. Cada vez que tropiezo con algo que merece la pena ser recordado, añado un registro con información básica: un rótulo, una breve descripción, un enlace para indagar más.

Acciones "disparadas" por chatGPT (y sus verdaderos peligros)

Para la inmensa mayoría, chatGPT es lo que su nombre indica: un chat. Le preguntas y te responde. Pero lo siguiente es un ejemplo de algo perfectamente factible hoy.

  1. Creas un programa que monitorea tu bandeja de entrada.
  2. Cuando llega un correo nuevo, le pasa el texto a chatGTP (versión API) con un prompt adecuado.
  3. Dependiendo de la respuesta, se toma una determinada acción. Por ejemplo, enviar un aviso vía Telegram.

Por ejemplo, el propmt podría ser algo así como:

Código para resolver "wordles" en español

Este soy yo hoy mismo:

Este es mi script:

carlos@tiramisu:~$ wordle señor
Intento 1 -> seria

   Quedan 2 opciones.
   Las más populares son:
     señor : 228.79
     segur : 0.23

Intento 2 -> señor

Solución en 2 intentos: señor

Mi pequeño script tiende a ganarme. Lo cual me satisface enormemente.

En caso de que a alguien le interese, puede bajárselo de aquí. Existen dos versiones que implementan el mismo algoritmo, una en R y otra en Python. Las instrucciones de uso están en el repo.

Programación: aspectos sicológicos

Esta entrada tiene una doble (o triple) motivación. Por un lado, servir de de introducción a otra en la que se tratará la sicología de la estadística y la ciencia de datos. Por otro, plantear una serie de cuestiones —sin intención de aportar solución alguna— relevantes sobre el asunto. Y si se me permite, una tercera: dejar constancia que en su día semileí el librito The Psychology of Computer Programming, que fue el que me ha hecho pensar de vez en cuando sobre estos asuntos y prestarles atención desde entonces.

Mi apuesta para el larguísimo plazo: Julia

  • Larguísimo, arriba, significa algo así como 10 o 20 años. Vamos, como cuando comencé con R allá por el 2001.
  • R es, reconozcámoslo, un carajal. Pocas cosas mejores que esta para convencerse.
  • No dejo de pensar en aquello que me dijo un profesor en 2001: que R no podría desplazar a SAS porque no tenía soporte modelos mixtos. Yo no sabía qué eran los modelos mixtos en esa época pero, desde entonces, vine a entender y considerar que “tener soporte para modelos mixtos” venía a ser como aquello que convertía a un lenguaje para el análisis de datos en una alternativa viable y seria a lo existente. Y mirad esto.
  • Obviamente, lo de los modelos mixtos no es más que una metáfora. Realmente significa algo así como “el sistema X tiene muchas cosas y su alternativa, Y, es un mero juguete”. Pero no hay nada que impida que Y comience a implementar todo aquello que le falta. Además, mucho más rápida y eficientemente. P.e., ¿cuánto tardó R en dotarse de su gramática de los gráficos? Pues bien, Juilia ya los tiene. (¿Cómo se dice leapfrog en español?)
  • Dicho de otra manera, R ha sido el estado del arte en computación estadística en los últimos años. Ha avanzado por prueba y error. Pero ahora, cualquier rival ya sabe qué tiene que hacer exactamente para llegar a donde está R.
  • Julia corre sobre LLVM. Es decir, que se beneficia automáticamente de cualquier mejora realizada sobre la máquina virtual (si es que se me permite llamar así a LLVM).
  • Esta semana he estado programando en C unas rutinas que tienen que ser llamadas desde R. Pero, ¿no sería el mundo más hermoso no tener que cambiar de lenguaje para tener rendimiento de C?
  • Arriba comparo R y Julia como extremos de un arco (en el que a la izquierda de R quedan aún irrelevancias como SAS o SPSS). Python ocupa una posición intermedia entre ambos. Desde un punto de vista meramente técnico, si alguna dimensión es Python mejor que R, Julia es todavía mejor que Python. Salvo, de nuevo, la cantidad de flecos y cascabeles de los que ya dispone Python y que todavía no están presentes en Julia. Pero, como se ha dicho arriba, desde la perspectiva del larguísimo plazo, es una objeción irrelevante que apunta a un estado transitorio de las cosas.

Y supongo que podría seguir.

¿Modelos para ordenar datos?

Ayer leí este resumen de este artículo que propone y discute un algoritmo novedoso y basado en ciencia de datos para ordenar datos y hacerle la competencia a quicksort y demás. Reza y promete:

The results show that our approach yields an average 3.38x performance improvement over C++ STL sort, which is an optimized Quicksort hybrid, 1.49x improvement over sequential Radix Sort, and 5.54x improvement over a C++ implementation of Timsort, which is the default sorting function for Java and Python.