36 puntos por GN⁺ 2025-01-08 | 1 comentarios | Compartir por WhatsApp
  • Un texto que resume la experiencia de programar con LLM (modelos de lenguaje de gran tamaño) durante el último año
  • Los LLM aumentaron la productividad, y sería difícil volver a programar sin usarlos
  • El enfoque está puesto principalmente en el entorno de programación de Go, mientras se desarrolla una herramienta llamada sketch.dev

Antecedentes

  • Todo comenzó por curiosidad hacia una tecnología nueva.
  • Fascinó la capacidad de los LLM para generar respuestas complejas a preguntas o escribir código de programación
  • Hacen sentir un nivel de interés y posibilidad parecido al de cuando apareció internet por primera vez
  • Se comprobó el beneficio neto de que la herramienta genere código “mayormente correcto”, y se buscó aprovecharlo de forma práctica

Principales casos de uso

  1. Autocompletado (Autocomplete)

    • La productividad mejora al resolver con autocompletado tareas de programación que se repiten con frecuencia
    • En especial, los modelos FIM (Fill-In-the-Middle) son indispensables para el trabajo cotidiano
  2. Reemplazo de búsqueda (Search)

    • Responde preguntas específicas de programación (por ejemplo, cómo configurar la opacidad de un botón en CSS) con más precisión que un buscador
    • Aunque las respuestas del LLM pueden ser incorrectas, se usa aceptando esa limitación
  3. Programación guiada por chat (Chat-driven Programming)

    • Es el área más difícil, pero también la más valiosa.
    • Se encarga de tareas iniciales como crear archivos nuevos o buscar librerías.
    • El objetivo de la programación conversacional es reducir las incomodidades actuales y hacer que las capacidades del LLM sean más amigables para el usuario

Lo esencial de la programación conversacional

  • ¿Por qué usar conversación?

    • Es útil para producir un primer borrador cuando baja la energía a lo largo del día
    • Ver y corregir un borrador inicial es más eficiente que escribir todo desde cero
  • Forma de trabajar con LLM

    1. Establecer un objetivo de trabajo claro y conciso
    2. Leer, verificar y corregir el código
    3. Aprovechar los errores del compilador para resolver problemas rápidamente
  • Escritura efectiva de pruebas

    • Los LLM son entusiastas al escribir pruebas y pueden construir un entorno de testing más exhaustivo
    • También pueden extenderse más allá de las pruebas basadas en ejemplos hacia fuzz tests

Ejemplo: muestreador de cuantiles

  • Objetivo: escribir en Go un algoritmo que muestree cuantiles de un flujo de datos
  • Proceso
    1. Redactar un primer borrador con ayuda de un LLM
    2. Mejorar el código corrigiendo errores de compilación
    3. Reescribir el código de pruebas para crear una estructura más fácil de leer

Posibilidades de una nueva estructura de código

  • Paquetes más pequeños, más pruebas

    • Los paquetes pequeños aportan un contexto de código más claro y son más útiles tanto para LLM como para personas
    • Aumentan la posibilidad de hacer pruebas independientes y compilar con éxito
  • Ejemplo: envoltorio de API

    • Se recomienda usar un envoltorio delgado que implemente solo lo necesario en lugar de una librería oficial de gran tamaño
    • Reduce los costos de mantenimiento y aprendizaje

Dirección futura: sketch.dev

  • Un IDE de Go para LLM
    • Ofrece un entorno de programación centrado en LLM
    • Soporta retroalimentación automática de pruebas, corrección de errores del compilador e integración con módulos de Go
    • Refuerza la colaboración entre personas y LLM para ofrecer un entorno más productivo

1 comentarios

 
GN⁺ 2025-01-08
Opiniones en Hacker News
  • El autor ya es un ingeniero de software de nivel mundial, ex empleado de Google y cofundador/CTO de Tailscale. Resulta impresionante que los LLMs lo hagan más productivo.

    • Los LLMs son útiles al redactar borradores de ideas nuevas.
    • Antes se obtenían implementaciones de bases de datos, pero ahora los LLMs las generan en tiempo real.
  • Los LLMs reducen la energía inicial necesaria para una tarea.

    • Bajan la barrera al probar cosas nuevas.
    • No tienen profundidad a nivel humano, pero sí un conocimiento amplio.
    • Son útiles para quienes programan en distintas áreas.
  • Al usar LLMs, solo deberían usarse en áreas que uno conoce bien.

    • Solo ahorran tiempo cuando puedes identificar fácilmente lo que está mal.
    • Ayudan con la búsqueda.
  • Los LLMs tienen potencial como herramienta de desarrollo de software.

    • sketch.dev ofrece ejemplos limpios desde el primer intento.
    • Se necesitan LLMs entrenados de acuerdo con la documentación oficial del lenguaje.
    • La humanización de los LLMs resulta incómoda.
  • Es similar a usar un motor de búsqueda.

    • Es importante usar las palabras clave adecuadas.
  • Se percibe una falta de entusiasmo por usar LLMs.

    • Disfrutan el proceso de programar directamente.
    • Los LLMs pueden aumentar los costos.
  • Para las personas que no son programadoras, los LLMs son de gran ayuda.

    • Reducen mucho el tiempo para escribir código.
    • Son útiles para proyectos personales.
  • Los LLMs son útiles para escribir aplicaciones simples.

    • Si se describe un producto mínimo viable, pueden generar código.
    • La deuda técnica puede acumularse rápidamente.
  • Los LLMs ayudan a quienes programan como hobby.

    • Ayudan a configurar la estructura del proyecto y a generar código.
    • Pero pueden surgir problemas por instrucciones ambiguas.
  • Los LLMs se usan principalmente para autocompletado y búsqueda.

    • ChatGPT es útil para optimizar código existente.