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

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

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

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

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

기능적 분해

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

테스트

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

결론

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

SW 아키텍처는 코드로부터 시작한다.

구조적 프로그래밍

  • 최초로 적용된 패러다임
  • 무분별한 goto문은 해롭다.
    • if/then/else , do/while/until 로 대체
  • 제어 흐름의 직접적인 전환에 대해 규칙을 부과한다*

객체 지향 프로그래밍

함수 호출 스택 프레임을 Heap으로 옮기면, 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지됨을 발견
이러한 함수가 클래스의 생성자가 되었고, 지역변수는 인스턴스 변수, 중첩함수는 메서드가 되었다.
제어흐름의 간접적인 전환에 대해 규칙을 부과한다

함수형 프로그래밍

최근에 들어 인기있고 사용되는 패러다임
세 패러다임 중 가장 먼저 만들어졌다.
람다 계산법의 기초가 되는 개념 = 불변성 즉, 심볼의 값이 변경되지 않는다는 점이다.
할당문에 대해 규칙을 부과한다

각 패러다임은 프로그래머에게서 권한을 박탈한다.
어느 패러다임도 새로운 권한을 부여하지 않는다.
규칙을 부과한다. 즉, 무엇을 하면 안되는 지를 알려준다.

결론

패러다임의 역사로부터 얻을 수 있는 교훈은 아키텍처와 어떤 관계가 있는가?
-> 모두 관계있음.

아키텍처 경계를 넘나들기 위한 메커니즘으로 다형성을 이용한다.
우리는 FP를 이용하여 데이터의 위치와 접근 방법에 대해 규칙을 부과한다.
우리는 모듈의 기반 알고리즘으로 구조적 프로그래밍을 사용한다.

함수, 컴포넌트 분리, 데이터 관리가 어떻게 서로 연관되는 지 주목하자.

+ Recent posts