이 글은 컴퓨터 과학자 Daniel Lemire씨가 쓴 Why I still program이란 제목의 글을 번역한 내용입니다. 평생을 프로그래머라는 직업으로 살아가는 분들의 고귀한 존재 이유를 설득력 있게 쓴 글입니다.
보통 사람들은 나이를 먹으면 프로그래밍과 같은 실무적인 일에서 멀어지고 팀 관리나 자금 조달과 같은 좀 더 고급스런 일을 하는 것으로 통념화 되었다고 생각한다. "진정한 교수"는 디테일한 것은 아래 사람들에게 맡기고 "빅 픽처"를 맡고 있다면 좋게 생각하는 것이 학계에서는 진리일까요? 다른 말로 말하면, 그런 조직은 수직 협력의 역학 관계가 작동하도록 설계되어 있다. 즉, 계층 구조의 정점에 서 있는 사람들이 다른 직원들(임금이 싼)을 관리 감독하는 구조이다. 연구 분야에서 수석 과학자가 아이디어를 내고 주니어 과학자가 그 아이디어를 구현한다는 것을 의미한다. 시간이 지나감에 따라 수석 과학자는 주니어 과학자의 일을 할 수 없게 되어 버릴지도 모른다. 하지만, 그들은(수석 과학자) 자금 조달의 전문가이다. 이 모델은 규모를 키울 수 있다. 즉, 수석 과학자는 중간 과학자에 지시하고 그 중간 과학자는 좀 더 젋은 과학자를 관리 감독하고 ..등등의 방식이다. Jorge Cham이 이 모델을 교수 피라미드(Profzi scheme)라고 정의했다. 자금이 풍부하고 또 계속 늘어나는 환경에서는 최상의 모델이기 때문이다.
그 반대의 형태는 수평 협력의 역학 관계이다. 이 모델에서는 수석 과학자는 큰 아이디어 도출부터 실행에 이르는 모든 일을 처리한다. 그들은 가능하면 바빠지게 하는 귀찮은 일을 자동화하거나 피하려고 한다. 협력은 주로 자신과 다른 관점을 얻기 위해, 혹은 부족한 부분을 보완 해주는 전문 지식을 얻기 위해 협력하게 된다. 이 모델은 자금이 부족한 경우에도 잘 작동된다. 그러나, 관련된 사람(이해 당사자)의 수가 많아지게 되면 실패하는 경우가 많다. 수평 협업은 사람과의 친밀한 관계가 필수적이기 때문이다.
각 모델이 최상의 효과를 낼 수 있는 형태는 작업의 종류별로 다르다. 추측컨데, 수직 협력은 장기 계획이나 결과를 예측하는 경우에 적합하다. 수평 협력은 우연한 발견이나 "야성적(거친)" 아이디어를 도출하는 것을 시도해 보는데 적합하다고 생각한다.
수평 협업을 좋아하는 사람중 한사람으로써, 나는 나이가 들었음에도 불구하고 아직까지 프로그래밍을 하고 있다. 이것은 보통 일은 아니다. 사람들이 놀랄정도의 이상한 일이다. 몇몇 프로그래밍은 오래 걸리는 경우도 있다. 나는 연간 2~3 개월은 프로그래밍 하는데 시간을 보내고 있다. 아마도 시니어인 나의 시간 가치때문에 내 수입보다 작게 버는 사람들이 가장 잘 할 수 있는 프로그래밍인, 이런 비천한 일에 시간을 투자할 수 없다. 그런데 왜 나는 아직도 프로그래밍을 할까요?
아마, 나를 가장 옹호해주는 것은 거장 Donald Knuth일지도 모른다. 그의 말을 빌리자면,
높은 수준의 추상적인 아이디어의 힘과 아름다움을 발견한 사람은 종종 이런 실수를 한다. 뭐냐면, 낮은 수준의 구체적 아이디어는 상대적으로 가치가 없고, 잊어 버려도 상관 없다고 생각한다. (중략) 반대로, 최고의 컴퓨터 과학자는 실제 컴퓨터가 어떻게 움직이고 있는지에 대한 기본 개념을 철저하게 뿌리 깊은 곳까지 알아버리려고 한다. 실제로 컴퓨터 과학을 하는데 있어서 핵심이되는 본질은 높은 수준 뿐만 아니라 다양한 수준의 추상화를 동시에 생각할 수 있는 능력이다.
그러나, 나는 이것과는 별개로 내 나름대로의 지론을 가지고 있다.
- 나는 중요한 일이나 임펙트가 있는 일을 하고 싶다고 생각한다. 그러나 논문에 많이 인용되는 것들조차도 논문의 결과물을 가져다 쓴 사람들에게는 읽혀지진 않는다. 큰 임팩트를 가진 논문은 거의 없다. 한편, 소프트웨어와 함께 의미있는 일을 하는 것은 논문 세계보다 더 쉬워진다. 예를 들어, 최근 Facebook에 있는 개발 팀이 Apache Hive내의 내 압축 비트맵 인덱스 라이브러리 중 하나를 사용해 시스템에 통합했다. 내기를 해도 좋겠지만, 이 소프트웨어를 위해 내가 쓴 원 논문을 Facebook의 어느 누구도 읽은 사람이 없었을 것이다. 중요한(실용적인) 것은 소프트웨어인 것이다.
- 나는 자신의 아이디어를 구현하려고 할 때 그 아이디어를 더 깊이 이해할 필요성을 느껴왔다. 평상시에 논문에서 정상적이며 합리적으로 보였던 것이 자신이 직접 구현할 때에는 다루기 힘들게만 느껴진다. 또한 나는 종종 수학적 논의에 버그가 있었다는 것을 구현을 통해 발견할 수 있었다. 내가 이런 일을 누군가 다른 사람에게 아웃 소싱할 수 있을까? 아마도 못할 것이다. 하지만, 이런 프로세스는 좋은 성과를 내지 못한다. 사람은 시간이 지남에따라 프로그래밍이 능숙해 진다. 나는 수십년 동안이 전문성을 길러왔다. 다른 사람이라면 몇 주 또는 몇 달이 걸릴 어려운 문제를 처음부터 착수해서 몇일 내에 어려운 문제를 풀어 버리는 것은 기분 좋은 일이다.
만약 위에서 제시한 나의 논리가 합리적이라면, 심지어 Donald Knuth가 나의 편이라면, 내가 프로그래머겸 과학자라고 털어놓는다면 왜 아직도 사함들은 놀랄까요? 하층의 작업으로 인식해서 프로그래밍을 거절하는 현상은 유한 계급의 이론(Theory of the leisure class)에 의해 설명 될 수 있다. 결과적으로 사람들은 유용성이 아닌 명예를 찾고 있다. 도구 만들기, 요리 또는 농업 등은 명예가 되지 않는다. 명예를 극대화하고 싶다면, 유한 계급에 올라서야 한다. 당신이 할 일은 즉시 뭔가 유용한 일이여서는 안된다. 그래서, 요리사와 간호사가 되는 것보다 CEO와 정치가가 되는 것이 더 명예를 높이게 되는 것이다. 저 멀리서 일을 감독하는 과학자가 더 명예가 있는 것이다. 프로그래밍은 도구 만들기 같은 것이기 때문에, 유한 계급의 사람들은 되려고 하지 않는다. 그들은 스스로를 엔지니어, 분석가, 혹은 개발자로 부르겠지만, 너무 실용적이기 때문에 프로그래머라는 호칭을 사용하지 않는다.
주의: 모든 사람이 프로그래밍을 해야하는 것은 아니다. 프로그래밍은 많은 시간을 소비하는 활동이다. 내가 프로그래밍을 너무 좋아하기 때문에 내가 하지 못하는 다른 많은 흥미로운 일도 존재한다는 것도 염두해 둘 필요가 있다.