2010년 4월 28일 수요일
수사법
놀고먹으면서 일 잘하는 방법 - 우리의 Agile 실험
"놀고먹으면서 일 잘하는 방법은 없을까?"
제가 입사한 후 근 9개월동안 알게 된 IT 현실은 다음과 같습니다.
1) 개발자는 노동강도가 세다. 그들에겐 밤도, 주말도 존재하지 않는다. 왜냐면...
2) 대부분의 개발자들의 업무가 과중하고 업무를 처리하는 방식이 비 효율적이기 때문이다.
(주 업무의 70% 이상이 유지보수 = 버그잡기 이고 신규개발에 의한 과중은 얼마 안되었습니다.)
3) 개발자들도 이 사실을 알고있다.
4) 하지만 여러가지 이유를 들어 섣불리 개선하지 못하고 있다.
5) 그리고 타인과 조직이 잘못되어 있다고 한탄한다.
약간 다른 이야기지만, 저는 몇년전부터 "효율적으로 일하는방법 = 놀면서 일하는 방법"을 고민해 왔습니다.
사실 이러한 저의 고민은 저의 학창시절의 고민에서 시작되었습니다.
저의 학창시절 소원은 1등을 해보는 것이었습니다. 저는 5시간만 자고 공부만 했지만 항상 8시간 이상 자고 친구들과 자주 스타크래프트를 하는 1등이 항상 부러웠습니다. 시험에서의 퍼포먼스와 삶에서의 퍼포먼스 양쪽을 다 잡고있는 그가 매우 부럽고 시기했었습니다. 그리고 저는 "천재"가 아니기 때문에 그러한 것이 불가능할 것이다라고 단정지었었죠.
하지만 대학들어와도 바로 옆 친구가 시험기간동안 게임을 즐기면서도 항상 평점은 4.0 이상 이었던것에 비해, 저는 딱히 노는것도 없이 밤새는데 3.5를 간신히 넘는 상황이 발생하자 그동안 제가 해온 공부 = 일의 방식이 매우 비 합리적이고 아둔하지 않았나 생각하게 되었습니다.
무엇에 차이가 있나 저는 그때부터 잘하는 녀석들을 붙잡고 물어보고 저와 비교하는 일을 시작했습니다. 그 과정은 매우 괴로웠습니다. "나도 이렇게 진작 했다면 좀더 나았을텐데" 라는 생각과 "내가 멍청했다." 라는 자괴감 때문에 많이 괴로웠거든요. 무조건 시간을 오래 쏟는다고 성능이 나아지지 않는것인데 저는 그저 인내하고 파기만 하면 모든게 해결될줄 알았던 것입니다.
아래의 링크는 유명인사들이 왜 다른 평범한 사람들과 같은 시간을 보내면서도 탁월한 성과를 올릴수 있는가에 대한 이야기입니다.
http://lifedev.net/2008/03/10-ways-historys-finest-kept-focused-at-work/
정리하자면, 그들은 자신이 일하는 방식에 대한 그들만의 원칙이 있고. 결코 오래 엉덩이를 붙이고 있는것이 능사가 아니라는 것을 알고 있었으며 짧은시간동안 최대한 문제에 집중하고 나머지 시간은 몸과 뇌를 놀리는데 썼다는 것입니다.
역시 학창시절에 저보다 우월한 녀석들은 "모든 일을 줄기차게 많이 하는것" 보다 "중요한 일에 단시간 집중하여 탁월한 성과를 내는것"을 선호하고, 각자 그렇게 하는 자기만의 최적화된 방법을 연구하고 체득하고 있었다는 겁니다.
결국, "놀면서 일 잘하는 방법에 대한 패턴"은 존재했다고 생각합니다.
그래서 저는 저만의 방법을 찾아 연구했고 이를 간단히 실험해 보았습니다. 공부의 원칙과 시간을 세우고 제가 잘하는 "그림/동영상 기억법"을 이용해서 "숲에서 나무로 훓어 내려가는"공부를 해 보았습니다. 그리고 공부시간 외의 시간은 음악을 듣고 군것질을 하고 잡담을 하고 만화책을 보며 게임을 했습니다. 이전에 시험기간동안 공부에만 투자한 시간이 하루 10시간 이라면 이를 5시간까지 줄였습니다.
그 결과는 생각 외였습니다. 저는 이전보다 많은 시간을 공부에 할애하지 않아도 많은 양을 기억할수 있었고 (일부는 지금도 기억합니다.) 성적도 0.3포인트 이상 더 잘 나왔던 것입니다.
다시 회사 이야기로 돌아가서, 수많은 개발자들이 오늘도 죽음의 행진을 하고 있습니다. 아직 초년때에 이 죽음의 대열에 막 발을 담그고 "정말 대한민국에서의 회사생활과 IT엔 답이 없는가?" 하며 괴로워 하고 있을때 한 상사분께서 다음과 같은 조언을 몇가지 해주었었습니다.
1) 주요이슈(issue)는 정리되어야 한다. (잠재적인것도 포함)
2) 문제는 잘게 쪼개어야 한다.
3) 히스토리는 기록되어야 한다.
4) (상사가 보기에)중요한 몇가지에 우선 집중하라.
5) 문서와 코딩은 같이 가야한다.
6) 설계와 코드는 자주 리뷰되어야 한다.
7) 설계는 절대 폼잡지 말고 실용적이어야 한다.
8) 프로세스를 세우고 이에 맞추어 일하라.
9) 일 할땐 하되, 자주 쉬어라.
10) 개선할것은 시간을 들여서라도 자주 개선하고
11) 위 모든것은 보고하여 실적화가 가능한 형태로 준비하라.
저는 이러한 조언이 그분의 직장생활 10년동안에 나온 귀중한 경험이자 하나의 패턴이라고 생각했습니다. 하지만 그 상사분도 이러한 것들을 제대로 실천하고 계시지는 못하고 계셨습니다. 그래서 저는 여기에 아래와 같은 약간의 변형을 가하고 이를 구체적으로 패턴화 하고 실천하는 작업에 들어갔습니다.
12) 모든 업무는 파이프라인처럼 병렬적으로 진행하도록 한다.
(신속한 태스크 스위칭을 통해서)
저는 스프레드쉬트로 각 업무에 맞는 문서를 만들었고, 오늘의 프로세스를 세워 이를 적어두고 하나씩 실천했습니다. 처음에는 상당히 귀찮을 뿐더러, 번거롭기 그지 없었지만. 이것이 몇달이상 쌓이게 되자 위 11가지 사실을 어느정도 만족시킬수 있는 자료가 되고, 그 자료를 근거로 RISK를 예측하고, 문제에 당황하지 않으며, 한번 해결한 문제가 두번 열리지 않게 하고 남는시간에 중요한 문제에 포커스 하며, 결국 단위시간동안 이전보다 좀더 많은 일을 해결할 수 있음을 알게 되었습니다.
통계를 내본결과. 적용전에 하루 3개 정도의 업무를 해결했었으나 이후 5개 이상 최대 하루 10개까지 완료했다는 사실을 발견했기 때문입니다. (이를 가능하게 해준 Franklyn Planner에게 감사~:) )
결국 개발자들이 겪는 수많은 문제들이 정말 IT란 것이 일이 단순히 많아서가 아니라, 과거에 처리한 Bug가 다시 reopen되거나 대충한 설계와 구현때문에 요구사항이 바뀔때 대응을 못하고, 정작 이러한 모든 일에 대한 전체적인 정리된 문서나 설계서가 없기 때문에 문제원인 파악과 대책마련에 시간이 걸린다는 것을 깨닭게 되었습니다. (결국 인간의 기억력에는 한계가 있는데, 많이들 이를 간과합니다.)
문제가 생기지 않는다는 것은, 그 문제를 끊임없이 관리하기 때문이라는 사실도요.
저는 주로 유지보수일을 하고 있었기 때문에, 신규개발만 하는 분들에게 있어서는 별로 공감이 안갈수도 있겠습니다. 그래서 저는 신규개발에도 이러한 "패턴"을 발견하고 여기서 프로세스를 만들어 이를 실천함으로서 현재와 미래의 퍼포먼스와 RISK 안전성을 높이는 작업 이 가능한지 실험해 보기로 하였습니다. 그래서 몇가지 프로세스를 만들었고 이를 실험하여 "우리의 Agile 실험" 이라는 태그를 붙여 블로그에 포스팅 하려 합니다.
그리고 저 뿐만 아니라 저 주변의 사람들도 이러한 실험을 통해서 개발에 대한 새로운 눈을 뜰수 있게 되길 소망합니다.
2010년 4월 27일 화요일
객체지향의 아름다움
[객체지향의 아름다움]
세상의 만물은 독립된 실체(엔티티)들과 이들 사이의 수평적인 관계로 구성되어 있다.
이들 만물들 사이에는 종적(수직적)인 관계를 가지고 있는 것이 아니라 횡적(수평적)인 관계에 그 바탕을 두고있다. 사람과 나무의 관계가 종적 관계가 아닌 횡적인 관계이며 생명체의 세포들 사이의 관계도 수평적인 관계이다. 세포들은 서로의 내부에는 전혀 신경 쓰지 않고 오직 표준화된 인터페이스를 통해서만
교류하며, 서로의 내부 구조는 가려 주어 완전히 캡슐화 되어 있다고 한다. 이러한 모습을 통해 모든 세포들이 자율적으로 움직이고 있다. 객체 지향은 하향식에서 나타나는 수직적인 관계가 아닌 평등에 기초한 수평적인 관계로의 변화를 의미한다.
객체 지향은 객체 각자가 독립적, 자율적이며 어느 누구에게도 일방적인 강요 없이 각자의 주어진 임무를 수행한다. 이러한 관점에서 보면 우리 주변의 자연이나 인체구조는 대단히 객체지향적이다. 사람 몸을 구성하는 세포들 사이의 관계, 장기들 사이의 관계도 수직적인 관계가 아니라 평등에 기초한 수평적인 관계이며, 이를 통해 우리 몸의 조화와 균형을 이루어 나간다. 또한 자연에 있는 세상 만물들은 독립적으로
존재하며 필요에 따라 관계를 맺고 있다.
자연 속의 개미나 벌을 보자. 그들의 일하는 모습을 보면 수직적인 구조나 감독 없이 일하는 모습을 볼 수 있다. 스스로들 알아서 능동적으로 찾아서 일을 한다. 아마도 개미나 벌들은 유전적으로 이러한 능력을 갖고 태어난 모양이다. 그들 사이에는 일방적으로 지배하는 수직적인 관계가 없고, 서로 돕고 전체를 위하여 최선을 다하는 오직 수평적인 관계만이 존재한다. 그들은 서로 도우며 조화를 이루어 나간다. 자연에 속한 모든 객체들은 서로 독립성을 유지하며, 관계를 가지고 필요에 따라 서로 교류한다. 자연이
만들어진 모습을 자세히 들여다보면 객체지향적인 개발기법이 적용된 결과물이라는 것을 파악할 수 있으며, 자연은 이들 구성원들 사이의 수평적인 관계를 통해 조화를 이루어 갈 수 있도록 만들어진 훌륭한 걸작품이다.
생물학적인 관점에서도 객체들 사이의 강요나 지배가 없는 조화와 질서가 생명체의 본질인 것처럼 인간이 만드는 시스템 개발에 있어서도 이러한 자연의 섭리가 적용된다. 소프트웨어도 다른 시스템 또는 생명체와 마찬가지로 구성 요소들이 서로 독립적인 기능을 수행하며 서로 보완적인 관계를 유지하고 균형과 조화를 이룰 때 가장 이상적인 모습을 갖게 된다. 이는 시스템의 구성요소들이 상하관계를 이루는 것이 아니라 오히려 대등 병립 관계를 가진다는 점에서, 우리에게 익숙한 기존의 구조적, 하향식 구조와는
전연 다른 모습을 띄게 된다.
객체지향은 객체에 대한 자율성과 철저한 업무분담을 원칙으로 한다. 객체지향은 시스템의 조직과 기능을 구성 요소로 보는 것이 아니라 시스템을 구성하고 있는 객체를 기본 요소로 인식한다. 시스템의 각 구성 요소인 객체가 자신의 기능을 독립적으로 수행하고, 객체들 사이의 조화와 균형이 이루어질 수 있도록
설계될 때 시스템은 이상적인 모습을 갖는다.
시스템을 구성하고 있는 객체들이 독립적, 주도적으로 움직이며, 이러한 성숙된 객체들 사이에서 원숙한 관계가 맺어질 때 진정한 객체지향 사회라 할 수 있다. 미국의 경우 책임 있는 객체들을 생성하려는 노력을 해 나가고 있는 객체 지향적 사회라고 볼 수 있으나, 사람들 사이의 원숙한 관계를 이루어나가는 데 있어서는 아직도 객체 지향 사회의 초보적인 단계라 할 수 있다.
반면 우리 사회는 상대적으로 구조적인 틀을 바탕으로 하고 있으며, 객체 지향화가 덜 되어 있는 상황에서 객체보다는 관계를 더욱 중요시하여 왔다. 그러나 이러한 구조적인 틀로는 빠른 변화를 요구하는 이 시대에 쉽게 대처하고 적응할 수 있는 힘을 배양하기 어렵다. 구조적인 틀에서는 개인의 자율성과 독립성이 극대화되기 어렵다. 사람은 누구나 다르다. 남이 나와 다르고 내가 남과 다를 수 있는 권리를 인정해 주어야 하지만 그러하지 못했던 것이 사실이다. 우리 사회도 각 개인의 창의력과 자율성이 극대화되는 객체 지향사회로 변할 때보다 많은 사람들이 행복해지고 아름다워 질 수 있을 것이다.
하향식의 구조적인 접근은 단기적인 효과를 목표로 하는 반면, 객체 지향적 접근은 장기적인 관점에서 이상적이라 할 수 있다. 이러한 객체 지향 구조는 수직적인 관계보다 효율을 극대화시킬 수 있는 장점이 있으며, 독립적으로 움직이기 때문에 변화에 적응하기 쉽게 해주어 어울림, 헤어짐 등 인간의 삶에서 나타나는 변화에 조화롭게 작용하고 균형을 찾고 순응할 수 있는 단초를 제공한다. 한편 구조적(structured)인 틀은 하향식의 체계를 가지고 있으며, 기능을 수행하기 위해 단순하고 빠르게 만들어 질 수 있다는 장점을가지고 있다. 반대로 객체지향적인 틀은 상향식의 개념을 기초로 하고 있으며, 이러한 시스템을 만들려면 시간이 걸리고 많은 에너지를 필요로 한다. 우리나라의 옛 정치구조인 왕권 중심적인 틀은 하향식의 구조적인 모습을 가지고 있다. 요사이 확산되고 있는 지방자치 제도 정치의 객체지향화이며, 이러한 객체지향적인 틀을 마련하는 데는 많은 노하우(know-how)를 필요로 한다. 우리가 겪는 지방자치제의 시행착오도 그 예라 할 수 있다.
가정에서도 객체 지향화가 이루어지려면 아버지는 가족구성원에게 많은 것을 양보하고 그들의 요구를 귀담아 들어야 한다. 이를 위해 가족들 사이의 관계가 새롭게 정의되어야 하고 이 과정에서 겪는 시행착오를 감수해야만 한다. 우리의 전통을 생각해 보면 자식들에게 강요하지 않고 지배하지 않는 부모와 자식 사이의 관계가 그리 쉬운 일이 아니다. 요사이 「고개 숙인 아버지」의 모습도 가정의 구조가 객체 지향으로 옮겨가며, 패러다임의 이동으로 겪는 혼동이 아닌가 생각된다.
인생을 살아오며 자연스러운 것보다 아름다운 것은 없다는 생각이 든다. 자연스러운 것이 아름다운 것은 객체 지향적이라는 것에서 그 이유를 찾을 수 있을 것 같다. 자연적인 것은 부드러우며 일반적으로 인간이 만든 인공적인 것보다 변화에 쉽게 적응할 수 있는 힘을 가지고 있다. 객체 지향 접근방법은 인위적인 것이 아닌 자연스러운 접근 방법이며, 우리 주변, 특히 가정, 회사, 국가 등 여러 분야에도 적용해 볼 만하다. 조직의 최소 단위라 할 수 있는 가정에서도 객체 지향화가 이루어지면 가족 모두가 행복을 누릴 수
있는 확률이 높아지며, 구성원 모두가 자신의 기량을 최대한 발휘할 수 있다. 미래의 사회는 구성원들 사이에 수직적인 관계가 아니라 수평적인 관계에 기초할 것이다.
조물주가 만든(엔지니어링한)제품인(?)사람이나 자연을 보면 객체 지향으로 만들어진 훌륭한 시스템이며 가히 걸작품이라 할 만하다. 현재 인간은 조물주가 만든 사람과 동물의 설계도면인 염색체 구조를 밝혀 내어 복제를 하기에 이르렀다. 시간이 지나면 조물주가 만든 각종 제품의 요구사항까지 규명하여, 완전한 역공학을 실현할 시대가 올지도 모른다. 다음의 질문들은 우둔하거나 인간으로서 주제넘은 질문일까? 조물주는 공학에서 요구되는 분석,설계, 구현 등 체계적인 엔지니어링과정을 거쳐 사람을 만들었을까?
사람을 설계하기 전에 요구사항을 완벽히 정의하였을까? 사람을 만들 때 요구사항을 미리 완벽히 정의하고 하향식으로 만들었을까? 필자의 생각으로는 조물주가 이렇게 사람이라는 훌륭한 시스템을 만든 것을 보면 미리 완벽히 요구사항을 정의하고 차곡차곡 엔지니어링한 것이 틀림없어 보인다. 조물주의 엔지니어링 기법을 밝히는 것은 대단히 위험스럽고 신비스러운 일일 것이다.
참고문헌 : 성공적인 소프트웨어 개발 기법 - 윤청 저
저의 객체지향 개념은 이렇습니다. = 책임과 소통을 명확히 하고 서로 느슨히 협업하게 하라
이 글은 스프링노트에서 작성되었습니다.
2010년 4월 26일 월요일
세상을 바꿀수 있는 작은 모임
김창준님 블로그 글에서 AC3 관련하여 다음의 내용 발췌 ( http://agile.egloos.com/5302614 )
Never doubt that a small group of thoughtful people could change the world. Indeed, it's the only thing that ever has.
사려깊은 사람들로 구성된 작은 모임이 세상을 바꿀 수 있다는 것을 결코 의심하지 마세요. 사실 지금까지 세상을 바꿀 수 있었던 것은 그런 모임들 뿐이었어요. --마가렛 미드(Margaret Mead)
요즘들어 이런 모임에 참가하거나 또는 만들고 싶다는 생각을 많이 합니다...
스스로 발전하기엔 한계가 크다는 것을 느끼기에...
여럿이서 발전할수 있는 작은 그룹/기회에 소속될수 있었으면 합니다.