Es fácil pedirle a una IA que «mejore este código». Lo difícil es explicar qué debería mejorar, reconocer si la propuesta conserva el comportamiento y decidir si la nueva abstracción merece existir.
Esta selección conecta tres cosas: referencias para entender el diseño, ejercicios para practicar cambios pequeños y una forma de conversar con la IA que te obliga a pensar. Puedes empezar con programación básica; los ejemplos de patrones orientados a objetos se aprovechan mejor si conoces interfaces y composición.
No necesitas consumirlo todo. Elige una referencia y una kata, trabaja en un lenguaje que ya uses y guarda una pregunta para cada sesión: ¿qué problema resuelve este cambio?
Antes de empezar
Un patrón de diseño nombra una solución recurrente a un problema de diseño. Una refactorización cambia la estructura interna sin alterar el comportamiento observable. A veces una refactorización acerca el código a un patrón; otras veces lo mejora eliminando una abstracción innecesaria.
Para practicar, empieza con un repositorio pequeño, una forma reproducible de ejecutar las pruebas y cambios que puedas revisar por separado. Pídele a la IA primero una explicación del comportamiento y después una propuesta. El código generado es una hipótesis que debes comprobar.
Refactoring.Guru
Para entender patrones · Español · Guía visual
Abrir el catálogo de patrones de Refactoring.Guru ↗
El catálogo presenta patrones creacionales, estructurales y de comportamiento. Sus explicaciones y diagramas ayudan a relacionar la intención con la estructura de la solución. Es un buen punto de partida cuando conoces el nombre de un patrón, pero todavía no sabes reconocer su necesidad.
Práctica propuesta por Devy: lee Strategy y Adapter. Escribe un ejemplo en el que cada uno ayude y otro en el que añadirlo solo complique el código. Después compara tu razonamiento con una alternativa basada en funciones y composición.
Prueba este prompt:
Quiero entender Strategy, no memorizar un diagrama.
Dame un problema pequeño en mi lenguaje y una solución directa.
Introduce después un nuevo requisito que motive separar estrategias.
No escribas la solución todavía: hazme preguntas para que la proponga.
Al final, compara mi diseño con una alternativa más sencilla.
Patterns.dev
Para conectar diseño y desarrollo web · Inglés · Libro online
Esta referencia gratuita reúne patrones de diseño, renderizado y rendimiento para aplicaciones web. Sus ejemplos de JavaScript permiten explorar cómo se expresan los patrones en el lenguaje que usas, sin traducir automáticamente cada idea a una jerarquía de clases.
Práctica propuesta por Devy: empieza por Observer o Module. Implementa un ejemplo pequeño sin framework y escribe qué responsabilidad tiene cada parte. No trates las decisiones de rendimiento como si fueran patrones de objetos: atienden problemas distintos.
Este es mi ejemplo de Observer en JavaScript: [código].
Explícame quién publica, quién se suscribe y quién deja de escuchar.
Propón tres casos que podrían revelar errores en mi implementación.
Espera mis respuestas antes de sugerir cambios.
Catálogo de Martin Fowler
Para nombrar cambios concretos · Inglés · Catálogo de consulta
Explorar el catálogo de refactorizaciones ↗
El catálogo acompaña el libro Refactoring y permite buscar transformaciones por nombre y categoría. Es una referencia útil para pasar de «esto se ve feo» a una intención concreta, como extraer una función o introducir una cláusula de guarda. Las fichas online sirven como consulta; no sustituyen la explicación completa del libro.
Práctica propuesta por Devy: toma una función con demasiadas decisiones y aplica una sola transformación. Ejecuta las pruebas antes y después. Revisa nombres, flujo y responsabilidades, no solamente el número de líneas.
Analiza esta función sin reescribirla: [código y pruebas].
Señala un problema de legibilidad concreto y una refactorización pequeña.
Explica qué comportamiento debemos preservar y cómo comprobarlo.
No cambies la API pública ni añadas dependencias.
Gilded Rose Kata
Para practicar con código heredado · Inglés · Ejercicio en varios lenguajes
Abrir Gilded Rose de Emily Bache ↗
Esta kata parte de un inventario con reglas especiales y código que necesita mejorar. El repositorio ofrece versiones en múltiples lenguajes. Su valor está en comprender las reglas y protegerlas antes de transformar la implementación.
Práctica propuesta por Devy: elige una versión, lee sus instrucciones y ejecuta las pruebas disponibles. Añade casos que documenten el comportamiento actual antes de reorganizar el código. Si una regla es ambigua, hazla explícita: no dejes que la IA la invente.
Estoy trabajando en Gilded Rose. Estas son las reglas y mis pruebas:
[reglas, código y pruebas]
Actúa como revisor. Identifica comportamientos que aún no he cubierto.
Propón casos de entrada y salida; justifica cada uno con una regla.
No refactorices la implementación todavía.
Tennis Refactoring Kata
Para comparar decisiones de diseño · Inglés · Ejercicio
Abrir Tennis Refactoring Kata de Emily Bache ↗
El ejercicio trabaja con las reglas de puntuación del tenis y ofrece diferentes implementaciones. Un problema acotado permite dedicar la atención a los nombres, los condicionales y la separación de responsabilidades.
Práctica propuesta por Devy: mejora una implementación manteniendo sus resultados. Después explica cada cambio sin usar «más limpio» como argumento. ¿Qué regla resulta más visible? ¿Qué modificación futura sería más fácil? ¿Qué complejidad acabas de añadir?
Compara estas dos versiones de un marcador de tenis: [versiones].
Evalúa nombres, duplicación y facilidad para comprobar sus reglas.
No asumas que la versión con más clases es mejor.
Señala un caso donde cada versión resulte más fácil de entender.
GitHub Copilot Cookbook
Para trabajar la refactorización con IA · Inglés · Documentación oficial
Consultar las guías de refactorización de Copilot ↗
La documentación reúne ejemplos para mejorar legibilidad y mantenibilidad, aplicar patrones y separar responsabilidades. Si usas Copilot, te permite ver tareas concretas en su contexto. Nuestra recomendación es usar esas tareas como ejercicios con criterios de aceptación, en lugar de aceptar una reescritura completa de una vez.
Práctica propuesta por Devy: pide un plan antes del código. Limita la primera iteración a un cambio, inspecciona el diff y ejecuta las pruebas. Confirma que los tests comprueban los requisitos originales y que no se han cambiado para acomodar una regresión.
Objetivo: simplificar esta función conservando sus resultados.
Contexto: [lenguaje, código, requisitos y comando de pruebas].
Primero propón un plan de hasta tres pasos y sus riesgos.
Espera mi revisión. Luego implementaremos un solo paso cada vez.
Si no puedes ejecutar las pruebas, dilo explícitamente.
Una ruta para llevarlo a la práctica
- Entiende un problema. Lee un patrón en Refactoring.Guru o Patterns.dev y explica su intención con tus palabras.
- Protege el comportamiento. Elige Gilded Rose o Tennis. Ejecuta las pruebas y añade casos que falten según las reglas del ejercicio.
- Cambia una cosa. Consulta el catálogo de Fowler, aplica una transformación y revisa el resultado.
- Contrasta con la IA. Pide una alternativa y compara sus costes. Conserva el diseño que puedas justificar.
- Transfiere lo aprendido. Busca una situación similar en un proyecto propio. Si el problema no existe, no introduzcas el patrón.
El criterio se entrena
Al terminar, deberías poder explicar el problema original, qué comportamiento conservaste y qué decisión mejoró la comprensión del código. Las pruebas en verde aportan evidencia sobre los casos cubiertos; no demuestran por sí solas que dos programas sean equivalentes.
La IA puede ayudarte a generar contraejemplos, discutir alternativas y detectar huecos. Tu aprendizaje ocurre cuando puedes defender una decisión sin depender de la respuesta que te dio.
Los enlaces y las descripciones de los seis recursos se revisaron el 24 de octubre de 2026. Los ejercicios, la ruta y los prompts de esta entrada son propuestas editoriales de Devy; no forman parte del material original de cada recurso.