티스토리 뷰
무언가 잘 안 풀리는 코드를 계속 들여다보고 있을 때였습니다. 갑자기 핸드폰이 짧게 울리면서 알림 메시지가 하나 도착했습니다. 제 인생 패턴을 기준으로 미루어 짐작해보면, 오후 8시 이후에 오는 알림은 보통 언제 가입했는지도 모를 사이트에서 보내는 별 의미 없는 메일들, 누군가가 내가 편집했던 문서를 업데이트했다는 알림, 어딘가의 단톡방에 전달된 의미 없는 신문 기사들이 대부분이었기에 저는 아무런 설렘이나 기대 없이 기계적으로 알림 메시지를 확인할 수 있었습니다. 하지만 핸드폰을 들어 올리자마자 눈에 들어온 메시지는 제 예상을 벗어나는 것이었고, 뭔가 심장이 뛰는 듯한 느낌을 들게 해 주었습니다. 실제 메시지는 매우 사무적이었지만 제가 읽었을 때의 감상으로 번역해서 다시 작성하자면 대충 이런 메시지였습니다. "저... 주인님, 죄송하지만 제 바퀴가 지금 공중에 떠있는 거 같은데 빨리 와서 구해주시면 안 될까요?"
모든 사단의 시작은 사실 저의 못된 마음에서 비롯된 것이었습니다. 어느 때와 마찬가지로 잘 안 풀리는 코드를 붙잡고 씨름하고 있던 저는 50번째쯤 컴파일에서도 원하는 결과를 얻지 못하고는 갑자기 억울함이 마음속 깊은 곳에서 치밀어 오르는 것을 느낄 수 있었습니다. 아니 나는 지금 이 사소해 보이는 문제 하나 해결하지 못해서 퇴근을 못하고 있는데, 로봇청소기는 충전을 하면서 편히 쉬고 있다고? 그 상황에서 제가 가진 강력한 파워 워드는 로봇청소기:청소시작 이었고, 저는 세상에 제가 마음대로 컨트롤할 수 있는 것을 증명하기 위해 핸드폰에서 앱을 켜고 집에 있는 로봇청소기에 청소 시작 명령을 날렸습니다. 놀지 말고 바닥이라도 한 번 더 쓸어라. 이것이 너의 펌웨어에 각인된 로봇의 제2원칙이란다. 사실 저는 로봇청소기에 스케줄을 설정해서 매일 아침 10시, 그러니까 제가 출근해서 사무실에 도착할 무렵 청소를 시작하도록 설정해두었고 로봇청소기는 이미 그날 오전에 청소를 마친 상태였기에 굳이 이미 청소한 바닥을 한 번 더 청소를 하는 것은 의미 없는 일이었습니다. 로봇청소기 입장에서는 이미 할당된 루틴을 잘 마치고 쉬고 있는데 뜬금없이 청소를 다시 하라는 지시가 내려오니까 황당한 일이었겠지만 어쩌겠습니다. 온수매트와 서큘레이터, 라디에이터와 에어컨을 동시에 켜는 명령을 날리는 것으로 스트레스를 해소하는 것보다는 훨씬 건설적이고 생산적인 화풀이였던 걸요.
사실 로봇청소기가 제3원칙을 어기고 이동 불능에 빠졌다는 사실이 '한시라도 빨리' 가서 문제를 해결해야 하겠다는 결론으로 이어지는 것은 아니었습니다. 그냥 청소가 더 이상 진행이 안 될 뿐, 시간이 지난다고 뭐가 더 나빠질 것도 없고, 일을 다 마치고 퇴근한 뒤 집에 가서 버둥거리는 로봇청소기를 자리에 돌려놓으면 해결될 문제였으니까요. 하지만 로봇청소기의 구조 신호는 도저히 뜻대로 제어되지 않던 코드 흐름과 씨름하고 있던 저에게는 매우 좋은 핑계를 제공해주었습니다. 그래, 나는 지금 text node의 시작 부분에서 backspace 키가 눌려서 그 윗 list node와 backward join이 발생할 때, attribute의 연속성을 보장해주지 못하고 list type이 사라지는 문제를 해결하지 못하고 도망치는 것이 아니라, 위기에 처한 내 로봇청소기를 구하기 위해 퇴근하는 것이야. 예정에 없던 급작스러운 퇴근에는 항상 그럴듯한 이유가 필요했으니까요. 갑자기 정전이 됐다든지, 서버가 터졌다든지, 지하철이 7분 뒤에 끊긴다든지, 누가 갑자기 헤어졌다는 연락을 받든지 그런 이유들이요. 저는 그 이유들에 '로봇청소기가 일상적인 청소 업무를 수행하다가 이동 불능에 빠졌을 때'를 더해야겠다고 생각하며 황급히 퇴근하여 집으로 향했습니다. 제 퇴근이 해결할 수 없는 능력 밖의 문제에 대한 회피가 아닌 스스로 해결할 수 없는 거대한 문제에 빠진 로봇에 대한 구원으로 보이길 바라면서.
집에 도착해서 문을 열자마자 현관 근처의 턱에 걸려서 움직이지 못하고 있던 가여운 로봇청소기를 들어 올려 바닥에 내려놓고는 '그래, 고생했어. 내가 일찍 퇴근하지 못해서 너를 돌보지 못했구나. 아직 청소를 다 마치지는 못했지만 오늘은 이만 쉬렴'이라고 속으로 생각하며 복귀 버튼을 눌러주었습니다. 지금 자신의 위치가 어딘지 알아내기 위해 빙글빙글 돌면서 두리번거리다가 이내 자리를 찾고는 충전기로 총총거리며 복귀하는 로봇청소기를 보며, 와 그래도 오늘 내가 해결한 문제가 하나는 있구나 하는 생각에 이내 흐뭇해졌다가 이내 그 외에는 아무 문제도 해결하지 못했음을 깨닫고 마음이 무거워졌습니다. 그래서인지 충전기로 돌아가는 로봇청소기의 뒷모습을 바라보며 다시 억울함이 치밀어 오르는 것을 느낄 수 있었습니다. 라이다 센서와 듀얼 카메라를 통한 심도 측정 기반 비전 인식 모듈, 딥러닝을 통한 장애물 회피 알고리즘, 인터넷을 통한 원격제어 및 영상 전송과 낙상방지를 위한 모서리 탐지 센서까지 가지고 있으면서 택배 상자 피하다가 현관에 곤두박질친다고? 하지만 로봇청소기의 그 많은 기능들 중에서 잔소리 인식 기능은 없었고, 저는 니 몸값이 얼마인데 맨날 청소하던 집에서 이동 불능에 빠질 수가 있냐는 불만을 외재적으로 표출하지 못해 속으로 삼켜야만 했습니다.
결과적으로 매우 불만스러워진 저는 잠시 목적성을 잃고 방황하면서 집안 여기저기를 맴돌다가, 해결하지 못하고 퇴근했던 문제들이 떠올라서 무거운 마음으로 컴퓨터의 전원을 올릴 수밖에 없었습니다. 어쨌든 잠들기 전까지 저에게 붙어있던 '오늘 해야 할 일을 제대로 마치지 못하고 도망치듯이 퇴근한'이라는 타이틀을 '곤경에 빠진 로봇을 구출하기 위해 일찍 퇴근하고 이내 남아있던 문제도 금방 해결한'이라는 타이틀로 바꿀 수 있는 시간이 3시간 정도는 남아있었던 것이었습니다. 아시는 분은 아시겠지만 개발자에게 3시간은 뭐든지 만들 수 있는 시간입니다.
그리고 아무것도 할 수 없는 시간이기도 했습니다. 시계가 12시를 넘어가는 것을 보는 순간 저는 어제 실제로 한 일이 아무것도 없다는 사실에 급격한 자기혐오가 차오르는 것을 느낄 수밖에 없었습니다. 물론 일을 안 한 것도 아니고 열심히 하지 않은 것도 아니지만, 최종적으로 반영할 코드가 한 줄도 없었기에 결과적으로는 아무 일도 하지 않은 것이나 마찬가지였습니다. 자신이 사실은 아무런 가치가 없는 사람일지도 모르겠다는 의심이 들었을 때의 기분은 얼마나 끔찍할까요. 황급히 과거에 있었던 영광의 순간들이나 미래에 대한 근거 없는 낙관적 시각을 끌어와서 응급처방을 해야 할 정도로 아찔한 추락의 순간이 아닐까요. 그래서 저는 자정이라는 시간을 종료 신호로 생각하기보다는 체크포인트로 생각하기로 마음먹었습니다. 자, 2시간 연장이다. 이런 느낌으로요.
하지만 집중은 쉬운 일이 아니었습니다. 많은 분들이 아시겠지만 자정이 넘어가면 그 사람이 현재 상황, 행동, 자세, 눈을 감았는지 떴는지의 여부 등과 관계없이 머릿속에는 온갖 생각이 왔다 갔다 합니다. 그러니까 침대에 누워서 눈을 감고 빨리 잠들기를 바라든, 의자에 앉아서 400니트 밝기의 LCD를 바라며 어떻게 내가 건드리지 못하는 소스에 정의된 closure 영역에 동적으로 변수를 전달하는 것이 가능할지를 고민하든, 나의 의지에 반하는 잡생각들이 나의 컨텍스트를 지배하는 것을 막는 것이 어렵다는 말입니다. 잡생각들은 말 그대로 잡다한 생각들이기에 과거에 대한 후회부터 미래에 대한 불안까지 정말 인문학적으로 모든 영역을 커버하면서도 결론은 내지 않고 고민거리만 잔뜩 늘려주기에 넓게 보면 인생에는 일부 유익할 수도 있지만 현 상황에는 전혀 도움이 되지 않는 것들이 대부분이었습니다.
생각이 어지러워지면 집중력이 흐트러지고, 언젠가부터 틀어놨던 음악이 들리기 시작합니다. 순식간에 전에 없던 집중력으로 음악 감상에 15분 정도로 날려버린 저는 이내 소중한 시간이 날아가버린 것을 후회하다가, 사실 15분간 코드에 집중을 했어도 딱히 한 일은 없었을 것이라는 생각에 이내 안도하고, 곧 다시 좌절했습니다. 몇 시간 전부터 틀어두던 음악이 거의 들리지 않다가 집중력이 깨지면서 갑자기 들리기 시작하는 것은 간단한 주의 소재(locus of attention) 이론으로 설명이 가능한데, 사람은 물리적으로는 인지하고 있는 시각적, 청각적 자극이 있더라도 의도를 가지고 주의를 기울이지 않는 자극들은 실제로는 보이지도 않고 들리지도 않는 것과 마찬가지라는 이론입니다. 여러분의 시야에 스마트폰이나 모니터의 가장자리 프레임이 보이고 있었지만 방금 전까지 인지하지 못했던 것처럼. 어쨌든 집중력을 지속적으로 유지하기 위해서는 일이 어느 정도는 마음먹으대로 풀려야 하는 법인데, 정말 하나도 풀리지 않으면 그 집중력의 일부가 키캡의 감촉이나 모니터의 기울기나 방 안의 습도나 지금 듣고 있는 음악의 가사 내용 같은 것에 나누어질 수밖에 없습니다. 이런 상황에서 집중력을 유지하게 만들어주는 것은 강력한 동기일까요, 타고난 천성일까요, 성실함의 영역일까요?
사실 저는 제가 딱히 직업윤리(Work Ethic)가 투철한 사람이라고 생각한 적이 없습니다. 그저 내가 해결해야 할 것들이 해결되지 않으면 기분이 나쁘고, 해결하면 기분이 좋아지는 사람이 아닐까 생각했습니다. 제가 정말 이 일에 재능이 가득한 사람이라서 천재적이고 기발한 해결책들이 마구 쏟아져 나왔으면 얼마나 행복했을까 생각한 적은 있지만, 그런 번뜩이는 순간은 1년에 한 번 찾아오기도 쉽지 않은 것들입니다. 아마도 제가 가진 직업윤리는 능력과 재능의 부족함을 많은 시간 투자로 대환 하는 것에 거리낌 없음이 아니었을까라는 생각이 들었습니다. 제가 좋아하는 영화에 나오는 대사처럼 충분한 경험과 인내심을 가지고 있다면 뭐든지 가능한 법이니까요.
단순한 문제 하나 해결해보겠다고 부족한 지식으로 수십 번도 넘게 이런저런 시도를 하다가 실패한 시간이 14시간, 마침내 내가 부족하다는 것을 인정하고 부족함을 채우기 위한 시간이 2시간이라고 가정하면 프로젝트 입장에서는 실제로 아무것도 하지 않은 채 제가 낭비한 시간은 16시간이 됩니다. 어떤 관점에서는 무가치하게 버려진 16시간이라고 생각할 수도 있을 것 같았습니다. 하지만 저는 설령 결과물이 가치가 없다고 하더라도 주어진 것들에 노동을 투입하여 만들어내는 행위는 그 자체로 가지를 가진다는 로크의 이론을 좋아하는 편이기 때문에, 누군가가 제 시간들이 무가치한 시간들이었다고 공격한다면 어떻게 그렇게 비윤리적이고 인간적이지 못한 생각을 할 수 있냐고 그 사람이 시무룩해질 때까지 반격할 준비가 되어있었습니다.
그래서 이내 시무룩해진 저는 쓸데없는 생각을 멈추고 남은 시간 동안, 그동안 대충 봐서 정확하게 이해하지 못하고 있던 lexical scope니 context니 closure니 call stack이니 하는 것들에 대해 처음부터 다시 봐야겠다는 마음을 먹었습니다. 원래 기계들의 동작이라는 것은 항상 정해진 규칙에 따라 움직이기 마련이지만, 그 규칙 중에 내가 이해하지 못하는 영역이 섞여있다면 통제에서 벗어나서 멋대로 움직이는 것처럼 보일 수 있습니다. 로봇청소기가 평소에는 다니지 않던 루트로 굴러가서 이동 불능에 빠지고 결국 구조신호를 보내게 된 것도, 얌전하던 전기주전자가 예측하지 못한 타이밍에 증기를 내뿜으며 제 팔을 공격한 것도 모두 제가 이해하지 못하는 변수가 있었기 때문이었겠지요. 몇 시간 정도를 투자해서 몇 가지 개념들에 대한 이해를 높인다고 해서 나를 좌설에 빠뜨린 문제들이 해결될 것이라는 보장은 없지만 그 시간들도 그것만으로 가치가 있을 것이라고 생각했습니다.
뭐든지 결국엔 다 잘될 거야라는 낙천적이고 긍정적인 마인드는 별로 없었습니다. 그냥 해야 할 일을 하는 것이 마음을 편하게 만들었고, 그저 이 지겨운 문제를 빨리 해결하고 다른 더 재미있는 문제들을 만났으면 좋겠다는 생각이 가득했습니다. 그러기 위해서는 조금 더 집중력을 높였으면 좋겠다는 생각에 재생되는 음악 목록을 바꿨습니다. 뭔가 익숙하고 좋아해서 자꾸 집중해서 듣게 되는 음악들보다는 몇 달 전부터 들어봐야지 생각만 하고는 실제로는 크게 관심이 없어서 듣지 않았던 앨범으로요. 요즘 같은 스트리밍의 시대에는 잘 하지 않는 동작이라서 익숙하지 않은 움직임으로 앨범 하나를 통째로 재생목록에 올려놓고 재생 버튼을 누른 뒤, 북마크에 저장해두었던 문서들을 열어서 읽기 시작했습니다. 제가 선택한 앨범은 Kygo의 Golden Hour인데 솔직히 말씀드리자면 뭔가 노래가 다 괜찮았던거 같았는데 구체적인 감상은 지금 생각이 하나도 안 나서 말씀드리기가 어려울 것 같습니다.
'에세이' 카테고리의 다른 글
놀라운 이야기를 담고 있는 커밋 메시지의 관습적인 작성 규칙에 관하여 (0) | 2020.11.15 |
---|---|
나의 소중한 은퇴계획 (0) | 2020.11.10 |
Functional Reactive (0) | 2020.09.11 |
Developer's Experience (0) | 2020.07.07 |
V1 (0) | 2020.07.06 |