Thoughts2009.11.30 16:35

직업상 많은 프로그래머들을 만난다. 그런데 놀라운 사실은, 대부분의 프로그래머들이 자신의 능력을 증진시킬 시간적 여유가 없다고 불평한다는 것이다.

이런 징후는 몇 가지로 해석이 가능한데, 그 중 가장 유력한 것은 다음의 두 가지이다.

1. 정말로 시간이 없다
2. 시간을 낼 방법을 모른다

1은 자신이 처한 환경의 문제로, 혼자만의 힘으로는 해결이 어렵다. 이럴 때 흔히 동원되는 것이 '프로세스' 혹은 '프랙티스' 이다. 개발이 좀 더 원활하게 진행될 수 있도록 하고, 모든 팀원이 보다 효율적으로 일할 수 있도록 하면 팀원들은 좀 더 많은 여유시간을 혜택으로 누릴 수 있다.

그래서 나는 가끔 프로그래머들을 만나면 묻는다.

"그럼 그런 문제는 어떻게 해결하면 좋을까요?"

그러면 놀랍게도 열번 가운데 여덟 번은 다음과 같은 대답을 듣는다.

"글쎄요. 제가 좀 더 노력하는 수 밖에 없겠죠."

그러면 나는 다시 묻는다.

"그럼 좀 더 노력하면 시간을 낼 수 있다는 뜻인가요?"

그러면 또 놀랍게도 이렇게 이야기하는 사람이 반은 넘는다.

"네. 제가 게을러서 시간을 못내는 탓도 있다고 생각합니다."

이 이야기는, 프로그래머들이 능력 향상을 하지 못하고 단순 코더에 머무르는 중요한 요소 중 하나가 비-환경적인 요인이라는 것이다. 

그런데 과연 '게을러서' 일까?

나는 그건 아니라고 생각한다. 대부분의 프로그래머들은 초인적으로 일한다. 마감시간을 맞추기 위해 야근을 밥먹듯이 하고, 버그를 잡기 위해 모니터를 몇 시간 씩 뚫어져라 바라보는 사람들보고 게으르다니! 그건 천부당만부당한 소리이다.

그들이 시간을 못 내는 이유는 다음 두 가지 중 하나 일 가능성이 높다.

1. 피곤해서 쉬고 싶다.
2. 대체 시간이 나면 뭘 해야 할 지 모르겠다.

피곤해서 쉬고 싶다는 것은 체력에 환경이 영향을 끼치고 있다는 뜻이므로, 역시 환경을 개선하지 않으면 해결하기 어렵다. 개인적 차원에서 해결해야 하는 부분은, '대체 시간이 나면 뭘 해야 할 지 모르겠다'에 해당할 것이다. 하지만 정말로 모르는 것일까? 

질문을 해 보면, '프로그래밍을 평생의 업'으로 생각하지 않는 사람을 제외하고는, 대부분 시간이 나면 뭘 해야 할 지는 어렴풋하게나마 알고 있다. (확실하게는 잘 모른다는 문제가 있긴 한데, 이건 나중에 살펴보자.)

그러니, 프로그래머들이 시간 관리를 못하는 '개인적 차원'의 가장 큰 원인은, 역시 '어떻게'에 해당하는 부분, 즉 '어떻게 시간을 내야 하는지를 모른다'에서 찾아야 할 것이다. 

대부분의 프로그래머들은 다음과 같은 패턴으로 일한다.

1. 출근한다.
2. 코딩한다.
3. 퇴근한다.
4. 쉰다.

자기 발전을 위해서 시간을 할애하려고 할 때 가장 쉽게 공략할 수 있는 부분은 '쉰다'에 해당하는 부분이다. 그런데, 쉬지 않고 일할 수 있는 사람이 있나? 어떻게던 쉬기는 쉬어야 한다. 그래야 다음날 또 출근하고 코딩하고 퇴근할 수 있다. 충분한 레벨의 생산성을 유지하는 비결은, 적절한 양의 휴식이다. 휴식하는 동안 새로운 아이디어가 떠오르기도 하고, 새로운 접근법이 고안되기도 한다. 

그렇다면 대체 어디를 쪼개서 시간을 할애해야 하나?

우선, '쪼개야 한다'는 생각이 선입견이 아닌지 다시 한 번 돌이켜 보는 데서 부터 출발해 보자. 

요즘 들어(?) 널리 알려지기 시작한 법칙 중에 하나로, 이런 것이 있다. 

"컨텍스트 스위칭을 자주 해야 하면 할수록, 생산성은 저하된다."

프로그래밍 전문가가 되어야 하는 사람에게 있어서, 자기 개발의 주된 영역은 프로그래밍이 되어야지 다른 영역이 되어서는 곤란하다. 그래서는 말콤 글래드웰이 "아웃라이어"에서 떠든 10,000시간의 의도적 수련 시간을 채울 수 없다. (그 법칙이 정말로 옳은 것인지에 대해서는 재론의 여지가 있지만, 그 법칙을 입증하는 증거가 그렇지 않은 증거보다 많으므로, 일단은 받아들이고 넘어가도록 하자.)

그러니, 자기 개발을 한답시고 여기 저기 기웃거리는 행동은 가급적 피하는 것이 좋다. 시간 관리도 '자신이 전문가가 되고자 하는 영역' 내에서 해야 한다는 소리이다. 이렇게 중심을 세우고 나면, 시간 관리를 위해서 해야 하는 일이 '무언가를 쪼개서 남는 시간을 비워야' 하는 것이 아니라, '내 일을 하되 생산적으로 할 수 있는 방법을 찾는 것'이 된다. 뭔가를 쪼개서 남는 시간을 비운다는 말에는 '그 시간에 뭔가 다른 일을 한다'라는 뉘앙스가 배어 있다. 그 남는 시간에 뭔가를 하기 위해서는 자신이 하던 일을 잠시 멈추어야 하고, 몰입을 중단해야 한다. 그러면 전반적인 생산성은 저하된다. 그렇게 하지 말자는 것이다. 

그리고 그렇게 되면, 자기 개발과 자신이 처한 조직의 생산성을 높인다는 두 가지 목표가 어느 정도 일치하게 된다. '나의 비전이 곧 조직의 비전'이 된다는 뜻이다. 

자. 그러면 이제 시간 관리의 문제를 여기서 부터 다시 되짚어 보자. 

내가 나의 능력을 향상시키기 위해 시간을 일부러 낼 필요가 없다는 말은, 얼핏 들으면 굉장히 웃기는 소리이다. 우리는 시간을 내서 책을 읽고, 시간을 내서 다른 프로그래밍 언어를 공부한다. 어떻게든 시간을 내어 뭔가를 하고 있는 사람에게 시간을 때로 내지 말라니? 진짜 웃기는 소리 아닌가?

하지만 웃기 전에, 먼저 자신에게 진지하게 물어 볼 필요가 있다. 

"왜 시간을 내서 그 짓을 하고 있나요?"

내가 시간을 내서 하고 있는 짓이 자신이 하고 있는 일, 혹은 자신이 궁극적으로 지향하는 바에 아무 관련이 없는 일이라면, 아마 본인은 그 일을 '재미삼아' 하고 있다고 생각할 것이다. '재미삼아' 혹은 '취미삼아' 하는 일은 자기 개발, 그러니까 자기를 개발해서 이루려고 하는 궁극적인 목표와는 사실 별 관련이 없다. 

많은 박사과정 학생이 취미로 기타를 치거나 사진을 찍는다. 프로그래머들도 마찬가지이다. 이런 영역의 일은 취미 생활이긴 한데 자기 개발이라고 보긴 좀 뭣하다. 여기까지 들으신 분이라면 필자가 '자기 개발'이라고 지칭하는 일들의 범위가 굉장히 협소하다는 것을 눈치채셨을 것이다. 나는 자기 개발은 '본인을 전문가의 길로 이끌기 위해 이루어지는 유무형의 활동'이라고 생각한다. 그 이외의 활동은 그냥 자신이 할 수 있는 일 목록에 뭔가 다른 것을 추가하는 것일 뿐이다. 

자. 그렇다면 다시 원래의 질문으로 돌아가 보자. 

"대체 시간 관리는 어떻게 해야 하나?"

자기 개발을 위한 시간은 쪼개서 찾는 것이 아니라고 했었다. 자신이 전문가가 되기 위해 하고 있는 유무형의 활동에 들어가는 시간을 잘 관리하는 것으로 충분하다. '관리'는 '나누기'가 아니다. 굳이 나누기에 해당하는 부분을 찾으라면, '엄한 짓'과 '그렇지 않은 짓'을 구분하고, '엄한 짓'에 들어가는 시간을 좀 줄이겠다고 생각하는 것 정도로 충분하다. 

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

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

  1. ^^ Killing Time 이 아니라, Saving Time이 되어야 하는 걸 알지만...
    어느 한순간 정신의 끈을 놓으면 멍하니 시간을 보내고 있는 나를 느낍니다.

    제가 상당히 산만한 편이라서 엄한 일들에 많은 시간과 노력을 기울이는 편인데,
    이 글을 읽고나니 뜨끔하네요. ^^; 제가 잘할 수 있는 일들을 찾아서 거기에 집중해야겠습니다.

    힘차고 보람찬 12월 보내세요!!

    2009.12.01 02:29 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. sklim

    10분단위로 컨텍스트 스위칭이 일어나는 저로선;;; 다음편 기대해 봅니다.

    2009.12.01 14:39 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. '무언가를 쪼개서 남는 시간을 비워야' 하는 것이 아니라, '내 일을 하되 생산적으로 할 수 있는 방법을 찾는 것'이 된다.

    .....

    우우 저는 스스로를 바보로 만들고 있었던 것은 아닐까요... 다시 한번 생각해 봅니다 ^^

    2009.12.02 15:52 신고 [ ADDR : EDIT/ DEL : REPLY ]
  4. 강석렬

    중요한건 아니지만 자기개발이 아니라 자기계발 아닌가요...?

    위 질문은 오늘 처음으로 블로그에 들어왔다가 좋은 글들이 많아 관심을 받아보고 싶어서 해본 질문이니 이해해 주시기 바랍니다...^^;

    2010.09.22 21:36 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 좋은 지적 감사합니다.

      물리적으로 ‘개척하거나 이루어 내는 것’은 ‘개발’이고, 인간의 내면에 잠재되어 있는 것을 ‘이끌어 내는 것’은 ‘계발’이다.
      그런데 인간의 내면과 관련되어 있다고 해서 모두 ‘계발’이라고 해야 하는 것은 아니다. ‘지식이나 재능을 발달하게 하는 것’은 ‘개발’이라고 해야 한다. 즉 ‘개발’은 인위적인 학습 등의 방법으로 있는 재능을 키워 주는 것이고, ‘계발’은 잠재되어 있거나, 있는지 없는지 알지 못하는 재능을 깨우쳐 주는 것이다. ‘능력 개발’이라고 하면 현재 가지고 있는 능력을 더욱 발전시키는 것이고, ‘능력 계발’은 아직 발현되지 않은 잠재적인 능력을 나타나게 하는 것이다.
      이 밖에도 산업이나 경제를 발전시키는 것은 ‘산업 개발’, ‘경제 개발’이라고 해야 하고, 새로운 물건이나 생각 등을 만드는 것 역시 ‘신제품 개발’, ‘프로그램 개발’이라고 해야 한다.

      2010.09.24 22:55 신고 [ ADDR : EDIT/ DEL ]