2016년 10월 16일 일요일

[나쁜 프로그래머] 3. 인턴에서 나쁜프로그래머까지.

사회 초년생 일 적 한 스타트업 회사를 다닐 때가 생각이 난다.

대학 시절 수업에서 배운 지식과 책을 보고 배운 스킬들 로 재학중일때에

어느 프로젝트 수업을 들어도 자신이 있었고 언제 어디서나 필요한 선배이자 학생 이었다.

그런 하늘을 높이 찌르던 자존감은 첫 직장에서 한없이 꺾이고야 마는데

가장 나를 힘들게 했던 상황은 다른게 아닌 내가 그토록 자신 있었던 프로그래밍이었다.

직장선배나 팀장이 하는 방식은 내가 하던 방식과 너무 많이 달랐고

내가 무언가 해보려 하기에는 당췌 이해 안 가는 것들 뿐이었다.

그래서 내가 할수 있는것은

멍 때리는것과 무언가 해보려 선배들에게 질문 하는 것 뿐이었다.
(근데 뭐 내가 멍때리러 회사온 건 아니지 아니잖아? 물어 볼래도 하는게 있어야 물어보지.)

그런 나는 프로그램 업무가 주어지길 손꼽아 기다리고 매번 강력하게 요청했다.

그러던 어느 날 작은 SI 프로젝트를 수주함과 동시에 드디어 나에게도 기회가 왔다.

java (그때는 Spring 이니 struts 니 하는 프레임워크가 도입된 웹 프로젝트가 별로 없었다.) 막코딩 기반으로 된 웹사이트의 리뉴얼 프로젝트 였다.

그간 내가 다뤘던 플랫폼은 C 와 MFC 였다.
(그 외엔 교양 으로 했던 html 과 뭐 초보 수준의 javascript )

java 는 당시 나에게는 생소한 언어였고 난 그것대로 난관에 봉착했다.

그래도 뭐 새로운 건 배우면 그만 이지! 모르는 건 사수한테 물어보면서 난관을 해쳐가자!! 라는 패기넘치는 마음가짐으로 프로젝트에 정면으로 돌파할 의지가 활활 타올랐다.
(그리곤 거짓말같이 퇴사하게 되지....)

그때의 사수님은 (매우 현명하게) 나에게 java 쪽 업무보다는 html 과 javascript 로 이루어진 front 업무를 맡겼다.

다행이기도 했지만 뭐 난 java 를 배우고 싶은 마음이 더 커서 월권으로 나름 소스를 분석해가며 사수에게 이것저것 물어보곤 했다.

그 사수님은 내 인생에 손꼽을 정도로 매우 인간적으로도, 기술로도 완성되어 있는 양반이었지만

나의 이 근본 없는 지식 충당을 위한 시간을 할애하기에는 본인의 일이 너무 많았다.

그런 나는 짜증이 났고 내 업무가 끝나고 나면 투덜대고 그런 핑계를 대고 회사에서 공부를 하기 시작했다.
(내 기술이 늘면 늘수록 회사 입장에서는 좋은 거 아니야? 이렇게 생각했지.)

하지만 더이상 다른 프로젝트의 참여기회가 나에게 주어지지 않았고

그렇게 어영부영 다니다 회사에서 자의로 퇴사하게 된다.

퇴사한 이후 같이 있던 동기에게 들은 얘기로 난 회사에서 매우 나쁜 신입 프로그래머의 전형이 되어 있다는것을 느낀건 꽤 오랜뒤의 이야기 이다.

당시에는 내가 나쁜 프로그래머 인지 인정을 못했던것은 둘째치고 무엇이 나쁜것 이었는지 실체를 몰랐기 때문이다.

내가 왜 나쁜 프로그래머 였을까?




1. 사소한 개인적인 욕망을 주체하지 못했다.

어느회사든 경력이 하나도 없는 신입에게 바라는 점은 회사시스템을 배우는것이 대부분이다.

프로그래머든 디자이너든 기획이든 기술적으로 신입에게 요구되는점은 거~~~의 없다.
(신입한테 기술적으로 무언가를 기대하는 회사가 있다고? 미친거 아냐?)

다만 회사의 시스템을 통해 누가 어떤일을 어떤식으로 맡고 그들이 협업하는 방식에 대해 이해하기를 원한다.

군대에 입대하면 가장먼저 배우는것은 총쏘고 수류탄 던지고 이런게 아닌

바로 걷기 ,밥먹기 ,옷갈아입기 ,인사하기 부터 가르치는 이유와 거의 동일하다.
(자대에 배치되서도 총쏘고 대포쏘고 사격지휘하고 이런건 상병이후에 하잔아? 그때도 제일 먼저 하는건 부대원들 이름 외우기....)

훈련병이 제식을 가르치는 조교에게

" 총쏘는법 빨리 알려주세요. 현기증 난단말이요. 뿌웅. "

그랬다가 돌아오는것은 " 하나에 정신을! 둘에 차리자! " 뿐이다.

하루빨리 사수와 동등한 업무를 소화하길 원했고 회사의 그 누구도 원치 않았을 그 야망은 내가 이루고 싶었던 만용이었다.




2. 질문하는 방법이 잘못됐다.

어느 직종이든 마찬가지겠지만 질문을 하는 것은 매우 중요하다. 그것도 신입에게선 말이다.

후임을 가르치는데 의지가 있거나, 여유가 있는 상황이 아니면 사수는 먼저 알아서 이끌어주지 않는다.

내가 스스로 무엇이 문제인지 ,무엇을 모르고 있는지, 등을 알고 질문해야 한다.
(이런 사항들은 회사에서 배운 다기 보다는 학교에서 배워서 나가는 게 맞다고 본다.)

당시 내가 사수에게 했던 질문은 대부분 이런것들이었다.

" 이 버그는 아무리 해도 모르겠어요. "

" 이 링크를 찾아가 봤는데 파일이 없어요 근데 작동하는게 이상해요. "

" 이 쿼리는 너무 늦어요. 더 빠르게 할 방법이 없을까요? "

" 화면에 제대로 출력이 안되요 테이블이 자꾸 깨집니다. 어떻게 하나요? "

이런 질문을 하는 나의 가장 큰 문제점은

어떤 방식으로 문제해결을 해야 하는지 모르고 있다는 점이다.

진짜 물어봤어야할 질문은

" 이런 문제를 해결하려면 어디서 자료를 찾아봐야 할까요? "

였고

사수에게 처음 방식으로 질문 했을 때 어깨 넘어, 문제를 처리하는 방식 중 눈으로 보고 익혀야 했던 내용은

코드를 어떻게 수정 하는지 가 아닌 문제를 어떻게 분석하며 어떤 식으로 자료를 취득하는지 였다.

그런 방식에 대해 질문하고 조언을 구하며 도움을 요청해서 배웠어야 했다.

내가 그간 물어봤던 내용들은

' 지금 당면한 이 문제를 해결하기만 하면 아무래도 상관없다. 시발 이건 먼 버그여. '

라는 마음으로 '숲을 보려고 하지 않은 좁은 시야' 때문에 이루어진 질문들이다.

그런 나의 질문은 하나부터 열까지 모두 가르쳐줄 수 없는 환경에서 사수와 나 둘을 괴롭히는 환경만 조성할 뿐이었다.




3. 회사는 배움의 터 일수는 있지만, 학교나 학원이 아니다. 

그때의 내가 그랬고 지금도 회사에 인턴으로 만나는 많은 친구들이 가지는 오해 중 가장 큰 오해다.

일을 하기 위해 회사에서 배우는 것은 맞지만 어디 까지나 대전제는 '일을 하기 위한 것' 이다.

내가 무언가를 '배우기' 만을 위한 곳이 아닌 것을 이해 하는 것에 시간이 좀 필요했다.

이 대전제를 이해했다면 회사에서 배움을 주는 주된 이유는 '배워서 익혀라.' 가 아니라. '배워서 일해라.' 라는 식으로 이해해야만 한다.
(다른말로 일하면 다 배우게 되어 있다. 쯤 되겠지.)

이것을 이해하지 못하면 즉, 누군가 가르쳐 주지 않으면

난 의욕적으로 일을 하고 싶지만 회사가 나를 버렸다. 혹은 회사에선 쓸데없는 짜치는 일만 시킨다. 라고만 생각이 들고 회사내에서 (존재하지도 않는) 선생님이 나를 가르쳐 줄때까지 난 아무일도 하지 않는 잉여가 된다..

그러면서 투덜투덜 불만이 많아지고 의욕의 샘은 물이 말라 버린다.

그런 의욕이 꺾인 나를 보고 그 어떤 팀장이 나와 일하려 할까?






그럼 나는 이제 어떻게 해야하나? 개발자로서 신입은 어떻게 배워야 하나?

' 아무도 가르쳐주지 않는다. ' 라는 생각 자체를 버려라.  회사 나가서 숨쉬는거 자체가 신입들에게는 배움을 준다.

게임만 해도 알수 있는 진리이다.

레벨1 캐릭터가 가장 먼저 하는일은 시시껄렁한 임무를 받고 필드에 나가서 일단 토끼와 멧돼지의 어금니를 얻기위해 사냥부터 한다.

직업이 전사든, 사제든, 마법사든, 도둑이든 무조건 저렇게 시작한다.
(아 맞다! 금수저분들은 만렙찍고 시작하시니까 제외요.)

그렇게 시간이 해결해주는 일을 받아 어느정도 성장하고 난뒤에 각자의 직업에 맞게 그럴듯한 업무부터 받는게 보통이다.

내 경험상. 프로그래머 100명의 신입이 있을때

1년뒤 50명만 남는다.

2년뒤에는 20명 정도가 남는다.

그리고 10년뒤에도 20명이 남는다.
(뭐? 2명이 아니고 20명이나 남아? 프로그래머가 되기 위한 마지막 관문이 실무에서 2년이라는 소리다.)

아까 하던 게임얘기 계속해보자.

100개의 새로운 캐릭터가 만들어지고

중간레벨에 도달하는 캐릭터는 30%가 안된다.

만렙에 도달하는 캐릭터는? 10%정도는 될까? 그것도 무료 테스트 기간끝난후를 말한다.

세상이(어떤 일이든) 원래 그런거다.

프로그래머를 하고 싶다면 그냥 일을 하면 된다. 기초되는 업무가 내가 지양하는 업무가 아닐수 있다.

내가 꿈꿔왔던 그런 일들이 아닐수도 있다.

하지만 그게 기초가 되어준다. 정말 3년내에서는 그런 시시껄렁하고 엄한 업무들이 너를 키워줄것이다.

팀장과 같은 업무를 진행하고 싶고 설계도 해보고 싶고

그러다보니 당장 눈앞에 이 버그를 치워버리고 싶고

그 방법을 또 아무도 가르쳐주지 않는 이 좆같고 빌어먹을 회사!!!

이렇게 조바심을 내고 있다는것은 아직 그 일을 할 레벨에 도달하지 않았다는것을 의미한다.

결코 신입인 당신이 개발자에 어울리지 않거나 바보 멍청이 모질이 라서 그런게 아니라

그냥 레벨이 낮은것 뿐이다.

다만 빠르게 레벨업 할수 있는 지름길은 살짝 있다.



팀장이 주는 임무를 받고 진행하면서 단순히 일하는데만 집중하기 보다는

팀장이 업무분장을 어떻게 하고, 왜 내가 이런 일을 담당하도록 팀장이 생각했는지

결과의 형태에 따라서 팀장의 반응 혹은 팀원의 반응은 어떤지 기록해라.

기록의 힘은 위대하다. 내 경우 이 기록들이 나중에 팀장역할을 맡았을때 자산이 되어 주었다.



눈앞에 버그가 발생했고 왜 이 버그가 발견되었는지 이해가 안간다고

바로바로 선배나 팀장에게 달려가서 물어보지 마라.

" 이 버그는 왜 나오는지  모르겠어요. "  는 잘못된 질문이다.

" 이 버그에 대해서 구글이나 네이버에 이런식으로 검색했는데 결과를 찾을수 없었습니다. "  가 가장 이상적인 질문형태이다.

이 문제점에 대해서 어떻게 해결하기 위해 진행했는지를 보고하고 그것에 대한 잘못된 방식에 대해서 물어봐라. 

이런식으로 나의 부사수가 들어왔을때 이런방식으로 이끌어 준다면 그 친구도 너에게 좋은 자산이 되어주리라 믿는다.



그리고 다 필요없다. 그냥 일을 하고 있으면 자연히 는다. 

위에서 주의하라고 말했던 사항들 그대로 해왔고 이미 나쁜프로그래머가 되어있더라도 상관없다.

어느새 내가 나쁜프로그래머가 되어있더라 라고 느끼는 순간부터 고치면 된다.

기록하고 생각하고 왜 이렇게 내가 무엇인가 되어가고 있다는 사실을 인지하면 된다.

모든일이 다 그렇다. 처음에는 재미없고 볼품없고 별거 아닌일이고 힘들기만 하지만

결국 그 경험이 다 경력으로 쌓이게 되어있다. 나의 팀장도 나의 후배도 모두 이런식으로 성장했다!!

그리고 당신도 역시 프로그래머 라고 당당하게 얘기할수 있는 사람이 되어간다.



이글이 꼰대짓 훈장질 한다고 보일수도 있겠다.

다만 이글을 쓸수있는 이유는 내가 저 바보같은 행위를 해왔기 때문이다.

난 항상 실패해 왔고, 결과와 상관없이 나쁜 프로그래머가 되어 있기도 했다.
(아니 결과적으로 나쁜놈이 되는건 졸라 셀수도 없이 많다!!!)

성공 사례는 문제집에 나와있는 정답과 해설이라고 본다.

나의 글은 실패사례로서 오답노트에 해당하려고 노력한다.










시작하는 글


1. 투덜이 스머프

2. 인디아나존스

3. 인턴에서 나쁜프로그래머까지

4. 업햄 상병 구하기

5. 흥선대원군

6. 듀크 뉴캠 포에버

7. 아르센 뤼팽

8. 질데로이 록허트

9. 사루만

10.과거의 나에게 보내는 편지

마무리 하는 글