Skip to content
Jacob's second brain 탐색
어느 개발자의 인문학 · 4 / 16화

code - 눈치 없는 상대와 나누는 대화

6 min read

젓가락질을 할 줄 모르는 친구에게, 그 방법을 가르쳐준다고 해봅시다. 단, 한 가지 조건이 있습니다. 손을 잡아 이끌어서도 안 되고, 시범을 보여서도 안 됩니다. 오직 말로만, 글로 적은 문장으로만 설명해야 합니다.

막상 해보면, 이게 보통 일이 아닙니다. “젓가락 두 개를 손에 쥐고…” 어떻게 쥐죠? “엄지와 검지로…” 정확히 어디에 닿게? “하나는 고정하고 하나는 움직여서…” 무엇을 기준으로 얼마나? 한 마디를 뱉을 때마다 빠뜨린 것이 우수수 드러납니다. 평생 아무 생각 없이 해온 그 단순한 동작이, 막상 말로 풀어내려 하면 끝없이 잘게 쪼개지는 것입니다. 그리고 그 사이 어디 한 군데라도 어설프게 비워두면, 듣는 사람은 젓가락 두 개를 양손에 하나씩 쥐거나, 연필처럼 거머쥔 채 어쩔 줄 모르는, 우스꽝스러운 광경이 펼쳐집니다.

개발자가 매일 하는 일이 바로 이것입니다. 다만 그 상대가 친구가 아니라 컴퓨터일 뿐입니다.

똑똑하지만 아무것도 모르는 상대

개발자는 컴퓨터에게 일을 시키기 위해 ‘코드(code)‘라는 것을 씁니다. code라는 말은 본래 암호나 규약을 뜻했는데, 컴퓨터의 세계에서는 ‘정해진 규칙에 따라, 기계가 할 일을 한 단계씩 적어 내려간 글’을 가리킵니다. 어렵게 들리지만, 그 본질은 방금 그 젓가락 설명서와 다르지 않습니다. 무언가에게 일을 시키기 위해, 그 절차를 빠짐없이 적어둔 글입니다.

문제는 그 무언가, 그러니까 컴퓨터가 젓가락질을 할 줄 모르는 정도가 아니라는 데 있습니다. 컴퓨터는 그야말로 아무것도 모릅니다. ‘음식’이 무엇인지, ‘집어 든다’는 게 무엇인지, 심지어 ‘위’와 ‘아래’가 무엇인지조차 모릅니다. 게다가 눈치라는 것이 전혀 없습니다. 사람이라면 설명이 좀 엉성해도 “아, 대충 이런 뜻이겠거니” 하고 알아서 메워 듣습니다. 컴퓨터는 그러는 법이 없습니다. 적힌 그대로, 한 글자도 보태거나 빼지 않고, 곧이곧대로 실행할 뿐입니다.

그래서 코드를 쓴다는 것은, 이렇게 아무것도 모르는 상대에게 모든 것을 하나하나 다 일러주는 일입니다. 빠뜨린 단계가 있으면 그 일은 일어나지 않고, 모호하게 적은 부분이 있으면 엉뚱한 일이 벌어집니다. “적당히”, “알아서”, “대충 이쯤에서” 같은 말은 통하지 않습니다. 모든 것이 정확해야 합니다. 코드의 세계에 어림짐작이란 없습니다.

적당히가 통하지 않는 세계

이 엄격함이 실제로 어떤 모습인지, 흔한 예 하나를 들어보겠습니다. 오늘이 6월 1일인데, 누군가 “6월 3일 2시에 만나자”고 한다면, 우리는 아무 의심 없이 알아듣습니다. 곧 다가올 그 6월 3일, 그것도 오후 두 시일 거라고요. 그러나 컴퓨터에게는 이 한마디가 빈틈투성이입니다. 그 6월 3일이 올해인지 내년인지, 십 년 뒤인지. 2시가 오후인지 새벽인지. 심지어 그 시각이 한국 시간인지 다른 나라 시간인지까지, 하나도 빠짐없이 정해주어야 비로소 알아듣습니다.1 우리가 “6월 3일 2시”라는 짧은 말에 무심코 얹어둔 약속들 — 올해, 오후, 우리가 선 이곳의 시간 — 을, 컴퓨터는 단 하나도 알아서 채워주지 않기 때문입니다.

이런 빈틈은 곳곳에 숨어 있습니다. 마지막 한 자리가 남은 좌석을 두 사람이 같은 순간에 누르면 누구의 예약을 받아야 하는가. 사람의 말로는 “먼저 누른 사람”이면 충분하지만, 컴퓨터에게는 그 ‘먼저’가 정확히 무엇인지까지 정해주어야 합니다. 그래서 능숙한 개발자일수록, 일이 술술 풀리는 경우를 적는 데에는 시간을 얼마 쓰지 않습니다. 정작 공들이는 것은 “그런데 만약 이런 경우라면?”을 빠짐없이 메우는 일입니다. 코드를 쓰는 시간의 절반 이상은, 정상적인 흐름이 아니라 그 흐름이 어긋나는 온갖 가장자리를 챙기는 데 들어갑니다. 적어두지 않은 경우는 컴퓨터가 알아서 처리해주지 않기 때문입니다. 명시되지 않은 것은, 그냥 일어나지 않습니다.

우리는 얼마나 많은 것을 생략하며 사는가

이 엄격함 앞에 서보면, 뜻밖의 사실 하나가 드러납니다. 우리가 평소에 쓰는 말이 실은 얼마나 엉성한가 하는 것입니다.

“거기 그거 좀 줄래?” 우리는 이렇게 말하고도 멀쩡히 소통합니다. ‘거기’가 어디인지, ‘그거’가 무엇인지 한마디도 정확히 말하지 않았는데도 말입니다. 상대가 내 시선을 따라가고, 상황을 살피고, 그동안 쌓인 맥락을 더해 그 빈 곳을 알아서 메워주기 때문입니다. 사람 사이의 말이란 본래 빈틈투성이입니다. 그런데도 통하는 것은, 듣는 사람이 그 빈틈을 끊임없이 메워주고 있기 때문입니다.

우리는 그 사실을 좀처럼 의식하지 못합니다. 말이 통하면 으레 내가 잘 말한 덕이라 여깁니다. 그러나 코드 앞에 서면, 그 착각이 깨집니다. 눈치로 메워주는 상대가 사라지자, 내 말이 실은 얼마나 많은 구멍을 품고 있었는지가 고스란히 드러나기 때문입니다. 컴퓨터에게 일을 시켜본 사람은, 역설적으로 사람이 얼마나 너그러운 청자였는지를 깨닫게 됩니다.

안다는 것과, 풀어낼 수 있다는 것

젓가락 이야기로 돌아가 봅니다. 우리가 젓가락질을 설명하지 못한 것은, 젓가락질을 못 해서가 아니었습니다. 오히려 너무 잘해서, 더 이상 그 동작을 의식하지 않게 되었기 때문입니다. 몸이 알아서 하는 일을, 머리는 한 단계씩 풀어 설명하지 못합니다.

여기서 한 가지가 드러납니다. 무언가를 안다는 것과, 그것을 남이 따라 할 수 있도록 풀어내는 것은 전혀 다른 일이라는 것입니다. 우리는 흔히 “나는 이걸 안다”고 여기지만, 막상 누군가에게 처음부터 끝까지 설명해보라고 하면 곳곳에서 막힙니다. 안다고 믿었던 것의 상당 부분이, 실은 ‘대충 그렇게 되는 것’이었음을 그제야 알게 됩니다. 코드를 쓰는 일은, 바로 그 ‘대충’을 허락하지 않습니다. 한 단계도 건너뛰지 않고 끝까지 풀어내라고 요구하기에 코드를 쓰다 보면 내가 무엇을 정말로 이해했고 무엇을 어렴풋이 알았을 뿐인지가 적나라하게 갈립니다.

그래서 코드를 짠다는 것은, 사실 가장 정직한 형태의 이해이기도 합니다. 어렴풋이 아는 것으로는 한 줄도 쓸 수 없으니까요.

빈틈이 먼저 보이는 사람들

이런 세계에 오래 살다 보면, 좀 별난 습관이 하나 생깁니다. 개발자들 중에는 일상의 대화에서도 말의 빈틈을 그냥 넘기지 못하는 사람이 적지 않습니다. 누가 “다음에 밥 한번 먹자”고 하면 속으로 ‘다음이 대체 언제지?’ 싶고, “그건 다들 그렇게 한대”라고 하면 ‘다들이 정확히 누구지?’ 하고 되묻고 싶어집니다. “이따 거기서 보자”는 말 한마디에도, 이따가 몇 시인지 거기가 어디인지를 굳이 못 박아두고 싶은 충동이 듭니다.

옆에서 보면 사소한 걸로 깐깐하게 따지는 것처럼 보입니다. 그러나 이것은 트집이라기보다, 눈치라고는 없는 상대와 매일 대화하며 생긴 일종의 직업병에 가깝습니다. 모호함이 곧 오류가 되는 세계에 오래 머물다 보면, 사람의 말에서도 빈틈이 먼저 눈에 들어오는 것입니다. 다만 사람과의 대화에서는, 그 빈틈을 너무 파고들지 않는 편이 대개 더 지혜롭다는 것을, 개발자들도 조금씩 배워갑니다.

정확히 말한다는 어려운 일

요즘은 사람의 말로 부탁하면 알아서 코드를 만들어주는 도구도 생겼습니다. “이런 걸 만들어줘”라고 하면, 그럴듯한 결과를 척척 내놓습니다. 그러나 조금만 써보면 곧 알게 됩니다. 정작 어려운 것은 코드를 적는 일이 아니라, 내가 무엇을 원하는지를 정확히 아는 일이라는 것을요. 바라는 바가 흐릿하면, 아무리 똑똑한 도구라도 흐릿한 것을 만들어낼 뿐입니다. 모호하면 통하지 않는다는 코드의 본질은, 도구가 아무리 좋아져도 사라지지 않습니다. 다만 그 모호함의 책임이, 적는 손에서 바라는 마음으로 옮겨갈 뿐입니다.

생각해보면 우리 삶의 많은 어긋남도 여기서 옵니다. 분명히 말했다고 믿었는데 상대는 다르게 알아들었던 일, 내 마음을 몰라준다고 서운했지만 정작 제대로 말한 적은 없던 일. 우리는 자주, 말하지 않은 것을 말했다고 착각합니다. 코드가 가르쳐주는 것은 단순하지만 묵직합니다. 통하게 하려면, 먼저 내가 무엇을 원하는지부터 분명히 알아야 한다는 것. 그리고 그것을 오해의 여지 없이 건네는 일은, 생각보다 훨씬 어렵고 또 귀한 일이라는 것입니다.

그런데 한 걸음 더 들어가 보면, 정작 어려운 일은 그다음이 아니라 그 앞에 있습니다. 오해 없이 전하는 일보다, 내가 무엇을 원하는지를 나부터 정확히 아는 일이 더 어렵습니다. 코드가 잘 풀리지 않는 것이 표현이 서툴러서가 아니라 무엇을 만들지가 흐릿해서이듯, 우리가 마음을 전하지 못하는 것도 말주변이 없어서라기보다 내 마음을 나조차 제대로 모르기 때문일 때가 많습니다. 무엇이 서운한지, 무엇을 바라는지, 정작 나에게 물어보면 대답이 흐려집니다. 그러니 정확히 말한다는 것은 결국 정확히 안다는 것이고, 그 정확함은 남이 아니라 나 자신을 들여다보는 데서 시작됩니다. 우리는 평생, 컴퓨터에게 일을 시키듯 우리 자신에게 묻는 법을 배워갑니다. 너는 정말로 무엇을 원하느냐고.

Footnotes

  1. 그중에서도 시간을 다루는 일은 개발자들에게 악명이 높습니다. 나라마다 시간대가 다르고, 일 년에 두 번 시곗바늘을 한 시간씩 옮기는 나라도 있고, 윤초니 윤년이니 하는 예외까지 끼어들기 때문입니다. 그래서 “날짜와 시간만 제대로 다뤄도 절반은 개발자”라는 우스갯소리가 있을 정도입니다.

See Also

Graph View

댓글 (0)

아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요.