sxngt

두 철학으로 동시에 살아간다는 것

· Essay · 5 min

목수의 연장통에는 서로 닮지 않은 도구들이 나란히 눕는다. 끌은 나무의 결을 거슬러 파고들며 제 힘의 방향을 손끝까지 낱낱이 전하고, 붓은 종이의 결을 따라 미끄러지며 손목의 망설임까지 획에 남긴다. 끌을 쥐던 손으로 붓을 쥐면 처음엔 획이 파인다. 붓을 쥐던 손으로 끌을 쥐면 처음엔 날이 겉돈다. 그런데도 옛 장인들은 두 도구를 한 통에 넣고 다녔다.

내 연장통에도 그런 두 자루가 있다. 하나는 C++라 부르고, 하나는 파이썬이라 부른다.

끌의 언어

C++는 끌이다. 이 언어는 나에게 아무것도 거저 주지 않았다. 메모리는 내가 빌린 만큼 내가 돌려놓아야 했고, 복사와 이동의 갈림길에서는 매번 비용을 물었으며, 소멸자는 떠나는 것들의 뒷모습까지 내 눈으로 지켜보게 했다. 처음에는 그것이 가혹하다고 생각했다. 다른 언어들이 알아서 치워 주는 설거지를 왜 여기서는 내 손으로 해야 하는가.

오래 쥐고 나서야 알았다. 그것은 가혹함이 아니라 존중이었다. C++는 나를 어른으로 대접하는 언어였다. 비용을 숨기지 않는다는 것은 나를 속이지 않겠다는 뜻이었고, 모든 결정을 내게 묻는다는 것은 내 판단을 믿겠다는 뜻이었다. 자유와 책임이 한 몸이라는 오래된 격언을, 나는 교과서가 아니라 세그폴트에서 배웠다.

RAII라는 관용구를 나는 이 언어에서 가장 아름다운 문장으로 꼽는다. 자원은 얻는 순간에 임자를 정하고, 임자가 무대를 떠날 때 함께 떠난다. 시작할 때 이미 끝을 정해 두는 것. 만남의 순간에 이별의 예법을 갖추는 것. 끌은 그렇게 나에게 물러날 때를 아는 법을 가르쳤다.

붓의 언어

파이썬은 붓이다. 이 언어는 나에게 거의 모든 것을 거저 주었다. 메모리는 언어가 치웠고, 타입은 물처럼 그릇을 따라 모양을 바꿨다. 어제 떠오른 생각을 오늘 아침이면 돌아가는 형체로 만들 수 있었다. 생각의 속도와 코드의 속도 사이의 간격이 이토록 좁은 언어를 나는 달리 알지 못한다.

처음에는 그것이 느슨하다고 생각했다. 끌의 세계에서 온 나는 모든 것을 내 손으로 확인해야 직성이 풀렸고, 보이지 않는 곳에서 일어나는 일들을 불안해했다. 가비지 컬렉터를 믿지 못해 어깨 너머를 힐끔거리는 사람. 그것이 붓을 처음 쥔 나의 모습이었다.

오래 쥐고 나서야 알았다. 붓의 세계에서 미덕은 통제가 아니라 명료함이었다. 파이썬이 나에게 요구한 것은 완벽한 장악이 아니라 읽히는 글이었다. 코드는 기계에게 내리는 명령이기 전에 사람에게 건네는 문장이라는 것. 잘 쓴 파이썬은 잘 쓴 산문과 같아서, 다음 사람이 주석 없이도 그 뜻을 따라 걸을 수 있어야 한다는 것. 붓은 그렇게 나에게 내려놓는 법과, 내려놓은 자리에서 얻는 속도를 가르쳤다.

왜 둘 다여야 했는가

한쪽만으로 살아 보려던 시절이 있었다.

끌만 쥐고 살던 때, 나는 단단했으나 느렸다. 아직 그려 보지도 않은 그림의 액자를 짜고 있었다. 가설 하나를 확인하는 데 골조부터 세워야 했고, 그사이 물음은 식어 버리곤 했다. 완벽하게 지어진 집에 정작 살 사람이 오지 않는 일도 겪었다.

붓만 쥐고 살던 때, 나는 빨랐으나 얕은 물에서만 빨랐다. 프로토타입이 제품이 되고 트래픽이 밀물처럼 차오르면, 종이 위의 획들은 무게를 견디지 못했다. 병목의 바닥까지 내려가야 하는 날, 추상화의 마루 밑을 열어 볼 연장이 손에 없었다.

그래서 둘 다여야 했다. 이것은 욕심이 아니라 생존이었다. 연구와 엔지니어링을 겹쳐 사는 삶에서, 물음은 붓으로 던지고 대답은 끌로 세워야 하는 날들이 이어졌다. 실험의 계절에는 파이썬으로 백 개의 가설을 흘려보냈고, 양산의 계절에는 C++로 살아남은 하나를 바위에 새겼다. 두 언어는 경쟁자가 아니라 계절이었다. 씨 뿌리는 계절과 거두는 계절이 서로를 부정하지 않듯이.

두 철학이 삶에 남긴 것

도구는 손에 익는 데서 그치지 않고 끝내 사람을 조각한다. 두 언어를 오가며 산 시간은 코드 바깥의 나를 이렇게 깎아 놓았다.

첫째, 비용을 아는 사람만이 관대할 수 있다. C++는 모든 편리함 뒤에 숨은 값을 보게 했고, 파이썬은 그 값을 알면서도 기꺼이 지불하는 법을 가르쳤다. 무지한 관대함은 낭비가 되고, 인색한 정확함은 옹졸함이 된다. 값을 훤히 알면서 웃으며 치르는 것, 나는 그것이 어른의 너그러움이라고 생각하게 되었다.

둘째, 엄격함은 남에게 향할 때 폭력이 되고, 나에게 향할 때 기품이 된다. 끌의 규율은 내 코드의 안쪽에 두고, 붓의 관대함은 남의 코드를 읽는 눈에 두는 것. 컴파일러처럼 자신을 검사하되 인터프리터처럼 타인을 실행해 주는 것. 협업에서 내가 지키려는 예법은 대부분 이 두 언어에게 배웠다.

셋째, 통제와 신뢰는 반대말이 아니라 국면이다. 어떤 국면에서는 바이트 하나까지 장악해야 하고, 어떤 국면에서는 보이지 않는 손에 맡기고 다음 문장으로 나아가야 한다. 지혜는 둘 중 하나를 고르는 데 있지 않고, 지금이 어느 국면인지 알아보는 데 있었다. 인생의 대부분의 실패는 통제할 국면에 맡겼거나, 맡길 국면에 움켜쥔 데서 왔다.

한 손에는 끌, 한 손에는 붓

사람들은 가끔 묻는다. 그래서 어느 언어가 더 좋으냐고. 나는 그 물음이 끌과 붓 중 무엇이 더 훌륭하냐는 물음과 같다고 생각한다. 파고들 것 앞에서는 끌이 옳고, 흘러가야 할 것 앞에서는 붓이 옳다. 도구에게 충성을 맹세하는 사람은 도구의 노예가 되고, 일에게 충성하는 사람만이 도구의 주인이 된다.

두 개의 상반된 철학을 몸에 들이는 일은 처음에는 분열처럼 느껴진다. 그러나 시간이 지나면 그것은 분열이 아니라 폭이 된다. 엄격함과 너그러움, 장악과 위임, 새김과 흘림 사이의 그 폭이, 어제의 나라면 놓쳤을 문제의 결을 오늘의 나에게 보여 준다.

장인의 손은 도구를 가리지 않는다. 다만 나무 앞에서 오래 서서, 이 결에는 무엇이 맞는지 묻는다.

나는 아직 그 물음을 배우는 중이다.