튜링은 만족감에 젖어 자신이 만든 덧셈 기계의 행동표를 내려다보았다. 작동했다. 그의 상상 속 기계는 계산을 해냈다.
그러나 그 만족감은 오래가지 않았다. 그의 날카로운 정신은 곧바로 다음 질문으로 넘어갔다.
‘만약 뺄셈을 하고 싶다면? 곱셈은? 그때마다 새로운 기계를 설계하고, 새로운 행동표를 만들어야 하는가?’
그것은 몹시 비효율적이고 투박한 방식처럼 느껴졌다. 특정 작업에만 특화된 수십, 수백 개의 기계를 상상하는 것은 그의 미적 감각에 맞지 않았다. 분명 더 우아한 방법이 있을 터였다.
그의 시선이 노트 위에 그려진 두 개의 분리된 요소, 즉 데이터가 담긴 ‘테이프’와 기계의 작동법을 정의한 ‘행동표’ 사이를 오갔다.
하나의 기계.
하나의 규칙표.
하나의 작업.
이 고정된 관계를 깰 수는 없을까?
그 순간, 그의 뇌리에 섬광 같은 아이디어가 스쳐 지나갔다.
‘만약… 행동표 그 자체를 테이프에 데이터처럼 쓸 수 있다면?’
튜링은 펜을 쥔 손에 힘을 주었다. 생각은 꼬리에 꼬리를 물고 폭발적으로 확장되었다.
우선, 행동표의 규칙들을 숫자로 ‘코드화’하는 것이다. 괴델이 명제에 숫자를 부여했듯, 기계의 각 상태(예: q_find_end
=1), 기호(예: 1
=1, B
=2), 이동 방향(예: R
=1)에 고유한 번호를 매긴다.
그렇게 하면, 덧셈 기계의 규칙 “만약 상태가 q_find_end
이고 기호 B
를 읽으면, 1
을 쓰고 정지하라”는 한 줄의 문장은, ‘1, 2, 1, 0’과 같은 순수한 숫자의 나열로 변환될 수 있었다.
즉, 덧셈 기계의 ‘설계도’ 전체를, 하나의 거대한 숫자로 만들 수 있는 것이다!
그렇다면 이제 테이프는 두 부분으로 나눌 수 있다.
첫 번째 부분에는 특정 기계(예: 덧셈 기계)의 작동 규칙을 코드화한 ‘설계도 숫자’를 적는다.
두 번째 부분에는 그 기계가 계산할 실제 데이터(예: ‘111’)를 적는다.
[덧셈 기계의 설계도 | 구분 기호(;) | 데이터 ‘111’]
이제 필요한 것은 단 하나의 특별한 기계였다.
이 기계의 임무는 덧셈이나 뺄셈이 아니다. 이 기계의 유일한 임무는, 테이프의 첫 번째 부분에 적힌 ‘설계도’를 먼저 읽고, 그 규칙을 이해한 다음, 그 규칙에 따라 테이프의 두 번째 부분에 있는 ‘데이터’를 처리하는 것이다.
만약 테이프에 덧셈 기계의 설계도를 넣어주면 이 기계는 덧셈 기계처럼 행동할 것이다.
만약 테이프를 지우고 뺄셈 기계의 설계도를 넣어주면, 똑같은 기계가 이번에는 뺄셈 기계로 변신한다.
그것은 더 이상 덧셈 기계나 뺄셈 기계가 아니었다. 그것은 모든 기계를 흉내 낼 수 있는 기계, 모든 계산을 수행할 수 있는 단 하나의 기계였다.
튜링은 이 궁극의 기계에 이름을 붙였다.
‘보편 기계(Universal Machine)’.
그는 숨을 죽였다. 이 아이디어의 거대함에 스스로 압도당했다.
그 순간, 인류 역사상 처음으로 ‘하드웨어’와 ‘소프트웨어’의 개념이 분리되고 있었다.
보편 기계 그 자체는 고정된 물리적 실체, 즉 ‘하드웨어’다.
테이프에 쓰인 기계의 설계도는 언제든 바꿀 수 있는 논리적 명령의 집합, 즉 ‘소프트웨어’다.
기계의 행동이 더 이상 기계 자체에 묶여있지 않게 된 것이다. ‘무엇을 할 것인가’가 ‘어떻게 만들어졌는가’로부터 자유로워지는 순간이었다.
이것은 결정 문제를 풀기 위한 단순한 도구가 아니었다. 이것은 완전히 새로운 패러다임이었다. 튜링은 직감했다. 자신이 지금 상상하고 있는 이 ‘보편 기계’의 원리가, 언젠가 현실 세계에서 물리적인 형태로 구현될 것임을.
튜링의 노트 위에서, 20세기를 정의하고 미래를 열어젖힐 ‘컴퓨터’라는 혁명적 개념이, 바로 지금, 조용히 잉태되고 있었다.