Saltar al contenidoJMRG
Todas las entradas

Introducción a Clean Code: Principios para Código Sostenible

clean-codebest-practicessoftware-engineering

¿Por qué importa el código limpio?

Imagina heredar un proyecto donde cada función tiene 500 líneas, las variables se llaman x, temp, data2, y los comentarios dicen "esto funciona, no tocar". Este escenario es más común de lo que parece, y tiene un costo real: horas de debugging, bugs en producción, y desarrolladores frustrados.

El código limpio no es solo código que funciona. Es código que comunica intención, que puede ser mantenido por otros (incluyendo tu yo futuro), y que resuelve problemas sin crear nuevos.

El Código como Comunicación

Una de las lecciones más importantes es entender que el código no es solo instrucciones para máquinas - es una forma de comunicar intención a otros desarrolladores.

Antes: Código críptico

function chb(d: number, m: number, y: number): number {
  return new Date(y, m - 1, d).getTime() - Date.now() / 6e4 * 70;
}

Después: Código que comunica intención

const AVG_HEART_RATE_PER_MILLISECOND = 70 / 60000;
/**
 * Calcula los latidos del corazón desde el nacimiento
 * @param birthDay - Día de nacimiento
 * @param birthMonth - Mes de nacimiento
 * @param birthYear - Año de nacimiento
 * @returns Número estimado de latidos
 */
function calculateHeartBeatsSinceBirth(
  birthDay: number,
  birthMonth: number,
  birthYear: number
): number {
  const birthDate = new Date(birthYear, birthMonth - 1, birthDay);
  const millisecondsSinceBirth = Date.now() - birthDate.getTime();
  return millisecondsSinceBirth * AVG_HEART_RATE_PER_MILLISECOND;
}

Ambas funciones hacen exactamente lo mismo, pero una comunica claramente su propósito mientras la otra requiere desciframiento.

Los 4 Pilares del Código Limpio

mindmap
  root((Clean Code))
    Fiabilidad
      Estabilidad
      Resiliencia
      Degradación elegante
    Eficiencia
      Recursos
      Tiempo desarrollo
      Costo cognitivo
    Mantenibilidad
      Patrones comunes
      Consistencia
      Claridad
    Usabilidad
      APIs intuitivas
      Nombres descriptivos
      Documentación

1. Fiabilidad (Reliability)

El código debe hacer lo que promete, sin sorpresas. Esto incluye tres aspectos:

  • Estabilidad: Funciona correctamente bajo diferentes condiciones
  • Resiliencia: Maneja inputs inesperados sin colapsar
  • Degradación elegante: Mantiene funcionalidad básica cuando características avanzadas fallan
/** Reproduce audio con fallback a transcripción */
function playAudio(): void {
  if (detectAudioMP3Support()) {
    playMP3Track();
  } else {
    showTranscript();
  }
}

2. Eficiencia (Efficiency)

No se trata solo de velocidad de ejecución. La eficiencia incluye:

  • Uso óptimo de recursos (memoria, CPU, red)
  • Tiempo de desarrollo y mantenimiento
  • Costo cognitivo para entender el código

3. Mantenibilidad (Maintainability)

El código se lee 10 veces más de lo que se escribe. Para que sea mantenible:

  • No alejarse de patrones de diseño comunes
  • Ser consistente con sintaxis y presentación
  • Aportar claridad a dominios no familiares

4. Usabilidad (Usability)

Las APIs y funciones deben ser intuitivas.

Antes: API confusa con parámetros ambiguos

function checkIsNewYear(
  configuration: unknown,
  filter: unknown,
  formatter: unknown,
  MDY: unknown,
  SMH: unknown
): unknown { }

Después: API clara y enfocada

/** Verifica si una fecha es Año Nuevo */
function isNewYear(date: Date): boolean {
  return date.getMonth() === 0 && date.getDate() === 1;
}

Los Enemigos del Código Limpio

El Ego del Programador

El ego es un arma de doble filo. El lado positivo nos impulsa hacia la excelencia, pero el lado negativo nos lleva a escribir código para impresionar en lugar de código mantenible.

Antes: Sintaxis exótica

const rounded = ~~65.7;

Después: Claridad sobre brevedad

const rounded = Math.floor(65.7);

La madurez en programación se refleja en priorizar legibilidad sobre demostración de habilidad.

El Balance de la Abstracción

Encontrar el nivel correcto de abstracción es un acto de equilibrio:

  • DRY (Don't Repeat Yourself): Si te repites, necesitas abstraer
  • YAGNI (You Aren't Gonna Need It): No sobre-abstraigas antes de tiempo

El punto perfecto está entre ambos extremos.

Conclusión

El código limpio no es un lujo - es una necesidad para proyectos sostenibles. Los cuatro pilares (Fiabilidad, Eficiencia, Mantenibilidad, Usabilidad) forman la base de todo código profesional.

En el próximo artículo exploraremos los Principios SOLID, la base de la arquitectura limpia que nos permite aplicar estos conceptos de forma estructurada.


Basado en "Clean Code in JavaScript" por James Padolsey y los principios establecidos por Robert C. Martin.