<대살개문: 대한민국을 살리는 개발자 문화>라는 책으로 유명한 프로그래머가 쓴 소설이다. 대살개문은 선풍적인 인기를 끌었던 책인데 3D 업종 취급 받는 우리나라 프로그래머 문화를 염려하면서 외국 사례도 소개하는 흥미진진한 책이었다. 그 저자가 프로그래머들이 잠시 머리를 식힐 때 읽을거리를 소설로 써 봤다고 한다.
소설은 각각 독립적인 그러나 서로 연결된 에피소드들이 시간 순서로 엮인 구성이다. 각 에피소드들마다 주인공이 접하는 새로운 인물들이 묘사되어 있다. 이 소설은 프로그래머의 세계를 엿보게 해 준다. 프로그래머 세계에는 등급이 있다. 학원에서 6개월 배운 뒤 프로그램을 짜는 일에 투입되어 속칭 노가다를 하는 사람들과 컴퓨터공학과를 수료하고 알고리즘을 개발하는 사람들이 같을 수 없다. 진짜 고수들은 고객의 요구를 접하고 짧은 시간 내에 디버깅을 완료하거나 패치를 만드는 사람들이다.
프로그래머마다 개성이 있다. 비슷한 기능을 하는 프로그램도 그 코드를 읽어보면 접근방법이 다양하다는 것을 알 수 있다. 최근에 대량 반복되는 작업을 매크로로 편집하여 3시간 걸리던 것을 3분 안에 만들어내는 자동화프로그램을 만들어 보면서 매크로 프로그램을 조금 공부해 봤다. 다른 사람의 코드를 읽는 것은 큰 도움이 된다. 몇 번씩이나 고민하다 포기하고 다른 방식을 썼던 부분을 간단하게 처리한 부분을 보면 감탄이 일어난다. 그런데 프로그래머들은 대개 자신이 만든 코드를 공개하려 하지 않는다. 프로그래머의 리더는 여러 사람의 손을 거쳐 만든 프로그램이 시간이 지날수록 엔트로피가 상승하는, 쉽게 말해서 코드가 꼬였다고 말하는 현상을 시간의 압박 속에서 다른 팀원과 함께 유지 개선할 수 있는 능력을 가지고 있어야 한다.
프로그래머 중에는 무정부주의자도 있다. 자기만의 독특한 취향대로 프로그램을 구성하는 것이다. 그들은 오직 실력만이 중요하기 때문에 다른 사람의 눈치를 볼 필요도 없고 정해진 규칙에 얽매일 필요도 없다고 믿는다. 회사에서 출시하는 프로그램의 GUI가 제각각이라서 경영진이 GUI를 개발하는 대표자들이 커미티를 구성해서 통합 GUI를 만들자고 하자 무정부주의자는 다음과 같이 항변한다. “UN에서 각 나라 대표들이 모여서 회의를 어떻게 하는지 알아? 그 많은 나라 대표들이 한 자리에 앉아 색깔을 노란색으로 할까요? 폰트는 12로 할까요? 아이콘은 가로세로 14픽셀로 할까요? 이런 얘기를 하고 앉아 있을 수는 없잖아. 통합GUI라는 것이 꼭 필요하다면 개발자 회의를 통해 정하는 것이 아니라 저 위에 있는 사람들이 프로젝트를 통해서 정했겠지. 각자의 작품세계가 있는 화가들이 그림을 하나로 통합해 달라고 하면 뭐라고 대답할까?”
전세계 고객들의 요구사항에 빠르게 대처하기 위해서는 먼저 문제상황을 재현해 보는 게 중요하다. 그런데 버그 중에는 출시된 지 몇 년 동안이나 잠잠하다가 특정한 문제상황에서만 불거지는 골치 아픈 버그가 있다. 문제가 자사의 프로그램에서 비롯된 것만이 아니라 다른 사용자환경에서 불거질 수도 있다. 어쨌든 자사 프로그램의 문제가 아니라는 증명을 위해서라도 버그를 재현해서 원인을 밝히는 게 중요한데 이게 보통 어려운 일이 아니다. 여기서 진정한 고수가 등장한다. 마치 무림의 고수가 상대방의 초식만 보고도 실력을 가늠할 수 있고 바둑 고수는 상대방 행마를 슬쩍 보고 실력을 알 수 있는 것처럼 프로그래머 세계에도 출중한 고수들이 있다. 금융거래 프로그램 같은 경우에는 까다로운 사용자들이 수백억원의 손해를 봤다면서 거칠게 항의하곤 하는데 문제 해결을 위해 현장에 파견된 사람의 보고를 듣고 지구 반대편에서 독창적인 해결책을 제시하는 에피소드가 있다. 소설에 있는 구절을 그대로 인용해 본다. “이런 제길, Quartz 라이브러리와 Order 테이블과 메모리 캐시의 삼중주라니. 내가 지금까지 들었던 어떤 오케스트라보다도 아름다운 화음이야. 어떻게 그런 생각을 해낼 수 있었을까?”
이 소설에 소개된 에피소드 중에는 괴짜 고객이 낸 문제를 주인공이 풀어야 하는 상황도 있다. 그 문제 중에 콘웨이 수열이 있어 여기 소개한다.
1
11
21
1211
111221
312211
13112221
이 다음에 올 숫자는?
이 수열은 앞에 있는 연속된 수의 갯수를 세는 것이 규칙이다. 1이 하나니까 11이다. 그 다음은 1이 두 개니까 21이다. 그 다음은 2가 하나고 1이 하나니까 1211인 것이다. 따라서 답은 1113213211이다. 숫자를 읽을 때 우리나라 어순이 아닌 영어 어순으로 읽어야 한다는 게 포인트다.
<뉴욕의 프로그래머> 임백준