Mentre preparavo il primo esonero di Fisica I, c'è una legge di Newton che mi ha fatto sorridere amaramente: il Principio di Inerzia.
"Un corpo mantiene il suo stato di quiete, o di moto rettilineo uniforme, finché una forza esterna non interviene a modificarlo."
Sostituite "corpo" con "file JavaScript scritto nel 2018" e avrete descritto la filosofia di ogni azienda IT. Il codice legacy gode di un'inerzia mostruosa. Funziona? Più o meno. Nessuno sa perché, chi l'ha scritto ha cambiato lavoro tre anni fa, ma guai a chi lo tocca. Serve un'energia spaventosa (e il rischio di rompere tutto) per alterare quello stato di quiete.
La Paura della Forza Esterna
Nello sviluppo, la forza esterna siamo noi. Quando ci viene assegnato un task per aggiungere una piccola feature a un monolite, la reazione istintiva non è "rifattorizziamo l'architettura per accogliere questa modifica". La reazione è "come posso incastrare il mio codice senza turbare il mostro?".
E così, strato dopo strato, aggiungiamo cerotti. L'inerzia del sistema inghiotte la nostra voglia di fare le cose per bene.
Il Fango: Il Cerotto sul Monolite
Qualche tempo fa, dovevo aggiungere un controllo sui permessi utente in un componente React gigantesco, un vero e proprio "God Component" da 1500 righe che gestiva l'intera dashboard clienti.
Avevo due esami alle porte, la scadenza aziendale era vicina. L'idea di spezzare il componente in piccoli pezzi gestibili mi terrorizzava: e se avessi rotto una prop passata al decimo livello?
Ho ceduto all'inerzia. Ho aggiunto l'ennesimo if.
// Bad Code: Seguire la corrente dell'inerzia
function GodDashboard({ user, data, config, ...props }) {
// ... 500 righe di logica ...
// Il mio cerotto per non toccare il resto:
const canSeeButton = user.role === 'admin' || (user.role === 'editor' && config.allowEditors);
return (
<div>
{/* ... 800 righe di JSX incasinato ... */}
{canSeeButton && <button>Azione Pericolosa</button>}
</div>
);
}
Il risultato? Il mese dopo serviva un altro permesso. Poi un altro. Il file è arrivato a 2000 righe. Il componente era diventato così pesante che anche l'editor di VS Code laggava ad aprirlo.
L'Ingegneria: Rompere la Quiete
In fisica, per cambiare lo stato di un corpo massiccio serve l'applicazione mirata di una forza. In programmazione, questa forza si chiama "Astrazione".
Invece di assecondare l'inerzia del monolite, avrei dovuto estrarre la logica in un Custom Hook indipendente. Costava un'ora in più quel giorno, ma avrebbe salvato settimane di debug nei mesi successivi.
// Good Code: Applicare una forza (Astrazione)
function usePermissions(user, config) {
// Tutta la logica di business incapsulata e testabile
const canEdit = user.role === 'admin' || (user.role === 'editor' && config.allowEditors);
const canDelete = user.role === 'superadmin';
return { canEdit, canDelete };
}
// Il componente rimane "leggero"
function CleanDashboard({ user, config }) {
const { canEdit } = usePermissions(user, config);
return (
<div>
{canEdit && <button>Azione Pericolosa</button>}
</div>
);
}
Il Takeaway
Il codice non è una reliquia sacra. Se un file vi fa paura solo ad aprirlo, significa che l'inerzia ha preso il sopravvento.
Vincere la resistenza al cambiamento costa fatica ed energia all'inizio, esattamente come spostare un macigno. Ma è l'unico modo per impedire al vostro progetto di fossilizzarsi sotto il peso dei propri cerotti. Non abbiate paura di essere la forza esterna che rimette in moto il sistema.