41 puntos por GN⁺ 2025-01-06 | 3 comentarios | Compartir por WhatsApp
  • "Un experimento confuso que cambió mi forma de pensar sobre el análisis de código con IA"
  • Observó que las IA existentes fallaban con frecuencia al analizar codebases de React
  • Se dio cuenta de que la causa era un enfoque de análisis solo línea por línea, como cuando un desarrollador junior lee código por primera vez

La diferencia entre la época del bootcamp y la mentalidad senior

  • Cuando era junior, solía leer los archivos en orden, línea por línea, y a menudo perdía el rumbo rápidamente
  • Un desarrollador senior usa un enfoque como este al revisar PRs grandes
    • Revisa primero los archivos clave
    • Agrupa y entiende los cambios por funcionalidad
    • Primero comprende la arquitectura completa y después revisa los detalles de implementación
  • Decidió aplicar este enfoque a la IA

El experimento

  • Probó un método que agrupa archivos por funcionalidad y le da primero a la IA información de contexto sobre cada grupo
  • En el código de ejemplo, define la interfaz FileGroup y procesa los archivos agrupándolos según la funcionalidad relacionada y el tamaño del archivo
  • Construye prompts por grupo para indicarle a la IA “qué área funcional es y en qué debería enfocarse”

El momento del cambio sorprendente

  • Antes, la IA respondía de forma simple con algo como “incluye lógica de autenticación con tokens JWT”
  • Luego empezó a ofrecer observaciones al nivel de un desarrollador senior, como “el impacto en conexiones WebSocket y la posibilidad de condiciones de carrera con PRs fusionados recientemente”
  • La IA empezó a señalar problemas considerando el contexto completo del sistema

Lo que realmente cambió

  • La clave no fue usar un modelo de machine learning más complejo, sino darle a la IA el orden de pensamiento de un desarrollador senior
    1. Contexto primero: empezar por entender el sistema completo
    2. Pattern matching: agrupar archivos similares para encontrar lógica repetida
    3. Análisis de impacto: reconocer cómo los cambios afectan a todo el sistema
    4. Comprensión del historial: rastrear incluso las razones o el contexto de cambios pasados en el código

Efectos secundarios inesperados

  • En lugar de limitarse a corregir solo el punto deseado, también detectó insights como estos
    • Identificación de bloques de código duplicados por copy-paste
    • Alertas sobre patrones inconsistentes de manejo de errores
    • Detección de posibles cuellos de botella de rendimiento
    • Sugerencias de mejora arquitectónica según patrones de uso

Por qué importa

  • Los IDEs basados en IA recientes se están enfocando en generar código automáticamente
  • Pero hacer sugerencias simples sin el contexto de todo el sistema puede ser tan riesgoso como “un desarrollador junior que acaba de integrarse”
  • Lo verdaderamente importante es la “comprensión profunda del código”

Preguntas pendientes

  • El problema de decidir cuándo actualizar y cuándo mantener el contexto (información histórica)
  • Cómo responder cuando se detectan patrones que entran en conflicto entre sí
  • Cómo mostrarle al usuario resultados de análisis con alta incertidumbre

La dirección a futuro

  • Está pensando si también se le puede enseñar a la IA, como a un desarrollador senior, una intuición como la siguiente
    • Capacidad para detectar deuda técnica de forma anticipada
    • Capacidad para proponer activamente mejoras de arquitectura
    • Capacidad para detectar problemas de seguridad a partir de patrones de uso
    • Sensibilidad para identificar reglas informales dentro del equipo
  • El objetivo final no es simplemente generar “más código”, sino enseñar “cómo entender en profundidad todo el código como un desarrollador senior”

3 comentarios

 
savvykang 2025-01-06

¿No están bastante estandarizadas las preguntas que vale la pena hacer para analizar y mejorar una base de código? Parece que el autor está demasiado entusiasmado.

 
yangeok 2025-01-06

Parece estar en la misma línea que en Cursor te explican todo el proyecto en el bloc de notas.

 
GN⁺ 2025-01-06
Opinión de Hacker News
  • En los comentarios, la gente está siendo crítica. Este artículo trata un resultado breve y positivo sobre la posibilidad de una nueva herramienta, e incluye ideas honestas y razonables.

    • La narrativa de "Senior vs Junior Developer" puede haber sido algo exagerada, pero la esencia del artículo es excelente.
    • Me pregunto si la gente está reaccionando con enojo porque se siente amenazada.
  • Este es otro ejemplo de un LLM haciendo algo sorprendente. Sin embargo, construir un sistema que funcione de forma consistente y precisa para todas las entradas es muy difícil.

    • Hay un ejemplo de análisis de archivos de un sistema de autenticación.
    • Esta cadena hardcodeada cumple un papel importante, pero no tiene nada de especial hasta que pueda generarse con precisión y consistencia para todos los PR.
    • Hay que establecer una evaluación usando distintos codebases y PR reales.
  • Probablemente aquí haya lecciones para construir mejores sistemas de agentes para escribir código.

    • Se les indica a Claude/chatGPT y otros que no generen código. Se hace que escriban código solo después de generar la estructura inicial.
  • Leí la primera línea del artículo y me sentí como un extraterrestre. Tendría que leer el texto completo, pero eso de leer el código existente de forma secuencial me parece raro.

    • Hay muchas ideas equivocadas sobre lo que es un "junior developer".
  • Se enfatiza la importancia del factor humano. Sin una comprensión contextual del codebase, no se puede saber qué significan las alertas de la IA.

    • Es difícil entender qué son los "patrones compartidos" y por qué provocan condiciones de carrera.
    • No está clara la relación entre los cambios de autenticación y el PR de "lógica de reintento".
  • Es difícil evitar que la IA invente APIs que no existen. Cuando funciona bien, está bueno, pero la mayor parte del tiempo no funciona bien.

    • La IA funciona bien cuando mucha gente ya está escribiendo código que otros ya habían escrito.
  • El contexto y la comprensión del código son importantes para mejorar la calidad del código generado por LLM.

    • El producto de Bismuth divide el proyecto en áreas lógicas según la solicitud del usuario y recorre el codebase buscando información de símbolos.
    • Solo algunos productos de la competencia ofrecen un nivel de búsqueda como este.
  • Como en la queja de John McCarthy, esto es una historia, no un experimento ni una prueba.

    • Ojalá la comunidad use pensamiento crítico y criterio.
  • Los resultados son impresionantes. Hay críticas sobre el estilo y la uniformidad, pero el resultado parece útil.

    • Por el título, pensé que se trataría de una IA ignorando el trabajo de los demás y resaltando solo el suyo.
  • Parece que en el artículo falta una parte importante de esta técnica. No aparece la implementación de getFileContext() ni de shouldStartNewGroup().