Como já falei antes, eu não tive assim um treinamento formal em programação ou análise de sistemas (descontando as aulas de Pascal no 2° grau técnico). Eu fui aprendendo com o tempo, seja arrumando trabalho pra fazer, seja por diversão. (É, eu já programei por hobby.) Nessas de ir aprendendo sozinho, fui adentrando a carreira e hoje não posso pensar em fazer outra coisa para viver, mesmo porque passaria fome.
O que isso tem a ver com const? Bom, a pergunta devia ser: o que const tem a ver com isso? Resposta: não tem nada a ver, e é esse o ponto. Você não arruma problemas sérios na profissão se não souber o significado de const. const não vale em tempo de execução. Se o programa vai funcionar ou não, dificilmente será por uso ou desuso de const.
Vou fazer uma comparação com o Português. Você não depende de saber o que é um verbo transitivo direto para viver. Você pode se comunicar perfeitamente por escrito sem usar crase direito. Ou pode ficar abusando do gerúndio à vontade, OK. Mas o que esses exemplos deixam claro é que a pessoa que os comete não tem domínio sobre a linguagem, sobre a lógica da língua portuguesa. São erros na expressão, no encadeamento de palavras.
Espero que a comparação com o Português pareça só ilustrativa, porque para mim a ignorância a respeito de const é mais grave do que não saber fazer análise sintática. Programação é uma forma de comunicação na qual a capacidade de expressão do emissor (programador) é 100% responsável pela precisão da mensagem (programa) recebida pelo ouvinte (computador). No Português a expressão pode ser ruim porque o ouvinte interpreta a mensagem corrigindo e completando os seus eventuais problemas.
Mas como o computador ainda não é tão esperto, a obrigação do desenvolvedor é procurar ininterruptamente melhorar sua capacidade de expressão, aprendendo a sintaxe da linguagem e quantos "dialetos" (idiomas) aparecerem na frente. Eu tenho me dedicado a isso neste ano e tenho certeza de que meu código melhorou, porque:
- eu já não uso tantos casts
- estou menos dependente de pointers
- agora relaciono objetos levando em conta efeitos colaterais
- estou mais preocupado com a forma do código, e não só com a função do código
O principal é a postura diferente em relação à linguagem. Dá para construir um programa de mil maneiras diferentes, do mesmo jeito que é possível fixar um parafuso com um martelo ou com araldite. Do momento em que são conhecidas as características do parafuso, da madeira, do martelo e principalmente da chave de fenda, você se pergunta: como é que eu conseguia trabalhar antes?
-----------------------------------
*Na maioria dos casos eu fazia um cast qualquer sem pensar no significado do const que estava ali me "atrapalhando".