데이크스트라가 초기에 인식한 문제는 다음과 같다.
데이크스트라는 증명(proof)이라는 수학적인 원리를 적용하여 이 문제를 해결하고자 했다.
데이크스트는 프로그래머가 위의 세가지 방법을 이용하여 코드를 증명하고, 프로그램에도 유클리드 계층구조로 만들 수 있을거라고 생각했다.
그는 goto 문이 좋지 못하다는 사실을 알렸으며, 이는 실제로 해로웠고 goto 문은 거의 사용되지 않게 되었다.
구조적 프로그래밍을 통해 작은 단위로 재귀적 분해가 가능하며, 모듈은 기능적으로 분해가 가능하다.
데이크스트라의 바람처럼 증명은 이루어지지 않았다.
대신 과학적 방법으로 접근이 가능하다.
수학과 달리 과학적 방법은 반증은 가능하지만 증명은 불가능하다. 즉, 서술된 내용이 틀렸음을 증명하는 방식으로 동작한다.
프로그램이 잘못되었음을 테스트를 통해 증명할 수는 있지만, 프로그램이 맞다고 증명할 수는 없다.
테스트에 충분한 노력을 들였다면 테스트가 보장할 수 있는 것은 프로그램이 목표에 부합할 만큼은 충분히 참이라고 여길 수 있게 해주는 것이 전부다.
이는 소프트웨어 개발이 과학과 같음을 말한다.