Herramientas pequeñas y afiladas que se componen
La idea más duradera del software es también la más simple: construye cosas pequeñas que hagan bien un solo trabajo, y haz que funcionen juntas. Cincuenta años después, sigue ganándole al monolito.
Principio Nº Uno
Construye una cosa que haga una sola cosa. Haz que se componga.
La idea más duradera del software es también la más simple, y vino de Unix hace cincuenta años: escribe programas que hagan bien una sola cosa, y escríbelos para que funcionen juntos. El curso de CLI mostró la mecánica — comandos pequeños unidos por tuberías, cada uno entregando su salida al siguiente. Este principio trata de por qué eso no es solo un truco ingenioso, sino la forma más fiable que conozco de construir algo que siga siendo manejable a medida que crece.
Pon una herramienta pequeña y afilada junto a un monolito — un programa grande que hace todo el trabajo dentro de sí mismo — y la herramienta pequeña gana en cada eje que importa más adelante. Es fácil de entender, porque solo hay un trabajo que seguir. Es fácil de probar, porque hay un único comportamiento que verificar. Es fácil de reemplazar, porque cambiar una pieza no perturba a las demás. Y es reutilizable: una herramienta que solo ordena puede ordenar cualquier cosa, para siempre, en trabajos que aún no has imaginado. El monolito no puede hacer nada de esto — su ordenamiento está soldado a su obtención de datos que está soldada a su formateo, así que se entiende, se prueba y se reutiliza solo todo o nada.
La composición es la verdadera recompensa
El poder no está en ninguna herramienta individual — está en lo que ocurre cuando se combinan. Cuatro herramientas pequeñas no te dan cuatro capacidades; te dan cada disposición útil de cuatro herramientas, un número muchísimo mayor, incluyendo combinaciones que descubrirás más tarde para problemas que aún no tienes. Por eso este enfoque sigue ganando: un monolito solo puede hacer aquello para lo que fue construido, mientras que un juego de herramientas afiladas hace cosas que su creador nunca imaginó. La razón profunda por la que funciona es una interfaz uniforme — en Unix, flujos de texto plano — una costura compartida que toda herramienta habla, de modo que cualquier salida puede convertirse en cualquier entrada. Construye para la composición y estarás construyendo para los problemas que no puedes ver venir.
Evita
Dejar que una herramienta adquiera un segundo trabajo — el ordenador que aprende a obtener datos “ya que está aquí.” Cada función que se añade a una herramienta afilada la desafila.
Haz
Recurre a una segunda herramienta, mantenida aparte, y únelas en una costura limpia. Un solo trabajo claro por herramienta; el ingenio va en las uniones.
Dónde se tuerce
El fallo común es dejar que una herramienta se trague lentamente a sus vecinas. Empieza honesta — un ordenador — y luego filtra un poco, obtiene datos un poco, y un año después lo hace todo mal y no puede reutilizarse para nada. El fallo opuesto es dividir en exceso: cincuenta herramientas triviales donde bastarían cinco, ahogándote en uniones. El objetivo no es la máxima pequeñez; es un solo trabajo claro por herramienta y costuras limpias entre ellas. Y la composición tiene límites honestos — a veces un todo ajustado e integrado le gana a una tubería de diez partes, y fingir lo contrario es su propio dogma. Lo pequeño y componible es lo predeterminado, no una religión.
Ponlo en práctica
Toma algo que hayas construido que haga varios trabajos e intenta nombrar cada trabajo con un solo verbo. Si encuentras tres o cuatro, has encontrado tres o cuatro herramientas escondidas en una. No tienes que dividirla hoy — pero ver las costuras es el primer paso, porque la próxima vez que uno de esos trabajos necesite cambiar, la costura es exactamente donde desearás haber cortado.
Basado en la filosofía Unix tal como la recogió el resumen de Doug McIlroy — “haz una sola cosa y hazla bien” — y en la lección sobre tuberías del curso CLI · MCP · API.