일기장/2009-11-18


Youngrok Pak at 13 years ago.

며칠 전에 백업 파일을 뒤적거리다가 내가 드레퓌스를 리포트에서 인용한 적이 있다는 것을 알게 되었다. 역시 그 전문성에 대한 연구로 인용한 것인데, 4년 전 일이다. 그런데 실용주의 사고와 학습을 번역하면서는 전혀 기억이 안 났었다니 참 당황스럽다.

나는 개발자로서 드레퓌스 모델에서 어느 정도의 단계에 있을까? 드레퓌스 모델은 다섯 단계 novice, advanced beginner, competent, proficient, expert로 나뉜다. expert, 과연 어느 정도가 되면 이렇게 부를 수 있을까?

시간의 관점으로 본다면 어떨까. 나는 열 살 때 프로그래밍을 시작했다. 개발 경력은 20년이 넘은 셈이다. 실무 경력은 8년. 대학 4년. 하지만 대학 4년 동안 내가 프로그래밍을 열심히 했던 과목은 세 과목 정도에 불과하다. 그 외에는 별다른 노력을 한 게 없다. 중학교에 들어가서도 거의 프로그래밍을 하지 못했고, 초등학교 때 접했던 시간도 2년 가량이다. 고등학교 때 1,2학년 때까지 올림피아드다 뭐다 했으니 이 때는 좀 밀도가 높았다. 그렇게 보면 대략 13년을 좀 넘는 시간이라고 볼 수 있겠다. 어쨋든 시간으로만 따지면 1만 시간도 넘고, 10년도 넘으니 내가 제대로 했다면 전문가가 되어 있어야 할 시점이다.

그렇지만 deliberate practice, 혹은 깨달음을 얻는 경험이란 관점에서 보면 어떨까? 처음 배웠을 때로 거슬러 올라가보면, MSX에서 베이직으로 배웠는데, 그 때 얻은 깨달음으로 기억 나는 건 단 하나. 뭔가 동작하는 프로그램을 만들고 나서 거기에 살을 붙여나가는 것이 처음부터 정확하게 만드는 것보다는 좀더 쉽다는 것. 나름 애자일의 기본 원리 중 하나를 깨우친 것 같아 기특하기도 하다. ㅎㅎ 그래서, 그 이후로 프로그래밍을 할 때 Hello World를 찍는 수준이라도 뭔가 돌아가게 만든 다음 살을 붙이는 방식으로 해왔던 것 같다. 처음부터 BigDesignUpFront와는 인연이 없었던 듯.

그리고 GW-BASIC으로 넘어가면서 새로 얻은 깨달음은 GOSUB의 사용이다. GOSUB와 RETURN을 잘 이용하면 코드에서 다른 역할을 하는 부분을 분리할 수 있다는 것을 깨달은 것. 초보적인 함수의 개념을 익혔다고 볼 수 있는 듯하다.

그 이후로는 별다른 발전이 없다가 고등학교 때 올림피아드를 하면서 조금 발전이 있었다. 그 중 하나는, 문제를 시각화하면 코딩하기 쉽다는 것. 미로 찾기 문제를 풀 때, 다른 친구들은 모두 결과를 좌표값을 연속해서 찍는 것으로 표현했다. 하지만 나는 ASCII 그래픽으로 미로를 그리고 미로를 따라가는 선을 그려서 화면에 보여주는 식으로 구현했다. 처음에 화면 그리는 코드를 짜는 시간이 많이 들었지만 그게 되고 나서는 내가 짜는 알고리즘이 화면에 바로바로 보여서 쉽게 풀 수 있었다. 하노이탑 문제를 풀 때도 같은 방식으로 접근해서 아예 그래픽 모드까지 사용했고 이외에도 다양한 알고리즘 문제를 시각적으로 풀었다.

하지만, 이 방식이 꼭 좋은 것은 아니었다. 올림피아드에서는 내가 갖고 있는 라이브러리를 쓸 수 없었기 때문에 시각화를 이용할 수 없었고 시각화에 다소 의존해왔던 터라 알고리즘적 사고는 그닥 발달하지 않아서 결국 국내 예선에서도 탈락하고 말았다. 사실 고등학교 때 알고리즘은 거의 대학교 수준 이상으로 공부를 했었지만 프로그래밍 실력은 크게 발전하지 않았던 것 같다.

대학 때 역시 별다른 발전이 있었다고는 할 수 없다. 내가 진짜로 발전하기 시작한 것은 실무를 하면서부터다. 그렇게 따지면 실무를 하기 이전의 세월들은 시간만 많지 세 건 정도의 깨달음 밖에 없었다고 볼 수 있다. 그렇게보면 13년에서 실무 이전의 5년은 다시 그냥 1년 수준으로 봐야 할지 모른다. 그럼 이제 전문가에 필요한 10년에 모자란다.

실무를 하면서는 비약적인 발전이 있었다. 처음에 SI 업체에서 구를 때는 불평도 많이 하고 힘들어했지만 사실 그 때 가장 빠른 속도로 발전했다. 자바 한지 1년 만에 자바서비스넷의 엔지니어 모임에 초대를 받아서 당시 존경 받는 개발자들과 함께 자리할 수 있었으니 인정도 받은 셈이다. 권일이를 통해서 XP도 배웠고, 리팩토링처럼 전환점이 된 책도 읽었다. 하지만 이 때도 회사가 사운이 기울면서 프로젝트를 못 따서 막판에 5개월 정도는 별 일 없이 보냈다. 또다시 마이너스 5개월.

NHN으로 옮기고 나서도 나름 충실한 세월을 보낸 것 같다. TDD를 시작했고, 페어 프로그래밍 등 XP의 각종 실천법도 적용을 해보았다. 어려운 과제들을 많이 맡으면서 개발 실력도 부쩍 늘었고, 사내 관리 도구를 만들면서 UX도 눈을 뜨기 시작했다. 이 때는 별로 감점 구간이 없는 듯 하다.

NCSoft에서도 많은 배움을 얻었다. 가장 큰 것은 프로젝트 관리에 대한 것을 배운 것이다. XP의 실천법들을 의욕적으로 적용해보고, 또 실패하는 과정에서 얻은 깨달음들이 크다. The Goal의 이야기가 현실에서 맞아들어가는 것도 볼 수 있었고, 작은 프로젝트나마 다른 직종이 포함된 팀의 PM을 해보면서 다른 직종의 관점도 많이 이해하게 되었다. 스프링노트의 고민을 통해서 UX에 대한 개념도 많이 발전했다. 기술적으로도 자바스크립트, 파이썬, 장고를 완전히 흡수했고, 루비도 개념적으로는 꽤 깊이 이해했다. 이아스님의 일단 부딪혀보는 실천적인 스타일, 지섭이의 품질에 대한 집념, 장호의 무식하지만 빠른 개발방법 등에서도 많은 것을 배웠다. 내가 창업을 결심할 만큼의 자신감을 얻게 된 것도 결국 오픈마루 덕분이다. 그렇지만, 여기도 감점 구간이 있다. 에쿠스 프로젝트가 어느 정도 굴러가고 권남님이 다른 프로젝트로 차출된 후부터는 의욕을 많이 잃어서 마지막 3~4개월은 새로운 시도를 그만두고 요청 들어오는 것만 작업했던 것 같다.

이렇게 따져보면 내가 개발자로서 발전적인 시간을 보낸 것은 대략 8년 좀 넘는 시간이다. 그렇다면 전문가라고 말하기에는 아직 좀 부족한지도 모른다. 이번에 안드로이드를 성공적으로 해내면서 자신감이 많이 붙었지만 사실 따지고보면 이 분야에 잘하는 개발자가 드물어서 그런 것 뿐이다. 아마 내가 오픈마루에서 같이 일했던 개발자들 누구를 데려와도 이쪽 사람들을 놀라게 하기에는 충분할 것이다.

그래도 아직은, 어디 가서 내가 전문가라고 자신 있게 말하지는 말아야겠다.


Comments




Wiki at WikiNamu