洪民憙 (홍민희) 블로그

이하의 글은 2010년에 쓴 것입니다. 오래된 글인 만큼, 현재의 생각과 전혀 다른 내용도 많이 포함되어 있고, 당시와는 상황이 많이 달라진 점도 있습니다. 또한, 그 당시에 잘못 알려졌던 정보도 포함되어 있을 수 있습니다. 어찌됐든 저는 제 오래된 글이 회자되는 것을 저어합니다. 읽기에 앞서 양해를 부탁드립니다.

개발자 찬양

다소 긴 글이 될 것 같다. 진부한 기획자와 개발자 이야기이다.

일단 개발자 입장에서 기획자의 개발자들에 대한 오해(혹은 그렇다고 여겨지는 것)들을 바로잡을 필요가 있을 것 같다. 바로 개발자들은 기획에 관심도 없고 오히려 기획 업무를 싫어한다는 생각이다.

이 오해는 아마도 기획자들이 만나는 개발자들의 유형을 분류하는 것부터 풀어나가야 할 것 같다. 나는 이 글에서 막연하게 개발자를 두 부류로 나눌 생각이다. 하나는 좋은 개발자이고, 다른 하나는 그냥 개발자이다. 전자는 열정이 있는 개발자이며, 개발을 비교적 즐거워하는 타입이다. 후자는 밥벌이 개발자고 30대가 되면 은퇴하고 치킨집을 차려야 한다고 굳게 믿는 타입이다. 그리고 대한민국 개발자라면 후자가 더 많은 듯 보인다.1

좋은 개발자와 그냥 개발자는 대부분 개발자가 된 동기가 전혀 다르다. 그냥 개발자는 대부분 평범한 인문계 고등학교를 졸업하고 자신의 대학수학능력시험 점수에 맞춰 (그리고 그 시대의 유행을 좇아) 대학교와 학과를 정하다보니 적성이나 하고 싶은 것과 상관 없는 컴퓨터 공학/과학을 전공한 경우가 대부분이다. 물론 이런 현상은 컴퓨터 공학/과학 외의 다른 학문도 결국 비슷하게 일어나기 때문에 흔하다면 흔하다. 스스로 재미 없다고 생각하는 일을 전공과 직업으로 택한 그들의 고달픔을 동정할 수 있겠지만, 일정부분 자업자득인 셈이다.

반면 좋은 개발자는 애초에 대학교와 학과를 선택하기 이전, 아마도 중학교, 빠르게는 초등학교 때부터 프로그래밍을 취미로 삼았던 경우가 대부분이다. 이 부류의 사람들은 고등학교 때부터 이미 Linux를 주 운영체제로 사용했다거나, 서투르나마 혼자서 서비스를 운영했다거나, 여러 오픈소스 프로젝트에 기여하는 등의 경험을 한다. 나와 친한 개발자들은 절대 다수가 그렇다. 그렇다면 이 부류의 사람들은 도대체 어쩌다가 대학교도 가기 전부터 대학교에서 배울, 혹은 대학교에서도 배우지 못할 이런 지식과 경험을 쌓게 되는 것일까?

자, 여기 내가 하고자 하는 얘기가 있다. 사실 기획자가 기획을 시작하게 된 동기와 ‘좋은 개발자’들이 개발을 어릴 때부터 시작하게 된 동기는 같다! 자기가 머릿속에 떠올린 무언가를 실제로 손으로 만져보고 싶다는 욕구가 바로 그 동기이다.

그리고 우리는 어릴 때 프로그래밍을 배웠지만 결국 개발자가 되지 못하는 사람들을 보며 좀더 확신을 얻을 수 있다. 다른 세대는 어떨지 모르겠으나 내 또래만 해도 초등학교 때 컴퓨터 학원 다니는게 유행이었다. 나는 컴퓨터 학원을 다닌 적 없지만, 다닌 친구들을 보면 그 중에 성취도가 높은 학생들을 위주로 Visual Basic 6를 가르쳤다. (나보다 조금 윗세대는 GW-BASIC을 배웠다고.) 그리고 좀더 커서 선린인터넷고등학교를 다니면서 수도권 내에서 비교적 많은 지역 출신의 친구들과 얘기해보니 그것은 우리 동네 유행이 아니라 어느 정도 전국적인 유행이었던 듯 싶다. 하지만 그들 가운데 대부분은 개발자와 상관 없는 사람으로 성장한다. 기술을 알아봤자 그걸로 만들고 싶은게 딱히 없다면 기술은 발전할 여지가 없기 때문이다. 게다가 동네 컴퓨터 학원에서 알려주는 프로그래밍 기술이래봤자 머리굴려 성적표 계산기 짜는 수준이므로 세상에는 프로그래밍이라는 것도 있다는 것을 알려주는 의의밖에 없다.

결국 어릴 때 컴퓨터 학원을 다녀 Visual Basic으로 프로그래밍을 입문했든, 아니면 나처럼 제로보드가 한창 유행할 때 PHP 책 하나 사서 독학으로 입문했든 간에, 자기가 뭔가 만들고 싶은게 있었던 사람들만 개발자로 성장한다. 모티베이션이 가장 중요한 것이다.

자, 이 정도로 설명했으면 좋은 개발자의 최초 동기와 기획자들의 최초 동기가 실은 같은 것이라는 점은 이해할 수 있을 것이다. (그냥 개발자들에게는 미안하지만, 이후부터는 개발자는 좋은 개발자만 칭하는 것으로 하겠다.) 당연히 개발자들은 그러한 동기 아래, 처음 몇년간은 철저히 자신이 만들고 싶은 것을 구현하는 데 필요한 기술들 위주로 공부를 해나간다. 그리고 실제로 자기가 직접 만들고자 하는 것들을 어설프게나마 만들어 나간다. 그리고 그들 중 일부는 자신의 이상적인 기획에 근접한 것들을 만들어 내기도 한다. 당연히 이 과정에는 개발 뿐만 아니라 기획도 포함되어 있다. 기획자들이 기획이 없는 프로덕트 구현이 가능하다고 생각하지 않는다면.

따라서 개발자들이 기획에 관심이 없다는 얘기는 오해라고 할 수 있다. 아, 당연히 앞서 언급한 그냥 개발자들이야 그런거 별로 없다. 자신이 만나본 개발자 중에서는 좋은 개발자가 없었다고? 운이 좋지 않으시네요. 그래도 운이 나쁘다는 얘기는 아닙니다. 못 만나는 게 보통인 것 같거든요.

그러면 왜 같은 동기를 가졌던 사람들이 기획자와 개발자라는 두 부류로 나뉘게 되는 것일까? 나는 답이 간단하다고 생각한다. 만들고 싶은 걸 만드려고 프로그래밍 공부를 시작해서 순조롭게 개발 소양을 익힌 사람들은 개발자가 되는 것이고, 그렇지 않은 사람들은 기획자로 남아 자신 대신 개발을 해줄 사람들을 찾는 방향으로 방법을 바꾼다. 말이 방법을 바꾸는 것이지, 나의 냉소적인 시각에서는 개발 공부 좀 하다가 포기하는 셈이다. 아예 처음부터 엄두를 못 냈거나.

물론 기획자들은 자신들만이 하는 고유한 업무가 있다고 이야기할 것이다. 단순히 프로덕트 디자인을 고민하는 것이 아니라, 그것을 명세로 잘 문서화하고, 문서를 중심으로 개발자들과 커뮤니케이션한다. 이것도 사실은 개발자라는 중간 계층이 따로 필요하니까 생긴 프로세스일 뿐이다. 기획자들은 부정하고 싶을 수도 있겠지만 이미 코드는 이상적으로 명세와 같은 역활을 하며, 실제로 잘 쓰여진 코드는 명세 역할을 할 수도 있다. (물론 이 이야기는 현실을 고려하지 않은 면이 크다.)

기획자에게 프로그래밍의 본질을 잘 설명해주겠다. 프로그래머가 작성한 코드는 이미 명세이다. 다시 말해 컴퓨터를 돌리기 위해 코드를 쓰는게 아니다! 애초에 코드를 돌리기 위해 컴퓨터가 발명된 것이다. 단지 컴퓨터가 그 명세를 실현해주는 것이다. 어디서 들어본 것 같지 않은가? 기획자가 작성한 명세가 있고 개발자가 그 명세를 실현해준다. 과격하게 얘기해서, 우리가 현업에서 이야기하는 기획 프로세스는 분업이라기 보다는 본질적으로 같은 일을 두 번 하는 것이다. 기획자가 아이디어를 정리해서 명세로 정리한다. 개발자는 그 자연어로 작성된 명세를 다시 프로그래밍 언어로 번역한다. 개발자의 일을 이렇게 정의하면 비교적 단순 작업이 되어버리고 앞서 얘기한 그냥 개발자들이 이런 일을 도맡아 할 공산이 크다. 반면 좋은 개발자들은 기본적으로 기획자이며 아이디어를 명세로 작성하는데 자연어 대신 프로그래밍 언어를 쓴다. 프로그래밍 언어에 대한 오해를 풀어야한다. 프로그래밍 언어는 컴퓨터가 이해할 수 있는 언어가 아니다. 사람이 큰 실수 없이 로직을 기술하기 위해 고안된 언어이고, 그 언어를 실행하기 위해 발명된 것이 컴퓨터와 기타 도구들이다.

기획자 + 개발자
아이디어 → 정리 → 명세 (문서) → 명세 (코드)
좋은 개발자
아이디어 → 정리 → 명세 (코드)

이리저리 돌려서 얘기했지만 내 생각을 요약하자면 이렇다. 기획자는 개발을 할 줄 알아야 하는데 그렇지 않으니까 개발자를 따로 둬야 했고, 그로 인한 업무가 더 생겼다. 당연히 기획자가 이 글을 본다면 어이없어 하겠지만, 애초에 언어의 함정에 빠져서 그런 감정을 느끼는 것이라고 생각한다. 앞서 얘기한 좋은 개발자는 사실 개발자가 아니다. 그 사람들은 개발을 할 줄 아는 기획자들이다. 그리고 흔히 우리가 얘기하는 기획자는 개발을 할 줄 모르는 기획자다. 잘 생각해보자. 개발을 할 줄 알면 개발자라고 불러야 할까? 그렇다면 기획자 본인들이 개발을 할 줄 알게 되었다고 생각해보자. 그럼 본인들이 이제 개발자가 되나?

요즘 앱스토어부터 시작해서 소셜 네트워크, 소셜 커머스 등 소셜이 접두어로 붙는 거품 가득한 신종 인더스트리가 마구 나오고 있는 와중에, 새로운 프로덕트 기획하는 사람들이 많다. 그리고 이 사람들이 항상 하는 이야기가 있다. 개발자 구해요. 애초에 기획자와 개발자가 상호보완적이라면 개발자가 기획자 구하는 이야기도 많이 나와야 한다. 난 그런 소리는 조금은 커녕 전혀 본 적도 없다. 왜 그럴까? 애초에 새로운 프로덕트를 만드려는 개발자는 기획자를 찾지 않는다. 새로운 프로덕트를 만드려고 한다는 것이 기획을 이미 직접 시작했다는 소리이므로. 결국 개발자가 기획하는 경우는 있어도 기획자가 개발하는 경우는 없다. 개발자가 기획하는 것은 엉성하나마 가능한 얘기고 기획자가 개발하는 것은 불가능한 이야기기 때문이다. 애초에 개발도 할 줄 아는 기획자면 이미 개발자라고 불리고 있을 것이다. 내가 앞서 얘기한 좋은 개발자다.

이제 진짜 하고 싶은 얘기이다. 자칭 기획자라고 하는 사람들은 개발을 좀 공부했으면 한다. 개발자로서 커뮤니케이션이 불편해서 이런 얘기하는게 아니다. 나는 기획자와 일하지 않으므로 그런 불편은 없다—내가 속한 Lunant(야간개발팀)는 전원이 기획과 개발을 둘 다 한다. 자기가 만들 프로덕트를 스스로 프로토타이핑도 못한다면 제대로 된 프로덕트 디자인이 힘들기 때문이다. 프로토타입이라도 있어야 사람들에게 빠르고 정확한 피드백을 받는데, 언제까지 입으로 설명하고 다른 사람이 어떤 것 같아요라고 대답하는 소리를 들은 뒤에 저 말 중에 어디까지가 립서비스일까 하는 생각을 하며 복잡하게 일할 것인가. 프로토타이핑 직접 해서 보여준 다음에 그걸 어떻게 쓰나 옆에서 관찰하는 게 투명하고 좋은 피드백을 얻기 좋다. 그리고 그렇게 얻은 피드백으로 프로토타입을 계속 직접 주물럭대면서 여러 이터레이션을 돌린 다음, 그것을 구체화시킬 때 본격적인 개발을 아웃소싱해도 늦지 않다. 기획자더러 프로덕트 개발 처음부터 끝까지 다 하라는 소리가 아니다. 개발 능력을 갖춰야 프로덕트 디자인을 제대로 해낼 수 있다는 이야기다.

이런 얘기 하면 대부분 반응이 이렇다. 나도 안 해본 게 아니야. 근데 어렵더라고. 사람마다 적성이 있어. 3개월 동안 책 계속 들여다 봐도 무슨 소린지 모르겠는데 어떡해. 아, 그 얘기들 말인데 내가 프로그래밍 입문할 적에 정확히 그랬었다. 초등학교 5학년 때 PHP 책을 사서 만 1년이 넘도록 책을 끼고 살았는데 아무리 읽어도 무슨 소리인지 도통 모르겠어서 프로그래밍 못했다. 내가 제대로 프로그래밍을 시작한 것은 결국 중학교 입학 이후다. 그러니까 대부분 적성이 안 맞는 게 아니라 그냥 더 오래 붙잡고 있어야 할 뿐이다.

어차피 이런 글을 써봤자 내가 답답해하는 종류의 사람들은 속으로든 자신의 블로그에든 대거리를 놓으며 평생 개발에는 손도 대지 않을 공산이 크다. 그 사람들이 드는 자신이 개발에 손을 대서는 안되는 이유가 그럴듯하든 엉터리이든, 중요한 사실이 하나 있다. 아무리 제 머릿속에 놀라운 이미지를 품고 있다고 해도 자신이 직접 구현을 해내지 않는 이상 비싼 돈 주고 아웃소싱을 하더라도 그 이미지를 제대로 구현한 것을 두 눈으로 직접 볼 수는 없을 것이라는 점이다.


  1. 물론 신뢰할만한 통계 자료 같은 것을 근거로 하는 얘기가 아니라, 내 짧은 경험만을 토대로 얻은 종합적인 인상이므로 바이어스가 있을 수는 있다.