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 como constantes;
- definido solo una vez dentro de su dominio de uso completo (si es arquitectónicamente posible);
- definidas juntas si forman un conjunto de constantes que están relacionadas de alguna manera;
- 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, susceptibles de verificación de tipo).
Lo que normalmente distingue "constantes" aceptables de "valores mágicos" es una violación de una o más de estas reglas.
Si se usan bien, las constantes simplemente nos permiten expresar ciertos axiomas de nuestro código.
Lo que me lleva a un punto final, que es un uso excesivo de constantes (y, por lo tanto, un número excesivo de suposiciones o restricciones expresadas en términos de valores), incluso si cumple con los criterios anteriores (pero especialmente si se desvía de ellos), pueden implicar que la solución que se está diseñando 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 se pueden usar 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 que no sea justificable en términos de ningún principio general, excepto para afirmar "¡Soy lo suficientemente mayor como para haber visto este tipo de trabajo, con el que estoy familiarizado, mejor hecho"!
EDITAR: habiendo aceptado una edición, rechazando otra y habiendo realizado mi propia edición, ahora puedo considerar el formato y el estilo de puntuación de mi lista de reglas que se resolverán de una vez por todas. !