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

어쩌다 보니 나는 아프가니스탄 파병 중에 코딩하는 법을 배우게 되었다.
2009년으로 빨리 되감기
2009-2010년, 나는 칸다하르 비행장에서 태스크포스 칸다하르로 알려진 여단 사령부를 위해 일하는 보병 장교였다. 당시에는 캐나다군 사령부였다. 내 일은 현장에서 올라오는 모든 보고를 받아 그 정보를 사령부 전역과 우리 상급/측방에 퍼뜨리는 것이었다.1
사령부는 의무후송, 화력지원, 접촉보고 같은 것들을 처리하고 있었다. 그 처리 방식은 정말 짜증 날 정도로 비효율적이었다. 예를 들어 의료 임무는 이런 식으로 흘러갔다:
- 어느 부대가 중상자가 나온 급조폭발물 공격을 보고한다(9줄 요청2을 사용해서).
- 그 부대는 의무후송 요청을 무전으로 자기 중대 -> 대대 -> 여단 사령부(우리)로 올린다.
- 그러면 우리는 헬리콥터 통제소이자 공역과 병원과 그 밖의 모든 것을 동기화하는 곳이 된다.
요청은 실제 공격이 있고 나서 ~30초에서 1분 뒤에 도착했다. 내가 공군 병사에게 소리를 지르면 그는 의자에서 일어나 중앙의 상황판으로 걸어가서는 자를 대고 병원 착륙장과 공격 지점 사이의 거리를 마일 단위로 쟀다. 그러고 나서 여러 파라미터를 바탕으로 헬리콥터의 ETA를 계산하고, 헬리콥터 사령부에 현장으로 헬기를 보내 달라고 요청했다. 그제서야 그는 미리 정해진 형식으로 메시지를 천천히 타이핑하고, 그 텍스트를 채팅 채널에 올렸다(그게 공격 후 ~5분이다).
헬기에 요청을 보내고 지상의 부대에 ETD/ETA 정보를 돌려주는 이 5분의 지연은, 사람들이 부상으로 죽거나 헬기 ETA를 기다리면서 꼭 필요한 것보다 더 오래 위험하고 노출된 위치에 머무르는 결과를 낳았다. 이 5분의 지연은 사람들을 위험에 빠뜨리고 있었고 사람들을 죽이고 있었다.
이 모든 게 정말 짜증스러웠다. 그 사람의 일은 컴퓨터로 자동화해 달라고 아우성치고 있었지만, 그때 나는 프로그래밍에 대해 아무것도 몰랐다. 구글을 좀 찾아보니 프로그래밍을 하려면 Java나 C를 배워야 하고, 그러려면 컴파일러가 필요하다는 이야기들이 나왔다. 그때 나는 이 "프로그래밍"이라는 것에 대해 아무것도 몰랐고, 그 단어는 나에게 별 의미가 없었다. 내가 통신중대의 장교에게 이렇게 물었을 때 그가 무슨 생각을 했을지는 상상에 맡기겠다:
"내 컴퓨터에 C 컴파일러를 설치해 줄 수 있나?"
보병 장교에게 C 컴파일러를 주겠는가?
주겠는가? 통신장교는 나를 보고 픽 웃고는 엑셀을 쓰라고 했다. 그래서 나는 그 사람의 일을 자동화하는 도구를 엑셀로 짰다. 피타고라스 정리나 문자열 연결 같은 대단한 기법들을 써서 할 수 있는 만큼 주워 담았다.

결국 그 도구는 매우 조잡했지만 아주 유용한 무언가를 해냈다:
- 지상의 사람들과 그 위쪽에서 요구하는 모든 보고가 제때, 순서대로 전송되도록 보장하는 흐름이 있었다.
- 그 흐름의 각 단계는 거의 전부 자동화되어 있었다.
- 각 버튼이 템플릿을 채우고 그 텍스트를 클립보드에 넣어 채팅에 복사-붙여넣기할 수 있게 했다.
- 이벤트는 자동으로 시간이 측정됐다.
- 거리와 이동 시간은 자동으로 계산됐다.
- 드롭다운 메뉴가 자주 쓰는 값을 쉽게 입력할 수 있게 해 주었다.
- 시간이 촉박한 단계가 진행 중이거나 중요한 데이터가 빠져 있을 때는 큰 경고 표시가 보였다.
그 결과가 이 스프레드시트다:

... 그리고 이것은 "9줄 요청을 받고 ETA를 돌려주기까지"의 지연을 ~5분에서 ~15초로 줄였다.
캐나다군인지라, 남쪽 동맹국처럼 아침 먹었다고 훈장을 주는 성향은 없다. 그래도 이건 받았다:

결국 나는 엑셀 뒤에 VBA라는 스크립트 언어가 있다는 걸 알아냈다. 그래서 사령부의 다른 많은 부분을 자동화하는 도구들을 짰다. 화력지원을 위한 공역을 관리하는 도구라든가, 동시다발적인 중대 사건 여러 건을 처리하는 데이터베이스 같은 것들이다:


그 모든 코드를 짜고 나니, 누가 알아본 모양이다. 우리 작전은 훨씬 잘 돌아갔고, 동시다발적인 사건 여러 건을 처리하는 우리 TOC의 능력은 크게 올라갔다. 그래서 나는 캐나다 국방참모총장(CDS, 당시 군 서열 1위)에게서 코인3도 받았다:

그러고 나서 나는 이 프로그래밍이라는 것이 총 들고 뛰어다니는 것보다 훨씬 좋다는 걸 깨달았다.
그러고 나서 나는 캐나다로 돌아왔고(2010) 소프트웨어 공학 학위 과정을 시작했다(2011).
그러고 나서 나는 Go로 코딩하는 법을 배웠고(2012) Amazon에서 인턴을 했다(2013).
그러고 나서 나는 Shopify에서 일했다(2014년 초).
그러고 나서 나는 DigitalOcean에 합류해(2014년 말) 그들의 클라우드를 만들었다.
그러고 나서 나는 졸업했다(2016).
그러고 나서 나는 오늘 여기 있다.
군에 들어갔을 때, 나는 두 번째 인생을 시작했다고 느꼈다. 규율 있고 조직적인 사람이 되는 법을 배우는 삶. 학위 과정을 시작했을 때, 나는 세 번째 인생을 시작했다. 이제 졸업했는데, 뭘 해야 할지 모르겠다. 고작 정규직 일자리 하나만 있는 채로 시간이 이렇게 남아도는 건 몇 년 만에 처음이다.
그 VBA 짓을 처음 쓰기 시작했을 때가 기억난다. 내가 의미 있는 일을 하고 있다는 것, 내가 기존 방식을 바꾸고 있다는 것을 깨달았던 때다. 그리고 나는 다르게 하는 것, 의미 있는 무언가를 하는 것이 어렵지 않다는 걸 깨달았다. 필요한 건 관성을 극복하고 시작하는 것뿐이다.
참고
내가 태어나서 처음 쓴 코드 몇 줄의 표본이다. (경고: 당신의 마음을 다치게 할 수도 있다)
https://gist.github.com/aybabtme/89e1f475c731ae985a1f
- 1상급: 우리가 보고하던 상급부대. 측방: 우리 양옆의 부대들로, 자기들 나름의 이유로 같은 그림이 필요했다.
- 2번호가 매겨진 아홉 줄, 항상 같은 순서다: 후송 지점의 위치, 무선 주파수와 호출부호, 우선순위별 환자 수, 필요한 특수 장비, 유형별 환자 수, 후송 지점의 안전 상태, 지점 표시 방법, 환자의 국적과 신분, 그리고 화생방 오염. 순서가 고정되어 있어 두 번 물어볼 것이 없다. 규정은 요청 전체를 송신하는 데 25초를 허용한다.
- 3챌린지 코인(challenge coin). 고위 장교들이 이것을 가지고 다니다가 직접 건네주는데, 악수하면서 손바닥에 쥐여 준다. 공적서도 없고 인사기록에도 남지 않는다 — 코인이 곧 상 전체다.