좋은 프로그래머란 뭘까? (회사에선 좋은 개발자라고 말하는데, 전에도 언급했지만 개발자(X)->프로그래머(O) 가 좋다.) 이 질문에 대해서 생각을 정리할 필요하 있어 글을 남긴다.
나와 같은 프로그래밍을 하는 님들께 이 질문을 던지면 나름대로의 이유있는 답들을 하며, 몇시간동안 끝나지 않을 이야기가 시작되곤 한다. 가만히 들어보면 모두 맞는 말이다. 간혹 "야근을 하면서까지 일하는.... 회사에서 시키는 일만 잘하는.... "등의 맘에 들지 않는 말들도 있지만, 뭐 그것도 자기가 그렇게 생각하는걸 뭐 어쩌겠나~ 물론 회사에서 돈을 받고 다니는 직딩은 주어진 임무에 대해서 실수 없이 일정까먹지 않고 완료하는게 당연하다.
'좋은' 이라는 수식어를 붙인 프로그래머는 어떨까? 돈을 받고 회사에 몸담고 있는 사람으로써 좋은 프로그램머는 결국 한정된 리소스(시간,비용등)내에서 프로젝트에 완성도를 높여 회사의 이익을 극대화할 수 있는 사람이 아닐까? 당연한 얘기일지 모르지만 막상 프로젝트를 진행하다보면 시간과 비용은 물론이고 예측하지 못했던 돌발변수가 발생해 결과물은 언제나올지 모를 상황이 벌어진다. 기획이나 디자인 부분에서 문제가 생길 수 도 있겠지만 결국 최종 결과물은 프로그래밍 영역이기 때문에 프로그래머라면 어떤 상황에서도 당황하지 않고 프로젝트를 완성할 수 있어야 한다.
프로그래머라는 직업도 막상 발을 들여보면 여러가지 다양한 카테고리로 구분할 수 있다.
게임이냐, 웹이냐, 서버냐 클라냐, 어떤 프로그래밍 랭귀지를 쓰느냐 그 기준도 정하기 나름이고... 이 모든것을 골고루 잘하면 좋겠지만(물론 다 잘하는 천재도 있겠지ㅠㅠ) 보통 현재 자기가 하고 있는 일과 관련한 기술들을 습득하고 반복하게 된다.
예를 들어... 현재 내가 하고 있는 일은 게임 서버 프로그래머 이다. 프로그래밍은 C++ 이고 IDE 로 Visual Studio 를 사용 DB 는 mysql 을 사용한다. 아마 대부분의 게임 서버 프로그래머가 가지는 공통 속성일것이다. 대학을 막 졸업하고 첨 이 일을 시작하는 신입 프로그래머에게는 시니어들과 작업하면 신기하고 재밌어하며 기술을 배워갈 것이다. 이 신입은 프로그래머가 3년뒤 같은 일을 하고 있다면 이 분야에서만큰 어느정도 기술과 경험을 갖추었을 것이고 성능(?ㅎㅎ)도 제대로 내고 있을 것이다. 입사한지 5년이 흐르고 회사에서 일잘하는 평판도 있도 이제 게임 서버 만드는것도 쉬워지고 제법 자신감도 크다. 이 프로그래머는 아마 10년 넘게 같은 일을 할 수 있을 것이다. 하지만 연봉은 년차에 비해서 그리 높지 않을 것이며 점점 프로그래머로서의 입지가 줄어들 것으로 본다.
2000년대 이전의 관료적인 사고방식을 가진 공공기관, 제조업체들에서는 이렇게 일하는것이 좋았을지도 모른다. 하지만 IT 업계는 요즘도 그렇게 외치는 '혁신'이 없으면 살아남기 힘든곳이다. 혁신이라는 말을 여러가지 의미로 해석할 수 있지만 프로그래머에 있어서는 끊임없는 자기발전이 밑바탕이 되어야한다.
내가 하고 있는 일은 언제부터인가 반복적이고 언제든지 나를 대체할 사람이 있다는것이 슬프지만 현실이다. 프로그래머가 적다고 하지만 요즘처럼 IT 기기가 친숙하고 국가적으로 SW산업을 육성한다고 학교에서도 교육을 시작하자고 하는 마당에 젊고 파릇파릇한 녀석들이 빠르고 명석한 두뇌로 내 자리를 위협할 것이다.
프로그래머 개인적으로 봤을때 내 일을 대체할 사람이 널려 있다는것은 그만큼 내 몸값이 작다는 것이다. 그러면 내 몸값이 높다는건 내가 하고 있는 일을 할 수 있는 사람이 그리 많지 않다는 것이다. 하는 일이 얼마나 어렵고 높은 기술을 요하는데 그럴까? 여기서 일의 특성으로 두가지로 타입으로 나뉠 수 있는데...
첫번째는 그 일에 대해서 완전 빠삭하고 깊게 알고 있는 스페셜리스트가 되는것이다. 프로그래머들에게서 신급으로 심지어 찬양 받는 해커들, 창시자들.... 등이 있다. 프로그래머들 사이에서 이름만 대면 알 수 있는 유명인이 아니더라도 각 회사에서 기술 아키텍트라고 칭하는 이들이 대표적이다. 다른말로 하면 장인이라고 할 수 있는 월등한 실력을 갖춘 이런 사람들은 박사급이 대부분이이고 그분야에서 어딜가도 꿀리지 않게 얘기할 수 있는 님들이다. 보다 견고하고 신리도 높은 시스템을 만들때 절대적으로 필요한 인력으로 구글, 애플등과 같이 세계최고의 글로벌 IT 기업들의 튼튼한 버팀목이 되어 준다. 비단 최고의 회사가 아니더라도 우리 주위에서 잘나간다는 회사들을 보면 이런 사람들이 꼭 존재한다.
두번째는 이것저것 다양한 각 분야에서 보통은 한다는 제너널리스트가 있다. 예를 들어 게임 서버 프로그래머가 게임 클레이언트와 웹서버까지 개발할 수 있다면 각각 직군에 필요한 인력 2명은 아니더라도 1명으로 줄이고 어느정도 업무를 분담할 수 있다. 물론 본인 업무외 다른 분야를 심도있게 파고들지는 않아 스페셜리스에 비할바는 아니지만 다양한 분야의 경험은 프로젝트를 완성 속도를 높이고 다양한 경험으로 어쩔땐 높은 시너지효과를 가져오기도 한다. 회사입장에선 인력비용 절감과 사람 수에 따라 증가될 수 밖에 없는 커뮤니케이션 시간(꼭 사람들이 많아야 일을 빨리하고 좋은 품질이 나오는것은 아니기 때문에)을 줄일 수 있다.
스페설리스트든지 제너널리스트든지 모두 밑바탕에 자기발전이 깔려 있다. 좋은 프로그래머는 이런 자기발전을 끊임없이 한다. 좀더 깊이 연구하고 내 일만 고집하지 않고 다른 분야도 공부하면서 언제 있을지 모를 위협에 대비해보자. 회사도 경쟁력을 잃지 않기 위해서 이런 좋은 프로그래머들을 많이 확보할 수 있도록 연구하고 노력해야 되지 않을까.
참고로 요즘에는 제너널 리스트와 스페셜 리스트를 모두 아우르는 'T'자형, 'ㅠ'(파이)형(
http://goodgle.kr/977) 인재가 결론이다라는 말도 많이 하더라. 왠지 사람들은 어느 한쪽도 부족하지 않은 완벽한 인간이 되기를 원하는것 같다. 100%가 아닌 80%도 되기 힘든 나로서는 어쩌란 말인지~ㅎ