Thoughts2009.12.04 14:49
그러면, 이제 실제 프로그래머의 입장에서 시간 관리를 어떻게 하면 좋을 지 생각해 보자.

프로그래머들과 이야기해 본 바로는, 프로그래머는 이런 꿈들을 꾼다.

1. 평생 프로그래밍을 하면서 살고 싶다
2. 아키텍트로 성장하고 싶다
3. 빨리 다른 일을 맡아서 코딩에서 벗어나고 싶다
4. 로또에 당첨되고 싶다

물론 이것 말고도 다양한 희망들이 있는데, 일일이 열거하기엔 너무 많으니까 생략하도록 하자. 로또에 당첨되는 것도 확률이 너무 희박하니까 일단 제쳐두기로 하자. 

위에 열거한 희망사항 들 중, 가장 많은 프로그래머가 원하는 것은 무엇일까? 개인적인 조사 결과에 따르면 '평생 프로그래밍을 하고 싶다'는 답을 한 사람이 가장 많았다. 그런데, 그 희망을 이루기 위해서는 어떻게 해야 할 지를 물어보면, 상당수의 프로그래머들은 이렇게 대답을 하곤 했다.

'잘 모르겠습니다.'

프로그래머 뿐 아니라 많은 직장인들이 나이가 들면 그 나이를 경험치로 환산하는 단순한 공식에 따라 더 많은 봉급을 받는다. (호봉제가 되었던 뭐가 되었던 거의 비슷하다.) 따라서 나이가 많은 프로그래머일 수록 더 많은 봉급을 받게 되는 것이 보편적인 경향일 거라고 추정해야 한다. 

그러므로 회사 입장에서 보면 '나이 많은 프로그래머'는 '더 많은 비용'을 의미하며, '더 높은 직급'을 주어야 한다는 뜻이기도 하다. 한국적 환경에서 나이가 40이 넘은 프로그래머에게 고작 대리나 주임 직급을 주고 일을 시키는 것은 상상하기 어려운 일이다. (그 프로그래머가 프로그래머로서의 경력을 20대 후반에 시작했다는 가정 하에서.)

이는 '나이가 많은 프로그래머'는 '경험도 많은' 프로그래머일 것이라는 유무형의 가정에 근거를 두고 있다. 자. 이 가정에 비추어 보았을 때, 그럼 나이가 많은 (따라서 경험도 많을 것으로 보이는) 프로그래머를 고용하고 있거나 고용하려는 회사는, 그 프로그래머에게 어떤 일감을 주어야 하나?

회사 입장에서는 당연히, 그 프로그래머를 투입함으로써 Risk가 가장 낮아지거나, 생산성이 가장 높아지는 쪽에 프로그래머를 투입하려고 할 것이다. 

회사는 기대한다. 그 프로그래머가 앞으로 구현할 소프트웨어의 구조적인 문제를 '미리' 예측할 수 있기를. 회사는 기대한다. 그 프로그래머가 앞으로 구현할 소프트웨어의 구현 과정을 보다 더 생산적으로 만들 수 있기를.

이는 프로그래머가 경험을 쌓으면 쌓을 수록, 코드를 만들기 위해 컴퓨터 앞에 앉아 있는 시간이 줄어들 가능성이 높다는 것을 의미한다. 의사결정권자에게 있어, 이는 당연한 결론이다. 그런 결론을 벗어나려면, 본인이 진정한 수퍼 프로그래머여서, 자신이 투입되면 소프트웨어가 버그 없이 순식간에 개발된다는 사실을 몸소 보여주고, 자신이 있을 자리가 컴퓨터 앞이라는 사실을 입증해 보여야 한다. 

"저 친구는 그냥 개발 일감을 주는 게 회사 입장에서 백배 나은 일이야..."

이런 말이 높은 사람 입에서 자연스럽게 흘러 나와야 한다는 뜻이다. 

그러려면 자신이 '코드에 미쳤다', 혹은 '코딩을 재미로 한다'는 인상을 심어 주어야 한다. 그렇게 할 자신이 없으면 '프로그래밍을 평생 하고 싶다'는 목표는 버리는 것이 좋다. 그렇게 할 수 없다면, 나이가 들면서 쌓이는 자신의 경험을 회사가 원하는 보다 생산적인 쪽으로 기꺼이 활용하겠다는 쪽으로 마음을 돌리는 것이 좋다. (사실 그러다 보면 SW 아키텍트 대접을 받게 되기도 한다.)

자. 그런데도 '평생 프로그래머로 일을 하고 싶다'면?

답은 간단하다. 프로그래밍을 재미있게 해야 하고, 자신에게 주어지는 모든 일을 '자신의 프로그래밍 기술을 향상시킬 기회'로 삼아야 한다. 그렇게 하지 않으면 '저 친구에게는 프로그래밍 일감을 주는 것이 가장 좋아...'라는 평판을 얻을 수 없다. 땜빵용 일거리나 처리할 대체제 취급을 받다가 회사가 어려워지면 제일 먼저 잘려나가게 될 비운의 코더가 될 뿐이다. 

그럼 우리 주변에서 찾아 볼 수 있는, 소위 잘 나가는 프로그래머가 어떤 식으로 일을 하는지 한번 살펴보자. 이 친구는 회사에서 프로젝트 관련 포상을 3회 받은 적이 있고, 누구에게나 '코딩에 미친놈' 혹은 '재미삼아 코딩을 하는 이색적인 놈' 취급을 받는다. 그의 책상에는 이런 저런 프로그래밍 서적이 널려 있고, 그가 아는 프로그래밍 언어만 해도 다섯 가지 정도는 되며, 그 중 두 개 언어에는 무불통달해 있다는 소문이다. 

물론 그도 처음부터 그런 소문을 얻은 것은 아니었다. 그가 처음 입사 했을 때, 그에게 주어진 일거리는 전산실에 널려 있는 오만가지 서버들에 대한 관리를 자동화하는 것이었다. 이 서버들은 하나의 거대한 실험 네트워크를 구성하고 있었는데, 문제는 그 서버들의 설정을 수작업으로 변경해야 한다는 것이었다. 서버마다 서로 다른 아이디와 패스워드로 접속해야 했고, 서로 다른 설정 명령을 커맨드 프롬프트 상에서 입력을 한 다음 빠져 나와야 했다. 

그가 입사하기 전까지, 그 네트워크는 수동으로 관리되고 있었다. 하지만 그가 입사한 뒤 사정은 바뀌었다. 그는 그 문제를 그가 풀어야 할 프로그래밍 업무로 생각했고, 그 문제를 푸는 데 가장 편리할 만한 언어를 골랐다. 그가 선택한 언어는 Java였다. 잘 아는 언어이기도 했고, 장비 접속 등의 문제를 해결해 줄 SSH나 TELNET 라이브러리도 맘만 먹으면 구할 수 있었다. 

그는 모든 아이디와 패스워드 목록을 DB로 구성하고, 장비에 내려야 할 명령을 XML 형태의 공통 데이터모델로 추상화했다. 그가 마지막으로 한 작업은 그 데이터모델을 실제 커멘드 프롬프트 상에 입력할 명령으로 바꾸어줄 XSLT 스크립트를 작성하고, 그 스크립트를 장비 타입 별로 분류하여 디렉터리 상에 설치해 놓고, 장비에 명령을 내려야 할 때 마다 공통 데이터모델에 XSLT 스크립트를 적용해 실제 명령으로 변환하여 전송하는 것이었다. (그가 진행한 이 프로토타이핑 작업은 후에 내가 구현한 시스템에 굉장히 큰 영향을 주었다.) 

결국 모든 서버에 대한 관리 작업이 자동화되었고, 사람들은 소프트웨어 코드를 수정하는 일 없이 XSLT 스크립트를 수정하거나 추가하는 것 만으로 새로운 장비를 지원하도록 관리 시스템을 수정할 수 있었다. 

그는 이 과정을 통해서 다음과 같은 새로운 기술들을 습득했다.

1. XML
2. XSLT
3. XPath

이 시스템을 개발하기 전까지, 그는 이런 기술들에는 문외한이었다. 그가 아는 것이라고는 세상에 Java라는 언어가 있고, XML 이라는 메타-데이터 포멧이 있으며, XML 문서에는 그 문서의 구성 요소를 추출하기 위해 정의된, 편리한 질의 언어(XQuery, XPath)가 있고, 그 질의 언어를 통해 하나의 XML 문서를 다른 형태의 문서로 변환할 수 있다는 사실 뿐이었다.

일은 사람을 귀찮게도 하고, 바꾸기도 한다. 둘 중 어느 쪽을 택할 것이냐는, 일을 대하는 자신의 마음가짐에 달려 있다. 이 마음가짐이, 시간을 대하는 자신의 자세를 바꾼다. 

일단 자신의 일에서 최대한 많은 것을 얻기로 작정하면, 그 때 부터 시간은 여러분의 편으로 돌아선다. 

[다음에 계속...]
신고
Posted by 이병준

소중한 의견, 감사합니다. ^^

  1. 헐헐

    와...참좋은글이네요

    2011.05.17 12:46 신고 [ ADDR : EDIT/ DEL : REPLY ]