컴퓨터 구조로 생각해 보는 인생
나는 결정론을 믿는다. 세상만사는 결정되어 있고, 운명을 구태여 정의한다면 그건 있을 수밖에 없다고 생각한다. 이건 내 믿음이고, 이것을 누군가에게 믿게 하고 싶은 생각은 전혀 없다.
나는 결정론이 미웠다. 그것이 곧 자유의 부재로 이어진다고 생각했으니까. 이미 모든 것이 정해져 있고, 내가 어떤 행동을 해도 그 흐름을 바꿀 수 없다면, 사람은 무엇하러 사는 것일까? 왜 노력하는 것이며, 왜 고통받아야 하는가? 만약 내 죽음이 확정되어 있다면, 그리고 죽음 뒤에 아무것도 없다면, 나는 왜 살아가는 것일까?
운명을 미워하던 시절, 나는 오히려 운명의 노예로 살았다. 운명을 두려워하고, 그것을 부정하기 위해 필사적이었다. 필사적으로 운명을 죽이기 위해 노력했다. 못 본 척하기도 했고, 과학의 세계를 둘러보거나, 종교의 세계에도 발을 담가 보았다.
내가 찾던 답은 없었다. 운명을 의식하기 시작한 순간부터 운명은 나의 주인이었다. 긴 운명 부정기를 거치며, 많은 성장을 겪었지만, 그 사실은 변하지 않았던 것 같다. 강한 부정은 강한 긍정을 의미한다고 했던가? 이럴 때 쓰는 말은 아니지만. 하여튼 운명에 대한 나의 집착은 그것이 음의 방향이긴 했지만, 그 절댓값을 점점 키워갔던 것 같다. 정말 원치 않았지만, 어느새 내 가치관의 큰 지분을 차지하고 있었다.
그러다가 결국 내가 찾아낸 운명에 맞서는 방법은, 오히려 운명이 존재한다고 생각하고, 그것이 존재해도 괜찮은 이유를 찾는 것이었다. 이미 운명은 내 안에 있었다. 그것이 존재하지 않는다는 과학적 증명이 나오더라도, 그것은 내 안에 평생 남을 것이었다. 더 이상 부정할 수는 없었다.
그렇게 나는 운명을, 결정론을 인정하기 시작했다.
딱히 어딘가에 선언한 것은 아니다. 하지만, 되돌아보면 어느 시점부터 나는 자연스럽게 운명을 존재하는 것으로 생각하고 있었다. 그런데, 표현을 보면 알겠지만, 이 시점의 내게 그것은 별로 중요한 것이 아니었다. 왜? 아마도, 그것은 내가 운명을 미워하던 근본적인 이유, "삶의 의미"가 더 이상 중요하지 않아 졌기 때문일 것이다.
삶의 의미라는 단어는, 삶이 "무언가의 수단"임을 함의하고 있다. 그런데, 굳이 삶을 무언가의 수단으로 정의해야 할까?
이 문장 역시 내가 의식적으로 떠올린 것은 아니다. 마찬가지로 과거를 회상하다 보니, 내 마음속에서 저런 관점이 자라기 시작했음을 자각했을 뿐이다.
사실 친구와 컴퓨터 이야기를 하다가 우연히 과거 회상을 하지 않았다면, 나는 이 꽤나 중대한 변화를 눈치채지 못했을 것 같다. 그러니까, 분명 프로세스에 대한 이야기였다.
우리가 실행 파일(. exe)을 실행하게 되면, 컴퓨터는 하드디스크에서 실행 파일을 메모리로 복사하고, CPU는 이 메모리에 복사된 코드 덩어리를 한 줄씩 읽어가며 명령을 순차적으로 실행한다. 이 복사된 코드 덩어리를 프로세스라고 한다.(정확히는 조금 다른 개념이긴 하지만.)
관련 지식이 없는 사람이 생각하기에, 프로그램은 매우 동적인 무언가인 것 같지만, 사실 아니다. 프로그램의 소스코드는 일단 실행이 시작되어 메모리에 복사된 이후로는 변경되지 않는다. 변경되는 것은 컴퓨터 안에 있는 기억장치들의 값들과, 현재 소스코드의 어느 줄을 실행하고 있는지 뿐이다. 즉, 프로그램 자체는 실행된 순간부터 어떤 명령을 실행할 수 있는지가 정해져 있다.
어떤 프로그램이 동적인 것처럼 보이는 이유. 그것은 소스 코드의 몇 번째 줄에 있는 명령어를 어떤 값으로 실행할지 결정하는, 환경이 동적이기 때문이다. 프로그램이 실행되는 시점에서 메모리에 어떤 값이 들어있는지, 레지스터(값을 저장할 수 있는 CPU의 부품 정도로 이해하면 좋을 것 같다.)에 어떤 값이 들어있는지는 프로그래머가 전혀 알 수 없다. 만약 입력 등을 받는 경우, 메모리의 값이 프로그램의 실행 시점에서 바뀌게 되므로 더더욱.
친구와 자연스럽게 이런 얘기를 하고 있는데, 나는 이것이 마치 인간의 삶 같다고 생각했다. 우리는 DNA로 인코딩 되어 있던 정보 덩어리이다. 나는 이 정보 덩어리라는 말을 구태여 "추상체"라고 말하고 싶다. 프로그래머에게는 너무 익숙한 존재이다. 우리는 "이런 기능이 있어야 한다.", "사용자에게 이렇게 보여야 한다." 하는 추상체들을 코드라는 구현체로 바꾸는 것이 일이니까. 세포 역시 이중 나선으로 구성된 추상체가 단백질 합성 생체 기계를 만나 세포들로 구현된 존재이다. 일반 사람에게 와닿는 비유라고 한다면, 헌법과 실제 사법 체계의 관계라고 생각하면 좋을 것 같다. 헌법은 "이런 가치를 구현하는 사법 체계를 만드시오."에 대한 명세일 뿐이지, 직접적으로 무언가 효력이 있는 구현체는 아니지 않은가.
모든 것이 결정된 상태로 태어나는 우리는, 마찬가지로 모든 것이 결정된 상태인 세상을 마주한다. 모든 것이 결정되어 있다는 말과, 모든 것이 예측 가능하다는 말은 당연히 별개이다. 일단 현재 시점에 라플라스의 악마는 죽었으니까. 다만, 이 세상이 물질로 구현되어 있다는 점과 물리법칙이라는 온 물질을 지배하는 진화 법칙이 존재한다는 사실은 부정할 수 없다. 인간이 어떤 원리로 움직이는 지도 점점 밝혀지고 있는 세상이다. 아직 뇌과학에는 미스터리가 많다고는 하지만.
그래서 무슨 말이 하고 싶냐 하면, 우리가 물질이고, 물리법칙의 지배를 받아 결정론적으로 움직인다고 해서 뭐가 나쁘냐는 말이 하고 싶었다. 우리는 세상을 좀 더 사랑할 필요가 있다. 비록 내가 나 자신의 소스 코드를 안다고 해도, 나는 내가 어떻게 움직일지 전혀 예상할 수 없다. 프로그래머가 그렇듯이. 나를 둘러싼 환경을 전혀 예상할 수 없으니까. 나라는 프로세스를 둘러싼 환경에는 메모리(이 세상에 존재하는 수많은 물질들과 그들이 품고 있는 정보들.), 레지스터(나의 과거. 내 기억들.), 심지어는 나와 파이프로 이어진 다른 프로세스들이 무수히 많이 존재한다.
그런 그들과의, 무수한 추상체들과 그 구현체들과의 상호작용 속에서, 나는 내 안의 가능성들을 하나둘씩 발견해 나간다. 계속 변화해 간다! 프로세스는 살아있는 시체가 아니다. 프로세스는 정적이지만, 동시에 동적인 실체다! 우리가 삶을 포기하지 않는 한, 삶은 우리에게 계속해서 수많은 가능성들을 보여준다. 그 가능성들은 현실이 될 수도 있고, 내 소스코드 어딘가에 처박혀서 실행되는 일이 단 한 번도 없을 수도 있다. 그렇지만 우리는 그것을 예상할 수 없다. 우리는 매일매일 우리의 미래 모습을 기대하면서 살아갈 수 있다.
운명을 기대하면서 살아갈 수 있다.