Un desarrollador que construye un reproductor de música personalizado, AMP, eliminó recientemente casi la mitad de su base de código para eliminar la complejidad introducida por los modelos de lenguaje de gran tamaño (LLMs). El proyecto, escrito en el lenguaje de programación Zig, se desarrolló inicialmente utilizando una suscripción a Claude Max 20x para generar funciones rápidamente, pero el autor encontró que las decenas de miles de líneas de código resultantes eran difíciles de revisar y mantener.

Una versión temprana de la interfaz del reproductor de música AMP con un tema oscuro.
Una iteración temprana del reproductor de música AMP que muestra el diseño inicial de la biblioteca de música y la visualización de letras.alichraghi.github.io

Esta imagen representa la fase de desarrollo inicial del proyecto antes de la importante refactorización manual.

Motivación para un reproductor personalizado

El proyecto comenzó como respuesta a los apagones de internet en Irán, lo que hizo que la transmisión de música en línea fuera poco fiable para quienes viven bajo regímenes restrictivos. El desarrollador buscó una alternativa fuera de línea a los reproductores existentes como Strawberry, que consideró que carecían de letras sincronizadas correctamente.

El objetivo para el nuevo reproductor, AMP, era crear una aplicación de sensación nativa con un conjunto mínimo de funciones y sin dependencias de C++. El desarrollador optó por usar Zig para todo el stack, incluidos los shaders de la interfaz de usuario, para mantener un enfoque consistente de programación de sistemas.

“Me sorprendió mi propia ignorancia y cuánto les gusta a los LLMs complicar las cosas.”

— How Not to Build a Music Player

El cambio hacia el desarrollo asistido por IA

Durante un período de conectividad restaurada, el desarrollador comenzó a experimentar con LLMs de vanguardia para acelerar el proyecto. Utilizó una suscripción a Claude Max 20x para generar una gran parte del código de la aplicación, un proceso que el autor describió como 'vibecoding'.

Si bien este enfoque proporcionó un progreso inicial rápido, dio lugar a una base de código que el autor consideró mentalmente abrumadora de auditar. El desarrollador señaló que los LLMs a menudo complican tareas sencillas, creando un 'slop' de código que era difícil de gestionar sin un historial claro de las iteraciones anteriores.

Restricciones de políticas y refactorización manual

El proyecto enfrentó un punto de inflexión cuando Anthropic prohibió la cuenta del desarrollador y Codeberg anunció una política de no-IA. Esto obligó al desarrollador a elegir entre mover el repositorio o eliminar todo el contenido generado por IA.

El desarrollador optó por reescribir manualmente cada línea de las secciones generadas por IA. Durante más de cuatro meses, eliminó casi la mitad de la base de código mientras aumentaba en realidad la robustez de la aplicación y añadía nuevas funciones. El autor concluyó que, si bien los LLMs pueden actuar como una 'función de IDE sofisticada' para comandos simples, pueden introducir una complejidad excesiva en proyectos más grandes.

Compensaciones técnicas y limitaciones

Una limitación significativa de esta transición es la falta de un historial previo a la reescritura. Debido a que el desarrollador no utilizó un sistema de control de versiones (como Git) para guardar el estado original generado por IA, no puede comparar objetivamente el 'slop' con el nuevo código manual.

La versión final de AMP (v0.1) incluye un shader de desenfoque escrito en Zig. El desarrollador ahora aboga por un enfoque de 'vieja escuela' para proyectos de aficionados, priorizando la supervisión manual para asegurar que el código siga siendo mantenible y comprensible.

La interfaz del reproductor de música AMP que muestra una biblioteca de música y controles de reproducción.
La versión final del reproductor de música AMP (v0.1) presenta una interfaz de sensación nativa con letras sincronizadas.alichraghi.github.io

Esta imagen ilustra el producto final de la reescritura manual del desarrollador, mostrando la interfaz de usuario y las funciones de la aplicación.

Qué dicen los lectores de Hacker News

  • Alternativa: Un comentarista sugirió que el uso de CDs físicos sigue siendo una solución fiable fuera de la red para la reproducción de música, señalando que son más resistentes a la corrupción de datos que los archivos digitales. comentario ↗
  • Experiencia: Un usuario compartió su experiencia con varios reproductores de música gratuitos, afirmando que muchas aplicaciones no logran ofrecer una mezcla (shuffle) real y, en su lugar, reproducen las canciones en un orden predecible. comentario ↗
  • Nota técnica: Un comentarista aconsejó que el uso de sistemas de control de versiones como Git habría permitido al autor preservar el historial del proyecto antes de la reescritura. comentario ↗

Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗