프로그래머라는 직업은 사실 하나의 단일 직업이 아니라고 생각합니다. CPU 인스트럭션 셋을 만드는 사람들, 프로그래밍 언어를 만드는 사람들, 운영체제를 만드는 사람들, 브라우저를 만드는 사람들, 웹사이트를 만드는 사람들 모두가 사실은 직업이 다른 것 같습니다. 이 사람들 간의 동질성이란 컴퓨터에 대한 이해가 필요하다는 것과 코드를 다루는 사람들이라는 점 정도이고 실제로 이들에게 요구되는 지식이나 재능은 꽤 다르거든요. 프로그래머라는 말은 너무 포괄적이기 때문에 이것을 좀 세분화시켜서 논의해보는 것도 유익할 것 같습니다.
컴퓨터를 다루는 이유는 문제를 해결하기 위해서 일 것입니다. 이 글의 맥락에서 저는 문제를 두가지로 나누고 있습니다. 하나는 해결해야 할 대상이 컴퓨터 자체인 경우이고, 다른 하나는 현실의 문제를 해결하기 위해서 컴퓨터를 사용하는 것입니다.
전공자가 반드시 필요한 분야가 바로 컴퓨터 자체의 문제를 해결하는데에 있다고 생각합니다. 실제로 전공자들의 커리큘럼은 바로 컴퓨터 자체의 문제를 해결하는데 방점이 맞춰져 있습니다. 하지만 컴퓨터를 만들고 또 컴퓨터의 성능을 향상시키기 위한 많은 문제들이 이미 해결 되었기 때문에 전공자들이 해결해야 할 문제의 대상은 빠른 속도로 사라지고 있는 것 같습니다. 자연스럽게 현실의 문제를 해결하는 쪽으로 관심을 갖게 되겠죠.
현실의 문제란 사람들의 삶을 더 편리하게 해주는 앱이나 웹이나 게임과 같은 것들이 대표적일 것입니다. 생물학자가 DNA를 분석한다거나, 금융 거래 시스템을 구축하는 것과 같은 일도 여기에 속하는 문제일 것입니다. 해결해야 할 문제가 현실의 문제라면 그것을 누가해야 하는가에 대한 질문은 조금 복잡해지는 것 같습니다. 이를테면 금융 프로젝트를 한다고 했을 때 금융을 10년 했던 금융 출신의 1년차 비전공 개발자와 적금이 무엇인지 잘 모르는 10년차 개발자가 프로젝트에 투입된다면 누가 더 잘할까요?
물론 금융맨 출신의 개발자가 더 잘한다!고 할 수는 없을 것입니다. 그렇지만 전공자가 더 잘한다고 확신하기도 어렵습니다. 금융은 금융공학이라는 말이 있을 정도로 복잡한 하나의 분야니까요. 그렇다고 금융처럼 신뢰성이 중요한 분야를 컴퓨터에 대한 이해가 부족한 사람이 하는 것도 역시 문제가 있겠죠. 결국에는 협력이나 통섭이 중요해지는 것이 아닐까요? 컴퓨터 공학자가 금융을 배우는 것처럼 금융을 하는 사람들이 컴퓨터 공학을 배우는 것도 비슷한 일이라고 생각합니다.
제가 아는 실력 좋은 개발자 중에는 비전공자들이 꽤 많이 있습니다. 이들은 자신의 문제를 해결하기 위한 방법으로 개발을 시작했습니다. 문제를 해결하니 문제는 사라지고 개발능력이 남았습니다. 그 능력을 살려서 개발자의 길을 가게 된 것이죠. 이 분들은 꾸준히 전공자들의 공부를 섭렵해서 컴퓨터에 대한 이해를 넓혀나아가고 있습니다. 거기에 자기 분야의 경험을 조화롭게 융합하고 있습니다.
반대로 제가 아는 실력 좋은 컴퓨터 엔지니어중에는 다른 분야로 이동한 경우도 많이 있습니다. 컴퓨터 공학을 전공하고 물리학자의 길을 간 분도 계시고, 명망있는 해커였는데 지금은 생명과학을 연구하고 계신 분도 있습니다. (개발자들에게 DNA와 RNA를 알려주고 싶다고 하십니다.) 이 분들은 자신의 전공을 버린 것이 아니고 오히려 컴퓨터에 대한 높은 이해를 바탕으로 해당 분야에서 두각을 나타내고 있습니다.
최초의 컴퓨터 공학자는 컴퓨터 공학자가 아니었을 것입니다. 수학자, 물리학자였습니다. 심지어 노암촘스키는 언어학자인데 이분이 프로그래밍 언어에 미친 영향은 심대한 것으로 알려져있습니다. 또 올바른 객체지향을 위한 길잡이인 디자인 패턴도 건축가들이 올바른 설계를 하기 위해서 고안한 방법론을 차용한 사례이고요.
현실은 다양한 분야들이 복잡하게 조우하는 교차로가 아닐까 싶습니다. 이러한 복잡성을 어떻게 조합해 나가는가는 컴퓨터를 전공해서 다른 전공자들의 문제를 해결하려는 사람이건, 컴퓨터를 이용해서 자기 전공 분야의 문제를 해결하려는 사람이건 중요한 숙제인 것 같습니다.