La cumbre de lo que las otras respuestas han captado no es que los "valores mágicos" sean malos, sino que deberían ser:
- definido reconociblemente como constantes;
- definido solo una vez dentro de todo su dominio de uso (si es arquitectónicamente posible);
- definidos juntos si forman un conjunto de constantes que de alguna manera están relacionadas;
- definido en un nivel apropiado de generalidad en la aplicación en la que se utilizan; y
- definido de tal manera que limite su uso en contextos inapropiados (por ejemplo, susceptible de verificación de tipo).
Lo que típicamente distingue las "constantes" aceptables de los "valores mágicos" es una violación de una o más de estas reglas.
Bien usadas, las constantes simplemente nos permiten expresar ciertos axiomas de nuestro código.
Lo que me lleva a un punto final, que un uso excesivo de constantes (y, por lo tanto, un número excesivo de supuestos o restricciones expresados en términos de valores), incluso si cumple con los criterios anteriores (pero especialmente si se desvía de ellos), puede implicar que la solución que se está ideando no es lo suficientemente general o bien estructurada (y, por lo tanto, ya no estamos hablando de los pros y los contras de las constantes, sino de los pros y los contras de un código bien estructurado).
Los lenguajes de alto nivel tienen construcciones para patrones en lenguajes de nivel inferior que tendrían que emplear constantes. Los mismos patrones también pueden usarse en el lenguaje de nivel superior, pero no deberían serlo.
Pero ese puede ser un juicio experto basado en una impresión de todas las circunstancias y cómo debería ser una solución, y exactamente cómo se justificará ese juicio dependerá en gran medida del contexto. De hecho, puede no ser justificable en términos de ningún principio general, excepto afirmar "¡Soy lo suficientemente mayor como para haber visto este tipo de trabajo, con el que estoy familiarizado, hecho mejor"!
EDITAR: después de haber aceptado una edición, rechazado otra, y ahora haber realizado mi propia edición, ¿puedo considerar ahora el estilo de formato y puntuación de mi lista de reglas para resolver de una vez por todas jaja!