해법이 있을까? 그렇다. 해법이 있다. 문제를 막기 위해 쓸데없이 단순하기만 한 언어를 사용하는 것이 아니라 변경할 수 있는 참조나 언어가 허용하더라도 무조건 분기의 사용을 피하고 루프를 쓰지 않는 것이다. 즉, 여러분이 해야 할 일은 잘 훈련된 방식으로 프로그래밍을 하는 것뿐이다.
상태 변이나 루프 같은 위험한 기능을 사용하지 말라. 비결은 정말 이렇게 단순하다! 그리고 가변 참조나 루프가 필요한 경우가 생긴다면 그들을 추상화하라. 상태 변이를 추상화하는 컴포넌트를 단 한 번만 작성하라. 그 후에는 같은 문제를 다시 처리할 필요가 없을 것이다(다소 멋진 언어 중 일부는 처음부터 이런 기능을 제공할지도 모른다. 하지만 그런 언어는 아마 여러분의 업무 환경에서 사용할 수 있는 언어는 아닐 것이다). 그리고 이와 같은 원리를 루프에도 적용할 수 있다. 최근 대부분의 언어는 전통적인 방식으로 사용하는 루프와 추상화한 루프를 함께 제공한다. 여기서 다시 말하지만 이는 훈련의 문제다. 언어가 제공하는 기능 중 좋은 부분만 사용하라! 이에 대해서는 4장과 5장에서 자세히 다룬다.
버그를 자주 일으키는 다른 근원으로 널(null) 참조가 있다. 6장에서 볼 수 있듯이 코틀린을 사용하면 널 참조를 허용하는 코드와 널 참조를 금지하는 코드를 명확하게 분리할 수 있다. 하지만 궁극적으로 프로그램에서 널 참조를 아예 사용하지 못하게 막는 일은 여러분의 책임이다.
외부 세계에 의존하는 프로그램을 제대로 실행하려고 노력하는 과정에서 많은 버그가 발생한다. 하지만 어떤 프로그램이든 어느 정도 외부 세계에 의존하기 마련이다. 이런 의존 관계를 프로그램의 일부분으로 제한하면, 외부 세계에 대한 의존으로 인해 생길 수 있는 버그를 완전히 제거하지는 못하더라도 문제를 더 쉽게 찾아내고 다룰 수 있다.