프로그래밍이 어려운 이유는 부작용(side effect) 때문이다. 이미 똑똑한 사람들이 학위까지 받아 어려운 순수 코드를 작성했고, 쉬운 순수 코드는 대규모 언어 모델(LLM)로 만들 수 있다. 부작용이 없는 프로그램은 콘솔에 출력조차 할 수 없으므로, 순수 프로그램은 아무것도 하지 않는 프로그램과 다를 바 없다는 주장이다.

프로그램으로 유용한 일을 하려면 어느 정도는 부작용을 일으켜야 한다. 하지만 다른 사람이 쓸 API를 설계할 때는 이용자가 내 데이터베이스나 제3자가 부과한 상류 서비스의 한도를 알지 않아도 되도록 만들고 싶어진다. 요청을 원하는 만큼 보낼 수 있도록 캐시를 추가하는 식이다. API를 쓰는 쪽에서는 가능한 한 순수한 것처럼 보이도록 부작용을 숨기는 셈이다.

이 글은 이런 현상을 양자물리학에서 가져온 표현인 ‘부작용 결맞음 상실(side-effect decoherence)’이라고 부른다. 부작용에서 멀리 떨어질수록 신경 쓸 일이 줄어들고, 부작용이 없는 것처럼 여길 수 있다는 뜻이다. 그 결과 불순한 코드도 다시 순수해 보이거나, 적어도 ‘충분히 순수해’진다.

작은 예로 const x = 1 + 2; 같은 자바스크립트 프로그램을 실행할 때도 CPU 레지스터의 값을 설정하고 덮어쓰며, 열을 발생시키는 등 여러 부작용이 생긴다. 하지만 근사한 일렉트론 기반 편집기에서 자바스크립트를 쓸 수 있게 해준 개발자 중 누군가는 CPU 발열을 신경 썼을 것이고, 프로그램을 작성하는 사람은 이를 걱정하지 않아도 된다.

마감이 촉박한 기업 프로젝트에서도 비슷한 일이 벌어진다. 이웃한 마이크로서비스를 직접 호출하면 API 요청 순서와 요청 사이의 간격을 신경 써야 할 수 있다. 반면 데이터가 여러 마이크로서비스를 거쳐 도착하면 그런 문제가 눈에 띄지 않을 때가 있다. 중간에 있는 개발자들이 수정 사항과 우회책, 추상화를 덧붙였기 때문이다. 더 큰 규모에서 부작용은 결맞음을 잃는다.