Código Limpio
Escribe código legible y mantenible que otros desarrolladores amarán.
47 lecciones
Organización de Clases
Las clases deben ser pequeñas, enfocadas y tener una única razón para cambiar.
La Mentalidad del Código Limpio
Por qué el código limpio es una disciplina profesional — y cómo el código sucio destruye silenciosamente equipos y empresas.
Estrategias de Concurrencia Limpia
Escribe código concurrente que sea correcto, legible y libre de sutiles errores de carrera de datos.
Manejo Limpio de Errores
El manejo de errores es una preocupación separada — mantenla aislada para que tu algoritmo principal sea legible.
Pruebas Unitarias Limpias
Las pruebas son código de primera clase — las pruebas sucias son tan costosas de mantener como el código de producción.
Heurísticas de Comentarios
Identifica y elimina los malos comentarios; escribe el raro bueno con precisión.
Concurrencia: Modelo Cliente-Servidor
Estructura sistemas concurrentes cliente-servidor para aislar el estado compartido y evitar sutiles errores de hilos.
Concurrencia: Deadlock y Inanición
Reconoce y elimina las cuatro condiciones que producen deadlock en sistemas concurrentes.
Interbloqueo: Las 4 Condiciones
Un interbloqueo requiere las cuatro condiciones de Coffman simultáneamente — rompe cualquiera y el interbloqueo se vuelve imposible.
Concurrencia: Pruebas con Jiggle
Las condiciones de carrera se esconden en brechas de tiempo — agitar el orden de ejecución con yields aleatorios y ejecuciones multiplataforma las expone.
No Te Repitas
🔒Cada pieza de conocimiento debe tener una única representación autorizada en el código.
Duplicación y Abstracción
🔒Reconoce la duplicación oculta y elige la abstracción correcta para eliminarla.
La Filosofía 5S en el Código
🔒Cómo la filosofía 5S de manufactura de Toyota se traduce en artesanía de software profesional.
Análisis de Frameworks
🔒Entiende lo que hace un framework antes de usarlo — lee el código fuente, no solo la documentación.
Heurísticas de Funciones
🔒Aplica las heurísticas F1–F4 para mantener las funciones mínimas, enfocadas y sin efectos secundarios.
Niveles de Abstracción y Dependencias
🔒Mantén la política de alto nivel separada del detalle de bajo nivel, y asegura que las clases base nunca dependan de las derivadas.
Coherencia y Claridad
🔒Aplica el mismo patrón en todas partes, evita el desorden conceptual y nunca acoplas preocupaciones no relacionadas.
Convenciones y Números Mágicos
🔒Sigue los estándares de codificación del equipo de forma religiosa y reemplaza cada literal mágico con una constante nombrada.
Entorno y Verdad
🔒Construye sistemas que compilen en un paso, ejecuten todas las pruebas en un paso, y nunca mientan a través de advertencias suprimidas.
Expresividad y Algoritmos
🔒Usa variables explicativas, nombres precisos y un profundo entendimiento del algoritmo para que el código hable por sí mismo.
Envidia de Características
🔒Un método que pasa la mayor parte de su tiempo leyendo los datos de otra clase pertenece a esa clase.
Lógica y Polimorfismo
🔒Haz explícitas todas las dependencias y reemplaza las cadenas if/switch con despacho polimórfico.
Ruido y Organización
🔒Elimina información excesiva, código muerto y distancia vertical para que cada archivo sea fácil de escanear.
Ubicación y Estáticos
🔒Pon cada función en la clase más interesada en ella, y mantén los métodos estáticos como utilidades verdaderamente sin estado.
Selectores e Intención
🔒Los argumentos selectores booleanos y de enumeración oscurecen la intención — divídelos en funciones enfocadas y bien nombradas.
Resumen del Catálogo de Heurísticas
🔒Un catálogo curado de malos olores de código y heurísticas de refactorización extraídas del capítulo 17 de Clean Code.
G16: La Intención Oscurecida
🔒El código que intenta ser inteligente es código que falla en comunicar — la densidad y brevedad a costa de la claridad no son virtudes.
G21: Comprender el Algoritmo
🔒Que las pruebas pasen no equivale a entender — el código limpio exige que comprendas completamente por qué funciona el algoritmo antes de confirmarlo.
G22: Dependencias Lógicas a Físicas
🔒Nunca permitas que un módulo asuma silenciosamente un valor de otro — haz que cada dependencia sea explícita y declarada en el código.
Heurísticas Específicas de Java (J1–J3)
🔒Tres heurísticas enfocadas en Java: evita importaciones con comodines, nunca heredes constantes, y prefiere enumeraciones sobre constantes enteras.
Refactorización de Código Legado
🔒Transforma código legado enredado de forma segura añadiendo pruebas primero y refactorizando en pequeños pasos.
El Arte de Nombrar
🔒Escribe nombres que revelen la intención, eviten la confusión y hagan el código buscable.
Heurísticas de Nombres
🔒Aplica las heurísticas N1–N7 para escribir nombres precisos, sin ambigüedad y fáciles de buscar.
El Mal Necesario de los Comentarios
🔒El código es la única fuente de verdad — los comentarios mienten a medida que el código evoluciona.
Objetos vs Estructuras de Datos
🔒Los objetos ocultan datos detrás del comportamiento. Las estructuras exponen datos. Mezclar ambos crea híbridos que nadie quiere.
Ética y Actitud del Programador
🔒La calidad es una responsabilidad profesional — no algo que entregas cuando el tiempo lo permite, sino el mínimo no negociable de tu oficio.
Funciones Puras
🔒Una función pura siempre devuelve el mismo resultado para la misma entrada y no cambia nada fuera de ella misma.
Selectores de Responsabilidad
🔒Usa las heurísticas de Responsabilidad Única para detectar y dividir clases y módulos sobrecargados.
SerialDate: Limpieza y Transformación
🔒Aplica el refinamiento sucesivo a la clase SerialDate — prueba, renombra, extrae y simplifica.
SerialDate: Diagnóstico
🔒Un caso de estudio para leer código legado de forma crítica — encuentra los malos olores antes de tocar nada.
Las 4 Reglas del Diseño Simple
🔒Las cuatro reglas de Kent Beck, en orden de prioridad, para un diseño siempre listo para evolucionar.
Funciones Pequeñas
🔒Las funciones deben hacer una sola cosa, hacerla bien y solo eso.
Estilo y Formato como Comunicación
🔒El formato del código es un acto de comunicación — estructura los archivos para que cualquier desarrollador pueda navegar en segundos.
Refinamiento Sucesivo
🔒Comienza con código que funciona y luego refactoriza de forma iterativa — nunca escribas código limpio en un solo paso.
Límites del Sistema
🔒El código de terceros pertenece al borde — envuélvelo para que nunca contamine tu lógica de negocio.
Las Tres Leyes del TDD
🔒Domina el micro-ciclo rojo-verde-refactorizar: escribe primero una prueba que falle, luego solo el código necesario para pasarla.
Heurísticas de Testing
🔒Aplica las heurísticas T1–T9 para escribir suites de pruebas completas, significativas y mantenibles.