다익스트라가 초기에 익식한 문제

  1. 프로그래밍은 어렵다
  2. 프로그래머는 프로그래밍을 잘하지 못한다
    • 프로그램은 단순할지라도 너무 많은 세부사항을 담고 있다.

다익스트라는 증명이라는 수학적인 원리를 적용하여 이 문제를 해결하고자 했다.

연구를 진행하면서 goto 문장이 모듈을 더 작은 단위로 재귀적으로 분해하는 과정에 방해가 되는 경우가 있다는 사실을 발견했다.
만약 모듈을 분해할 수 없다면, 증명할 때 필요한 분할 정복 기법을 사용할 수 없다.

반면 goto 문을 사용하더라도 모듈을 분해할 때 문제가 되지 않는 경우도 있었다.
이런 goto문의 좋은 사용 방식은 if/then/else와 do/while과 같은 분기와 반복이라는 단순한 제어 구조에 해당한다는 것을 발견했다.
.....
결국 다익스트라가 10년의 전쟁에서 이겼고, goto문은 뒤로 밀려났다.
대다수의 현대 언어에서는 goto가 없다.

기능적 분해

구조적 프로그래밍을 통해 모듈을 증명 가능한 더 작은 단위로 재귀적으로 분해할 수 있게 되었고, 모듈을 기능적으로 분해할 수 있다.
거대한 문제 기술서는 고수준의 기능들로 분해
고수준의 기능은 또 여러개의 저수준의 함수로 분해
-> 대규모 시스템을 모듈과 컴포넌트로
-> 모듈과 컴포넌트를 아주 작은 기능으로

테스트

테스트는 버그가 있음을 보여줄 뿐, 버그가 없음을 보여줄 수 없다.
-> 프로그램이 잘못되었음을 보여줄 수 있지만, 맞다고는 증명할 수 없다.

결론

구조적 프로그래밍이 오늘날까지 가치 있는 이유는 기능 단위를 분해하는 능력 때문이다.
또한 요즘 goto문이 없는 이유기도 하다.

+ Recent posts