O cume do que as outras respostas entenderam não é que "valores mágicos" sejam ruins, mas que deveriam ser:
- definido reconhecidamente como constantes;
- definido apenas uma vez em todo o seu domínio de uso (se for arquiteturalmente possível);
- definidos juntos se formarem um conjunto de constantes que estão de alguma forma relacionadas;
- definido em um nível apropriado de generalidade na aplicação em que são utilizados; e
- definidos de forma a limitar seu uso em contextos inadequados (por exemplo, passíveis de verificação de tipo).
O que normalmente distingue "constantes" aceitáveis de "valores mágicos" é alguma violação de uma ou mais dessas regras.
Bem usadas, as constantes simplesmente nos permitem expressar certos axiomas do nosso código.
O que me leva a um ponto final, que o uso excessivo de constantes (e, portanto, um número excessivo de suposições ou restrições expressas em termos de valores), mesmo que de outra forma atenda aos critérios acima (mas principalmente se desviar deles), pode implicar que a solução que está sendo planejada não seja suficientemente geral ou bem estruturada (e, portanto, não estamos mais falando sobre os prós e contras das constantes, mas sobre os prós e contras do código bem estruturado).
Linguagens de alto nível têm construções para padrões em linguagens de nível inferior que teriam que empregar constantes. Os mesmos padrões também podem ser usados na linguagem de nível superior, mas não deveriam.
Mas isso pode ser um julgamento especializado, baseado na impressão de todas as circunstâncias e como deve ser uma solução, e exatamente como esse julgamento será justificado dependerá muito do contexto. De fato, pode não ser justificável em termos de qualquer princípio geral, exceto afirmar "Tenho idade suficiente para já ter visto esse tipo de trabalho, com o qual estou familiarizado, feito melhor"!
EDIT: depois de aceitar uma edição, rejeitar outra e agora ter realizado minha própria edição, agora posso considerar que o estilo de formatação e pontuação da minha lista de regras será resolvido de uma vez por todas haha!