Saltar al contenido
Programación

Prompts de IA para programar: depura, refactoriza y entrega más rápido

La IA es un gran compañero de programación si la instruyes como tal. Prompts para depurar, refactorizar, tests y revisión de código, más el contexto que los hace funcionar.

Ilustración de una persona desarrolladora usando prompts de IA para depurar y refactorizar código

Pídele a un modelo que "arregle esta función", pega veinte líneas y obtendrás una reescritura verosímil que puede tocar o no el bug real. Pídele lo mismo con el error completo, la entrada que lo dispara, la versión del framework y lo que esperabas que ocurriera, y normalmente tendrás el arreglo a la primera. La distancia entre esos dos resultados es toda la habilidad. Los buenos prompts de IA para programar no son conjuros ingeniosos. Son el mismo contexto que le pasarías a un compañero antes de pedirle que mire tu pantalla.

Así se construye ese contexto para el trabajo que de verdad hace quien programa: depurar, refactorizar, tests, explicaciones, andamiaje y la parte honesta en la que revisas lo que te ha devuelto el modelo.

El contexto que necesita todo prompt de programación

Los mejores prompts de IA para programar comparten una misma columna vertebral: contexto suficiente para que el modelo no adivine. No puede abrir tu repo, ejecutar el test que falla ni comprobar a qué versión de una librería estás fijado. Solo ve lo que pegas. Así que déjalo por escrito. Todo buen prompt de programación lleva cinco cosas:

  • Lenguaje y versión — "Python 3.12", no "Python". El comportamiento cambia entre versiones, y también las APIs a las que recurre el modelo.
  • Framework y su versión — React 18 frente a 19, Django 4 frente a 5, la línea fijada de tu lockfile. Solo esto elimina la mitad de las respuestas con APIs obsoletas.
  • El código real — la función de verdad, no una paráfrasis. Incluye a quien la llama si el bug pudiera estar ahí.
  • Comportamiento esperado frente al real — "debería devolver las sesiones activas del usuario; en cambio devuelve una lista vacía cuando el usuario tiene exactamente una".
  • Restricciones — sin dependencias nuevas, debe mantener la compatibilidad hacia atrás, tiene que correr en una Lambda con un límite de 512 MB.

Si te saltas la versión, recibes código para una API que cambió hace dos releases. Si te saltas el esperado-frente-al-real, el modelo se inventa su propia definición de "roto". Si un prompt parece poco específico y no sabes qué le falta, pasar un borrador por un optimizador de prompts saca a la luz los huecos enseguida.

Depuración: pega el error entero, no un resumen

El error más habitual es reescribir un fallo como "dice algo de undefined". Pega el stack trace completo. Los números de línea, la cadena de llamadas, el tipo de excepción: ese es el mapa. Luego dale al modelo una forma de reproducirlo.

Eres ingeniero sénior de Go. Un handler entra en panic bajo carga pero pasa los tests. LENGUAJE: Go 1.22 FRAMEWORK: net/http, solo librería estándar CÓDIGO: [pega el handler y la struct que muta] PANIC COMPLETO: [pega el stack trace completo, todas las goroutines] REPRO: Ocurre con ~50 peticiones concurrentes, nunca con 1. ESPERADO: El handler atiende cada petición de forma independiente. REAL: Panic intermitente "concurrent map writes". Explica la causa raíz antes de proponer código. Luego da el arreglo mínimo y dime qué añadir a la batería de tests para detectar este tipo de bug.

Pedir primero la causa raíz es deliberado. La depuración con IA se tuerce cuando el modelo salta a un parche que silencia el síntoma: un try/except envuelto alrededor del problema real. Fuerza el diagnóstico y podrás juzgar si el arreglo ataca la causa o solo el fallo. Para bugs enredados donde el razonamiento importa, un prompt de cadena de pensamiento que obliga al modelo a recorrer la lógica paso a paso pilla cosas que una respuesta de un solo tiro se salta.

Refactorización y revisión de código

Las peticiones de refactor vagas dan resultados vagos. "Limpia esto" invita al modelo a renombrar un par de variables y darlo por hecho. Di qué significa "mejor" para este código y marca límites para que el comportamiento no se desvíe.

Refactoriza esta función de TypeScript para que sea legible y testeable. RESTRICCIONES: - No cambies la firma pública ni la forma del valor de retorno. - Sin dependencias nuevas. - Conserva el comportamiento actual exactamente, incluidos los casos límite con null. CÓDIGO: [pega la función] Después de refactorizar: - Enumera cada cambio y por qué. - Señala cualquier cosa que no tuvieras claro si era intencionada (parece un bug frente a algo deliberado).

Esa última línea convierte un refactor en una revisión. A menudo el modelo señalará un error que se tragaba en silencio o un fallo de uno-en-uno que habías dejado de ver. Para una revisión pura, dile que actúe como revisor con una checklist —corrección, casos límite, nombres, seguridad— y que ordene los hallazgos por gravedad para que no te ahogues en detalles de estilo. Las técnicas avanzadas de prompting que vale la pena aprender aquí son la asignación de rol y la estructura de salida explícita. Ambas convierten el resultado de la revisión en algo sobre lo que puedes actuar.

Consejo: Cuando quieras un resultado de revisión legible por máquina —para volcar los hallazgos en un bot de PR o en un comentario del linter— pide datos estructurados. Un prompt JSON que devuelva {file, line, severity, issue, suggestion} es mucho más fácil de procesar que la prosa.

Tests que el modelo no puede falsear

Los modelos escriben tests rápido, y justo por eso hay que guiarlos. A su aire, prueban el camino feliz y afirman lo que el código ya hace, bugs incluidos. En su lugar, apúntalos al comportamiento y a los límites.

Escribe tests unitarios para esta función usando pytest. CÓDIGO: [pega la función] Cubre: - El comportamiento documentado (camino feliz). - Los límites: entrada vacía, un solo elemento, tamaño máximo. - Los modos de fallo: tipo inválido, None, datos malformados. - Una propiedad que deba cumplirse para cualquier entrada válida. NO afirmes el comportamiento actual si detectas un bug: dímelo. Usa asserts sencillos. Sin mocks salvo que la función haga I/O real.

Lee los tests antes de fiarte de ellos. Un test que pasa contra código roto es peor que no tener test. Si estás reescribiendo las mismas convenciones de testing en cada prompt, esa es la señal para guardar una instrucción reutilizable: mejorar tus prompts con el tiempo consiste sobre todo en convertir lo que funcionó en una plantilla a la que vuelves una y otra vez.

Explicar código que no escribiste

¿Has heredado un archivo de 400 líneas sin comentarios y con el autor ya fuera de la empresa? Un modelo explica realmente bien, siempre que le pidas la altura adecuada.

Explica este módulo a alguien que acaba de llegar al código. CÓDIGO: [pega el módulo] Dame: 1. Un párrafo: qué hace y dónde encaja. 2. Un recorrido por el flujo principal, función a función. 3. Cualquier suposición o efecto secundario no evidente. 4. Tres preguntas que debería hacerle al autor original.

El punto cuatro es el que más sorprende. Saca a la luz las suposiciones que sostienen el código, de las que depende pero que nunca dice en voz alta. Unos buenos prompts de programación para empezar el onboarding también preguntan "qué se rompe si cambio X", lo que traza el radio de impacto antes de tocar una sola línea.

Boilerplate, andamiaje y conversión entre lenguajes

Aquí es donde los modelos ahorran horas de verdad. Montar el andamiaje de un endpoint CRUD, un parser de configuración, una GitHub Action, un Dockerfile: trabajo repetitivo, muy trillado y con una forma conocida. Los mejores prompts de IA para programar de esta categoría nombran el stack exacto para que el resultado encaje sin reescribirlo.

Para las conversiones, trata al modelo como un traductor que necesita un glosario. Portar de Python a Go no es línea a línea; los modismos son distintos.

Convierte esta función de Python a Go 1.22 idiomático. PYTHON: [pega] Requisitos: - Go idiomático, no una transliteración: devuelve errores, no los lances. - Replica el comportamiento, incluido cómo maneja la entrada vacía. - Anota cualquier punto donde la semántica de Go obligue a una diferencia real respecto a Python.

Ese último requisito es el que más importa: un hueco semántico silencioso entre dos lenguajes es justo donde el código convertido te muerde semanas después. Si montas estos a menudo desde cero, arrancar de una base estructurada con un generador de prompts para ChatGPT o un generador de prompts para Claude es mejor que mirar una caja vacía. Muchos desarrolladores guardan una carpeta de prompts de ChatGPT para programar reutilizables, uno por cada tipo de proyecto.

Revisar lo que el modelo te devuelve

Cada línea que escribe una IA es una sugerencia, no una respuesta. Los modos de fallo son concretos, y conocerlos al dedillo es parte del trabajo:

  • Bugs de lógica sutiles — código que corre, pasa un test superficial y está mal en un caso límite que no probaste. Fallos de uno-en-uno, operadores de comparación dados la vuelta, condiciones invertidas.
  • Agujeros de seguridad — SQL concatenado con strings, entrada sin validar, un secreto hardcodeado en una constante, un verify=False que desactiva sin avisar las comprobaciones de TLS. Los modelos reproducen los patrones inseguros con los que se entrenaron.
  • APIs obsoletas — un método marcado como deprecated hace tres versiones, porque los datos de entrenamiento tiran a viejos. Por eso la línea de la versión en tu prompt se gana su sitio.
  • Librerías alucinadas — un paquete que suena plausible pero no existe, o una función que no está en la API real. Si no la encuentras en la documentación, da por hecho que no existe.

Ejecuta el código. Léelo como leerías el pull request de un desconocido, porque eso es lo que es. Quienes de verdad sacan partido a los prompts de IA para programar no son quienes se fían del resultado, sino quienes aportan contexto suficiente para conseguir un primer borrador sólido y luego lo verifican a fondo antes de publicarlo.

Referencias

Ponlo en práctica. Aplica lo que acabas de leer con nuestra herramienta gratuita: Optimizador de Prompts →
FAQ

Preguntas frecuentes

Pega el código real, indica el lenguaje y el framework, describe el comportamiento esperado frente a lo que ocurre y di qué salida quieres (un arreglo, una explicación, tests). Las peticiones vagas como 'arregla mi código' sin el código reciben respuestas vagas.
Tanto Claude como los modelos GPT manejan bien el código; el amplio contexto de Claude va bien para trabajar con archivos enteros o varios a la vez, mientras que GPT se integra a fondo con muchos IDE. Para la mayoría de tareas del día a día, el prompt importa más que el modelo.
Trátalo como el borrador de un compañero rápido pero falible. Léelo siempre, ejecútalo y prueba los casos límite. La IA puede introducir errores sutiles, patrones inseguros o APIs obsoletas, así que revísalo antes de publicarlo.
Dale el mensaje de error completo, el código relevante y los pasos para reproducirlo. Si aun así no da con ello, pídele que razone paso a paso o que enumere las causas probables antes de proponer un arreglo.

Escribe tu próximo prompt en segundos

Convierte una idea difusa en un prompt claro y estructurado que cualquier IA pueda seguir. Gratis, privado y sin cuenta.

Abrir el Optimizador de PromptsVer todas las herramientas