이 장에서는 세 가지 패러다임인 구조적 프로그래밍(structured programming), 객체 지향 프로그래밍(object-oriented programming), 함수형 프로그래밍(functional programming)에 대해 설명한다.

구조적 프로그래밍


최초로 적용된 패러다임(하지만 최초로 만들어진 패러다임은 아니다)은 구조적 프로그래밍으로, 1968년 에츠허르 비버 데이크스트라가 발견했다. (다익스트라 알고리즘 만든사람 ㅎㅎ)

무분펼한 점프(goto 문장)는 프로그램 구조에 해롭다는 사실을 제시했다. 이러한 점프들을 if/then/else와 do/while/until과 같이 더 익숙한 구조로 대체했다.

객체 지향 프로그래밍


두 번째로 도입된 패러다임은 구조적 프로그래밍보다 2년 앞선 1966년, 올레 요한 달과 크리스텐 니가드에 의해 등장했다. 두 프로그래머는 알골(ALGOL)언어의 함수 호출 스택 프레임을 힙으로 옮기면, 함수 호출이 반환된 이후에도 함수에서 선언된 지역 변수가 오랫동안 유지돌 수 있음을 발견했다.

바로 이러한 함수가 클래스의 생성자가 되었고, 지역 변수는 인스턴스 변수, 그리고 중첩 함수는 메서드가 되었다. 함수 포인터를 특정 규칙에 따라 사용하는 과정을 통해 필연적으로 다형성이 등장하게 되었다.

함수형 프로그래밍


세 번째 패러다임은 최근에 들어서야 겨우 도입되기 시작했지만, 세 패러다임 중 가장 먼저 만들어졌다. 사실 함수형 프로그래밍은 컴퓨터 프로그래밍 자체보다 먼저 등장했다. 알론조 처치는 앨런 튜링도 똑같이 흥미를 느꼈던 어 떤 수학적 문제를 해결하는 과정에서 람다(Lambda) 계산법을 발명했는데, 함수형 프로그래밍은 이러한 연구 결과에 직접적인 영향을 받아 만들어졌다. 1958년에 존 매카시가 만든 LISP 언어의 근간이 되는 개념이 바로 이 람다 계산법이다. 람다 계산법의 기초가 되는 개념은 불변성(immutability)으로, 심볼의 값이 변경되지 않는다는 개념이다. 이는 함수형 언어에는 할당문이 전혀 없다는 뜻이기도 하다. 사실 대다수의 함수형 언어가 변수 값을 변경할 수 있는 방법을 제공하기는 하지만, 굉장히 까다로운 조건아래서만 가능하다.