얼마 전에 브루스 테이트라는 개발자 커뮤니티의 저명한 인사와 인터뷰를 수행했다. 텍사스에 있는 그와 뉴저지에 있는 내가 토요일 아침에 구글 행아웃에서 만나 대화를 나누었다. 그의 책을 번역한 인연도 있지만 그는 자기 생각을 밝힐 수 있는 곳이면 어떤 기회도 마다하지 않는 사람처럼 보였다. 50줄 접어든 그의 열정은 아직도 청년 같았다. 끝없이 이어지는 그의 이야기를 내가 중단해야 했을 정도다.
5년 전에 그는 프롤로그, Io, 루비, 얼랭, 클로저, 스칼라, 하스켈을 설명하는 책을 썼고, 1년 전에는 루아, 팩터, 엘름, 앨릭서, 줄리아, 미니캔런, 이드리스와 같은 이색적인 언어를 설명하는 책을 썼다. 미국의 프로그래머 커뮤니티에서는 상당히 뜨거운 반응을 끌어낸 책들인데, 한국에서는 첫 번째 책만 번역되었다. 하나의 언어에 집중하는 것이 아니라 이렇게 다양한 언어를 다루는 책을 쓰는 것은 상상을 초월하는 노력을 요구하는 작업이라서 궁금했다. 이런 책을 저술한 이유를 물었다.
그는 좋은 대답을 해주기 위해서 많은 이야기를 했다. 하지만 결론은 간단했다. 어떤 일이 일어날지 알 수 없는 미래에 대한 두려움이 그것이었다. 수없이 쏟아져 나오는 언어 중에서 어느 것이 미래의 언어가 될 지 알 수 있는 사람은 없다. 그렇다고 해서 미래를 운에 맡길 수는 없다. 일어날 수 있는 모든 가능성에 대해서 마음을 열고 할 수 있는 노력을 기울이는 것. 그것이 그가 7개의 언어를 설명하는 책을 두 번이나 저술한 이유였다. 너무 힘들기 때문에 다시 쓰고 싶은 생각은 없단다.
프로그래밍 언어만이 아니다. 요즘에는 모든 것이 백가쟁명이다. 그래서 오늘 획득한 지식이 내일, 가차 없이 낡은 지식으로 퇴색한다. 폴리글랏 퍼시스턴스(ployglot persistence)라는 이름으로 일컬어지는 데이터베이스 세계의 변화는 따로 설명할 필요가 없을 정도다. 하루에 하나씩 등장하는 자바스크립트 라이브러리는 다 기억하기도 힘들다. 제이쿼리가 대세라고 해서 공부하면 앵귤러가 대세라고 하고, 앵귤러를 공부하면 리액트가 대세라고 하고, 그래서 리액트를 공부하면 앨름은 아느냐고 묻는다.
하둡이라는 코끼리와 겨우 친해질 만하면 스파크라는 불꽃이 사방에서 튀긴다. 스파크 주변에 스톰이니 쌈사니 하는 녀석들이 섞여 있어서 어떤 것이 정말 공부해야 하는 것인지 알기 어렵다. 클라우드나 오픈스택 같은 말들은 아무리 들어도 아리송하고, 마이크로서비스 아키텍처니 CQRS니 이벤트소스니 하는 말을 들으면 멀미가 나려고 한다. 머신러닝이라는 화두에 이르면 결국 현기증이 몰려온다. 통계나 R을 알지 못하는 개발자는 당장 시장에서 쫓겨날 것 같은 압박이 밀려오고, 그래서 겨우 통계학 책을 하나 읽으면 이번에는 딥러닝이란다.
첨단 기술에 대해서 해박한 후배 한 명이 어느 날 이렇게 말했다. “다람쥐가 쳇바퀴 도는 것 같아요. 지칩니다.” 알아야 하는 것이 너무 많고 끝이 없기 때문에 언제나 세상의 뒤를 쫓아가는 것 같은 불안한 마음이 든다는 것이다. 작년 10월에 있었던 나프다 행사에서도 누군가 비슷한 질문을 한 적이 있다. 개발자가 공부해야 하는 것이 이렇게 많은데 도대체 어떻게 공부를 해야 하는가라고 질문한 사람이 있었다.
더 많이 알수록 자기가 모르는 것이 얼마나 많은지 알게 되는 것이 개발자의 숙명이다. 2000년대 중반에 루비를 접한 브루스 테이트는 자바라는 세계에 매몰되어 있던 자신의 편협함에 눈을 뜨고 심히 두려움을 느꼈단다. 그래서 점점 더 많은 지식과 정보를 탐하게 되고, 그러다 어느 순간 저 많은 것들을 다 알 수는 없겠구나 하는 체념에 도달하게 된다. 자포자기적 심정이 들면서 우울함을 겪게 되는 것이다. 이런 것을 무협지에서 사용하는 전문용어로 주화입마(走火入魔)라고 한다.
해법은 간단하다. 그 많은 내용을 다 알고 있는 사람이 존재하지 않는다는 사실을 깨달으면 된다. 자기가 알아야 한다고 생각하는 내용의 1%라도 제대로 알고 있는 사람도 별로 없다. 이러저러한 것을 알아야 할 것 같은데 나는 언제 그걸 공부하지, 라고 생각한 사람은 이미 대부분의 사람들보다 많은 것을 알고 있는 사람이라는 뜻이다. 말장난이 아니다. 개발자 중에는 자기가 얼마나 모르는지 모르는 사람, 그래서 공부의 필요성조차 느끼지 못하는 사람이 80% 이상이다.
깊이 아는 사람은 넓게 알지 못하고 넓게 아는 사람은 깊이 알지 못한다. 이 원리를 초월하는 사람은 세상에 없다. 많이 아는 것처럼 보이는 사람은 단지 해당 분야에 대해서 더 많이 알아야겠다고 결심하고 그 지점에서 균형을 맞춘 사람일 뿐이다. 그 주제에 대해서 많이 알게 되는 순간, 그는 다른 많은 내용을 알지 못하게 된다. 소프트웨어 엔지니어링 라디오 혹은 소프트웨어 엔지니어링 데일리 같이 깊이 있는 팟캐스트에 등장하는 게스트들은 공통점이 있다. 그들은 하나같이 자기가 어떤 분야에 대해서 이야기할 수 있고, 어떤 분야에 대해서 이야기 할 수 없는지에 대해서 엄밀하게 선을 긋는데 시간을 아끼지 않는다. 세상의 이치를 잘 알고 있기 때문이다.
자기 자신과 세상 전체를 비교하면서 스트레스를 받는 우를 범하지 말라는 이야기다. 자기가 오늘 작성한 코드의 내용을 자기보다 더 잘 아는 사람은 세상에 없다. 범위를 좁히면 개발자는 누구나 전 세계에서 1등이다.
관련기사
- 해커의 길2016.01.25
- 배우고, 즐기고, 해결하고, 공유하라2016.01.25
- 멘토는 없다2016.01.25
- 개발자의 50가지 그림자2016.01.25
주화입마에 빠지지 않는 방법을 이야기했으니 이제 어떻게 공부해야 하는지에 대해서 이야기할 차례다. 자기가 이미 하고 있는 분야, 혹은 잘 알고 있는 분야에 집중해서 우물물을 파듯 최대한 깊이 들어가라. 들어가서 물이 아니라 원리(principle)를 퍼 올려라. 그렇게 퍼 올린 원리를 조금씩 다른 분야에 적용해보라. 하수는 자잘한 구현에 집중하고 고수는 언제나 원리에 집중한다는 사실을 기억하라. 남들이 알아야 한다고 말하는 것에 귀 기울이지 말라. SNS에 올라오는 단편적인 정보, 링크, 동영상 등에 현혹되지 말라. 내 마음속에서 생긴 흥이 흘러가는 대로 내 몸을 맡겨라. 눈으로 읽는데 그치지 말고, 손으로 코드를 작성해보라. 혼자하지 말고 친구들과 함께하라. 쌓이는 게 있으면 어떻게 나눌지 고민하라.
개발자가 알아야 하는 것은 바로 이러한 공부방법이다. 참, 중요한 방법을 하나 빠트렸다. 나는 프로그래머다라는 팟캐스트 방송을 열심히 청취하라.
*본 칼럼 내용은 본지 편집방향과 다를 수 있습니다.