Isso não é explicado mais. Eu tento encontrar uma explicação.
É algo que é inerente a muitos de nós que depuramos grandes bases de código, mas é preciso lidar com uma escala grande o suficiente no nível superior por um tempo suficiente para apreciá-lo. É como entender a importância de estar em posição no Poker. Inicialmente, não parece uma vantagem tão útil durar no final de cada turno até que você grave um milhão de mãos e perceba que ganhou muito mais dinheiro em posição do que fora.
Dito isto, discordo da ideia de que uma alteração em uma variável local é um efeito colateral. Do meu ponto de vista, uma função não causa efeitos colaterais se não modificar nada fora do seu escopo, que qualquer coisa que toque e mexa não afetará nada abaixo da pilha de chamadas ou qualquer memória ou recurso que a função não tenha adquirido por si mesma .
Em geral, a coisa mais difícil de se raciocinar em uma base de código complexa e de larga escala que não possui o procedimento de teste mais perfeito possível é o gerenciamento de estado persistente, como todas as alterações em objetos granulares no mundo dos videogames enquanto você percorre dezenas de milhares de funções, enquanto tentavam restringir-se a uma lista interminável de suspeitos, que realmente causou a violação de uma invariante em todo o sistema ("isso nunca deveria acontecer, quem o fez?"). Se nada for alterado fora de uma função, isso não poderá causar um mau funcionamento central.
Claro que isso não é possível em todos os casos. Qualquer aplicativo que atualize um banco de dados armazenado em uma máquina diferente é, por natureza, projetado para causar efeitos colaterais, bem como qualquer aplicativo projetado para carregar e gravar arquivos. Mas há muito mais que podemos fazer sem efeitos colaterais em muitas funções e muitos programas se, por exemplo, tivermos uma rica biblioteca de estruturas de dados imutáveis e adotamos ainda mais essa mentalidade.
Curiosamente, John Carmack saltou no LISP e na onda da imutabilidade, apesar de ter começado nos dias da codificação C mais micro-sintonizada. Eu me vi fazendo uma coisa semelhante, embora ainda use muito C. Essa é a natureza dos pragmáticos, acho, que passaram anos depurando e tentando raciocinar sobre sistemas complexos e de larga escala como um todo, de um nível superior. Mesmo os que são surpreendentemente robustos e desprovidos de uma grande quantidade de bugs ainda podem deixá-lo com uma sensação desconfortável de que algo de errado está à espreita ao virar da esquina se houver muito estado persistente complexo sendo modificado no gráfico interconectado mais complexo de chamadas de função entre os milhões de linhas de código. Mesmo que todas as interfaces sejam testadas com um teste de unidade e todas sejam aprovadas,
Na prática, muitas vezes acho que a programação funcional dificulta a compreensão de uma função. Ele ainda gira meu cérebro em reviravoltas e nós, especialmente com lógica recursiva complexa. Mas toda a sobrecarga intelectual associada à descoberta de algumas funções escritas em uma linguagem funcional é diminuída pelo sistema complexo, com estados persistentes sendo alterados em dezenas de milhares de funções, onde cada função que causa efeitos colaterais se soma ao total complexidade do raciocínio sobre a correção de todo o sistema.
Observe que você não precisa de uma linguagem funcional pura para fazer com que as funções evitem efeitos colaterais. Os estados locais alterados em uma função não contam como efeito colateral, como uma for
variável de contador de loop local para uma função não conta como efeito colateral. Até escrevo código C hoje em dia com o objetivo de evitar efeitos colaterais, quando possível, e criei uma biblioteca de estruturas de dados imutáveis e seguras para threads que podem ser parcialmente modificadas enquanto o restante dos dados é copiado superficialmente, e isso me ajudou a muito a raciocinar sobre a correção do meu sistema. Discordo totalmente do autor nesse sentido. Pelo menos em C e C ++ em software de missão crítica, uma função pode estar documentando como sem efeitos colaterais se não tocar em nada que possa afetar o mundo fora da função.