Korean Article Bank

한국신학논문은행에 대하여

2007/06/30 (02:52) from 84.173.184.153' of 84.173.184.153' Article Number : 521
Delete Modify Hofstadter Access : 5975 , Lines : 339
기술층위와 컴퓨터 체계
Download : 기술층위와 컴퓨터 체계 Douglas R_ Hofstadter.htm (91 Kbytes)



기술층위와 컴퓨터 체계 : Douglas R. Hofstadter




 
 
   







2006년 9월 5일 13:47:10 GMT의 http://www.aistudy.com/ai/GEB_computer.htm에 대한 G o o g l e의 캐시입니다.
G o o g l e '저장된 페이지'는 웹을 검색한 당시의 문서의 스냅샷입니다.
페이지 내용이 변경되었을 수 있습니다. 강조표시없이 현재 페이지를 보려면 여기를 클릭하세요.
이 저장된 페이지는 더이상 제공되지 않는 이미지를 참조하고 있을 수 있습니다. 저장된 텍스트만 보려면 여기를 클릭하세요.
이 페이지에 링크하거나 북마크에 추가하려면 다음 URL을 사용하세요: http://www.google.com/search?q=cache:qfsE2nktdLQJ:www.aistudy.com/ai/GEB_computer.htm+%EC%9E%AC%EA%B7%80+%EC%B0%BD%EB%B0%9C&hl=ko&ct=clnk&cd=23&gl=de


Google은 이 페이지의 작성자와 관련이 없으며 콘텐츠에 대한 책임이 없습니다.
다음 검색어가 강조표시되었습니다:  재귀  창발  



--------------------------------------------------------------------------------

기술층위와 컴퓨터 체계


괴델, 에셔, 바흐 : Douglas Hofstadter 저서, 박여성 옮김, 까치, 1999 (원서 : Godel, Escher, Bach : an Ethernal Golden Braid, Harper-Collins Pub, 1979), Page 369~400



기술층위

"덩어리" 만들기 [응축] 와 체스 실력

유사한 층위들

컴퓨터 체계

명령과 데이터

기계언어 대 어셈블리 언어

프로그램들을 번역하는 프로그램들

더 높은 층위의 언어 , 컴파일러, 해석장치

부트스트래핑

작동하는 프로그램들을 기술하는 층위

기계언어 층위:

마이크로 프로그래밍과 운영체계

사용자와 시스템을 편안하게 보호한다

컴퓨터는 초유연한가 . 혹은 초엄격한가?
낌새를 알아차리고 프로그래머를 앞지르기

인공지능의 진보는 곧 언어의 진보이다

편집광과 운영체계

소프트웨어와 하드웨어 사이의 경계

중간 층위들과 날씨

토네이도에서 쿼크까지

초전도성 : 재규정의 "이율배반"

"봉쇄"

응축과 결정론 사이에서의 선택

"컴퓨터는 우리가 명령한 것만을 수행할 수 있다"

두 가지 유형의 체계

부수현상

정신 대 두뇌


기술층위
괴델의 연쇄체G 와 바흐의 푸가 : 이 양자는 상이한 층위들에서 이해될 수 있는 속성을 가진다. 우리 모두 그러한 것에 익숙하고 별다른 어려움 없이 다루어가다가도 어떤 경우에는 큰 낭패를 겪기도 한다. 예를 들면 우리는 인간이 엄청나게 많은 수 (약 25 조 개) 의 세포로 이루어져 있다는 것을 안다. 따라서 우리가 하는 모든 일이 기본적으로 세포에 비추어 기술될 수 있다는 것도 안다. 아니면 심지어 분자의 층위에서 기술될 수도 있다. 우리들 대부분은 이것을 실제적으로 받아들인다. 그래서 우리가 스스로를 관찰하는 것보다 더 깊은 층위에서 우리를 관찰하는 의사에게 간다. 우리는 DNA 나 "유전공학" 에 대해서 읽으면서 커피를 마신다. 우리는 그것들을 서로 분리하는 가운데, 우리 자신에 대한 안전히 다른 이 두 가지 모습을 조화시켜왔다. 우리 자신에 대한 현미경적 기술을 우리 자신이 느끼는 것과 조화시킬 가능성은 전혀 없다. 따라서 우리 자신에 대한 분리된 표상들을 우리 마음의 분리된 "구역들" 에 저장하는 것이 가능하다. 드물기는 하지만 우리는 우리 자신의 두 개념들 사이를 왔다갔다 하면서, "어째서 이 완전히 다른 두 방식이 바로 나 자신일 수 있는가?" 라고 자문할 수 밖에 없다.

아니면 웃고 있는 셜리 맥클레인을 보여주는 일련의 텔레비전 화면들을 보자. 그 연속화면을 살펴보면, 실제로 어떤 여자를 보는 것이 아니라 한 평평한 화면 위로 켜졌다 꺼졌다 하는 주사선을 이루는 점들의 집합을 본다는 것을 안다. 우리는 이 사실을 알지만, 그것은 우리의 마음으로부터 가장 먼 것이다. 우리는 화면 위에 펼쳐지는 것에 대하여 극단적으로 대립하는 두 개의 표상을 가지는 것이다. 하지만 그로 인해 혼란을 겪지는 않는다. 우리는 간단히 다른 하나를 배제하거나 관심을 다른 데로 옮긴다 - 우리가 해야 할 것은 그것이 전부이다. 어느 것이 "더 있을 법한 일인가?" 그것은 당신이 사람인가 아니면 개인가, 컴퓨터인가 아니면 텔레비전 수상기 세트인가에 따라서 좌우된다.

"덩어리" 만들기 [응축] 와 체스 실력
인공지능 연구의 가장 중요한 문제들 중의 하나는 하나의 기술 층위를 받아들일 수 있는 체계를 어떻게 구축할 것이며, 다른 층위를 어떻게 만드는가를 규명하는 두 가지 기술 사이의 괴리를 어떻게 중재하는 가이다. 이 괴리를 이공지능 연구에 끌어들이는 한 가지 방식이 있는데, 체스를 잘 두도록 컴퓨터에 프로그래밍하는 지식의 발전을 예로 들 수 있다. 1950 년대와 60 년대 초에는, 그 어떤 체스 챔피언보다도 가능한 행마의 그물을 더 잘 "예측할 수" 있는 기계를 만드는 데 역점을 두었다. 하지만 이 목표가 어느 정도 달성되었음에도 불구하고, 컴퓨터의 체스 수준은 본질적으로 개선되지 않았고 체스를 잘 두는 고수를 능가하지 못하는 결과가 나왔다. 실제로 체스 고수는 오늘날 존재하는 가장 훌륭한 체스 프로그램도 이길 수 있다고 안심할 수 있다.

그에 대한 이유는 사실 이미 수년 전에 출간되었다. 1940 년대 네덜란드의 심리학자인 아드리안 드 흐로트는 체스의 초보자와 고수들이 체스를 둘 때, 행마의 판세를 어떻게 지각하는가를 연구했다. 그의 연구결과를 간략히 말하자면, 고수들은 체스말을 "덩어리 (chunks)" 로 된 조각들의 분포로 지각한다는 것이다. 즉 "K5 에 흰색 폰 (pawn), Q6 에 검은 색 루크 (rook)" 처럼 직접적으로 기술하는게 아니라, 체스판 전체에 대한 한 차원 높은 정신적인 이미지를 만든다는 것이다. 이 가설은 체스 고수들이 체스판을 5 초 정도 본 후에, 초보자들이 하는 것과는 비교도 되지 않을 정도의 빠른 속도로 그 판을 복기하는 것을 통해서도 입증되었다. 특히 시사하는 바가 컸던 것은 고수들의 실수는 체스 말의 그룹을 잘못된 자리에 놓는다는 것 - 따라서 그 시합은 전략적으로 거의 변화가 없다 - 이었는데, 초보자들의 눈에는 전혀 다르게 보였다는 점이다. 시합을 실제로 복기하는 대신에, 판 위에 체스 말들을 엉터리로 놓고 동일한 실험을 해본 결과 또한 앞의 가설을 확인시켜 주었다. 고수들 또한 엉터리로 놓은 체스판을 복기하는 데 있어서는 초보자들보다 전혀 나을 것이 없었다.

이로부터 정상적인 체스에서는 일정한 행마 패턴이 늘 다시 나타나고 , 고수는 더 높은 수준의 패턴을 구사한다는 결론을 내릴 수 있다. 고수는 초보자와 다른 층위에서 생각한다. 개념도구 또한 다르다. 사실 고수들도 초보자들보다 수를 그리 더 멀리 내다보는 것은 아니며, 불과 몇 개의 행마만 더 가진다는 점을 알면 놀랍다. 그들이 쓰는 속임수는 체스판을 마치 여과기가 작동하듯이 지각한다는 점이다. 고수들은 말의 위치를 볼 경우 문자 그대로 나쁜 행마는 보지 않으며, 마찬가지로 행마를 관찰할 경우에 초보자와 마찬가지로 규칙에 반하는 행마를 두지 않는다는 것이다. 그러나 체스를 좀 두어본 사람의 지각은 루크의 대각선 행마가 폰에 의해서 포위당하는 따위의 생각은 하지 않도록 조직되어 있다. 이와 비슷한 방식으로, 수준급의 체스 선수들은 체스판을 관찰하는 방식에 있어서 더 높은 수준의 조직층위들을 구축했다. 결국 그들에게는 대부분의 사람들에게서와 마찬가지로, 규칙에 반하는 행마들이 오지 않는 것처럼 나쁜 행마들도 나타나지 않는다. 우리는 그것을 가능성이라는 거대한 수형도 속에 나타나는 함축적인 가지치기라고 부를 수 있을 것이다. 이와 달리 구체적인 가지치기는 행마를 검토하고 일단 살펴본 후 그것을 더 이상 추구하지 않으려는 결정이다.

이 구별은 예를 들면 수학과 같은 다른 종류의 지적인 활동에도 똑같이 적용된다. 천부적인 수학자는 보통 덜 천부적인 사람들이 하듯이 원하는 정리로 가는 모든 종류의 오류경로를 다 점검하지는 않는다. 오히려 가장 유력한 경로의 "냄새를 맡고는" 곧바로 결정한다.

예측에 의존하는 컴퓨터-체스 프로그램은 더 높은 층위에서 생각하는 것을 배우지 못했다. 그때 적용된 전략이란 단지 억지로 예측하고 모든 종류의 저항을 분쇄하기 위한 것이기 때문이었다. 그러나 이것은 작동하지 않았다. 아마 언젠가는 충분한 추진력을 가지는 예측 프로그램이 가장 우수한 인간 기사를 이길지도 모른다. 그러나 그것은 지능이 체스판, 텔레비전 화면, 인쇄된 책의 면, 그림 등 모든 복잡한 것에 대한 높은 층위의 기술을 만드는 능력에 결정적으로 좌우된다는 것과 비교해보면, 별 볼일 없는 진전에 불과하다.

유사한 층위들
일반적으로 우리는 마음속의 어떤 상황을 이해하기 위해서 한 번에 하나 이상의 층위를 필요로 하지는 않는다. 게다가 한 개별적인 체계의 상이한 기술들은 개념상 서로 너무나도 판이하기 때문에, 앞서 언급했듯이, 그 둘을 같이 유지하는 것은 전혀 문제가 되지 않는다. 그것들은 간단히 정신의 분리된 여러 구역에서 유지된다. 그럼에도 불구하고 하나의 체계가 어떤 식으로든 유사한 다양한 층위들에 대한 둘 또는 그 이상의 기술을 허용할 경우에는 혼란스럽다. 이런 경우에는 체계에 대하여 숙고할 경우에 다양한 층위들을 혼동하지 않는 것이 어렵기 때문에, 쉽게 방향감각을 완전히 상실할 수 있다.

의심의 여지없이, 이것은 우리가 우리 자신의 심리에 대해서 숙고할 경우에 - 예를 들면 인간의 상이한 행동에 대한 동기를 이해하고자 할 경우에 - 생기는 일이다. 인간의 정신적인 구조 속에는 여러 층위가 존재한다 - 그것들은 분명히 우리가 아직은 잘 이해하지 못하는 체계이다. 그러나 인간이 어째서 그런 행동을 하는가에 대한 이론들이 수백 가지가 있으며, 각 이론은 이 층위들의 어느 정도의 깊이에서 다양한 심리적 "힘" 이 발견될 수 있는가에 대한 일정한 전제에 기대고 있다. 우리가 현재 시점에서 모든 정신적인 층위들에 대하여 전적으로 동일한 종류의 언어를 사용한다면, 개별적인 층위들 사이의 혼란만 부채질하며 수백 개의 오류이론을 양산할 것이다. 예를 들면, 우리는 성, 권력, 명예, 사랑 등에 대한 "본능적 욕구" 를 언급한다. 하지만 이러한 본능적 욕구들이 인간의 정신적인 구조의 어디에서 유래하는지 알지 못한다. 이러한 점을 지적하지 않더라도 단적으로 말하고 싶은 것은, 우리 자신의 정체에 대하여 우리가 겪는 혼란은 분명히 우리가 매우 많은 층위들이 집합으로 이루어지며, 이 모든 층위에서 우리 자신을 기술하는 중복되는 언어를 사용한다는 점과 관계가 있다는 것이다.

컴퓨터 체계
하나의 체계에 대한 많은 기술층위들이 공존하며 모든 층위들이 개념상 매우 근접해 있는 또 다른 영역이 있다. 그 보기로 컴퓨터 체계를 언급하고자 한다. 컴퓨터 프로그램이 작동할 때 여러 층위에서 관찰될 수 있다. 각 층위마다 컴퓨터 과학의 언어로 기술되며, 그로 인해서 이 모든 기술들은 어느 점에서는 서로 유사해지게 된다 - 그러나 상이한 층위들에서 취해지는 시각들 사이에는 현격한 차이가 존재한다. 그 기술은 가장 낮은 층위에서는 마치 텔레비젼 화면의 주사선을 이루는 각 점 (도트) 들을 기술하는 것만큼 복잡하다. 그러나 일정한 목적을 위해서는, 이것은 결정적으로 중요한 시각이다. 가장 높은 층위에서는 그 기술은 전반적으로 덩어리를 이루며, 수많은 동일한 개념들이 가장 낮은 층위에는 물론 가장 높은 층위에서도 나타남에도 불구하고 판이한 느낌을 전달한다. 높은 층위의 기술에서 나타나는 덩어리는 체스 고수의 그것에 비견되며, 마치 텔레비젼 화면의 덩어리로 응축된 기술에 비견된다 : 그것들은 낮은 층위에서는 서로 무관한 것으로 보이는 (그림 57 참조) 일련의 사물들을 응축된 형태로 집약한다. 이제 사안이 너무 추상적이 되기 전에, 컴퓨터에 대한 구체적인 사실들을 다루어보자. 일단 컴퓨터 체계가 가장 낮은 층위에서 어떻게 보이는가 간단히 살펴보고자 한다. 가장 낮은 층위? 아니, 가장 낮은 층위는 아니다. 왜냐하면 나는 소립자들 - 가장 낮은 층위이다 - 을 말하려는 것은 아니기 때문이다.



그림57   “응축(덩어리 형성) ”의 모습 : 일련의 사물들이 유일한 “덩어리 ”로 재인식된다. 덩어리들 사이의 경계는 마치 세포막이나 국경선과 비슷하다 : 그것은 내부에 존재하는 덩어리들에 독자적인 정체성을 부여한다. 우리는 맥락에 따라서 그 덩어리의 내부구조를 무시하거나 감안할 것이다.

우리는 컴퓨터의 개념적 토대로서, 하나의 기억장치 (memory) 와 중앙처리장치 (CPU : central processing unit) 와 몇 가지의 입-출력 장치들 (input-output [I/O] devices) 을 가진다. 일단 기억장치부터 설명하자. 기억장치는 우리가 낱말이라고 부르는 여러 물리적인 단위들로 분할된다. 구체적으로 말하자면, 그 기억장치가 6 만 5,536 개의 낱말들을 포함한다고 가정해보자 (이 수는 2 를 16 제곱하면 얻을 수 있는 전형적인 보기이다). 하나의 낱말은 다시 컴퓨터 과학에서 원자로 간주되는 비트 (bit) 로 분할된다. 하나의 전형적인 낱말에서 비트의 수는 대략 36 개이다. 물리적으로 말하자면, 하나의 비트는 양극 중에서 하나의 위치에 설 수 있는 자석 "스위치" 에 불과하다.

O
O
X
O
X
X
X
O
X
O
O
X
X
O
O
X
O
X
X
X
X
X
X
O
X
X
O
O
X
X
X
O
O
O
O
O


---- 36 비트로 된 낱말 ----

우리는 그 양극을"위" 와 "아래", "X" 와 "O" 또는 "1" 과 "0" 으로 표시할 수 있다. 이 중에서 일반적으로 세번째 방식이 통용된다. 그것은 아주 효과적이기는 하지만, 컴퓨터가 그 심층적인 본질에 있어서 수를 저장한다는 오해를 연상시킬 수 있다. 그러나 그런 연상은 잘못된 것이다. 아이스크림 콘 값이 2 비트가 아닌 것처럼, 36 비트의 집합은 수 자체와는 무관하다. 용도에 따라서 돈이 다양한 일을 할 수 있듯이, 기억장치 속에 있는 낱말도 다양한 기능을 발휘할 수 있다. 물론 이 36 비트는 가끔은 실제로 수를 이분법으로 표상할 것이다. 다른 경우에는 한 텍스트 안에 있는 몇 개의 점 (도트) 드을 나타낼 것이다. 또 다른 경우에는 한 텍스트 안에 있는 몇 개의 글자를 표상할 수도 있다. 기억 속에서 낱말이 생각되는 방식은 전적으로 프로그램에서의 그 낱말의 사용법에 좌우된다. 당연히 낱말은 카논에서의 음표처럼 하나 이상의 역할을 할 수 있다.

명령과 데이터
낱말에 대한 해석 중에서 아직 언급하지 않은 것이 있는데, 바로 낱말을 "명령 (instruction)" 으로 보는 시각이다. 기억장치 속에 저장된 낱말들은 연산의 대상인 데이터뿐만 아니라, 데이터를 처리해야 하는 프로그램들도 포함한다. CPU 와 일부분의 낱말에 의해서 실행될 수 있는 제한된 수의 연산 레퍼토리들이 존재하는데, 통상적으로 최초의 몇 비트로 된 낱말의 일부분이 실행되어야 할 명령의 명칭으로 해석될 수 있다. 그러나 명령으로 해석된 낱말 속의 나머지 비트들은 무엇을 나타내는가? 대부분은 기억장치 속에 있는 어떤 다른 낱말들에 연산이 적용되는지를 말해준다. 다른 말로 하자면, 나머지 비트들은 기억장치 속에 있는 다른 낱말 (들) 에 대한 방향지시장치 (pointer) 를 구성한다. 기억장치 속에 있는 모든 낱말은 어느 거리에 있는 집과 같은 특정한 위치를 가지는데 그것을 주소 (address) 라고 부른다. 기억은 하나 또는 그 이상의 여러 "거리들" 을 가질 수 잇는데, 그것을 "쪽수" 라고 부른다. 말하자면 주어진 낱말은 그 쪽수 번호 (기억장치에 쪽수가 매겨져 있다면) 를 통하여 이 쪽에서의 자신의 위치와 더불어 주소가 매겨진다. 따라서 한 명령의 "방향지시" 부분은 기억장치 속에 있는 일정한 낱말 (들) 의 번호가 매겨진 주소이다. 거기에는 어떤 제한도 없다. 따라서 하나의 명령은 심지어는 자기 자신에게도 "방향지시" 를 내려서, 그 결과 명령이 실행될 경우에 자기 자신에게도 변화를 야기할 수도 있다.

컴퓨터는 어떤 시점에서 어떤 명령을 실행해야 하는지를 어떻게 아는가? 이것이 CPU 에 수록된다. CPU 는 명령으로 해석될 수 있는 가장 가까운 낱말을 지시하는 (즉 그것의 주소를 저장하는) 특별한 방향지시장치를 가진다. CPU 는 기억장치로부터 그것을 꺼내서, 전자방식으로 CPU자체도 속하는 특정한 낱말로 복사하다 (CPU 안에 있는 낱말들은 통상 "낱말" 이 아니라, 레지스터 [register] 라고 불린다). 그러면 CPU 는 그 명령을 수행한다. 이제 그 명령은 실행되어야 할 매우 많은 유형의 명령을 요구할 것이다. 대표적인 보기를 들자면 다음과 같다 :

더하라(ADD) 그 명령 속에 지시된 낱말을 레지스터에 더하라.

(이 경우, 지시된 그 낱말은 분명히 수로 해석되었다.)

인쇄하라(PRINT) 그 명령에 지시된 낱말을 문자로 인쇄하라.

(이 경우, 그 낱말은 분명히 수가 아니라, 철자의 연쇄체로서 해석되어야 한다.)

이동하라(JUMP) 그 명령이 지시된 낱말로 이동하라.

(이 경우, CPU 는 그 특정한 낱말을 가장 가까운 명령으로 해석하라고 요구 받는다.)

그 명령이 구체적으로 다른 것을 규정하지 않는다면, CPU 는 곧바로 연이어 나오는 낱말을 택해서 그것을 명령으로 해석할 것이다. 다른 말로 하자면, CPU 는 마치 집배원처럼 그 "길" 을 순차적으로 내려가서, 매 낱말을 명령으로 해석한다고 가정할 수 있다. 그러나 이 정렬된 순서는 JUMP 나 혹은 다른 명령에 의해서 중단될 수 있다.

기계언어 대 어셈블리 언어
이것은 기계언어에 대한 아주 간략한 스케치이다. 이 언어에서는 다양한 유형의 연산이 더 이상 확장될 수 없는 유한한 레퍼토리를 구성한다. 그래서 모든 프로그램은 제아무리 규모가 크고 복잡하다고 할지라도 이런 유형의 명령의 조합으로 이루어져야 한다. 기계언어로 쓰인 프로그램들을 관찰하는 것은 대략 DNA 분자를 원자 단위로 관찰하는 것과 비교될 수 있다. DNA 분자의 핵산 배열순서를 보여주는 그림 41 을 다시 한번 본다면 그리고 모든 핵산이 대략 수십 개의 원자를 포함하는 것을 보고, (인간은 말할 것도 없고) 작은 바이러스에 대한 DNA 도식을 원자 단위로 규정한다면, 우리는 기계언어로 복잡한 프로그램을 쓴다는 것이 무엇을 의미하는지 알 수 있을 것이며, 기계언어로 쓰인 기술에만 접근경로를 가질 경우에 프로그램에서 일어나는 일을 이해한다는 것이 무엇인가에 대해서 감을 잡을 수 있을 것이다.

그러나 컴퓨터 프로그래밍은 원래 이른바 회로들을 연결함으로써 적절한 연산이"고정배선 되도록", 가능하면 기계언어보다 낮은 층위에서 이루어졌다는 것을 말해야겠다. 물론 현대적인 기준에 비추어보면, 그것은 그야말로 초보적인 수준이다. 그것을 처음 시도했던 사람들은 현대의 컴퓨터의 개척자들이 느낀 그 이상의 흥분을 느꼈을 것이다.

이제 우리는 프로그램의 기술의 위계에 있어서 더 높은 층위로 이동하고자 한다. 그것은 바로 어셈블리 언어의 층위이다. 어셈블리 언어와 기계언어는 그리 크게 다르지 않다 : 아주 작은 차이만 있을 뿐이다. 어셈블리 언어의 명령과 기계언어의 명령 사이에는 원칙적으로 1 : 1 대응관계가 존재한다. 어셈블리 언어의 토대가 되는 언어는 기계언어의 개별적인 명령들을 "덩어리" 로 묶어서, 그 결과 하나의 수를 다른 것에 더하는 명령을 필요로 할 때 "010111000" 이라는 비트 연쇄체를 쓰는 대신에, 간단히 ADD 라고 쓰게 한다. 그래서 우리는 주소를 이분법으로 표상하는 대신에, 간단히 이름을 가진 기억 속에 있는 낱말을 지시할 수 있다. 어셈블리 언어로 된 프로그램은 인간이 읽을 수 있도록 만들어진 기계언어 프로그램과 흡사하다. 우리는 한 프로그램의 기계언어 버전을 괴델 수를 매기는 식으로 표기된 난해한 TNT-유도공식과 비교할 수 있으며, 어셉블리 언어로 된 버전은 이해하기가 훨씬 쉬운 원래의 TNT-표기로 된 동형태의 TNT-유도공식과 비교할 수 있다. 아니면, 여기에서 DNA 의 이미지로 되돌아가서, 기계언어와 어셈블리 언어 사이의 차이를, 모든 핵산류를 원자 단위로 힘겹게 분류하는 것과 'A', 'G', 'C' 또는 'T' 같이 간단히 이름을 붙임으로써 분류하는 것 사이의 차이와 비교할 수 있다. 이러한 간단한 "덩어리 형성" 의 연산방식은 개념상 큰 변화는 없지만, 수고를 상당히 덜어준다.

프로그램들을 번역하는 프로그램들
아마도 어셈블리 언어에 있어서 핵심적인 것은 기계언어와의 차이가 아니라, 바로 프로그램이 전적으로 다른 층위에서 만들어질 수 있다는 것이다. 자, 한 번 생각해보자 : 하드웨어는 기계언어로 된 - 비트의 배열로서의 - 프로그램들을 "이해" 하도록 구성되었지, 활자와 십진수를 이해하도록 구성된 것은 아니다. 하드웨어가 어셈블리 언어로 된 프로그램으로 실행된다면 어떻게 될까? 마치 화학물질 대신에 알파벳 활자로 핵산배열이 적힌 종이 위에 세포를 받아들이려는 꼴이다. 아니 세포가 종있장을 가지고 무엇을 하겠는가? 컴퓨터 또한 어셈블리 언어로 된 프로그램을 가지고 무엇을 할 수 있겠는가?

자, 여기서부터 결정적이다. 기계언어로 된 번역 프로그램을 만들 수 있다고 해보자. 어셈블러 (assembler) 라고 불리는 이 프로그램은, 기억 테크놀로지상의 명령의 이름, 십진수, 프로그래머가 쉽게 기억할 수 있는 그밖의 적절한 약호들을 수용할 뿐만 아니라, 단조롭지만 매우 중요한 비트-배열로의 변환을 담당한다. 어셈블리 언어 프로그램이 어셈블링 (즉 번역) 된 후에도, 그 프로그램은 작동되었다 - 또는 오히려 그에 상응하는 기계언어 프로그램이 작동되었다. 그러나 이것은 용어상의 문제이다. 어떤 층위의 프로그램이 실행되는가? 기계언어적인 프로그램이 진행된다고 말해도 결코 틀린 것은 아닐 것이다. 왜냐하면 하드웨어는 어떤 프로그램이 작동해도 늘 운행되기 때문이다. 그러나 작동하는 프로그램을 어셈블리 언어의 입장에서 고찰하는 것도 타당한 일이다. 예를 들면 다음과 같이 말할 수 있다. : "지금부터 CPU 는 '111010000' 이라는 하나의 명령을 수행한다" 라고 말하는 대신에, "지금부터 CPU 는 JUMP 명령을 수행한다" 라고 말할 수 있다. G-E-B   E-G-G 라는 음표를 연주하는 피아니스트가 E-단조의 아르페지오도 연주하듯이. 그것을 더 높은 층위의 시각에서 기술하지 말란 법도 없다. 따라서 우리는 그 어셈블리 언어 프로그램이 동시에 기계언어로 된 프로그램으로도 작동한다고 생각할 수 있다. 우리는 CPU 가 하는 것을 두 가지 방식으로 기술할 수 있다.

더 높은 층위의 언어 , 컴파일러, 해석장치
그 위계질서의 바로 다음 층위는 더 높은 층위의 프로그램들을 더 낮은 층위로 번역하기 위하여 컴퓨터 자체를 이용하자는 매우 강력한 아이디어를 제공한다. 수년간 어셈블리 언어로 프로그램을 만들고 난 후, 사람들은 1950 년대 초반에 프로그램들마다 나타나는 일련의 특유한 구조들이 존재한다는 생각에 이르게 되었다. 그 실행을 연구하는 과정들을 정확히 기술하는 알고리듬을 공식화하려고 할 경우에, 체스에서와 흡사하게, 아마 자연스런 방식으로 나타나는 일정한 기본 패턴이 있는 것으로 보였다. 다른 말로 하자면, 알고리듬들은 그 도움으로 매우 제한된 기계언어나 어셈블리 언어보다는 더욱 쉽고 미학적으로 구체화된 더 높은 층위의 구성성분을 가지는 것으로 보였다. 높은 층위의 알고리듬 성분은 전형적으로 하나 또는 두 개의 기계언어인 성분이 아니라, 모두 다 저장장치에서 반드시 인접할 필요는 없는 일련의 성분들로 구성되어 있다. 그러한 성분은 유일한 단위인 "덩어리 [응축]" 를 통하여 더 높은 층위의 언어로 표상될 수 있다.

모든 알고리듬을 구축할 수 있는 최근에 발견된 성분인 표준 응축 외에도, 사람들은 거의 모든 프로그램들이 훨씬 더 큰 응축들 - 이른바 "슈퍼 응축" 을 포함한다는 것을 알았다. 이 슈퍼 응축들은 프로그램이 더 높은 층위에서 수행해야 하는 과제에 따라서 프로그램마다 상이하다. 우리는 제 5 장에서 슈퍼 응축을 언급한 바 있는데, 거기에서는 그것을 "하위 처리일정" 또는 "처리과정" 이라는 일상적인 이름으로 불렀다. 모든 프로그램 언어의 가장 강력한 확장은 기존 단위로 더 높은 층위의 새로운 단위들을 정의하고 그것을 이름으로 호출할 수 있는 능력일 것이라는 점은 분명해졌다. 이로써 언어로의 응축과정이 구축될 것이다. 프로그래머들은 모든 프로그램들을 구체적으로 복합했을 명령어 레퍼토리를 한정하는 대신에, 마치 한 언어에 고유하게 구축된 것같이 프로그램 안의 어디에서도 사용될 수 있는 모든 것에 이름을 붙인 자신 고유의 모듈을 구성할 수 있다. 물론 한 층위 아래인 기계언어 층위에서는 모든 것이 어쩔 수 없이 늘 동일한 낡은 기계언어 명령으로 구축되었을 것이다. 그러나 그것은 더 높은 층위의 프로그래머들에게 구체적으로 보이지는 않을 것이다. 그것은 암시적인 채로 머물러 있을 것이다.

이런 착상에 기초하여 만들어진 새로운 언어들은 컴파일러 언어라고 불린다(가장 초기의 우아한 이름 중의 하나는 "알골 [Algol], 즉 알고리듬 언어 [Algorithmic Language]" 였다). 어셈블리 언어의 경우와는 달리, 여기에서는 알골로 쓰인 명령어와 기계언어로 쓰인 명령 사이에 1 : 1 대응은 없다. 물론 알골로부터 기계언어로 사상하는 유형이 여전히 있지만, 그것은 어셈블리 언어와 기계언어 사이의 사상보다 훨씬 더 "뒤죽박죽" 이다. 개략적으로 말하자면 알골 프로그램과 그것을 기계언어로 번역한 것과의 관계는 대수학 책에 있는 텍스트 부분을 그것으로부터 유도되는 방정식으로 번역하는 관계에 상응한다 (실은 텍스트를 방정식으로 번역하는 것이 더 복잡하다. 하지만 더 높은 층위의 언어로부터 낮은 단계의 언어로 번역되어야하는 일종의 "풀이" 를 어렴풋이 알 수 있다). 1950 년대 중반에는 컴파일러 언어로부터 기계언어로의 번역을 수행하는 컴파일러라고 불린 프로그램들이 성공적으로 개발되었다.

한편 해석장치도 개발되었다. 컴파일러와 마찬가지로 해석장치는 높은 층위의 언어들을 기계언어로 번역하지만, 일단 모든 명제들을 다 번역하고 나서 기계 코드들을 실행하는 대신에, 한 줄을 읽고 나서 그것을 즉시 실행한다. 이렇게 하면 사용자가 해석장치를 이용하기 위하여 완전한 프로그램을 쓸 필요가 없는 이점이 있다. 사용자는 자신의 프로그램을 한줄 한줄 고안하며 작업을 하는 가운데 그것을 테스트할 수 있다. 그렇게 보면 해석장치와 컴파일러 사이의 관계는 동시통역사와 원고를 옮기는 번역자 사이의 관계와 마찬가지이다. 컴퓨터 언어들 중에서 가장 중요하고 매력적인 것 중의 하나는 ("리스트 처리 [List Processing]" 를 의미하는) LISP 인데, 이것은 알골이 나온 시점과 비슷한 시기에 존 매카시에 의해서 개발되었다. 그 이후로 LISP 는 인공지능 영역의 연구자들에게 대단한 호평을 받게 되었다.

해석장치의 작업방식과 컴파일러의 작업방식 사이에는 흥미있는 차이가 있다. 컴파일러는 입력 (예를 들면, 완성된 알골 프로그램) 을 받아들여서 출력 (기계언어로 된 명령의 긴 연쇄체) 을 산출한다. 이 지점에서, 컴파일러는 자신의 의무를 다한 것이다. 그러면 출력 결과는 처리를 위해서 컴퓨터로 보내진다. 이와 달리, 해석 장치는 프로그래머가 하나의 LISP 명제를 차례차례 입력하는 동안 끊임없이 작동된다. 그리고 각각 그 자리에서 처리된다. 그렇다고 모든 명제가 일단 번역되고 나서 실행된다는 뜻은 아니다. 그렇다면 해석장치는 한줄 한줄로 된 컴파일러에 불과할 것이기 때문이다. 그 대신에 하나의 해석장치 안에는 새로운 행을 읽고 "이해하며", 명령을 실행하는 따위의 연산작업들이 뒤엉켜 있다 : 즉 그것들은 동시에 실행된다.

여기에 좀 확장된 형태의 기본착상이 있다. 새로운 LISP 행이 추가될 때마다, 해석장치는 그것을 처리하려고 한다. 즉 해석장치가 갑자기 활성화되고 그 안에 포함된 일정한 명령들 (기계언어) 이 실행된다는 것이다. 이때 정확하게 무엇이 실행되는가는 당연히 LISP 명제 자체에 좌우된다. 해석장치 안에은 수많은 JUMP 명령들이 있어서, 그 결과 LISP 의 새로운 행은 복잡한 방식으로 - 앞으로, 뒤로, 다시 한번 앞으로 등 - 실행장소를 조절한다. 그래서 모든 LISP 명제는 해석 장치 내부의 한 "경로" 로 변환되며 그러한 경로를 밟음으로써 원하는 효과를 달성한다.

종종LISP 명제를 쉴 새 없이 작동하는 기계언어 프로그램 (LISP 해석장치) 에 넌더리가 난 데이터로 생각하는 것도 유익하다. 그렇게 보자면, 우리는 더 높은 층위의 단계의 언어로 쓰인 프로그램과 그것을 실행하는 기계 사이의 관계에 대해서 다른 이미지를 얻게 된다.

부트스트래핑
물론 그 자체가 하나의 프로그램이기도 한 컴파일러는 일정한 언어로 쓰여야 한다. 최초의 컴파일러들은 기계언어라기보다는 어셈블리 언어로 쓰였다. 그래서 기계언어로부터 진일보한 초기의 이점들을 최대한 활용했다. 이러한 교묘한 관계가 그림 58 에 요약되었다 :



그림58   어셈블러와 컴파일러는 둘 다 기계언어로의 번역장치이다. 직선으로 된 화살표가 그것을 말한다. 뿐만 아니라, 그것들은 그 자체가 프로그램이기 때문에, 원래는 언어로 쓰였다. 파동형으로 된 줄은 컴파일러가 어셈블리 언어로 쓰일 수 있으며 어셈블러는 기계언어로 쓰일 수 있다는 것을 나타난다.

컴파일러들이 더욱 정교해짐에 따라서 사람들은 컴파일러 자체의 확장을 위하여 부분적으로 쓰인 컴파일러를 사용할 수 있다고 생각하게 되었다. 다른 말로 하자면, 일단 최소한의 핵심 컴파일러가 쓰여지면, 그 미니 컴파일러는 (자기 입장에서 보면 다시 훨씬 더 큰 컴파일러들을 번역할 수 있고 최종적으로 완성된 컴파일러를 만드는) 더 큰 컴파일러들을 기계언어로 번역할 수 있다. 이런 과정을 사람들은 [자주독립에 맞먹는] "부트스트래핑" 이라고 부른다. 이런 상황은 모국어의 유창한 습득에 임박한 결정적인 시점에 도달한 아이의 상황과 다를 게 없다 : 그 시점에서부터 아이는 새로운 언어를 습득하기 위하여 언어를 더욱 많이 쓰는 가운데, 어휘와 언어 숙련도를 급성장시킨다.

작동하는 프로그램들을 기술하는 층위
컴파일러 언어들은 일반적으로 그 언어로 쓰인 프로그램을 작동시키는 기계의 구조를 반영하지 않는다. 이것은 고도로 전문화된 어셈블리 언어와 기계언어가 가지지 못한 중요한 장점 중의 하나이다. 물론 어떤 컴파일러 언어 프로그램이 기계언어로 번역되면, 그것으로부터 귀결되는 프로그램은 당연히 기계언어에 종속된다. 그렇기 때문에 우리는 실행되는 프로그램을 기계에 의존하는 방식 또는 기계와 무관한 방식으로 기술할 수 있다. 이것은 우리가 참고문헌을 참조할 때 (출판사와 무관하게) 내용 또는 (출판사를 감안하여) 쪽수와 특정한 쪽의 특정한 자리를 기준으로 하는 경우와 비슷하다.

프로그램이 제대로 작동하는 한, 우리가 그 프로그램을 어떻게 기술하는가 또는 그 프로그램의 작업방식을 어떻게 생각하는가는 거의 중요하지 않다. 일단 어떤 것이 제대로 작동되지 않은 다음에야, 상이한 층위들에서 생각할 수 있다는 것이 중요하다. 예를 들면 기계가 일정한 단계에서 0 으로 나누라는 명령을 받는다면, 기계는 멈추어서 프로그램에서 이 의심나는 연산이 나타나는 장소를 사용자에게 말함으로써, 자신의 문제를 사용자에게 전달할 것이다. 그러나 이러한 구체화는 종종 프로그래머가 자기의 프로그램을 썼던 그 층위보다 낮은 층위에 추어진다. 여기에 그와 같은 삐걱거리는 결과에 이른 프로그램의 세 가지 병행기술이 있다 :

기계언어 층위:
"1110010101110111 이라는 지점에서 프로그램의 실행을 중단하라."

어셈블리 언어 층위:

"DIV (나누기) 라는 명령이 나오면, 프로그램의 실행을 중단하라."

컴파일러 언어 층위:

"대수식 '(A + B) / Z' 의 값을 구하는 동안에 프로그램의 실행을 중단하라."

(컴파일러, 해석장치, 어셈블러 및 기타 자주 이용되는 프로그램들을 만드는) 시스템 프로그래머들의 가장 큰 문제들 중의 하나는, "작동오류 (bug)" 를 가지는 프로그램을 사용하는 사람들에게 전달된 메시지가 낮은 층위보다는 높은 층위의 문제의 기술을 제공하는 방식으로 오류를 발견하는 방법을 찾아내는 것이다. 그것은 우리가 유전자 "프로그램" 에서 뭔가 제대로 되지 않을 때 (예를 들면, 돌연변이), 그 "버그" 가 오직 표현형이라는 높은 층위의 관찰자들에게만 보이지, 유전자형 층위의 관찰자에게는 보이지 않는다는 사실과 흥미있는 대조를 이룬다. 사실 현대 생물학자들은 돌연변이를 유전적 과정의 관찰을 위한 핵심적인 수단의 하나로 사용한다. 왜냐하면 그것이 다양한 차원에서 흔적을 보여주기 때문이다.

마이크로 프로그래밍과 운영체계
현대 컴퓨터 시스템에는 또 다른 여러 위계적 층위들이 있다. 예를 들면 일정한 시스템 - 종종 "마이크로 컴퓨터" 라고 불리는 - 은 심지어 기억장치 속에 있는 수를 레지스터에 있는 수에 더하는 명령어보다도 더 초보적인 기계언어로 된 명령어들로 이루어져 있다. 어떤 종류의 일상적인 기계언어 층위의 명령어들로 프로그래밍을 할 것인지는 전적으로 사용자의 결정사항이다. 사용자는 이 명령들을 기존의 "마이크로-명령어들" 을 토대로 "마이크로 프로그래밍" 한다 그렇다면 그가 설계한 "더 높은 층위의 기계언어" 의 명령어들은, 꼭 그래야 하는 건 아니지만, 회로로 고정배선된다. 따라서 마이크로 프로그래밍은 사용자가 통상적인 기계언어 수준의 이하에서 무엇인가를 할 수 있도록 해준다. 그러한 결과들 중의 하나는 (마이크로 프로그래밍에 의한) 생산자의 컴퓨터가 동일한, 또는 심지어는 다른 생산자의 다른 컴퓨터와 마찬가지로, 그 컴퓨터가 동일한 기계언어 명령어의 집합을 가질 정도로 고정배선될 수 있다는 것이다. 그래서 마이크로 프로그래밍된 컴퓨터가 다른 컴퓨터를 "에뮬레이트 [모방]" 한다고 말한다.

그렇다면 기계언어로 된 프로그램과 사용자가 프로그래밍을 하는 더 높은 층위 사이에 삽입되는 운영체계의 층위가 존재한다. 운영체계 자체는 사용자가 그 기계 자체에 접근하지 못하게 하는 (따라서 그 시스템을 보호하는) 역할을 하며, 프로그램을 판독할 때 생기는 극도로 복잡하고 혼란스런 문제들 - 번역장치의 호출, 번역된 프로그램의 실행, 출력을 제때에 제 경로에 유도하는 일, 다음 사용자에게 제어명령을 전달하는 등 - 로부터 프로그래머를 보호한다. 이때 상이한 사용자가 동시에 동일한 CPU 에게 "말한다면", 운영체계는 그 주의력을 규칙적으로 한 사람에게서 다른 사람으로 돌리는 프로그램이다. 어쨌든 운영체계의 복잡성은 놀라우며, 다만 다음의 유추를 통해서 암시할 수 있을 뿐이다.

최초의 전화 시스템을 보기로 들어보자. 알렉산더 그레이엄 벨은 옆 방에 있는 조수에게 전화할 수 있었다 : 목소리를 전자식으로 전달한 것이다! 그것은 알고 보면 운영체계, 즉 전자식 연산을 빼놓은 컴퓨터와 같은 것이다. 그러면 이제 현대식 전화 시스템을 보도록 하자. 우리는 연결하고자 하는 여러 전화들을 선택할 수 있다. 뿐만 아니라 여러 통화가 동시에 연결될 수도 있다. 지역번호를 눌러서 다양한 도시와 지역을 선택할 수도 있다. 우리는 직접 통화하거나 교환원을 거쳐서 또는 신용 카드를 써서 컬렉트 콜을 할 수도 있고, 여러 명의 회의 참석자들과 이야기할 수도 있다. 또한 걸려오는 전화를 다른 곳으로 돌리거나 자기가 출발했던 연결지점을 추적할 수도 있다. 또는 "통화중" 이라는 신호를 들을 수도 있다. "다이얼이 늦었으니 다시 걸어주시기 바랍니다" 혹은 "지금 거신 전화번호는 결번이오니 다시 확인하고 걸어주십시오" 라는 말을 들을 수 있는데, 그것은 선택된 번호가 "제대로 되지 않았음" 을 말해준다. 집 안에 여러 대의 전화를 연결해 쓸 수 있는 분배 장치를 설치할 수도 있다. "원시적인" 수준의 전화가 쓰이던 시대라면 경이로운 기적으로 여겨질 그런 가능성들이 무수히 많다는 것을 알면 놀라울 따름이다. 이제 고도로 발달된 운영체계들은 그 사용자와 그들의 프로그램에 준하여 유사한 교통신호 조작이나 선로 조종 등도 수행한다. 인간의 두뇌 속에서도 다양한 자극의 동시처리, 어떤 사안에 우선권을 두거나 미룰 것인가에 대한 결정, 긴급상황이나 예기치 못한 사태 등에 의해서 이루어지는 갑작스런 "중단" 등과 유사한 일이 벌어지는 것의 거의 틀림없다.

사용자와 시스템을 편안하게 보호한다
복잡한 컴퓨터 시스템의 여러 층위들은 총체적으로 사용자를"편안하게" 해주고, 사용자와는 무관한 심층적인 층위들에서의 많은 과정들을 고민하지 않게 해주는 효과를 가진다. 비행기 승객은 연료 탱크의 계기판이나 풍속, 저녁 식사때 나올 기내식의 치킨이 몇 조각인가 또는 도착지 공항의 운항밀도 따위에 대해서는 보통 관심이 없다. 그 모든 것은 항공사 내부의 다양한 층위의 위계질서에 있는 직원들이 알아서 처리하며, 승객들은 그저 출발지에서 목적지로 날아갈 뿐이다. 그런데 여기에서 다시 무슨 일인가 잘못되었다고 해보자 : 예를 들면 짐이 도착하지 않은 경우 말이다. 그러면 승객은 바로 자기 아래에 있는 층위의 시스템에 무엇인가 착오가 생겼음을 알 게 된다.

컴퓨터는 초유연한가 . 혹은 초엄격한가?
더 높은 층위들을 향한 노력의 주요 목적 중의 하나는 늘 컴퓨터와의 커뮤니케이션을 가능하면 자연스럽게 만드는- 즉 컴퓨터가 무엇을 해야 하는지를 말해주는 - 것이었다. 물론 컴파일러 언어의 높은 층위의 구성물들은, 예를 들면 기계언어로 된 것 같은 낮은 층위의 구성물보다는 인간이 자연스럽게 생각하는 개념들에 더 가깝다. 그러나 더 편안한 커뮤니케이션을 향한 노력에서 "자연스러움" 이라는 측면은, 인간들 사이의 커뮤니케이션이 인간과 기계 사이의 커뮤니케이션보다 훨씬 덜 엄격하게 제한되기 때문에 완전히 무시되어왔다. 예를 들면 우리는 무엇인가를 표현하는 최상의 방식을 탐색할 때, 문장 한가운데에서 기침을 하거나 애매한 기술들과 "허용 불가능한" 통사구조를 필요로 하는 따위의 무의미한 문장 조각들을 종종 만든다. 그래서 때로는 그런 구문으로 일그러진 의미들을 만들지만 대부분 목적을 달성한다. 프로그래밍 언어를 가지고서는 일반적으로 100 퍼센트 유지될 수 있었던 매우 엄격한 통사구조가 있는 것이 보통이었다. 중의적인 낱말들이나 구성물은 존재하지 않는다. 재미있게도 기침을 표현하는 등가물 (즉, 비본질적인 또는 관여적이지 않은 주석) 은 허용되엇지만, 단 주석이 이전에 키워드 (예를 들면, COMMENT) 로 암시되거나 다른 키워드 (예를 들면, 세미콜론) 로 종지될 경우에만 허용될 수 있다. 모순적이게도 유연성을 위한 이 작은 제스처는 자기 자신의 작은 함정에 빠진다 : 하나의 세미콜론 (또는 주석을 종지하는 기능으로 쓰이는 다른 부호) 이 주석 안에 쓰이면, 번역 프로그램은 세미콜론을 주석의 종료신호로 해석할 것이며, 그러면 모든 것은 쑥밭이 된다.

INSIGHT 라는 이름의 과정이 정의되고 그것이 프로그램 안에서 열일곱 번 호출되었다면 그리고 열여덟번째에 가서 INSIHGT 라고 잘못된 철자가 나올 경우, 프로그래머는 난감해질 것이다. 컴파일러는 여지껏 INSIHGT 라는 명령을 들어본 적이 없기 때문에 멈출 것이며 가차없이 오류 메시지를 출력할 것이다. 그러한 오류가 컴파일러에 의해서 발견될 경우에는, 컴파일러는 종종 계속 진행하고자 할 것이다. 하지만 컴파일러는 성찰력이 없기 때문에 프로그래머가 무엇을 의도했는지 파악할 수 없다. 물론 컴파일러는 무엇인가 완전히 다른 것이 의도되었다고 추측할 것이며, 그 잘못된 전제를 토대로 계속 진행할 수 있다. 그러면 - 프로그래머가 아니라 - 컴파일러가 쑥밭이 되었기 때문에 일련의 긴 오류 메시지가 나머지 프로그램을 오염시킬 것이다. 이때 영어와 러시아어를 동시통역하는 통역자가 불어의 관용구를 영어로 듣고 영어 텍스트의 나머지 부분을 다 불어로 번역하기 시작할 때 생기는 카오스를 상상해보라. 컴파일러는 종종 병이 든 것처럼 방황한다. 세상이 뭐 다 그런 거 아니겠는가 (C'est la Vie). 아마 이것은 컴퓨터에 대한 유죄판결처럼 들릴지 모르지만, 그것을 겨냥한 것은 아니다. 어떤 의미에서는 그렇게 될 수밖에 없었다. 잠시 컴퓨터가 어디에 쓸모가 있을까를 숙고해본다면, 인간이 하기에는 너무 복잡한 과제들을 명확하고 상세하게 수행한다는 것을 확인할 수 있을 것이다. 컴퓨터가 신뢰감을 얻으려면, 자신이 하는 일에 털끝만큼의 중의성도 없어야 한다. 또한 자신에게 명시적으로 명령된 그 이상도 이하도 아닌 바로 그것만을 해야 한다. 만야게 프로그래머가 자신이 바라거나 의도하는 것이 무엇인지 "추측하는데" 쓰일 프로그램을 숨겨놓고 있다면, 그 프로그래머가 자기의 과제를 전달하고자 하지만 완전히 오해받을 수 있음을 능히 상상할 수 있다. 따라서 높은 층위의 프로그램은 인간에게는 편안하지만, 애매하지 않으면서도 정확해야 한다는 것이 중요하다.

낌새를 알아차리고 프로그래머를 앞지르기
이제 일정한 정도의 부정확성을 허용하는 하나의 프로그래밍 언어- 그리고 그 언어를 더 낮은 층위로 번역하는 프로그램 - 를 고안할 수 있는데, 그것을 다음과 같이 표현할 수 있겠다 : 그러한 프로그래밍 언어의 번역장치는 "언어의 규칙외부에서" 일어난 사태를 이해하고자 노력한다. 그러나 하나의 언어가 일정한 "위반" 을 허용한다면, 그것은 더 이상 진정한 위반이 아니다. 왜냐하면 이미 그 위반에도 규칙이 개입되어 있기 때문이다! 프로그래머 자신도 일정한 정서법 오류를 범할 수 있다는 것을 의식한다면, 외관상의 문제에도 불구하고 그는 실제로 언어의 이러한 엄격한 규칙 내부에서 연산하면서 그것을 의도적으로 사용할 수 있다. 다른 말로 하자면, 사용자가 자신의 편의를 위하여 번역장치에 프로그래밍된 모든 유연성을 의식하고 있다면, 그는 넘어서는 안 될 한계를 아는 것이다 그렇기 때문에 이것이 번역장치에 "인간적인 오류를 위한 자동적인 보상" 을 포함하지 않았던 언어의 이전의 버전보다 더 많은 자유를 허용함에도 불구하고, 그 번역장치는 훨씬 엄격하고 덜 유연하게 보인다.

그러한 유형의"탄력적인" 언어에는 두 가지 대안이 있는 것 같다 : (1) 사용자는 언어 및 그 번역장치에 구축된 유연성을 의식한다. (2) 사용자는 그것을 인식하지 못한다. 첫번째 경우, 프로그래머는 자신이 이 언어로 만든 프로그램을 컴퓨터가 어떻게 해석할지 예측할 수 있기 때문에, 그 언어는 커뮤니케이션 프로그램을 정확하게 사용할 수 있다. 두 번째 경우, (번역장치의 내부에서 일어나는 과정들을 알 수 없는 사용자의 유리한 시각에서는) 예측 불가능한 일을 할 수 있는 "완충장치" 가 숨겨져 있다. 이것은 프로그램의 전반적인 오류해석을 야기할 수 있기 때문이다. 따라서 그런 언어는 속도나 신뢰성을 위주로 하는 컴퓨터를 위해서는 적합하지 않다.

그러나 실은 제3 의 가능성도 있다 : (3) 사용자는 그 언어 및 번역장치에 구축된 유연성을 알지만, 그런 유연성들은 자기의 프로그램이 어떻게 해석될 것인지를 말할 수 없을 정도로 복잡한 방식으로 상호 작용을 한다. 이것은 그 번역 프로그램을 만든 사람에게는 적합할 수 있다. 그는 그 프로그램을 누구보다도 잘 알기 때문이다 ?하지만 그것이 일정한 낯선 방식의 구성물에 어떻게 반응할지는 여전히 예측할 수 없다.

오늘날 인공지능 연구의 주요 영역 중의 하나는, 훨씬 높은 층위의 언어의 개발 ?적어도 아래의 인상적인 일들 중의 하나는 해낼 정도의 번역장치가 사용하는 언어들 ?을 연구하는 자동 프로그래밍이다 : 보기들로부터 일반화하기, 일정한 인쇄 내지는 문법적 오류를 정정하기, 애매한 묘사의 의미를 이해시키기, 원초적인 사용자 모델을 이용하여 사용자의 낌새를 알아차리기, 어떤 사안이 불명확해지면 질문하기, 자연언어 자체를 사용하기 등. 이때 사람들은 신뢰성과 유연성 사이에서 적당한 타협점을 찾을 수 있기를 원한다.

인공지능의 진보는 곧 언어의 진보이다 .
컴퓨터 과학(특히 인공지능) 의 발달과 새로운 언어의 발전 사이의 연관관계는 놀라울 정도로 밀접한 것이다. 지난 10 여 년 간, 새로운 유형의 발견들을 새로운 언어로 포착하려는 경향이 두드러졌다 : 지능의 이해 및 창출을 위한 해결의 열쇠는 기호조작의 과정들을 기술하는 데 쓰이는 언어의 지속적인 발전과 정밀화에 달려 있기 때문이다. 오늘날 전적으로 인공지능 연구를 위해서 개발된 실험언어들이 족히 삼 사십 개는 될 것이다. 이때 중요한 것은 이것들 중의 어느 한 언어로 쓰인 프로그램도 기본적으로 더 낮은 층위의 언어로 프로그램될 수 있다는 것이다. 그러나 그것은 우리에게 각별한 노력을 요구하며, 그렇게 해서 만들어진 프로그램은 인간이 파악할 수 없을 정도로 너무 길다. 따라서 더 높은 층위가 모두 컴퓨터의 잠재력을 확장하는 것은 아니다. 컴퓨터의 완전한 잠재력은 이미 기계언어로 된 명령집합 속에 존재한다. 오히려 높은 층위의 언어로 된 새로운 개념들은 그들의 모든 본성상 새로운 방향과 시각을 제공한다.

모든 가능한 프로그램들의"공간" 은 너무도 크기 때문에, 어느 누구도 무엇이 가능한지를 알 수 없다. 비교적 높은 층위의 모든 언어는 당연히 "프로그램 공간" 의 일정한 영역을 연구하는데 적합하다. 그래서 프로그래머는 그 언어를 쓰는 가운데 그런 프로그램 공간의 영역으로 경로화된다. 언어가 프로그래머에게 특정한 유형의 프로그램을 쓰라고 강요하지는 않지만, 그 언어는 프로그래머에게 일정한 종류의 일을 용이하게 해준다. 종종 어떤 개념에 근접하거나 경미한 상승은 중요한 발견에 필요한 것이기도 하다. 또한 더욱더 높은 층위의 언어로 진출하려는 욕구의 원인이기도 하다.

상이한 언어들로 프로그래밍하는 것은, 특히 건반 위에서 다양한 조성으로 작곡하는 것과 비교된다. 우리가 다양한 조성으로 작곡했다면, 개개의 조성은 그 고유의 독특한 분위기 (아우라, aura) 를 가진다. 따라서 어떤 일정한 조성을 형성하는 것은 "자연스럽지만", 다른 조성으로 진입하는 것은 끔찍하다. 즉 조성의 선택은 특정한 경로를 제시한다. 일정한 방식으로 심지어는 올림 다장조 (C#) 나 내림 라장조 (D ♭) 등과 이명동음 조성은 전혀 다른 느낌을 준다. 이것은 하나의 표기 체계가 최종 산출물의 완성에 중요한 역할을 할 수 있음을 보여준다.



그림59   지능을 갖춘 프로그램을 만들려면 우리는 모든 것을 가장 낮은 층위에서 보아야 하는 단조로움을 막도록 일련의 하드웨어와 소프트웨어의 층위들을 구축해야 한다. 다양한 층위에서의 과정들의 기술들은 서로 상이한 것으로 보이는데, 이때 오직 최고 수준의 층위만이 우리를 이해시키기에 충분할 정도로 응축되어 있다 [출전 : P. H. 윈스턴, 「인공지능](Reading, Mass : Addison ?Wesley, 1977)].

그림59 는 인공지능의 "성층분석" 을 보여주는데, 가장 아래에는 트랜지스터 같은 기계부품이 있고, 가장 위에는 "지능을 갖춘 프로그램들" 이 자리잡는다. 이 그림은 패트릭 헨리 윈스턴의 책 「인공지능 (Artificial Intelligence)」에서 인용한 것이며, 오늘날의 인공지능 영역의 거의 모든 연구자들의 공통적인 입장을 반영하고 있다. 나는 인공지능이 그런 식으로 분석되는 데 공감하지만, 지능을 갖춘 프로그램들이 그 정도의 빈약한 성층들로 설명될 수 있다고 생각하지 않는다. 기계언어의 층위와 실제의 지능이 도달한 수준 사이에는, 확신하건대, 아마 10 여 개의 성층들 (또는 수십 개) 이 있을 것이다. 이때 각각의 새로운 성층은 그 밑에 놓인 층위를 토대로 구축되며 아래 층위의 유연성을 향상시킬 것이다. 그러나 그것이 어떤 모습일지는 지금으로서는 상상할 수 없다.

편집광과 운영체계
컴퓨터 시스템의 모든 층위들의 유사성은 층위-혼합이라는 좀 이상한 경험을 유발할 수 있다. 언젠가 나는 컴퓨터 초보자인 두 친구가 "PARRY" 라는 프로그램을 만지작거리는 것을 지켜본 적이 있다. PARRY 는 광범위한 레퍼토리로부터 선별되어 저장된 영어 구문들을 내뱉는 매우 진부한 방식으로 편집광을 시뮬레이션하는 것으로 악명 높은 프로그램이다. PARRY 의 성능은 인간의 손으로 입력한 영어 문장에 대하여 반응하는 진부한 구절들 중의 어느 대답이 합당한가를 결정하는 능력에 기인한다.

일정한 지점에 이르자PARRY 의 반응은 매우 느려졌고 대답을 위해서 아주 긴 시간을 필요로 했다. 나는 친구들에게 그것이 아마 시간-분배 시스템의 지나친 과부하 때문이었을 것이라고 설명해주었다. 나는 그들이 운영체계로 직접 연결되는 특정한 "컨트롤 키" 를 누르면 얼마나 많은 사용자들이 컴퓨터에 연결되었는지 확인할 수 있다고 말했다. 친구 중의 하나가 컨트롤-키를 눌렀다. 그러자 운영체계의 상태에 대한 일정한 내부 데이터들이 번개처럼 PARRY 의 어휘에 덧씌워지는 것이었다. 이것에 대해서 PARRY 는 아무것도 몰랐다 : 그것은 단지 경마나 마권 영업자의 지식만을 가지는 프로그램이지, 운영체계나 터미널 내지 특정한 컨트롤 키를 인식하는 프로그램은 아니었다. 그러나 내 친구들에게는 PARRY 와 운영체계는 그져 "컴퓨터" 로서, 그들이 무엇인가를 입력하면 대답했던 신비한, 아주 멀리 떨어진, 형상이 없는 존재였던 것이다. 그래서 두 친구 중 하나가 다음과 같이 입력하면 의미가 통했다 : "너는 어째서 화면 위에 있는 모든 것에 덮어쓰지?" 내 친구들은 PARRY 가 자신을 작동시키는 운영체계에 대해서는 아무것도 모른다는 생각을 분명히 알지는 못했다. "너" 는 "너 자신" 에 대해서 모든 것을 안다는 생각은 우리의 일상사에서 너무나도 익숙해서 그것을 컴퓨터에 연장 적용하는 것은 매우 자연스러웠다 ?결국 PARRY 는 사람과 "영어" 로 대화를 나눌 정도로 충분히 지능을 가지게 되었다. 그들의 질문은 어느 누구에게 "어째서 너는 오늘 그렇게 조금 적혈구를 생산하니?" 와 같은 것은 아니었다. 사람들은 그 층위, 즉 자신의 신체의 "운영체계 층위" 에 대해서는 알지 못한다.

이와 같은 층위들 사이의 혼란의 주요 원인은 컴퓨터 체계의 모든 층위들과의 커뮤니케이션이 단 한 대의 터미널, 그것도 단 하나의 화면 위에서 이루어지기 때문이었다. 내 친구들이 너무 순박해서 그런지는 몰라도, 복잡한 체계의 여러 개의 상이한 층위들이 동일한 화면에 동시에 나타나면 제아무리 노련한 컴퓨터 도시들도 종종 그와 비슷한 실수를 저지른다. 그들은 "누구" 와 말하는지를 망각하고는, 다른 층위에서는 전적으로 의미가 있을망정 그 층위에서는 무의미한 어떤 것을 입력한다. 그러므로 체계 자체가 스스로 층위들을 구별하도록 하는 것이 바람직하다. 즉 명령들이 "의미를 가지는" 만큼만 해석하는 것이다. 유감스럽게도 그와 같은 해석은 그 체계가 충분한 상식을 가질 뿐만 아니라, 특히 프로그래머의 의도를 완벽하게 알 것을 요구한다 ?그러나 현재 상태로 볼 때 인공지능에게는 지나친 요구이다.

소프트웨어와 하드웨어 사이의 경계
일정한 층위에서의 유연성과 다른 층위에서의 경직성에 의해서도 어리둥절해질 수 있다. 예를 들면 어떤 컴퓨터에서는 어떤 액체를 한 용기에서 다른 용기로 부어 넣듯이 텍스트 조각을 한 형태로부터 다른 형태로 "옮겨 부을 수" 있게 해주는 놀라운 문서편집 시스템들이 존재한다. 좁은 쪽이 넓은 쪽이 되기도 하고 또 거꾸로 되기도 한다. 그러한 성능을 보건대 하나의 글자체를 다른 글자체로 바꾸는, 예를 들면 기본체를 이탤릭체로 바꾸는 따위의 일은 식은 죽 먹기일 것이다. 물론 화면 위에서는 그런 변경이 불가능할지 모르지만, 프린터로는 ?또는 다른 식으로는 ?실행될 수 없다. 컴퓨터를 오랫동안 다루면 우리는 버릇이 잘못 들어서 모든 것이다 프로그램화될 것이라고 믿을 것이다. 그 어떤 프린터도 하나의 글자체만 가지거나 또는 단지 글자체의 유한한 집합만을 가지도록 고지식해서는 안 된다. 글자체는 사용자에 의해서 구체적으로 지정될 수 있어야 한다. 그러나 일단 그런 정도의 유연성에 도달하면, 우리는 아마도, 기계가 컬러 잉크로 인쇄할 수 없다거나 모든 형태 및 크기의 인쇄용지를 다 받아들일 수는 없다거나 또는 고장날 경우 스스로 수리할 수 없다는 따위의 일에 화가 날 것이다.

이제 문제는 이 모든 유연성이 제5 장의 용어를 사용하기 위해서 "중단되어야" 한다는 것이다. 모든 것에 토대가 되는 견고한 하드웨어가 존재해야 한다. 그것은 깊숙히 은폐되어 있을 것이며, 그 위에 놓인 층위들에서는 불과 소수의 사용자들만이 하드웨어의 제약을 느낄 정도로 충분한 유연성이 존재할 것이다 ?그러나 반드시 존재한다.

그렇다면 입에 늘 오르내리는 하드웨어와 소프트웨어 사이의 구별은 무엇인가? 그것은 프로그램과 기계, 길고도 복잡한 명령의 배열과 그 명령을 수행하는 물리적인 기계 사이의 구별이다. 나는 소프트웨어를 곧잘 "전화선으로 보내질 수 있는 모든 것" 으로 정의하며, 하드웨어는 "그밖의 것들" 이라고 생각한다. 피아노는 하드웨어이고, 인쇄된 악보는 소프트웨어이다. 전화기는 하드웨어이고, 전화번호는 소프트웨어이다. 그런 구별은 쓸모는 있지만, 항상 그렇게 명확한 것은 아니다.

우리 인간들 또한"소프트웨어적인" 측면과 "하드웨어적인" 측면을 가지는데, 그 구별은 우리에게 제 2 의 본성이다. 우리는 우리의 생리학적인 전제조건의 엄격성에 익숙하다. 우리의 질병을 의지대로 고치지 못하거나 우리의 머리색을 임의로 다양한 여러 색으로 자라게 하지 못한다는 몇 개의 보기만 들어봐도 금방 알 수 있다. 그러나 우리는 우리의 마음을 "재프로그래밍" 해서, 새로운 개념틀 속에서 연산할 수 있다. 우리 정신의 경탄할 만한 유연성은 우리의 두뇌가 재프로그래밍이 불가능한 고정된 규칙 하드웨어로만 이루어져 있다는 생각과는 거의 화해할 수 없다. 우리는 우리의 뉴런들이 빠르게 또는 느리게 전자신호를 발사하도록 영향을 줄 수 없다. 우리는 우리의 두뇌에 배선공사를 새로 할 수도 없다. 우리는 뉴런의 내부구조를 새로 디자인할 수도 없다. 하드웨어에 관한 한 우리에게는 그 어떤 선택의 여지도 없다. 그렇지만 우리는 우리가 생각하는 방식에 일정한 통제력을 행사할 수는 있다.

그러나 우리의 통제를 벗어난 사고의 측면들이 분명히 존재한다. 우리는 우리의 의지행동을 통하여 스스로를 더 똑똑하게 만들 수는 없다. 우리는 우리가 원하는 속도로 언어를 빨리 배울 수도 없다. 또 우리의 생각하는 속도를 빠르게 할 수도 없다. 우리는 한꺼번에 여러 가지 일을 동시에 생각할 수 없다 등. 이것은 일종의 원초적인 자아-지식이며 너무나도 자명해서 그런 것을 알아차린다는 것 자체가 어려운 일이다. 그것은 우리가 공기가 "존재한다" 는 것을 의식하는 것과 비슷하다. 우리는 우리의 정신에서 이러한 "결점" 을 야기시킬 수 있었던 것이 무엇인가, 즉 무엇이 우리 두뇌의 조직인가를 그리 숙고하려 하지 않는다. 이 책의 주요 목표는 정신이라는 소프트웨어를 두뇌라는 하드웨어와 조화시키는 방법을 찾아내는 것이다.

중간 층위들과 날씨
우리는 컴퓨터 시스템에 그때그때 적절한 방식으로 진행되는 프로그램의 연산을 기술하는 매우 명확하게 정의된 일련의 성층들이 있다는 것을 보았다. 따라서 그저 단순히 단 하나의 낮은 층위와 높은 층위가 있는 것이 아니다. 높음과 낮음의 모든 등급이 존재한다. 중간 층위의 존재는 낮고 높은 층위들을 가지는 체계들의 일반적인 속성인가? 예를 들면 그 "하드웨어" 가 지구의 대기 (실은 그렇게 단단 [hard] 하지는 않지만, 관계없다) 이고 그 "소프트웨어" 는 날씨인 그런 체계를 고찰해보자. 모든 분자들의 운동을 동시에 추적하는 것은 날씨를 매우 낮은 층위에서 "이해" 하려는 것과 같은데, 그것은 마치 우리가 거대하고 복잡한 프로그램을 기계언어의 층위에서 고찰하는 것과 같다. 이것은 분명히 인간의 이해능력을 넘어서는 것이다. 그러나 우리는 여전히 기상현상을 관찰하고 기술하는 우리들만의 고유한 방식을 가진다. 날씨에 대한 우리의 "응축된" 시각은 비, 안개, 눈, 허리케인, 한랭전선, 계절, 기압, 무역풍, 제트 기류, 적란운, 뇌우, 역전층 등과 같은 높은 수준의 현상들에 기인한다. 이 모든 현상들에는 어떤 식으로든 공동작용하는 천문학적인 수의 분자들이 개입되어 거대한 흐름이 창발한다. 그것은 어느 정도는 우리가 컴파일러 언어로 날씨를 고찰하는 것과 유사하다.

어셈블리 언어와 같은 중간 층위에서 날씨를 고찰하는 것과 무엇이 유추적인가? 예를 들면, 흔히 보듯이, 아주 작은 국지적인 "미니 폭풍", 말하자면 불과 직경 1-2 미터 짜리 먼지기둥에서 생기는 작은 기류 같은 것이 존재하는가? 국지적인 바람은 더 높은 층위에서의 기상현상의 생성에 개입하는 중간 층위에서의 응축인가? 아니면 날씨를 좀더 포괄적으로 해설하기 위하여 그런 종류의 현상에 대한 우리의 지식을 연계하는 방법은 단적으로 말해서 전혀 없는가?

이때 두 개의 다른 문제가 떠오른다. 첫번째 질문은 다음과 같다 : "지각의 등급에 따라서 우리가 지각하는 토네이도, 일조 같은 기후현상들은 단지 더 크고 완만한 현상들의 부분들로서의 중간 층위의 현상들에 불과한 것인가? 그렇다면 높은 층위에서의 실제 기상현상들은 전국적인 것이지만, 그들의 시간등급은 지질학적일 것이다. 빙하기는 높은 층위의 기상현상일 것이다. 두번째 질문은 다음과 같다 : "지금까지의 인간의 지각능력을 벗어난, 그러나 만약에 지각했을 경우에는 기후가 바로 왜 그런지를 더 잘 이해시켜주는 그런 중간 층위의 기상현상들이 존재하는가?"

토네이도에서 쿼크까지
이 마지막 가정은 아마 기발하게 들리겠지만, 별로 큰 소득을 주지는 않는다. 우리는 그 자체는 보이지 않고 서로 영향을 주는 "부분들" 의 시각에서 설명된 특정한 체계들의 보기를 찾기 위하여, 하드 사이언스 중에서도 가장 엄격한 물리학을 살펴볼 필요가 있다. 다른 모든 분과 학문들과 마찬가지로 물리학에서는, 교호작용을 하는 부분들의 그룹이 하나의 체계이다. 우리가 아는 대부분의 체계들에서 부분들은 교호작용을 하는 동안에 정체성을 확보하여, 그 결과 우리는 더욱더 그 부분들을 체계 안에서 보게 된다. 예를 들면 풋볼 팀이 결성되면, 개별적인 선수들은 그들의 독립성을 유지한다. 그들은 각자의 개성이 상실되는 복합된 통일체로 녹아들어가는 것이 아니다. 반면에 ?이것이 중요하다 ?그 팀의 맥락이 야기한 그리고 다른 식으로는 진행될 수 없는 일정한 과정들이 선수들의 두뇌에서 진행된다. 그 결과 그 선수들은 좀 소극적이기는 하지만 어떤 하나의 방식으로 더 큰 체계인 팀의 일부분이 되면서 정체성을 바꾸게 된다. 이런 종류의 체계를 거의 분해 가능한 체계라고 부른다 (이 용어는 「인공지능 과학 (The Science of the Artificial Intelligence), Cambridge, Mass. 1969 에 실려 있는 H. A. 사이몬의 "복잡성의 구조 [The Architecture of Complexity]" 에서 유래한다). 그러한 체계는 교호작용을 하는 동안에도 각자의 개별성을 유지하는 미약한 교호작용을 하는 모듈들로 이루어져 있지만, 마치 자신이 그 체계의 외부에 있는 것과 별로 다르지 않기 때문에 체계 전체의 결속에 기여한다. 물리학에서 연구되는 체계들은 통상적으로 이런 것들이다. 예를 들면 원자는 그 양전기의 부하가 "순환궤도" 나 결속상태에 있는 일련의 전자들을 포착하는 핵으로 이루어졌다고 간주된다. "결속된" 전자들은 비록 복합된 대상에 내재하는 것임에도 불구하고 자유로운 전자들과 흡사하다.

물리학에서 연구된 몇몇 체계들은 비교적 간단한 원자와 대립을 이룬다. 그런 체계들은 격렬한 교호작용을 일으켜서, 그 결과 부분들이 더 큰 체계 속으로 빨려 들어가고 그 개별성은 부분적으로 또는 송두리째 상실된다. 이런 보기 중의 하나가 통상 "양자와 중성자의 집합체" 로 기술되는 원자핵이다. 물론 구성요소들을 끌어당기는 힘은 그 구성요소들이 이른바 "자유로운" 형태 (즉 핵의외부에 존재할 경우에 나타나는 형태) 에 근접하지 않을 정도로만 강하다. 그래서 실은 원자핵은 여러 가지 관점에서, 교호작용을 하는 입자의 집합이라기보다는 단일 입자처럼 반응한다. 핵이 분열하면 종종 양자와 중성자가 방출되지만, 일반적으로 파이-중간자나 감마선 같은 다른 입자들도 자주 생성된다. 이 모든 상이한 입자들은 핵이 분열되기 전에 이미 핵 속에 물리적으로 존재하는 것인가, 아니면 핵분열 때 튕겨나오는 "섬광" 에 불과한 것인가? 그런 질문에 대답하려고 해봐야 무의미할 것 같다. 입자 물리학의 수준에서 고찰해보면, "섬광" 을 때리는 잠재능력의 저장과 실제의 활성적인 입자의 저장 사이의 차이는 그리 명확하지 않다.

따라서 하나의 핵은, 비록 가시적이진 않지만, 그 "부분들" 이 끄집어내지고 보여질 수 있는 체계이다. 한편 우리가 양자와 중성자를 체계 자체로 간주할 경우에는 병리적인 경우들이 존재한다. 그 각각은 다 "쿼크" 의 트리오로 구성된다고 가정된다. 이때 쿼크란 여러 개의 알려진 소립자를 생성하기 위하여 둘 또는 셋씩 결합될 수 있는 가설상의 입자이다. 그러나 쿼크들 사이의 교호작용은 양자나 중성자 안에서는 확인할 수 없을 정도로 강할 뿐 아니라, 이것들로부터 전혀 끄집어낼 수도 없다. 비록 쿼크는 양자와 중성자의 일정한 속성을 이론적으로 이해시켜주는데 기여하기는 하지만, 그 고유의 존재는 아마 독립적으로는 결코 확인될 수 없다. 여기서 우리는 "거의 분해 가능한 체계" 에 대한 반테제를 가진다 ?그런 것이 혹시 존재한다면 그것은 "거의 분해 불가능한" 체계이다. 그러나 양자와 중성자 (및 다른 입자들) 의 쿼크 이론에서, 쿼크들로 복합되었을 입자에 대한 많은 실험적인 증거들이 "쿼크 모델" 을 양적으로 응용하면 해명될 수 있다는 이유로 엄청난 설명력을 가지는 것은 이상한 일이다.

초전도성 : 재규정의 "이율배반"
제5 장에서 우리는 잠재적인 입자들과의 재귀순환적으로 복합된 교호작용을 통하여 어떻게 순수 핵으로부터 재규정된 입자들이 출현하는지 기술했다. 재규정된 입자는 그 자체가 복합적인 수학적인 구성체로서 또는 단적으로 물리적인 존재로 간주될 수 있다. 이런 식으로 입자를 설명하는 기이하고도 가장 극적인 결과들 중의 하나는 입자들이 극저온의 고체에서 나타나는 전자의 전도 무저항, 즉 초전도성 (superconductivity) 이라는 유명한 현상을 설명한다는 것이다.

즉 고체 안에 있는 전자들은 포논(phonons) (음자, 이것들은 다시 그들 입장에서 재규정된다!) 이라고 불리는 이상한 진동양자와의 교호작용을 통하여 재규정된다는 것이 드러난다. 이런 재규정된 전자들을 폴라론 (polarons) 이라고 부른다. 계산과정들은 아주 낮은 온도에서 반대방향으로 회전하는 두 개의 폴라론이 서로를 서서히 끌어당기며 심지어는 일정한 방식으로 결합한다는 것을 보여준다. 적절한 조건 아래에서는, 전류를 운반하는 모든 폴라론은 쌍을 이루며 이른바 쿠퍼 쌍들 (Cooper pairs) 을 형성한다. 역설적이지만 이러한 짝짓기는 바로 전자들 - 쌍이 지어진 폴라론들의 핵인 - 이 서로를 전자적으로 축출함으로써 생기는 것이다. 전자와 달리, 각각의 쿠퍼 쌍은 다른 쌍과 충돌한다거나 다른 쌍에 의해서 끌어당겨진다거나 하는 느낌을 받지 않으며, 그 결과 마치 진공 속에 떠 있는 것처럼 금속체 안에서 무저항으로 전도되는 것이다. 우리가 그런 금속의 수학적인 기술을, 그 기본단위가 폴라론인 금속으로부터 그 기본단위가 쿠퍼-쌍들인 기술로 전환시키면, 훨씬 간단한 연립방정식의 집합을 얻게 된다. 물리학자들은 이러한 수학적인 간결성이 쿠퍼 쌍으로의 "응축" 이 초전도성을 관찰하는 자연스런 방식이라는 것을 알려준다.

여기서 우리는 입자의 상이한 층위를 가진다. 쿠퍼 쌍 자체, 쿠퍼 쌍을 만드는 반대 방향으로 회전하는 폴라론들 그리고 폴라론을 형성하는 전자와 음자들 ; 그리고 끝으로 전자의 내부에 있는 잠재적인 광자와 양전자 등. 우리는 각 층위를 관찰할 수 있으며 그 아래 놓인 층위들을 이해함으로써 해명되는 현상들을 지각하게 된다.

"봉쇄"
이와 비슷하게 그리고 다행스럽게도, 우리는 쿼크가 구성할 수 있는 입자들에 대한 많은 것을 알기 위해서 쿼크에 대한 모든 것을 다 알 필요는 없다. 따라서 핵물리학자는 양자와 중성자에 토대를 두는 핵에 관한 이론들을 추진할 수 있고, 쿼크 이론과 그것의 경쟁이론들은 무시해도 된다. 핵 물리학자는 양자와 중성자에 대한 응축된 표상을 가지는데, 그 설명은 낮은 층위의 이론에서 유도되지만 낮은 층위의 이론에 대한 이해를 전제하지는 않는다. 이와 마찬가지로, 원자 물리학자는 핵 이론으로부터 유도되는 원자핵에 대한 응축된 표상을 가진다. 그렇다면 화학자는 전자와 그 회전궤도에 대한 응축된 표상을 가진다. 그리고 작은 분자에 대한 이론, 즉 극단적으로 큰 분자와 그들의 교호작용의 영역을 포괄하는 작은 분자들이 결합된다고 직관적으로 생각하는 분자 생물학자의 응축된 표상에 의해서 수용될 수 있는 그런 표상을 가진다. 그러면 세포 생물학자는 분자 생물학자들이 숙고하는 단위들에 대한 응축된 표상을 가지며, 세포의 교호작용을 설명하기 위하여 그것을 이용하고자 한다. 이제 요점은 명확하다. 모든 층위는 어느 의미로는 그 아래에 놓인 층위들에 대해서 "봉쇄되어" 있다. 이것은 여러 개의 선실이 딸린 잠수함의 구조를 떠오르게 하는 사이먼의 또 다른 생생한 용어들 중의 하나이다. 만약에 한 부분이 손상되어서 물이 들어오면, 그 피해가 확산되는 것을 막을 수 있다. 즉 파손당한 선실의 분리벽을 "봉쇄" 해서 피해를 저지시키는 것이다.

비록 과학의 위계적인 층위들 사이에는, 화학자는 낮은 층위의 물리학자가 하는 것을 전혀 하지 못하고, 생물학자는 화학을 완전히 도외시하는 등의 "누수현상" 이 늘상 있기는 하지만, 어느 한 층위로부터 아주 멀리 떨어진 층위들 사이에는 거의 아무런 누수현상도 없다. 바로 그렇기 때문에, 우리는 굳이 쿼크 모델, 원자핵의 구조, 전자 회전궤도의 속성, 화학적 결합, 단백질의 구조, 세포 속의 소기관, 세포들 사이의 정보교환 방식, 인간 신체의 여러 기관의 생리학 또는 신체기관들 사이의 복잡한 교호작용을 이해하지 않더라도, 다른 사람들을 직관적으로 이해할 수 있는 것이다. 우리가 필요로 하는 모든 것은 가장 높은 층위를 작동시키는 것에 대한 응축된 모델이다. 알다시피 그런 모델들은 매우 현실적인 동시에 성공적이다.

응축과 결정론 사이에서의 선택
그러나 아마도 응축된 모델의 중요한 약점이 하나 있는 것 같다: 그 모델은 통상적으로 정확한 예측능력이 없다. 즉 우리는 응축된 모델을 사용해서 인간을 쿼크 (또는 그 어떤 가장 낮은 층위이건 간에) 의 집합으로 보는 불가능한 과제로부터 우리를 보호한다. 물론 그런 모델들은 다른 사람들은 우리가 말하거나 행동하는 것을 어떻게 느끼고 반응하는가에 대한 추측만 전달해줄 뿐이다. 줄여서 말하자면 : 우리는 높은 층위의 응축된 모델들을 사용하면서 단순성을 위해서 결정론을 희생한다. 농담에 대해서 사람들이 어떻게 반응할지 확실히는 몰라도, 우리는 그 농담이 웃기거나 또는 다음 번 깃대를 기어올라가라는 따위의 말을 하면, 썰렁해질 거라고 기대할 수는 있다 (선승들이라면 그렇게 할 것이다!). 하나의 응축된 모델은 그 행동이 수행되어야 하는 "공간" 을 정의한다. 그리고 그 공간의 어느 다양한 부분에 할당되어야 하는가에 대한 확률을 명시화한다.

"컴퓨터는 우리가 명령한 것만을 수행할 수 있다"
이제 이 착상들은 복합된 물리적 체계에 적용되듯이 컴퓨터 프로그램에도 적용될 수 있다. 예로부터 내려오는 금언이 그것을 말해준다 : "컴퓨터는 사람들이 명령한 것만을 할 수 있다." 이것은 어떤 점에서는 맞는 말이지만, 핵심을 놓치고 있는 말이다. 우리는 컴퓨터에 명령을 내린 결과를 미리 알지 못한다. 따라서 컴퓨터의 행동은 마치 사람의 행동처럼 기가 막히고 놀라우며 예측 불가능하다. 우리는 통상적으로 출력이 어느 공간에 할당될지 대략은 알지만, 어느 곳에 할당될지 정확히 알지는 못한다. 예를 들면 원주율을 소수점 100 만 자리까지 연산하는 프로그램을 만들 수는 있다. 그 프로그램은 인간이 연산하는 것보다 훨씬 빨리 할 수 있다. 그러나 컴퓨터가 프로그래머를 능가할 수 없다는 것은 전혀 이율배반이 아니다. 우리는 처음부터 출력이 할당되어야 할 영역, 이른바 0 과 9 사이의 부호의 영역을 알고 있다. 따라서 그것은 우리가 프로그램의 행동에 대한 응축된 모델을 가진다는 것을 뜻한다. 하지만 우리가 그 나머지를 알았더라면 그런 프로그램을 만들지 않았을 것이다.

더욱이 다른 의미에서 앞에 말한 지혜는 너무나 당연하다. 그것은 우리가 훨씬 더 높은 층위의 언어로 프로그래밍을 하는 만큼 컴퓨터에게 무엇을 명령했는지 점점 더 모른다는 사실을 함축한다. 번역의 각 층위는 한 복잡한 체계의 "최전선" 을 실제의 기계언어의 명령들로부터 분리할 것이다. 우리가 생각하고 프로그래밍하는 층위에서 그 명제들은 명령이나 규정이라기보다는 선언이나 제안과 유사할 것이다. 그렇다면 높은 층위의 명제의 입력을 통하여 유발되는 모든 내적인 원망은 일반적으로 눈에 보이지 않는다. 그것은 마치 샌드위치의 맛을 볼 때, 빵을 분해하는 소화과정을 의식하지 못하는 것과 마찬가지이다.

어쨌든 , "컴퓨터는 명령된 것만을 할 수 있다" 는 생각은 러블레이스 부인이 그녀의 유명한 회고록에서 처음으로 한 말로서 널리 확산되어, "컴퓨터는 생각할 수 없다" 는 표상과 밀접히 연관되었다. 그러나 우리의 수준이 조금 높아지게 될 다음 장에서 그 문제를 다시 다루어보기로 하자.

두 가지 유형의 체계
여러 개의 부분들로 복합된 두 유형의 상이한 체계들이 있다. 그것들은 일정한 부분들의 행동이 다른 부분들의 행동을 상쇄시키는 경향이 있는 그런 체계들이다. 이로부터 낮은 층위들에서 생기는 일은 중요하지 않다는 결과가 나온다. 왜냐하면 더 높은 층위에서의 행동 또한 거의 비슷하기 때문이다. 이런 종류의 체계에 대한 보기로 모든 분자들이 매우 복잡한 미시적인 방식으로 좌충우돌하는 가스로 채워진 용기를 들 수 있다. 하지만 거시적인 관점에서 보면, 용기는 일정한 압력과 온도 및 부피를 가지는 아주 조용한 "안정된" 체계이다. 그렇다면 낮은 층위에서의 단 하나의 사건의 영향이 높은 층위에서 엄청난 결과를 증폭시키는 그런 체계들이 존재한다. 그러한 체계의 보기가 바로, 공이 기둥에 부딪히는 바로 그 각도에 따라서 공이 어느 길로 튕겨 나갈지 결정적으로 좌우되는 핀볼 (pinball) 게임이다.

컴퓨터는 이러한 두 가지 유형의 매우 정교한 복합체이다. 컴퓨터는 그 행동이 거의 예측될 수 있는, 예를 들면 도선과 같은 하위단위를 포함한다 : 그것은 옴의 법칙 (Ohm's law) 에 따라서 전기를 전도한다. 이 법칙은 수십 억 번의 우연한 효과들이 서로를 상쇄하며 그로 인해서 예측 가능한 전체 행동이 나타나는 통계적인 효과에 좌우되기 때문에, 용기 속의 가스가 따르는 법칙처럼 매우 정확하고도 응축된 법칙이다. 또한 컴퓨터는 프린터처럼 그 행동이 전적으로 전류의 정교한 패턴에 의해서 한정된 거시적인 하위단위들을 포함한다. 그 프린터가 인쇄하는 것은 결코 서로를 상쇄하는 미시적인 차원에서의 효과들에 의해서 규정되지는 않는다. 사실 대부분의 컴퓨터 프로그램에서는 프로그램 안에 있는 개개의 비트의 값이 출력된 인쇄결과를 결정적으로 좌우한다. 만약에 한 비트라도 바뀌면 그 출력 결과 또한 파격적으로 바뀔 것이다.

오로지"믿을 만한" 하위체계들로만 이루어진 체계들 - 즉 그 행동이 응축된 기술들을 근거로 예측될 수 있는 하위체계들 - 은 우리의 일상생활에서 엄청나게 중요한 역할을 한다. 왜냐하면 그것들이 바로 안정성을 떠받치는 기둥이기 때문이다. 우리는 허물어지지 않는 벽, 어제 다녔던 바로 그 보도, 빛나는 태양 그리고 제 시간을 가리키는 시계 등에 의지할 수 있다. 그러한 체계들의 응축된 모델들은 잠재적으로는 전적으로 결정론적이다. 물론, 우리의 삶에서 중요한 역할을 하는 체계들의 또 다른 유형은 일정한 내재적, 미시적 변수에 근거하는 가변적인 행동을 가지는 체계이다. 그런 체계들은 종종 대단히 많지만, 직접 관찰할 수는 없다. 그러한 체계에 대한 우리의 응축된 모델은 필연적으로 연산의 "공간" 에 관련되며, 우리가 발을 들여야 하는 그 공간의 상이한 영역에 대한 확률적인 추정을 포함한다.

앞에서 강조했듯이, 믿을 만한 체계인 가스 용기는 수많은 상쇄효과로 인하여 결정론적인 물리학의 법칙을 정확히 따른다. 그러한 법칙들은 가스 전체와 관련되고 개별적인 부분들은 무시하기 때문에, 응축된 법칙들이다. 더욱이 가스의 미시적 기술과 거시적 기술은 완전히 다른 용어를 사용한다. 전자는 개개의 구성분자의 위치와 속도의 구체화를 요구한다. 반면에 후자는 세 가지의 새로운 양 : 온도와 압력 및 부피의 구체화를 한정할 뿐이다. 그런데 앞의 두 양은 미시적인 상응물조차 가지지 않는다. 이 세 변수들 사이의 간단한 수학적인 관계 - pV = cT, 이때 c 는 상수이다 - 는 낮은 층위의 현상에 좌우되는 법칙이지만, 그 변수들에 좌우되는 것은 아니다. 좀 덜 이율배반적으로 말하자면, 이 법칙은 분자의 층위를 지배하는 법칙들로부터 유도될 수 있다. 이런 점에서 그 법칙은 낮은 층위에 의존한다. 다른 한편으로, 원하기만 하면 더 낮은 층위를 완전히 무시할 수 있게 해주는 법칙이다. 그런 점에서 그 법칙은 더 낮은 층위와 무관하다.

높은 층위의 법칙이 낮은 층위를 기술하는 어휘로 표현될 수 없다는 것을 간파하는 것이 중요하다. "압력" 과 "온도" 는 낮은 층위와의 경험만으로는 전달할 수 없는 새로운 용어들이다. 우리 인간들은 온도와 압력을 직접 감지한다. 그것이 바로 우리가 구축된 방식이다. 따라서 우리가 이 법칙을 찾아냈던 것도 놀랄 일은 아니다. 그러나 가스를 오로지 이론적인 수학적 구성체로만 알았던 피조물들이 이 새로운 법칙들을 발견해야 했다면, 새로운 개념들을 합성하는 능력을 가져야 할 것이다.

부수현상
이 장을 맺으면서 나는 복잡한 체계에 대한 이야기를 하나 하고 싶다. 어느 날인가 내가 작업하던 컴퓨터를 위한 두 명의 시스템 프로그래머들과 담소를 했다. 그들은 그 운영체계가 약 35 명의 사용자까지는 아주 편하게 감당할 수 있지만, 그 이상의 사용자가 생기면 반응시간이 갑자기 느려지다가, 곧장 집으로 가서 밤 늦게까지 기다려야 할 정도로 느림보가 된다고 말했다. 나는 농담으로 맞장구를 쳤다. "에, 뭐, 쉽지 않겠어? 운영체계 안에 '35' 라는 수가 저장된 자리를 찾아서 그 수를 '60' 으로 바꾸면 되지 않나?" 라고 했더니 모두가 다 웃었다. 물론 그 농담의 핵심은 그런 저장된 자리가 실존하지 않는다는 데 있다. 그러나 이 심각한 수, 즉 35 명의 사용자라는 것은 도대체 어디에서 나왔는가? 대답은 이렇다 : 그것은 체계의 전체 조직의 가시적인 결과 - 즉 "부수현상" - 이다.

이와 비슷한 방식으로 단거리 선수에게 물을 수 있다. "100 야드를 9.3 초에 뛰게 하는 그 숫자 9.3 이 도대체 당신의 어느 곳에 저장되어 있습니까?" 물론 그 수는 어디에도 저장되어 있지 않다. 달려간 시간은 그의 신체구조와 반응시간의 결과로서, 그가 달리는 동안에 일어나는 수백만 가지 요인들의 공동작용의 결과이다. 그의 기록은 쉽게 재현될 수 있지만, 그의 몸 어디에도 저장되어 있지 않다. 그것은 그의 신체 속의 모든 세포에 분포되어 있으며 비로소 달리기라는 행위 자체 속에서 드러난다.

그밖에도 부수현상들은 부지기수이다. "바둑" 에서는 "목 자로 쳐라" 라는 규범이 있다. 그것은 규칙으로 구축된 것이 아니라, 규칙들의 결과이다. 인간의 두뇌에는 쉽게 속아버리는 속성이 있다. 우리는 얼마나 쉽게 속는가? 쉽게 속는 성질은 두뇌의 "쉽게 속으라는 중추" 에 자리잡고 있는가? 신경외과 의사는 쉽게 속는 속성을 줄이기 위하여 정교한 수술을 할 수 있는가? 아니면 그대로 놓아두는가? 이것을 믿는다면 그는 대단히 쉽게 속는 사람이며, 그러한 수술도 불사할 것이다.

정신 대 두뇌
다음의 장들에서는 두뇌에 대해서 말할 텐데, 거기에서 우리가 두뇌의 가장 높은 층위인 우리의 정신을 이해할 수 있는지 검토할 것이다. 물론 우리가 정신과 관련이 있기도 하고 동시에 관련이 없기도 한 낮은 층위들을 이해하지는 못하지만 말이다. 낮은 층위의 법칙들에 대해서 "봉쇄된", 따라서 뇌세포의 미시적인 활동을 좌우하는 사고의 법칙들이 존재하는가? 정신은 두뇌로부터 "떼내어져서" 다른 체계들에 이식될 수 있는가? 아니면 사고의 과정들을 확연히 모듈적인 하위체계들로 쪼개어 넣는 것이 불가능한가? 아니면 두뇌는 차라리 원자, 재규정된 전자, 원자핵, 중성자 아니면 쿼크 같은 것인가? 의식은 부수현상인가? 정신을 이해하려면 신경세포의 층위에 이르기까지 깊숙이 내려가야 하는가?


Backward Forward Post Reply List