[개발人] 김재우 부장 “이론과 실무는 바늘과 실”

가 +
가 -

김재우 한국마이크로소프트 개발자 사업부 플랫폼 부장은 가난한 어린 시절을 보냈다. 좋지 않은 집안 형편 탓에 일찍 철이 들어야 했고, 남들보다 더 빨리 생계에 뛰어들어야 했다. 그에게 ‘개발자’는 어린 시절부터 이루고 싶었던 꿈이라기보다는 돈을 벌 수 있는 수단 중 하나였다. 김재우 부장은 재미보다는 필요 때문에 개발자 생태계에 발을 담갔다.

사실 김재우 부장은 어린 시절 그림을 그리고 싶어했다. 회화 쪽으로 나갈까 하는 생각도 했었다고 한다. 그러나 그의 어머니에게 회화는 안 그래도 없는 살림에 더 돈이 안 돼 보이는 길이었다. 아들에게 그림 그리기가 아닌 다른 취미 활동을 붙여주자고 마음먹은 어머니가 시킨 일은 ‘컴퓨터 동아리 다니기’였다.

그 덕에 김재우 부장은 중학교 2학년 때, 또래보다 좀 더 일찍 컴퓨터를 만졌다. 퍼스널 컴퓨터(PC)가 등장할 무렵이었다. 김재우 부장은 동네 컴퓨터 동호회에 매일 나가 컴퓨터를 배웠고, 그곳에서 유닉스 시스템을 만나면서 컴퓨터 세계에 빠져들었다. 순수한 호기심이 아니래 생계를 유지하기 위한 목적으로.

developer_MS_evnagelist

개발 : 생계수단으로 처음 만나다

“제가 국내 IT 산업 발전으로 따지면 한 2세대 정도에 발을 걸쳤습니다. 개발자가 되기로 마음먹은 건 돈을 벌기 위해서였습니다. 실무에 빨리 뛰어들었지요. 그 당시 개발자가 많지 않았던지라 조금만 노력해도 꽤 짭짤한 아르바이트비를 받을 수 있었습니다.”

개발이 재미있어서 시작한 건 아니었다. 하지만 돈은 됐다. 김재우 부장은 고등학교 땐 재고관리 관련 소프트웨어를 만들어 월급을 받으면서 학업을 계속했다. 몇십만원에 이르는 돈이 통장으로 들어오기 시작했을 정도로 그가 만든 소프트웨어는 관련 회사에서 인기가 좋았다. 김재우 부장은 이 돈으로 책도 사고 밥값도 마련하면서 대학 입학을 준비했다. 전공은 당연히 전산학과였다.

“하지만 이 의도조차도 순수하지 못했습니다. 조금 배운 실력에 돈이 들어오니 눈이 뒤집혔죠. 대학교를 나오면 더 큰돈을 벌 수 있을 거라고 생각했습니다. 흥미도 아니고 적성도 아니었다고 믿으면서 어떻게든 돈 벌 생각만 했지요.”

이때까지만 해도 김재우 부장은 썩 그리 좋은 개발자는 아니었다. 실력이 떨어졌다는 얘기가 아니다. 개발자에 대한 진지한 고민이나 좀 더 개발을 잘하기 위한 의욕이 없었다. 눈치는 뛰어나 실무 개발 프로젝트만 좀 더 다양하게 다뤄봤을 뿐이다. 그런 그의 눈에 대학교 교수님의 이론 중심형 수업이 머리에 들어왔을 리 없다. 김재우 부장은 ‘이론은 이론이고, 실무는 실무일 뿐’이라는 마음의 벽을 쌓으며, 학교 이론 수업을 얕잡아봤다. 가르치는 교수보다 훨씬 더 코딩을 잘 수 있다는 어줍잖은 자신감 때문이다.

“교수님이 가르치는 책이 너무 한심하더라고요. 연습하라고 내 준 과제들도 제가 봤을 땐 수준 이하였고요. 돈을 벌려고 학교에 왔는데, 돈이 더 나가니까. 차라리 학교를 그만두고 아르바이트나 하면서 돈이나 벌자는 생각을 했습니다.”

스승 : 개발의 신세계를 열다

학교 수업은 재미없다는 오해에 빠져 학교를 그만둘 생각을 하고 있을 무렵, 한 교수가 그에게 깨우침을 줬다. 이 교수는 김재우 부장에게 “이론과 실무는 굉장히 밀접하며, 이론을 잘 배워둬야 실무는 잘할 수 있다”라는 가르침을 줬다. 이 가르침 덕에 김재우 부장은 본격적으로 개발 재미에 빠졌고, 이는 그가 진정으로 ‘개발자는 무엇인가’를 고민하게 된 계기가 됐다.

“군대 다녀와서 대학교 하반기쯤 됐을 무렵이었을까요. 우연히 전산실에 들어갔는데, 어떤 분이 프로그래밍하고 있더군요. 그의 등 뒤에서 프로그래밍 과정을 지켜봤는데, 제가 그동안 배워 왔던 코딩 방식과 완전히 다르게 프로그래밍하고 있더군요. 속으로 ‘어쭈, 제법 하는데’라는 생각을 했지요.”

훗날 김재우 부장에게 코딩의 재미를 가르쳐준 김명호 교수의 프로그래밍 모습이었다. 김재우 부장은 이날을 계기로 프로그래밍에 대한 생각을 달리 가지기 시작했다. 이날 김재우 부장은 깨달았다. 누구나 글을 쓸 순 있지만 후대에 길이 남을 명문장을 남기는 이는 적듯이, 누구나 프로그래밍을 할 수 있지만 남들이 보기에도 잘하는 프로그래밍을 하기란 쉽지 않다는 사실을.

“복학을 하고 수업에 들어갔습니다. ‘좀 하네~’라고 여겼던 사람이 교수로 등장하더군요. 그 때부터 강의를 들었는데 천지가 뒤집혔습니다. 제가 알고 있는 기술에 대한 이해도가 ‘우물 안 개구리 수준이었구나’라는 걸 깨달았지요.”

교수님은 그에게 매일 같이 임무를 줬다. 프로그래밍 언어 하나 배우기도 어려운데, 일주일마다 배우는 언어를 바꿨다. 과제 양도 어마어마했다. 이론적으로 배우는 게 아니라 독립적인 소프트웨어를 만드는 일을 매주 과제로 던졌다. 김재우 부장 표현에 따르면 ‘MIT 학생들이 배울 법한 수업과 과제’가 매일 이어졌다.

“교수님 밑에서 배우면서 눈이 높아졌습니다. 정신적인 충격에 휩싸여서 교수님이 쓰는 코딩 스타일과 문체를 거의 흡수했지요. 교수님 만나기 전만 해도 나름 열심히 구조도 맞추고 잘 쓴다고 생각했는데, 교수님 앞에서는 제가 누더기 코딩을 짰다는 생각이 들기 시작하더군요.”

김재우 부장은 김명호 교수를 만난 후 습관처럼 쓰기 시작하던 몇만 라인에 이르는 코드에서 손을 뗐다. 압도적인 실력에 정신적 충격을 받아서다. 머리는 훌륭한 코드를 이해하고 있는데, 그걸 따라가지 못하는 자신의 손가락을 탓하기도 했다.

“가치관의 혼란이 왔습니다. 도무지 코딩을 할 수 없었어요. 이때부터 미친듯이 이론 공부를 시작했습니다.”

이론 : 물정 모르는 답답한 게 아니다

대학교 새내기 시절만 해도 김재우 부장은 이론을 ‘답답하다’라고 생각했다. 현장에서 요구하는 게 있는데, 이론은 현장의 요구를 따라잡지 못한다고 생각했던 탓이다. 책을 쓴 이들도 같은 연장선에 놓고 평가했다. 김재우 부장 머릿속엔 책은 책이고, 이론은 이론이며, 실무는 실무라는 고정관념이 깊이 박혀 있었다.

“교수님을 뵙고, 제가 부족하고 모르는 게 이론이라는 걸 깨달았습니다. 이론쟁이는 실물과 동떨어진 사람이라고 생각했는데 착각이었던 거죠. 책도 보고, 논문도 읽으면서 제가 알게 된 유명 저자들이 철저한 실용주의자라는 걸 깨닫게 됐습니다.”

나름의 깨달음을 얻고 나자 김재우 부장은 겸손해졌다. 그의 코딩 실력이 대단한 게 아니며, 세상에는 훨씬 더 훌륭한 사람들이 많이 존재한다는 걸 인정했다. 더는 자신의 코딩 실력을 내세우지 않았다. 이론 공부도 열심히 했다. 대학원까지 가서 석사도 따고 박사 학위도 준비하면서 내실을 다졌다.

“그러다 문득 저 같은 사람이 가졌던 오해를 풀어줘야겠다는 생각이 들었습니다. 계속해서 이론을 공부하며 저 자신의 내공을 쌓는 것도 중요하지만, 현장에 나가서 이론의 중요성을 알리는 것도 좋겠다는 생각이 들었지요.”

김재우 부장은 산업현장에 뛰어들었다. 고품질의 소프트웨어를 만들려면 이론과 실무를 합쳐야 한다고 생각했고, 그 가교를 자신이 맡아보자는 야심에서다. 그 결과 1990년대 말 정부에서 한창 교육과정을 만들면서 양산형 개발자를 만들기 시작할 때, 지방 노동청 관계자와 뜻을 모아 개발자를 위한 교육 시스템을 만들었다. ‘이론은 실무에 있다(Theory In the Practice : TIPS)’라는 교육 과정을 만들고 후배들을 길러 냈다. 김재우 부장 자신도 현장과 이론을 오가며 책도 쓰고 교재도 만들면서 후학을 양성하는 데 힘 쏟았다. 혼자 일하는 것보다 함께 일하는 법, 이론과 실무를 결합하는 법을 널리 알렸다.

“큰 소프트웨어를 어떻게 혼자 다 만드나요. 결국 남과 함께 만들지요. 남도 읽을 수 있는 코드를 만드는 법, 이를 위해 다른 사람과 원활하게 의사소통하는 법 등을 가르쳤습니다. 이 모든 과정을 위해서는 ‘나 혼자만 잘났다’라는, 과거 제 대학교 새내기 시절 같은 모습을 버려야 합니다. 그래야 개발자로 성공할 수 있습니다.”

김재우 부장은 소프트웨어 개발자로 성공하려면 게임이나 그래픽 같은 프로젝트를 혼자 할 필요가 있다고 충고한다. 제품 모듈을 개발하는 데 그치는 게 아니라, 처음부터 끝까지 개발 과정을 완주하는 경험이 중요하다고 강조했다.

“좋은 개발자가 되려면 연습을 많이 해야 합니다. 컴파일러, 게임, 그래픽스를 해봐야 한다고 생각합니다. 프로그램을 짜는 게 아니라 소프트웨어를 만들어야지요. 제품을 기획하는 단계에서부터 전달하는 전 과정을 개발자라면 한 번 경험해 봤으면 합니다. 이 과정에서 이론과 실무 간 결합의 중요성이 아마 뼈저리게 느껴질 겁니다.”