Thoughts2014.01.08 09:09

예전에 '프로그래머를 위한 시간 관리의 법칙'이라는 글을 쓴 적이 있습니다. 지금 보니 좀 끔찍할 정도로 흥분해서 쓴 글이긴 하지만, 대체로 적은 그대로 실천하려고 노력했던 것 같습니다. 그랬던 덕분인지 뭔지는 잘 모르겠습니다만, 지난 10년간 TOEIC 990점의 성적, 8권의 번역서, 3회의 직원 포상 (우수직원상 포함) 등등의 실적을 올리고, 나름대로 인정받는 직원으로 생활하고 있습니다. 주 개발자로서 직접 개발한 시스템 3건도 있고, 그 중에 한 건은 지금 오픈 소스로 공개되어서 전세계 개발자의 반응을 기다리고 있습니다. 지난 10년간 야근을 한 횟수는 손에 꼽을 정도입니다. 



SEE ALSO: 프로그래머를 위한 시간 관리 법칙 [1] [2] [3] [4] [5] [6] [7] [8]


제가 생각하는 이 시간관리의 법칙을 간단히 요약하면 다음과 같습니다. 자세한 것은 위에 원문 링크를 걸어두었으니 참고하시기 바랍니다. 


- - - 


1. 회사에서 일하는 시간이 곧 자기개발 시간이다 


회사에서 하는 활동들이 여러분을 성장시키지 못한다면, 회사에서 일하는 시간은 헛된 것입니다. 휴식시간을 쪼개어 스스로를 성장시키려고 하는 것은 그다지 유익하지 못합니다. 사람은 어차피 휴식이 필요한 유기체니까요. 회사에서 하는 모든 활동을 개선하고 또 개선하려고 노력하세요. 그러면 휴식 시간은 온전히 휴식에 바칠 수 있습니다. 야근이 필요없게 됨은 물론입니다. 일부러 시간을 내서 자기를 성장시키려고 하지 마시고, 쓸데없는 활동을 줄이고 모든 일을 효율적으로 만들어서 자기를 성장시키세요. 


2. 결합 가능한 활동들을 합쳐서 효율성을 높여라 


여러분이 하는 이런 저런 활동들 가운데에는 합칠 수 있는 것들이 있습니다. 자신이 전문가가 되고자 하는 영역에서 가장 중요한 활동들이 무엇인지 찾으시고, 그 활동들을 합쳐서 보다 효과적으로 만들 수 있는 방법이 있는지 고민하세요. 


1. 성취 목표를 뚜렷이 하라
2. 목표를 달성하기 위해 필요한 활동을 식별하라
3. 활동간 우선 순위를 정하고, 엄한 활동은 제거하라
4. 활동 간 결합 가능성을 평가하고, 결합 가능한 것은 결합하라
5. 결합한 활동을 수행하라


3. 지금 하는 일에서 더 많은 것을 끌어낼 방법은 없는지 고민하라


평생 개발자로 살고 싶다면 개발을 재미있게 해야 하고, 자신에게 주어지는 모든 일을 기술 향상의 기회로 삼아야 합니다. 그렇게 하지 않으면 '저 친구에게는 프로그래밍을 시키는 것이 가장 좋아'라는 평판을 얻을 수 없습니다. 끊임없이 혁신을 만들어 내고 시험하는 개발자가 되도록 합시다. 그러면 여러분은 평판 뿐 아니라, 시간도 지배할 수 있습니다. 결국 여러분이 만들어 낸 혁신이 여러분의 시간을 아껴줄 것이니까요. 


4. 도메인 지식에 집중하라 


결국 더 큰 개발자가 되도록 만드는 것은 도메인 지식입니다. 효과적인 코드를 만들어 내는 기술도 중요하지만, 그 코드가 적용될 기술 영역에 대해 좀 더 깊이 있는 지식을 갖추는 것이 훨씬 더 중요합니다. 그런 지식이 없이는 쓸만한 코드도 만들어 낼 수 없습니다. 여러분의 시간은 그 목표를 향해서 조직되어야 합니다. 


- - - 


두서없이 이야기하였습니다만, 제가 말하고자 하는 요지는 충분히 전달되었으리라 생각합니다. 물론 너무 과격해서 과연 이런 실천법이 현실에 맞나 의아햘 분도 계시리라 생각합니다만. 아무튼 더 자세한 내용은 이 글에 걸어둔 원문 링크를 참고해 주세요. 감사합니다. :-) 



저작자 표시 비영리 변경 금지
신고
Posted by 이병준

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

  1. 비단 개발자가 아니더라도 명심해야 할 말씀이로군요. 새겨듣겠습니다. 고맙습니다. ^^

    2014.01.08 09:35 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. 하고 있던 단순한 업무에 지쳐있던 저에게 자극이 되는 글이네요~좋은 글 감사합니다.
    저 한가지 궁금한 점이 있는데요
    마지막부분에 도메인 지식에 초점을 두고 나아가야 한다고 하신 말씀이에서요....
    최근에 기업들 채용 경향이나 글로벌 it기업들(아마존이나 구글같은)의 채용과정을 보면 효율적으로 코드를 작성하는 과정(자료구조나 알고리즘)을 중시한다고 하더라구요....
    그런데 위와 같이 말씀하신 이유가 무엇인지 궁금하네요


    참~번역하신 이펙티브 자바 잘보고 있습니다~^^
    종종 놀러올께요
    ㅎㅎ

    2015.11.12 20:46 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 자료구조나 알고리즘을 중시하는 이유는 그것이 기본이기 때문이구요. 실제로 업무를 시작하면 이제 그 업무에 관계된 도메인 지식이 가장 중요하죠. 기본이 없이는 도메인 지식 습득도 어렵다는 것은 더 말할 필요는 없겠습니다. :-)

      2015.11.14 09:04 신고 [ ADDR : EDIT/ DEL ]

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 ]