brunch

『비트의 세계』

「프로그래머의 눈으로 본 세상, 인간, 코드」

by 안서조

이 책의 부제목은 「프로그래머의 눈으로 본 세상, 인간, 코드」이다. 내용은 저자가 프로그래머로서 컴퓨터 언어로 세상을 살아가는 이야기이다.


컴퓨터 공학과 철학을 공부한 저자는 마이크로소프트와 구글에서 일하면서 겪은 일들을 떠올리며, 디지털이 인간에게 어떤 의미인지 살펴보고, 우리가 생활하면서 접하는 모든 사소한 것들이 알게 모르게 하나의 큰 흐름으로 이어지고 있다는 것을 말한다.


저자는 논리와 프로그래밍을 이해하기 위해 인문학을 공부했고, 언어와 문학을 이해하기 위해 과학을 공부했다. ‘비트 연산자’는 비트의 서열(1과 0을 죽 나열한 것)을 조작하는 컴퓨터 명령어다. 비트가 실제로 무엇을 나타내는지에 상관없이 데이터의 각 비트를 조작한다. 컴퓨터는 세계를 더 잘 파악할 수 있는 도구를 제공한다. 그러나 우리가 컴퓨터에게 우리의 편견을 입력한다면, 컴퓨터는 겉보기에 정량적이면서 객관적인 형태로 그 편견을 우리에게 되돌려준다.


프로그래밍은 세계에서 불확실성을 제거하고 세상의 원리들을 우리 앞에 펼쳐 보인다. 프로그래머도 수학자와 시인 못지않게 우아함과 아름다움이라는 개념에서 영감을 얻는다. 프로그래밍이 추상적인 활동만은 아니다. 프로그래밍에는 하드웨어가 필요하다. 하드웨어가 일반 가정에 들어온 것은 1980년대부터였다.


‘휴리스틱’이라는 용어의 현대적 의미는 수학자 죄르지 포여가 내놓았다. 휴리스틱 접근법은 완전히 이해하지 못할 본능적 직감, 과거 경험, 무의식, 기타 정신 과정들로부터 나오는 다루기 어려운 복잡성과 모호함에 대처하기 위해, 그때그때 어림짐작으로 추정하는 것이다. 인간이 언어와 감정의 미묘함, 정의와 정치의 난제, 미적 경험의 심오함은 정량화하여 수학과 논리가 제공하는 분석 상자에 분류해 넣는 방식에 저항하는 현상들이다.

1950년대 노벨 경제학상 수상자인 허버트 사이먼은 휴리스틱이 너무 복잡해서 분석적으로는 이해하기 어려운 세상에 대처하는 필수 도구라고 주장했다. 그는 휴리스틱이 우리가 어떤 문제이든 간에 풀고자 할 때 직면하는 한계들에 대처하기 위해 필요한 수단이라고 보았다. 시간, 지식, 지능의 한계 같은 것들이다.


저자는 연애 10년 후 결혼했다. 부부관계도 코드를 짜고 프로그램을 짜듯이 생각했다. 부부관계의 코드는 말, 행동, 생각으로 이루어져 있다. 우리가 할 일은 결혼이 파탄나지 않도록 코드에 있는 버그를 막는 것이다.

부부관계를 구제한 소프트웨어 공학의 격언 7가지.


1. 베이퍼웨어 피하기.

베이퍼웨어-광고는 요란하게 했지만, 언제 출시될지 모를 미래의 제품을 뜻한다.

인간관계에서 베이퍼웨어는 덜 약속하고 더 해주는 쪽을 택하는 것이다. 서로 너무 많이 기대하기보다는 조금 기대하는 것이 좋다.


2. 베타 테스트.

코드가 탄탄하다는 증거가 충분히 쌓일 때까지 정기적으로 유지보수하고 개선하는 것이 좋다.

3. 버그는 결코 사라지지 않는다. 잠자고 있을 뿐이다.


부부 싸움은 늘 어떤 사소한 문제로 시작되어 경쟁하듯이 서로를 비난하면서 더 큰 문제로 비화되는 양상이다. 버그도 뜬금없이 나타나서 서버를 고장 낸 뒤에 수수께끼처럼 사라진다. 그러나 버그는 결코 사라지지 않는다. 고치지 않으면 그 버그는 반드시 다시 돌아온다. 심각한 부부 싸움은 평온한 시기에 갑자기 사라질지 모르지만, 근본적인 문제를 해결하지 않으면 곪다가 나중에 더 크게 폭발할 뿐이다.


4. 90대 10 법칙을 따르라.

오래된 소프트웨어 최적화 법칙 하나, “코드 중 10%가 프로그램 작동 시간의 90%를 쓴다.” 인간은 그 10%가 어디에 있는지 추측하기 어렵다. 현실적인 문제들은 아주 중요하며, 숨 돌릴 공간도 그러하다. 각자는 홀로 지낼 수 있는 자기만의 방이 필요하다. 인간관계도 마찬가지다. 서로의 별난 습관을 놓고 다투는 일에 자원을 낭비하지 않으려 노력해야 한다. 그것은 불필요한 최적화다. 성급한 최적화야 말로 모든 악의 근원이다.

5. 힘들고 지루한 일을 하라.

인간관계의 핵심 기반처럼 보이는 것(사랑, 섹스, 자녀)은 부수적이면서도, 필수적인 요소들의 뒷받침이 있어야만 존속할 수 있다. 대부분은 사랑에 관한 것이 아니라 사랑이 가능성을 뒷받침하는 일에 관한 것이다. 일정을 짜고 돈 문제를 해결하고 잡다한 집안일을 처리하는 것 등이 그 일에 속한다. 필수 기반 시설의 뒷받침이 없다면 인간관계는 초기 버전의 윈도우처럼 먹통이 될 것이다.


6. 이력 현상이 항상성을 가능하게 한다.

‘이력 현상’은 시스템이 현재 상태뿐 아니라 과거의 상태에도 의존하는 것을 말한다. 부부관계에서도 갑작스러운 변화에 과잉이 반응하면 재앙이 빚어질 수 있다. 사람의 마음은 현재의 변덕스러운 감정에 따라서 과거를 고쳐 쓰는 성향이 강하다. 부부 사이에 최악의 상황이 여러 주 동안 이어졌는데, 멈출 방법이 도저히 떠오르지 않았다. 과거에 함께 했던 즐거운 일들까지 기억 경관에서 깡그리 사라지고 말았다. 기억을 교란은 마음의 단절과 관련이 있다.


7. 결함 허용성.

목공품에서 몇 년 또는 수십 년이 지난 뒤에 숨어 있던 벌레가 나올 수 있듯이, 코드에서도 마찬가지다. 유능한 프로그래머는 맡은 프로그램에 관한 자신의 지식이 불완전함을 깨닫는다. 그래서 자신의 능력을 최대한 발휘하여 프로그램에 ‘결함 허용성’을 갖추어 놓는다.


20년을 함께 살았지만, 내가 이해하고 있는 아내의 모습이 복잡한 한 개인의 근삿값에 불과하다는 것을 알아야 한다. 인간관계의 형성이란, 서로 별개이면서 잘 들어맞지 않는 조각들을 대략적으로만 이해한 채로 하나로 붙여서 끊임없는 유지 관리가 필요한 불분명한 구조를 만드는 것이다. 우리는 예상한 실패뿐 아니라, 예상치 못한 실패에도 미리 대비해야 한다. 인간관계는 ‘결함 허용성’을 지녀야 한다.


컴퓨터과학(이론)과 소프트웨어공학(실천)은 서로에게 영향을 미쳤다. 양쪽 다 오늘날 우리가 알고 있는 컴퓨터의 진화에 중요한 역할을 했다. 1970년 최고 컴퓨터에는 트랜지스터가 수천 개 들어 있었다. 지금은 수십억 개가 들어 있다. 그렇다고 해서 그때보다 컴퓨터가 수백만 배 더 영리해졌다는 뜻은 아니다. 계산 능력은 기계의 지능을 결정하는 중요한 요소지만, 계산 능력만으로 모든 것이 결정되지 않는다. 컴퓨터과학의 지적 발전도 중요한 요소다.


프로그래머는 좋은 코드를 볼 줄 알아야 하며, 약간의 노력으로도 코드의 짜임새와 기능에서 근본적인 단순성을 유도할 수 있어야 한다. 여기서 단순성이란 코드를 산뜻하고 예측 가능한 방식으로 짜는 조직 원리들을 말한다. 이러한 이해는 모든 코드의 배후에 있는 숨겨진 현실에 관한 지식에서 나온다. 그리고 그 현실은 한마디로 말하면, 논리다.


논리학자 레이먼드 스멀리언을 통해 유명해진 퍼즐이 있다. 거짓말쟁이와 참 말쟁이가 등장하는 퍼즐이다. 세상에 두 유형의 사람만 있다고 하자. 늘 거짓말을 하는 사람과 늘 진실을 말하는 사람이다. 어떤 두 사람이 다음과 같이 말한다면, 누가 거짓말쟁이이고 누가 참 말쟁이인지 알 수 있을까?


몰리, “레오폴드는 거짓말쟁이다.”

레오폴드, “우리 둘 다 거짓말쟁이다.” 추론은, 레오폴드의 말은 참일 리가 없다. 그가 참 말쟁이라면, 그의 말은 거짓이 되므로 모순되기 때문이다. 따라서 그는 거짓말쟁이임이 분명하다. 그의 말이 거짓이므로 레오폴드와 몰리 둘 다 거짓말쟁이일 리는 없다. 레오폴드가 거짓말쟁이이므로 몰리는 참 말쟁이임이 틀림없다.


컴퓨터의 핵심 특징은 디지털이다. 모든 것이 1과 0으로 된 이진수로 표현된다. 컴퓨터의 단위, 그리고 데이터 자체의 단위는 이진숫자, 즉 비트 bit이다. 겉으로 어떻게 보이든 간에 모든 디지털 데이터는 기본적으로 두 개의 기호로 된 언어, 달리 말하면 기호 하나(1)와 그 기호의 부재(0)로 이루어진 언어로 표현된다. 가능성이 정확히 두 가지뿐인 언어다. 많은 것들이 컴퓨터에서 이진수로 표현될 수 있다. 문자, 그래픽, 소리, 동영상, 프로그램이 그렇다. 이론상으로는 무엇이든 다 이진수로 표현할 수 있다. 책이든 음악이든 단세포 생물이든 항성계든 다 마찬가지다.


컴퓨터 프로그래머에게 참/거짓과 1/0의 두 이진법은 금방 상호 교환 가능한 것이 되었다. 참은 1이고 거짓은 0이다. 대다수 컴퓨터 언어는 불변수(참이거나 거짓일 수 있는)와 숫자 변수(1, 0, 또는 다른 어떤 수일 수 있는)를 명확히 구별하지만, 현실적으로 그 구분은 모호하다. 컴퓨터 연산에서 논리와 수학이 긴밀하게 관계를 맺고 있기 때문이다.


프로그래머는 참과 거짓을 1과 0의 동의어로 취급한다. 참과 거짓은 이진법의 한 자릿수에 들어갈 수 있는 두 가지 값이 된다. 컴퓨터는 참과 거짓의 차이를 이해하지 못하며, 두 개념이 무슨 의미인지도 이해하지 못한다.

프로그래밍 언어와 인간의 언어는 서로 다른 목적을 가진 서로 다른 메커니즘이다. 컴퓨터 언어는 논리나 대수에 더 가깝다. 컴퓨터 언어가 궁극적으로 숫자를 다룬다. 인간의 언어는 인간의 삶과 그 안의 모든 것을 다룬다. 인간의 언어와 기계의 언어 사이에서 번역하는 일은 영어를 프랑스어로 번역하는 것보다 훨씬 까다롭다. 영어로 말하든 프랑스어로 말하든 말하는 사람들은 동일한 기본 현실, 즉 인간이 지각하는 현실을 이야기하고 있다. 사람들은 동일한 세계에 관한 지식, 즉 맥락을 공유한다. 컴퓨터는 이 맥락을 공유하지 않는다.

모든 검색엔진은 세 가지 중요한 요소를 포함한다. 크롤링, 색인 생성 indexing, 순위 매기기 ranking이다. 크롤러 또는 웹스파이더는 찾을 수 있는 모든 웹페이지(대개 수십억 개)를 체계적으로 내려받아서 콘텐츠를 확보하는 일을 한다. 그러면 인덱서가 웹페이지들의 내용을 훑어서 검색 조건에 따라서 웹페이지들을 정렬할 수 있는 키워드 목록을 생성하고, 페이지의 가치와 검색어와의 관련성을 알려줄 수 있는 다른 정보들도 추출한다. 인덱서는 사실상 웹의 거대한 데이터베이스를 구축한다. 마지막으로 랭커는 인덱서의 데이터베이스를 이용해서 각 검색 질의어에 페이지들이 얼마나 관련이 깊은지를 판단하고 사용자가 보는 검색 결과 순위를 정한다.


우리가 존재하는 새로운 디지털 공간에 맞추어서, 우리는 인간과 기계를 연결하는 잡종 언어를 서서히 만들어 가고 있다. 이 언어는 도출되는 데이터를 더 잘 분석할 수 있게 해주지만, 우리의 불규칙성을 제거하는 일도 한다. 불규칙성은 컴퓨터 표현으로 번역되는 과정에서 사라진다. 기계는 우리의 삶과 상호작용의 매끄럽게 다듬어지고 정규화된 판본, 정확하게 코드화되고 정량화된 판본을 우리에게 되먹임한다.


작가는 코드와 온폴로지가 포착하지 못하는 무한한 미묘함과 불규칙성이 우리에게 필요하다고 믿는다. “세상이 아무리 컴퓨터화한다고 해도, 그것들을 인정하고 의미를 부여할 필요가 있다.”라고 주장한다.

끝까지 읽어주셔서 감사합니다! 애독자 여러분들의 '응원하기'는 작품 연재에 큰 힘이 됩니다.

sticker sticker

책 소개

『비트의 세계』 데이비드 아우어바흐 지음. 이한음 옮김. 2021.04.20. (주)북하우스 퍼블리셔스. 455쪽. 18,000원.


데이비드 아워어바흐 David Auerbach. 마이크로소프트와 구글에서 소프트웨어 엔지니어로 일했다. 대학에서 컴퓨터과학과 문학과 철학을 전공했다.


이한음. 서울대학교에서 생물학을 공부했다. 과학 전문 번역가. 『만들어진 신』으로 한국출판문화상 번역 부문을 수상했다.




keyword