· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
On A Cultural Gap



On a cultural gap

문화의 격차에 대하여

에처 W. 다익스트라(Edsger W. Dijkstra)


Copyright © 1985 Edsger W. Dijkstra

번역 처로

역자 주: 이 문서의 인쇄본은 Springer-Verlag New York이 저작권을 가지고 있지만, 온라인 문서에 대한 저작권은 저자 본인이 가지고 있다. 저자가 지난 2002년 세상을 떠났으므로 그의 문서를 관리하고 있는 University of Texas at Austin의 햄 리처즈(Ham Richards) 교수에게 번역 허락을 받았다.

전형적인 대학 구내에서 전형적인 수학자와 전형적인 전산과학자는 서로 다른 세계에 살고 있다. 그들은 서로를 잘 모르거나, 안다 해도 말을 건넬 사이는 아니다. 이 글의 목적은 두 가지이다. 즉, 이런 현상에 대해 역사적으로 설명하는 것과 우리가 이런 현상에 대해 무엇인가 해야 한다고 주장하는 것이다.

세상에 대해 지금까지의 방식을 개선하라고 권고하는 것은 항상 솜씨가 필요한 일이다. 이러한 권고는 은연중에 세상의 방식에는 개선의 여지가 항상 많이 있다고 판단하는 것이며, 성미 까다로운 사람들에게는 항상 불쾌한 제안으로 들린다. 이것을 받아들이기 쉽게 하는 한 가지 방법은 모든 종류의 완화된 표현들을 붙여 문장을 부드럽게 하는 것이다. 예를 들어, "전형적인", "일반적으로", "평균적으로", "보통", "드물지 않게" 등이 그것이다. 하지만, 나는 간결함을 위해 그런 표현 없이 말하려고 한다.

내가 역사적으로 설명할 내용의 중심에는 다음의 논제가 있다. 즉, 지금부터 40여 년 전, 컴퓨터가 이 세상에 생겨났을 때, 우리는 그것에 대해 준비가 되어 있지 않았으며, (사람과 컴퓨터가 지금의 모습 그대로이므로) 널리 퍼진 혼동은 피할 수 없었다는 것이다.

새로운 것을 다루는 가장 많이 흔한 방법은 이 참신한 것을 과거의 경험에서 익숙한 것과 관련시켜 보는 것이다. 우리는 비유(analogy)나 은유(metaphor)를 통해 생각한다. (콘사이스 옥스퍼드 사전(Concise Oxford Dictionary) 5판에서도 아직까지 타자기를 "손으로 쓰는 것을 대신하여 글자를 종이에 찍는 기계"라고 정의한다!) 역사가 평탄하게 발전해 간다면 우리는 그런 기법으로도 잘 해 낼 수 있겠지만, 우리가 이전에 경험해 온 것과 근본적으로 다른 어떤 것에 갑자기 직면하게 될 때 그 기법은 바로 실패하고 말 것이므로, 모든 비유들은 본질적으로 너무 피상적이어서 도움이 되기보다는 혼동을 일으킨다.

진정 근본적으로 참신한 것을 파악할 수 있게 해 주는 유일한 방법은 흔한 이해의 방법과 차원이 다르다. 즉, 자신이 과거에 어쩌다가 익숙해진 것과 그 현상을 일부러라도 연관 짓지 않는 대신, 생각을 비운 채로 그것에 접근하여 그 내부 구조에 대해 평가하는 것이다. 어떤 것을 이해하기 위해 이렇게 하는 것은 힘든 사고 과정을 요구하기 때문에, 그 앞의 방법에 비해 대중성이 거의 없다. (버트런드 러셀(Bertrand Russel)이 지적한 대로, "많은 사람들은 생각하느니 죽겠다고 말한다. 실제로 그들은 그렇게 한다.") 이것은 (다수를 차지하는) 이 사람들의 능력을 뛰어넘는다. 이 사람들에게는 연속적인 발전만이 역사의 유일한 패러다임이다. 그들은 불연속성에 대처할 능력이 없으며, 그것을 이해하지 못하며, 그것에 직면해도 그것을 부정할 것이다.

하지만 이런 근본적으로 참신한 것들이 바로 기술을 통해 우리가 직면하게 되는 것들이다. 자동화된 컴퓨터가 그런 것들 중 하나였으며, 그것과 동시대의 또 다른 두 가지는, 원자 폭탄과 (정도를 조금 줄여서) 피임약이었다.

* * *

상황이 더 안 좋아졌는데, 역사의 몇몇 사건들이 처음 20여 년 동안 자동화된 전산이 무엇인지에 대한 혼동을 더욱 더 커지게 했다.

예를 들어, 컴퓨터가 산업 생산품으로 이용할 수 있게 되었을 때, 막 시작된 컴퓨터 산업으로서는 상업적으로 불가피하게 그 생산품이 어떤 형태로도 수학과는 무관한 것처럼 보이도록 최대한 노력해야 했다. 수학은 "사용자에게 까다로운 것"의 정점에 있는 것으로 간주되기 때문이다. 컴퓨터 영업 직원들은 이런 식으로 대중을 세뇌했는데, 전산과학자, 수학자, 정치가, 관리자 등도 거기에 포함되었다. (컴퓨터 산업 자체의 관리자들마저도 세뇌되어, 오늘날 그들은 자신이 "고급 기술" 사업을 한다고 기꺼이 인정하더라도, 그 선도적 기술이 매우 수학적인 것이라는 사실을 알게 된다면 경악할 것이다.)

이것보다 더 오래 지속되는 혼동은, 잘 모르는 사람들이 그 기계를 설계, 제작, 유지하는 전자공학자들을 같은 부류로 생각한다는 사실에서 비롯되었다. 이 분야는 사실 당시의 전자 기술 수준 이상의 것이었고, 그 결과 물리적인 장치를 어떻게 작업 환경에 도입하여 관리할 것인가의 문제가 초기에는 모든 것을 압도하는 관심사가 되었다. 그 결과 이 분야는 (우선 미국에서) 미숙하게 "컴퓨터과학(computer science)"으로 알려지게 되었다. (이것은 사실 수술을 "칼 과학"이라고 부르는 것과 같다.) 그리고 사람들의 생각 속에 전산과학(computing science)은 기계와 그 주변 장치에 대한 것이라고 단단히 새겨졌다. 그것이 아니로다.

우리는 이제 전자 기술이 물리적인 장치 외에는 전산 분야에 더 이상 기여하는 바가 없다는 것을 안다. 우리는 이제 프로그램 가능한 컴퓨터라는 것이, 생각할 수 있는 어떠한 작동과정(mechanism)도 전선 하나 바꾸지 않고 실현할 수 있는 아주 다루기 쉬운 장치에 불과하다는 것을 안다. 따라서 전산과학의 핵심적인 도전 과제는 개념적인 것, 즉 우리가 만들어 놓은 것의 복잡함에 휘둘리지 않으면서 우리가 생각할 수 있는 (추상적인) 작동과정인 것이다.

참고: 전산과학의 핵심 도전 과제에 대해 위에서 간략히 요약한 것은 조금 정리할 필요가 있다. 나는 여러 상황에서 이런 시도를 해 왔다. 전산을 하는 동료들은 내가 무엇을 말하고 있는지 그들의 경험에서 너무나 잘 알고 있기 때문에 "그거 딱 맞아." 하거나 그와 비슷하게 동의를 표한다. 하지만 이것이 얼마나 적절하든 상관없이, 내가 언급하는 종류의 복잡함을 본 적이 없는 사람들에게는 이것이 시사하는 바가 거의 없다는 것도 알게 되었다. 그러므로 그 속성을 대략 이야기해 보고자 한다.

구획(block)은 건물로 이뤄지고, 건물은 벽으로, 벽은 벽돌로, 벽돌은 결정체로 이뤄진다. 원한다면 핵을 구성하는 기본 입자들까지 내려갈 수도 있다. 즉, 우리는 전체를 부분들의 집합으로 간주하며, 부분들은 어떤 의미에서 전체보다 "작고", 이 과정은 각 부분에도 재귀적으로 적용된다. 이렇게 하여 계층적으로 분해된 것에 도달한다. 그 깊이는 전체와 궁극적인 부분들의 "크기" 사이의 비율에 대한 일종의 로그 값(logarithm)이다. 그런데 (전체 계산을 위한) 한 시간과 (개별 명령어를 위한) 수백 나노초(nanosecond)의 비율은 10의 10제곱인데, 이것은 단일한 과학, 학문, 기술로는 전혀 그 간격을 채울 수 없다. 프로그래밍에서 다루는 개념들의 계층의 깊이와 비교하면, 전통적인 수학은 거의 단조로운 일이다. 수학에서는 대부분 적은 수의, 그리고 더욱이 전적으로 친숙한 의미 수준들에서만 일이 이뤄지기 때문이다. 개념적 계층의 깊이가 깊다는 것은 (그 자체로서 그 장치가 가진 선례 없는 능력의 직접적인 결과이며) 내가 컴퓨터의 출현을 우리의 지식의 역사에 생긴 선명한 불연속 지점이라고 생각하는 이유들 중 하나이다. (참고 끝.)

컴퓨터가 근본적으로 새로운 것이었으므로, 우리가 그것에 대해 준비되지 않았다는 것은 놀랄 일이 아니다. 그런데 수학자들은 준비되지 않은 것보다 더 심각했다.

수학자들은 닫힌(introverted) 세계에 살아야 하는, 사회적으로 불리한 위치에 있다. 이 세계에는 어떤 우수함이나 중요성을 판단하기 위한 그 자체의 가치와 그 자체의 표준이 있다. 이런 세계는 근친 교배의 토양이 된다. 그리고 실제로 그러했다. 잘 알려진 기하학의 정의(즉, "기하학은 기하학자들이 하는 일이다.")를 통해 그들이 수학을 이해하고 있는 바를 무리 없이 일반화할 수 있다. 즉, 그들 중 어느 누구도 자동화된 전산에 대해 생각해 본 적이 없으므로, 자동화된 전산은 수학이 될 수 없다.

문화 집단(subculture)으로서, 그들은 편협할 뿐만 아니라 매우 보수적이다. 그들은 이것을 스스로 잘 알고 있지만, 인상 깊은 전통의 계승자이자 관리인으로서 그들은 보존해야 하는 것이 참 많다고 생각하고 있다. 우리는 모두 그들의 그런 생각을 인정한다. 하지만 나는 타당한 또 다른 작동과정(mechanism)이 있지 않은가 생각한다. 수학은 그 실천가들이 (대부분의 걸출한 인물들을 포함해서) 절대 다수가 가르치는 일에 전적으로 종사하고 있다는 점에서 다른 과학 분야들과 차이가 있다. 교사들은 습관을 체득하게 하는 일에 들이는 노력을 투자라고 생각하며, 그것을 뒤바꿔야 한다는 생각에는 몸서리칠 것이다. 그 결과 그들은 주저 없이 "편안한 것(convenient)"과 "관습적인 것(conventional)"이 같다고 생각한다. 다른 이유가 없었다면 우리는 아직도 로마 숫자로 계산을 하고 있었을 것이다. 사람들에게는 그것이 습관이 되어서 그것이 "더 쉬운" 것이었기 때문이다.

수학자들은 기술적으로도 불리한 위치에 있다. 그들의 전문성의 가치와 특권은 19세기 후반에서 20세기 초반에 기원을 두고 있기 때문이다. 그들은 머리 속이 분석으로 가득 차 있으며, 연속체(continuum)와 복소평면(complex plane)을 사랑하고, 무한을 수학적 깊이의 선행조건으로 생각했다. 이 세상에서 전산이 이들과 무슨 관련이 있을 수 있겠는가? 그들이 컴퓨터의 존재를 조금이라도 인정했다면, 그것은 숫자를 단순 반복 처리하는 기계(number cruncher)로서 간주했을 뿐이다. 이것은 수치 해석 분야의 동료들이 (만약 그런 동료가 있다면) 도구로 사용할 수 있는 것일 뿐이다. (그들은 수치 해석에 대해서도, 그것에 대해 별로 아는 것도 없으면서, 기껏해야 살짝 얕잡아볼 뿐이었다.) 요컨대 그들은 전산을 완전히 무시했고, 어쨌든 사소한 일에 불과한 경영 부문에 기계들이 주로 사용되는 것을 알게 되면서 그러한 태도가 더 강경해졌다.

이러한 비난의 일부는 전산에 종사했던 초기의 과학자들에게 돌려야 한다. 그들은 (필요에 의해) 다른 학문 분야에서 왔다. 그들은 대부분 물리학, 화학, 결정학(crystallography)에서 훈련된 사람들이었다. (간혹 천문학자, 기상학자도 있었다.) 그들은 처음에는 컴퓨터 사용자였는데, 유감스럽게도 그들의 절대 다수가 자신의 과학적인 질적 표준을 자신의 주요한 일이 된 프로그래밍으로는 옮겨오지 않았다. 즉, 프로그래밍이 관련될 때마다 이들은, 다른 분야에서는 존경받는 과학자이면서도, 수학이라는 정글의 법칙에 따라 살겠다고 즉각 순응해 버린 것이다. 한 세대 동안 "과학적" 기계의 사용자들은 프로그래밍 일을 기계 제작자들이 내놓은 퍼즐을 푸는 것으로 접근했을 뿐, 과학적 사고의 기법들을 사용할 만한 활동으로는 접근하지 않았다. 논리적으로 볼 때 그들의 "닥치는 대로 하는 방식(catch-as-catch-can)"은, 수학자들이 자신의 전문성이라고 옳게 혹은 그르게 생각하고 있는 질서정연한 생각과 반발이 생길 수밖에 없었다.

전산의 초라한 모습에 대한 비난의 일부는 또한, 그렇게 불려진 그대로, 초기의 "컴퓨터과학과(Department of Computer Science)"에 돌려야 한다. 그들은 스스로도 자기 소명의 진정한 속성에 대해 매우 불분명했으므로, 세상의 다른 사람들에게도 그것에 대해 제대로 조명하지 못했다. 보통 이 학과들은, 자동화된 계산과 어떤 관계가 있는 주위에서 볼 수 있는 학문들(과 유사 학문들)이 칵테일된 것으로 잘못 생각될 정도였다. 그것은 전자공학, 통신 및 스위칭 이론, 경영학, 수치 해석, 수치 제어, 도서관학, 인공지능과 같은 것들, 간단히 말해서 일관성 없는 학문들의 무더기였기 때문에, 그 결과로 나온 칵테일은 지적으로 분별력 있는 사람들의 입맛에는 거의 맞지 않았다. 아직 덜 성숙한 이 학과들은 컴퓨터의 구축이나 컴퓨터를 응용할 수 있는 분야들에 주로 관심을 가지고 있었다. 기본적으로 그들의 문제는, 그들이 아직 등장하지 않은 과학의 주변부에서 활동할 수밖에 없었다는 것이다.

이 학문은 차츰 전산과학(Computing Science)으로 알려지기 시작했는데, 사람들이 어떠한 컴퓨터나 어떠한 응용 분야에서도 공통적으로 사용할 수 있는 무엇을 찾기 시작하면서 간신히 등장했다. 이러한 추상화 과정에 의해 전산과학은 즉시 그리고 분명히 전자공학과 결별을 고하게 되었다. 전산과학자는 기계를 실현하는 데 사용되는 특정한 기술에 대해 조금도 개의치 않는다. 그것이 전자공학이든, 광학이든, 기체 역학(pneumatics)이든, 혹은 마술이든 말이다. 그와 같은 방식으로, 전산과학은 컴퓨터를 어떤 사회의 어떤 부분에 의미 있게 도입하는 모든 구체적인 문제들에서도 분리될 수 있었다. (사회는 모두 서로 다르므로 이 관심사들은 거의 어쩔 수 없이 지역적이다.)

이제 전산과학이 출현하면서 그 모양을 갖추는 데에 중요했던 몇 가지 사건들을 (완벽하지는 않겠지만) 언급해 보고자 한다.

1960년에 대서양을 사이에 둔 (미국과 유럽의) 협력의 결과로 알골(ALGOL) 60이라는 새로운 프로그래밍 언어가 설계되었다. 프로그램 설계의 수단으로서 알골 60은 기존의 경쟁자였던 포트란(FORTRAN)보다 훨씬 향상된 것이었으며, 포트란이 아직 정착되지 않은 곳에서는 즉시 표준으로 받아들여졌다. 그런데 이 프로그래밍 언어 자체보다 더 중요한 것은 알골 60이 정의된 방식이었다. "배커스-나우어 형식(Backus-Naur Form)", 줄여서 BNF로 알려지게 되었고, 알골 60을 문맥에 무관하며(context-free) 완전히 재귀적으로 정의하기 위해 사용된 이 형식론(formalism)은 언어 정의의 엄밀함이 비약적으로 발전하여 구현된 것이었다. 그 때부터 형식 문법(formal grammar)은 전산과학의 초석이 되었다.

그 후에 리스프(LISP)가 심벌 조작을 위한 프로그래밍 도구로서 출현했다. 리스프는 응용 논리의 기계화라는 점에서 매우 성공적으로 구현된 것이라고 볼 수 있다. 전산과학에서 리스프가 갖는 문화적인 의의는, (심벌의 미분과 적분으로부터 형식을 갖춘 정리(theorem)의 증명에 이르기까지) 형식을 갖춘 모든 과정들을 포함함으로써, 전산이 숫자의 단순 반복 처리라는 좁은 의미에서 해방되었다는 점에 있다.

60년대 중반에 우리가 비결정론적인(nondeterministic) 기계를 프로그램 하는 방법을 알게 되면서, 전산의 영역은 새로운 차원으로 한 번 더 확장되었다. 이 문제의 기원은 "운영 체제"를 설계하는 일에서 비롯되었다. 여기에서 중앙 프로세서는, 서로 연결될 수도 있고 그렇지 않은 경우에는 비동기화되는 수많은 동작들과 공조하므로, 이들 사이의 통신은 예측할 수 없는 순간에 발생하게 된다. 이 문제는 사소하고 기술적인 데서 기원했지만, 전산의 문화에서 매우 큰 의의가 있는 것이었다. 중앙 프로세서와 주변장치 사이에 통신이 이뤄지는 순간은 예측 불가능할 뿐만 아니라, 그에 따라 재현 불가능하며, 그 결과, 프로그래밍에 대한 실험적인 접근 방법은 명백하게 더 이상 유지할 수 없게 되었다.

프로그래밍의 세계에 실용주의적(pragmatic) 프로그래밍과 과학적 설계 사이의 구분이 나타나기 시작한 것이 이 시기이다. 현재 "반복적(iterative) 설계"로 알려진 것이 바로 실용주의자의 패러다임이다. 이들은 반대되는 증거를 만나지 않는 한, 자신의 설계가 적절하게 동작할 것이라고 믿으며, 그런 증거에 대해서는 설계를 개선할 방법을 찾을 것이다. 프로그래머들 사이에는 이렇게 기능 오류를 찾아 고치는 것이 "디버깅"이라고 알려져 있으며, 궁극적으로 정답에 수렴할 것이라는 (정당화되지 않은) 신념이 당시에 널리 퍼져 있었다. 그 결과로, 기능 오류가 관찰된 경우에 (그 원인을 밝혀내기 위해) 그 실험을 반복해 볼 수 없는 것은 큰 타격이 되었다. 과학적 설계자는, 실용주의자와 대조적으로, 자기 설계가 왜 모든 상황에서 적절하게 동작할 것인지 알고 있기 때문에 그것을 믿는다.

이렇게 해서 60년대 후반과 70년대 초반에 일어난 일의 기반이 준비되었다. 이 시기에는 알고리듬에 대해 추론할 수 있는 튼튼한 토대가 마련되었다. 이것은 프로그램과 기계 사이의 관계를 바꿔 놓았다. 과거에는 프로그램의 과제가 기계에 지시를 내리는 것이었다면, 이제는 기계의 과제가 프로그램을 실행하는 것이 되었다. 이것은 또한 프로그램의 지위도 변화시켰다. 과거에는 그것이 어떤 실험적 증거가 있어야 지지되는 추측(conjecture)에 불과했다면, 이제는 엄밀하게 증명된 정리(theorem)의 지위를 획득할 수 있게 (때로는 실제로 그렇게) 되었다. (과거에는 프로그래밍에 대한 책들이, 저자가 서문에서 그 책에 수록된 모든 프로그램들을 컴퓨터로 점검했다고 단언함으로써 추천을 받곤 했다. 70년대 중반에는 저자가 자기 책에 수록된 프로그램을 하나도 점검하지 않았다고 단언함으로써 추천을 받은 첫 번째 책이 등장했다. 역자 주: "나는 그것이 옳다고 증명은 했지만, 시험해 보지는 않았습니다. (I have only proved it correct, not tried it.)"라는 커누스(Knuth)의 말이 유명하다. [http]http://www-cs-staff.stanford.edu/~knuth/faq.html 참고.) 우리가 그 추측(conjecture)과 정리(theorem)에 "프로그램"이라는 같은 용어를 계속 사용하고 있다는 사실은 유감스럽다. 이것이 많은 혼동의 근원이기 때문이다.

전산의 지난 10년은 때때로 모듈화(modularity)의 10년이라고 불리지만, 이것은 전체 이야기의 일부일 뿐이다. 앞에서 언급한 대로, 알고리듬에 대해 추론할 수 있는 튼튼한 토대를 통해 이론상 우리는 익숙한 수학적 기반 위에 서게 되었지만, 사실 이론상 그럴 뿐이었다. 어떠한 야심적이고 정교한 (예컨대 고급 컴파일러와 같은) 프로그램이라도 수학의 대상이라고 부르기에는 다소 주저하게 된다. 이런 프로그램은 방대하고, 설계상 많은, 때로는 상충되는 목표들을 추구해야 하며, 최종적인 정당화 과정에는 여러 가지 미묘한 논의들이 종종 요구된다. 어떤 "분할 정복(divide-and-conquer)"의 형태가 분명히 보인다. 하지만 정작 나눠야 하는 일의 양은 정해져 있지 않다. 나눌 부분들을 제대로 선택하지 않으면 그 양쪽 경계에서 모두 일의 양이 증가하는 불운을 겪을 수 있다! 모듈화가 추진된 기원은 유연성(flexibility)에 대한 열망, 특별히 꽤 큰 프로그램의 내용을 "모듈들"로 나누는 방법에 대한 열망에서 비롯되었다. 여기서 모듈이란, 전체 프로그램의 정확성을 손상시키지 않으면서 다른 것으로 대체할 수 있는, 분명하게 한정된 내용의 각 부분들을 말한다. 이것은 어떤 수학 이론에서 그 정리들 중 하나에 대한 증명을, 그 이론 전체에 영향을 주지 않으면서 다른 것으로 대체할 수 있는 것과 똑같은 방식이다. 하지만 이제 강조점은 그러한 단순한 대체 가능성으로부터 전체 과제를 어떻게 가장 효과적으로 쪼갤 것인가의 질문으로 옮겨갔다. 이러한 요구는 우아함(elegance)이 더 이상 있으나마나한 사치가 아니라, 성공과 실패를 가늠하는 것이 되었음을 말해 준다.

전산의 출현을, 과학적 사고의 기법들에 어울리고 또 그것을 필요로 하는 활동이라는 식으로 대충 보는 시각은 이제 그만 버리도록 하자. 수학이 보편성, 정밀성, 신뢰성을 결합하는 고유한 방식을 가지고 있듯이, 전산과학이 뚜렷이 수학적인 느낌을 갖는 분야로서 출현한 것은 놀랄 일이 아니다.

* * *

기능(craft)에서 과학으로 전이된 모든 것들과 같이, 전산과학의 출현은 긴장과 불안을 야기했고, 널리 환영받지 못했다. 전산 기능인들은 그것에 위협을 느꼈고, 여러 수학과들에서는 자기의 훌륭한 학생들이 갈등하게 되거나 전향해 버리는 전혀 생각지도 못했던 일에 대해 몹시 분개하게 되었다. 하지만 경쟁의 요소가 없다 해도, 수학자들 사이의 어떤 불편한 느낌은 이해할 만하다. 전산과학이라는 그들이 완전히 무시해 왔던 분야가 수학 일반에 깊은 영향을 미칠 수 있게 되었기 때문이다. 사실 그렇게 될 것이라고 기대되는데, 이런 기대가 왜 타당한지 이해하기 위해 우리는 다음의 내용을 생각할 필요가 있다.

모든 시대에 걸쳐서 교육 활동에는 양 극단이 있어 왔다. 한 쪽 끝에는 길드(guild)가 있다. 여기에서 지식은 잘 보호되는 비밀로 지켜지며, 그 이유 때문에 명시적으로 공식화되는 일이 전혀 없다. 도제(apprentice)는 7년 동안 고생하며 스승(master)과 함께 지내면서, 말하자면 삼투(osmosis) 현상처럼 기능을 흡수한다. 다른 한 쪽 끝에는 대학이 있다. 여기에서 학생들은 교수의 강의를 들으며, 교수는 자기 지식과 핵심적인 능력의 요소들을 최대한 명시적으로 공식화하기 위해 노력하므로 그것은 대중의 영역으로 내놓인다. 이러한 양 끝 사이에서 수학은 기묘한 이중적 위치를 차지한다. 수학의 결과들은 공개 발표하고 (많은 수학 커리큘럼들이 매우 많이 "지식 지향적"이라는 점에서) 꽤 개방적으로 가르치지만, 수학을 어떻게 하는가에 대해서는 거의 명시적으로 가르치지 않는다. 수학의 방법론은 명시적으로 문제가 되는 주제가 아니며, 우리가 곧 보게 되겠지만, 수학자들이 위협을 느낄 때는, 그들은 자기 길드 회원들의 수용 능력에 대해 위협을 느낄 때이다. 여기에서 우리는 그들이 수학을 어떻게 하는지 가르치고 싶어 하지 않는 것이 아니라, 자기도 그것을 어떻게 하고 있는지 모르기 때문에 그것을 가르칠 수 없는 것이라는 사실에 주목한다.

전산과학이 수학의 한 분야로서 도래하고 있지만, 몇 가지 중요한 측면에서는 평균적인 것과 매우 다르다. 우선, 전산과학은 지식 지향성이 매우 적다. 이것은 아마도 지식은 항상 특정 문야에 대한 것이지만, 컴퓨터는 진정으로 "범용"이라는 칭호에 합당하다는 사실에서 비롯된 결과일 것이다. 둘째로, 형식 논리나 일반적인 형식을 갖춘 기법들은 더욱 더 중요한 역할을 한다. 이것은 (i) 형식을 갖춘 기법들이 프로그래머가 다뤄야 하는 복잡함의 유형을 통제하는 데에 필수불가결하기 때문이며, (ii) 그 기계적 해석가능성 덕분에 어떠한 프로그래밍 언어도 일종의 형식 시스템의 모습을 띄기 때문이며, (iii) 해석되지 않은 식들을 기계적으로 처리하는 심벌의 조작은 전산과학자들에게는 매우 자연스러운 일이기 때문이다. 셋째로, 전산과학은 방법론에 대한 질문이 중심적이고 명시적으로 문제가 되는 분야이다. 뒤의 두 가지 특징들은 물론 밀접하게 연관되어 있다. 형식적 논의(argument)에서는 (그것이 기계화되었든 그렇지 않든 간에) 논의의 구조가 매우 명시적으로 주어지기 때문에 누구도 그것을 알게 되지 않을 수가 없다. 다른 식으로 말하자면, 오늘날의 일반적인 수학자가 자기가 수학을 어떻게 하는지 모르며 따라서 어떻게 그것을 하는지 가르칠 수 없는 이유는, 그가 비형식적인 논의에 크게 의존하기 때문이다. 비형식성은 수학 길드 회원의 증표(hallmark)이다.

사람들이 추론하는 방식을 흉내 내야 한다는 철학적인 의무에서 논리를 해방시킴으로써 효과적으로 계산을 설계하는 길을 열어 놓았고, 이로써 형식을 갖춘 기법들의 적용 범위를 크게 넓혔다. 기술적인 중요성 외에도, 이러한 발전은 문화적인 의의도 있다. 그런 중립적인 방식에 의해 명시적으로 논의를 진행함으로써, 가르치는 것이 가능한 수학적 방법론이라는 실체적인 내용이 제공될 수 있게 되었기 때문이다. 길드의 비밀스러운 기능이 바야흐로 공공의 영역으로 옮겨지려 하고 있다.

주목할 만한 선견지명의 한 예로서, 이것은 일찍이 1967년에 (스탠포드 대학교의) 존 맥카티(John McCarthy)가 쓴 글에서 예견되었다.

"다음 세기에는 전산과 수학적 논리의 관계를 통해 지난 세기의 분석과 물리학의 관계에서처럼 많은 결실을 보게 될 것이라는 기대는 이치에 맞다. 이러한 관계의 발전을 위해 양쪽 모두의 응용과 수학적 우아함에 대한 관심이 요구된다."

여기에 한 가지만 더한다면, 거의 20년이 지난 이제 우리는 감히 조금 더 나아가 수학 일반까지 포함하고자 하는 것이다. 이것은 프로그램과 증명 사이의 유사성이 점점 더 가까워지고 있기 때문이다. 이것은 논리학자 페르 마틴-뢰프(Per Martin-Löf)에 의해 이론적 기반 위에서 예견된 바 있는데, 그는 이렇게 썼다.

"그것(=충분히 명료한 논리 구조를 갖는 고급 언어를 만드는 것)은 프로그래밍을 엄밀함과 아름다움이라는 면에서 수학의 정리를 증명하는 활동과 유사하게 만들었다. (이러한 유사성은 실제로 어떤 의미에서는 이후에 좀 더 분명해질 것이다.)"

또 이렇게 썼다.

"사실, 나는 논리의 관점에서 더욱 더 만족스러운 고급 프로그래밍 언어를 찾는 일이, (구성적인) 수학을 적절하게 표현할 수 있는 언어를 찾는 것으로 그칠 것이라고는 생각하지 않는다."

이것과 별개로 추가하자면, 프로그램과 증명 사이의 유사성은 꽤 실제적인 경험들을 통해 우리를 강력하게 설득해 왔다. 이것은 해당 객체를 구성하는 프로그램의 형태를 통해 존재 증명을 하는 수준 이상의 것이다. 어떻게 하여 구성적이지 않게 정의된 객체들의 속성은, 프로그램을 설계하고 매만지는 표준적인 기법들을 사용하여, 그 객체들을 구성하는 프로그램들로부터 우아하게 유도되어 왔다. (예를 들어, 프로그램에서 어떤 함수의 입력과 출력이 대칭이 될 때까지 그 함수를 계산하도록 프로그램을 매만져서, 그 함수가 자기 자신의 역함수(inverse)임을 보일 수 있다.) 그리고 한 걸음 더 나아가, 프로그램 설계의 기법들은 증명의 설계에 동등하게 성공적으로 적용되어 왔다. 특별히 지난 경험에 따르면 프로그래밍 방법론과 수학적 방법론은 전혀 동떨어진 것이 아니라는 사실을 강하게 느낄 수 있다.

내가 존경받을 만한 과학자인 체하자면, 대중 앞에서 수정 구슬로 점치는 식의 일은 삼가야 하겠지만, 컴퓨터과학자들의 일과 수학자들의 일의 질적 수준이 지금보다 몇 배나 더 나아지는 매혹적인 미래의 가능성이 확실히 보인다. 이 미래에 우리는 수학적인 우아함이 중요하다는 것에 동의할 뿐만 아니라, 그것을 의식적으로 추구하도록 가르치기도 할 것이다. 이 미래에 우리는 좋은 표기법(notation)이 도움이 된다는 것에 동의할 뿐만 아니라, 간편하게 다룰 수 있도록 맞춰진 표기법들을 설계하는 방법을 실제로 가르치기도 할 것이다. 이 미래에는 프로그램들이 손으로 만질 수 있는 논의의 아름다움을 보여줄 것이며, 사전들은 더 이상 수학을 (콘사이스 옥스퍼드 사전에서처럼) "공간과 수와 양에 대한 추상 과학"이라고 정의하는 대신, "효과적인 추론을 위한 기술이자 과학"이라고 정의할 것이다.

오스틴(Austin)에서, 1985년 10월 13일

에처 W. 다익스트라

prof. dr. Edsger W. Dijkstra

Department of Computer Sciences

The University of Texas at Austin

Austin, TX 78712 - 1188

United States of America.

위의 글은 "The Mathematical Intelligencer"에 실렸다. 나는 다음의 "스탠리 질의 게임(Game of Stanley Gill)"도 (주옥같은 글로서) 포함시키려고 생각했었다.

스탠리 질의 게임은 네 개의 정수 변수 x, y, u, v와 두 개의 양수 상수 X, Y로 시작된다. 이 게임의 시작 위치는 x = X, y = Y, u = X, v = Y이고, 다음의 움직임을 할 수 있는 한 많이 함으로써 이뤄진다.

x y

이 게임은 x = y, (x+y)/2 = gcm(X, Y) 역자 주: X와 Y의 최대공약수(Greatest Common Divisor), (u+v)/2 = scm(X, Y) 역자 주: X와 Y의 최소공배수(Smallest Common Multiple)에서 마치는데, 이 결론은 각 움직임이 다음을 만족한다는 사실에서 비롯된다.

0 0 gcd(x, y) = gcd(X, Y)

x.v+y.u = 2.X.Y

EWD





sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2004-12-04 20:17:42
Processing time 0.0062 sec