Il vertice di ciò che le altre risposte hanno colto non è che i "valori magici" sono cattivi, ma che dovrebbero essere:
- definito riconoscibilmente come costanti;
- definito una sola volta all'interno dell'intero dominio di utilizzo (se architettonicamente possibile);
- definiti insieme se formano un insieme di costanti che sono in qualche modo correlate;
- definito a un livello adeguato di generalità nell'applicazione in cui sono utilizzati; e
- definito in modo tale da limitarne l'uso in contesti inappropriati (es. suscettibili di verifica del tipo).
Ciò che distingue tipicamente le "costanti" accettabili dai "valori magici" è una violazione di una o più di queste regole.
Usate bene, le costanti ci permettono semplicemente di esprimere certi assiomi del nostro codice.
Il che mi porta ad un ultimo punto, che un uso eccessivo di costanti (e quindi un numero eccessivo di ipotesi o vincoli espressi in termini di valori), anche se altrimenti rispetta i criteri di cui sopra (ma soprattutto se si discosta da essi), può implicare che la soluzione che viene elaborata non sia sufficientemente generale o ben strutturata (e quindi non stiamo più parlando dei pro e dei contro delle costanti, ma dei pro e dei contro di un codice ben strutturato).
Le lingue di alto livello hanno strutture per modelli in lingue di livello inferiore che dovrebbero impiegare costanti. Gli stessi schemi possono essere utilizzati anche nella lingua di livello superiore, ma non dovrebbero esserlo.
Ma quello può essere un giudizio di esperti basato su un'impressione di tutte le circostanze e su come dovrebbe apparire una soluzione, e esattamente come questo giudizio sarà giustificato dipenderà fortemente dal contesto. In effetti potrebbe non essere giustificabile in termini di alcun principio generale, se non per affermare che "Sono abbastanza vecchio da aver già visto questo tipo di lavoro, con cui ho familiarità, fatto meglio"!
EDIT: dopo aver accettato una modifica, rifiutata un'altra e aver ora eseguito la mia modifica, posso ora considerare lo stile di formattazione e punteggiatura del mio elenco di regole da sistemare una volta per tutte ahah!