보병, 코딩을 배우다
소프트웨어 일을 시작하기 전에, 나는 보병 장교였다. 내 직무 설명은 대략 이런 식이었다:
보병 장교는 병사들을 지휘하고 이끄는 일부터 [...] 세계 어디서든, 어떤 환경에서든 작전을 수행하는 일까지 폭넓은 임무를 수행한다 [...]. 작전 중 보병의 주된 역할은 전투에 참여하는 것이다.
근무할 때 내 모습은 대략 이랬다:

어쩌다 보니 나는 Afghanistan 파병 중에 코딩을 배우게 되었다.
2009년으로 되감기
2009~2010년, 나는 Kandahar 비행장에서 Task Force Kandahar라는 여단 본부에 근무하는 보병 장교였다. 당시 그 본부는 캐나다군이 맡고 있었다. 내 일은 현장에서 올라오는 모든 보고를 받아, 그 정보를 본부 전체와 상급·인접 부대에 전파하는 것이었다.1
본부는 의무후송, 화력 지원 요청, 교전 보고 같은 것들을 처리했다. 일하는 방식은 답답할 정도로 비효율적이었다. 예를 들어 의무후송 임무는 이런 식으로 진행되었다:
- 한 부대가 급조폭발물 공격으로 중상자가 발생했다고 9항목 요청서2로 보고했다.
- 그 부대는 무전으로 소속 중대 -> 대대 -> 여단 본부(우리)에 의무후송 요청을 전달했다.
- 그러면 우리가 헬기 출동 지시를 내리고, 공역부터 병원까지 이것저것 조율하는 관제 센터 노릇을 했다.
요청은 실제 폭발 후 30초~1분 뒤에 도착했다. 내가 큰 소리로 부르면 공군 요원 하나가 의자에서 일어나 중앙 상황판 지도 앞으로 걸어갔다. 그리고 자를 대고 병원 헬기 착륙장에서 폭발 지점까지의 거리를 마일로 쟀다. 그다음 여러 변수를 바탕으로 헬기 ETA를 계산하고, 헬기 부대 본부에 현장으로 헬기를 보내 달라고 요청했다. 그러고 나서야 정해진 양식에 맞춰 메시지를 천천히 타이핑해서 그 텍스트를 통신 채널에 올렸다. 이때면 이미 폭발 후 5분쯤 지나 있었다.
헬기에 요청을 보내고 지상 부대에 출발·도착 예정 시각을 알려 주기까지 5분이 걸렸다. 이 5분의 지연 때문에 부상자가 목숨을 잃기도 했고, 병사들은 헬기 ETA를 기다리며 위험하게 노출된 곳에 필요 이상으로 오래 머물러야 했다. 이 5분 때문에 사람들이 위험에 처했고, 실제로 죽어 가고 있었다.
이 모든 게 무척 답답했다. 그 사람이 하는 일은 누가 봐도 컴퓨터로 자동화해야 할 일이었지만, 당시 나는 프로그래밍에 대해 아무것도 몰랐다. 구글에서 좀 찾아보니, 프로그래밍을 하려면 Java나 C를 배워야 하고 컴파일러라는 게 필요하다는 글들이 나왔다. 당시 나는 '프로그래밍'이라는 것 자체를 전혀 몰랐고, 그 단어도 내게는 별 의미가 없었다. 내가 이렇게 물었을 때 통신중대 장교가 무슨 생각을 했을지는 짐작이 갈 것이다:
"제 컴퓨터에 C 컴파일러 좀 설치해 주실 수 있습니까?"
보병 장교에게 C 컴파일러를 주겠는가?
여러분이라면 주겠는가? 통신장교는 나를 보고 피식 웃더니 Excel을 쓰라고 했다. 그래서 그 공군 요원의 일을 자동화하는 도구를 Excel로 만들었다. 피타고라스 정리, 문자열 연결 같은 있어 보이는 기법을 쓰면서 되는 대로 배워 나갔다.

완성된 도구는 아주 조잡했지만, 하는 일은 아주 쓸모 있었다:
- 현장과 상급 부대가 요구하는 모든 보고가 제때, 순서대로 나가도록 절차가 짜여 있었다.
- 각 단계는 거의 전부 자동화되어 있었다.
- 버튼을 누르면 템플릿이 채워지고, 채팅에 바로 붙여 넣을 수 있게 텍스트가 클립보드에 복사되었다.
- 사건마다 시각이 자동으로 기록되었다.
- 거리와 이동 시간이 자동으로 계산되었다.
- 자주 쓰는 값은 드롭다운 메뉴로 쉽게 입력할 수 있었다.
- 시간이 생명인 단계가 진행 중이거나 중요한 데이터가 빠져 있으면, 큰 경고 표시가 떴다.
그 결과물이 이 스프레드시트였다:

... 그리고 이 스프레드시트는 '9항목 요청서 접수부터 ETA 회신까지'의 지연 시간을 약 5분에서 약 15초로 줄였다.
캐나다군에는 남쪽 이웃 미군처럼 아침밥만 먹어도 훈장을 주는 버릇이 없다. 그래도 나는 이걸 받았다:

그러다 결국 Excel 뒤에 VBA라는 스크립트 언어가 있다는 걸 알아냈다. 그래서 본부의 다른 업무를 자동화하는 도구도 여러 개 만들었다. 화력 지원용 공역을 관리하는 도구, 동시에 벌어지는 여러 긴급 상황을 처리하는 데이터베이스 같은 것들이다:


그 코드를 다 짜고 나니, 누군가 눈여겨본 모양이었다. 작전은 훨씬 잘 돌아갔고, 우리 전술작전본부가 동시다발 상황을 처리하는 능력도 크게 높아졌다. 그래서 캐나다 국방참모총장(CDS, 당시 군 최고위 장성)에게서 기념 코인3도 받았다:

그리고 나는 총 들고 뛰어다니는 것보다 이 프로그래밍이라는 게 훨씬 좋다는 걸 깨달았다.
그리고 Canada로 돌아와(2010) 소프트웨어 공학 학위 과정을 시작했다(2011).
그리고 Go로 코딩을 배웠고(2012), Amazon에서 인턴을 했다(2013).
그리고 Shopify에서 일했다(2014년 초).
그리고 DigitalOcean에 합류해(2014년 말) 그곳의 클라우드를 구축하는 일을 했다.
그리고 졸업했다(2016).
그리고 지금에 이르렀다
군에 입대했을 때, 나는 두 번째 삶을 시작했다고 느꼈다. 규율 있고 체계적인 사람이 되는 법을 배우는 삶이었다. 학위 과정을 시작했을 때는 세 번째 삶을 시작했다. 이제 졸업을 했는데, 뭘 해야 할지 잘 모르겠다. 풀타임 직장 하나만 다니면 되니, 몇 년 만에 처음으로 시간이 이렇게 남아돈다.
그 VBA 코드를 처음 짜기 시작했을 때가 기억난다. 내가 중요한 일을 하고 있다는 것, 기존 방식을 바꾸고 있다는 것을 깨달았던 때다. 그리고 기존과 다르게 일하는 것, 중요한 일을 하는 것이 어렵지 않다는 것도 깨달았다. 관성을 이겨 내고 시작하기만 하면 된다.
덧붙임
내가 생애 처음 짠 코드 몇 줄을 맛보기로 올려 둔다. (주의: 보다가 눈이 아플 수 있음)
https://gist.github.com/aybabtme/89e1f475c731ae985a1f
- 1상급: 우리가 보고하던 윗선 부대. 인접: 우리 옆에서 작전하던 부대들로, 저마다의 이유로 같은 상황 정보가 필요했다.
- 2고정된 순서로 번호가 매겨진 아홉 줄이다: 후송 지점 위치, 무선 주파수와 호출부호, 긴급도별 환자 수, 필요한 특수 장비, 유형별 환자 수, 후송 지점의 보안 상태, 후송 지점 표시 방법, 환자 국적과 신분, 화생방 오염 여부. 순서가 정해져 있으니 같은 걸 두 번 물을 일이 없다. 규정상 요청 전체를 전송하는 데 허용되는 시간은 25초다.
- 3챌린지 코인이다. 고위 장교들이 지니고 다니다가 직접 건네는데, 악수하면서 손바닥에 감춰 쥐여 준다. 공적 문구도 없고 인사 기록에 남는 것도 없다. 코인 자체가 포상의 전부다.