주변에서 어떤 사람이 뛰어난 개발자/프로그래머냐는 얘기를 종종 한다. 그럴 때마다 느끼는 것은, 사람마다 정말 각자 다른 기준을 가지고 있다는 점이다. 대체로 이 주제에 대한 의견들은 잘 일치되지 않는다. 내가 받은 인상은 (나를 포함해) 사람들이 이 주제에 대해서는 매우 협소한 관점을 고수하기 때문에 합의 지점이 별로 없다는 것이다.
그리고 이에 대해 계속 생각하다보니 아무래도 의견 일치가 안되는 이유의 많은 부분이 같은 낱말을 다른 뜻으로 쓰고 있거나, 각자 다른 가정을 전제하기 때문이라고 느끼게 되었다.
내가 생각하기에는 적어도 두 가지 단어에 대해 각자 다른 의미를 떠올리고 있다. 하나는 뛰어난
이라는 단어이고 다른 하나는 개발자/프로그래머
이다. (이 글을 끝까지 읽고 나면 내가 왜 굳이 저 두 단어를 슬래시까지 써가며 함께 언급했는지 의도를 파악할 수 있을 것이라고 생각한다.)
사람들이 이 주제에 대해 얘기할 때 뛰어나다
라고 얘기하는 것을 보면 적어도 다음과 같은 다양한 뜻을 가리킨다. (아마 찾아보면 더 많은 뜻이 있을 것이지만, 일단 내가 자주 들은 것들만 추려본다.)
- 동료 후보로서 구인 가치가 높다. 전에 일했던 사람이나 학교 선후배, 커뮤니티에서 아는 사람 등에서 9할의 욕과 1할의 칭찬이 오간다. 이 분류에 해당하는 사람은 각자의 개인적인 인간 관계에 따라 달라지기 때문에 예를 들기가 힘들다. 재미있는 것은 이 관점에서 막상 본인이 어떻게 평가될지에 대해서는 떠올리기 힘들다는 점이다.
- 달성한 결과가 부럽다. 여기에는 주로 개인적으로 나에게 도움이 된 것은 없고 아무 인연도 없는 사람이지만 사업적으로 큰 성공을 거두어 언론이나 업계 뉴스로 자주 언급되는 인물들이 나온다. 이 분류의 대표적인 예로는 빌 게이츠나 마크 저커버그 등이 있겠다.
- 사회적 기여가 크다. 실제로 나에게 직간접적으로 도움이 된 사람들이 언급된다. 오픈소스 개발자일 수도 있고 책 저자일 수도 있으며 연구자일 수도 있다. 팀 버너스 리나, 데니스 리치, 라이너스 토발즈, (비트토렌트를 만든) 브램 코헨, 워드 커닝햄 등이 떠오른다.
- 고생했다, 어려운 일을 해냈다. 3번 항목과 비슷한데 관점이지만 효과 측면보다는 수고 측면을 보는 것이다. 주로 기술적으로 달성하기 매우 어려운 목표를 이뤄낸 경우가 많다. 널리 유명한 사람은 금방 떠오르지 않고, 대신 개인적으로는 PyPy 팀이 떠오른다.
- 지식과 통찰이 훌륭하다. 역시나 3번 항목의 책 저자나 블로거 등과 비슷한데, 여기에는 별로 유명하지는 않더라도 특정 분야에 대해 전문적인 사람들이 들어간다. 찰스 페졸드나 조엘 스폴스키가 떠오른다.
위의 목록은 관점이 그렇다는 것이지 그 사람들이 실제로 그러한가와는 차이가 있다는 점을 짚고 넘어가야겠다. 즉, 높아 보인다
, 부러워 보인다
, 커 보인다
, 어려웠을 것 같다
, 훌륭한 것 같아 보인다
라고 생각해야 한다.
일상적으로는 구인과 관련된 맥락으로 이 주제가 많이 나오므로 대체로는 1번이 중심이고 그 외 각자 중요시하는 관점이 섞이는 것을 관찰할 수 있다. 재밌는 것은 구인하자는 것도 아닌데 1번 항목만 강조하는 사람도 있고 수상자 후보를 뽑자는 것도 아닌데 3번이나 4번 항목만 강조하는 사람도 있다는 점이다. 본인은 자유롭다고 생각하지 말자. 글 쓰는 나도 철저히 맥락에 따라 관점을 다르게 하지 못한다. 개인적으로는 이 주제에 대해서 2번 항목만은 넌센스라고 생각한다. 빌 게이츠는 어떤 관점에서 볼 때 훌륭한 개발자/프로그래머인 것은 분명하다. 하지만 그 이유가 돈을 많이 벌어서라거나 세상에서 가장 큰 소프트웨어 기업을 만들어서는 아니다. 만약 그런 기준에서 훌륭함을 논한다면 개발자/프로그래머서 훌륭한 것이 아니라 사업가로서 훌륭하다고 보는 게 맞다.
또 하나 잘 정의되지 않고 모호한 채로 쓰이는 개발자/프로그래머
라는 말은 어떤 의미로 쓰일까? 이번에도 내가 주로 들은 것들 위주로 분류해봤다.
- 발명가. 일반 사용자가 무엇을 필요로 하는지 떠올리고 그 아이디어를 실현하려는 사람. 제품 기획자라고 해도 되겠다. 한때 코딩을 하다가 코딩을 하지 않아도 본인의 아이디어를 실현시킬 수 있는 여건이 되자 코딩을 직접 안하게 되는 경우가 많은 듯하다. IT 업계에 없는 사람들 입장에서는 여기까지가 상상할 수 있는 개발자/프로그래머 이미지의 전부라고 해도 좋을 듯하다.
- 제품 개발자. 일반 사용자가 쓸 소프트웨어를 코드로 구현하는 사람. IT 업계에 있더라도 본인이 개발자/프로그래머가 아닌 경우에는 여기까지를 개발자/프로그래머라고 부르는 듯하다.
- 엔지니어. 일반 사용자가 쓸 일은 없지만 일반 사용자가 쓸 소프트웨어를 만드는 제품 개발자를 포함하여, 다른 개발자/프로그래머가 쓸 도구(라이브러리, OS, 컴파일러, 버전 관리 시스템 등)를 만드는 사람.
- 컴퓨터과학 연구자. 어디까지가 가능하고 어디부터 불가능한지 경계를 찾고, 가능하다면 어떻게 달성할 수 있는지 다양한 상황과 맥락에서 적용될 수 있도록 일반적으로 추상화된 이론을 만드는 사람.
1로 갈수록 개발/프로그래밍을 수단적으로 보는 사람들이고, 4로 갈수록 목적에 가깝게 보는 사람들이라고 할 수 있다.
사실 이 글을 쓰게 된 동기는 나와 다른 관점을 가진 사람들이 내 관점에서 훌륭하다고 여기는 인재의 속성들을 모든 상황에서 무가치한 것처럼 발언하는 경우를 종종 겪었기 때문이다. 그리고 나는 그런 상황이 매번 불편하고 속상했다.
나는 가방끈이 짧고 당장 돈을 벌긴 해야 하니까 제품 개발자로서 일하고 있지만, 이게 나한테 아주 적성이 맞지는 않는다는 생각을 자주 한다. 아니, 적성 이전에 가장 하고 싶은 일은 제품 개발이 아니다. 나는 엔지니어링이나 혹은 연구에 가까운 것을 하고 싶은데, 단지 내가 여의치 않고 능력이 미천해서 지금까지 하지 못한 것이다. 내 인생의 낙이 퇴근 후와 주말에 오픈소스 개발을 하는 것인데, 내 GitHub 계정 등을 보면 알겠지만 내가 만드는 오픈소스 소프트웨어는 거의 모두가 일반 사용자는 쓸 수 없는 라이브러리나 시스템 소프트웨어에 가까운 것들이다. 왜냐면 나는 그런 것들을 만드는 것에 가장 큰 흥미를 느끼기 때문이다. (이 취미의 단점 중 하나는 부모님에게 이게 뭘 하는 것인지 설명하기 힘들다는 것이다.)
어떤 사람들은 빠르고 훌륭한 UX로 개발된 사업성 높은 제품 개발을 하는 사람이 가장 훌륭한 개발자/프로그래머라고 생각할지도 모른다. 그러면 그 사람들이 빠르게 개발하는데 썼던 IDE, 컴파일러, 라이브러리, OS, 버전 관리 시스템을 만든 사람들은 덜 훌륭한 개발자/프로그래머인가? 본인이 하는 일에서 동료로 적합하지 않다고 해서 일반적인 개발자/프로그래머로서 훌륭하지 않다고 여기는 것은 너무 협소한 관점이라고 생각한다.
덧. 제 블로그의 글이 언제부턴가 전체적으로 주장하는 바가 달라졌다고 여기셨더라도 기분탓이 아닙니다. 제가 예전에 썼던 여러 글에 대해 지금은 반대의 입장이기 때문입니다.