구본형 변화경영연구소

연구원

칼럼

연구원들이

  • 불씨
  • 조회 수 285
  • 댓글 수 0
  • 추천 수 0
2019년 2월 23일 23시 17분 등록
바위를 옮기는 일은 가능한가라는 질문에 대답은 '그렇다'이다. 전제 조건은 '조건이 없다면'이다.

스티브 멕코넬은 저서 <프로페셔널 소프트웨어 개발>에서 소프트웨어를 만드는 것과 바위를 옮기는 것의 유사성에 대해 이야기한다. 당신이 고대 이집트에서 파라오의 명령으로 피라미드를 건설하는 감독관이라고 가정하자. 바위 하나의 무게는 수십톤에 이른다. 이 큰 바위를 강가에서 사막의 공사현장까지 운반해야 한다. 바위를 옮기는 일은 엄청난 노동력을 필요로 한다. 그렇기에 어디로 옮길 것인지, 어떻게 옮길 것인지에 대한 명확한 사전 계획이 짜여진 후에 실제 행동에 들어가는 것이 마땅하다. 지렛대와 통나무발판을 이용해서 매일매일 꾸준히 바위를 옮겨야 한다. 한번에 움직일 수 있는 거리는 제한적이므로, 하루아침에 커다란 바위를 강가에서 피라미드 건설현장으로 옮길수 있다는 망상은 하지 않을 것이다.

마찬가지로 소스코드를 바위에 비유한다면 마지막 순간에 온힘을 다한다고 해도 채 반도 개발되지 않은 소프트웨어가 하루 아침에 완성될 수 있다는 허황된 희망은 갖지 않을 것이다. 하지만 많은 개발팀들이 프로젝트 초기에는 거의 긴박감을 느끼지 못한 채로 시간을 낭비하다가 프로젝트를 끝내야 하는 기한이 다가오면 절망에 사로잡혀 움직이지 않는 바위를 밀다가 자포자기 상태에 빠지게 된다. 멕코넬은 이것을 '마지막 순간 증후군'이라는 말로 표현한다.

이런 '마지막 순간 증후군'에 걸릴수 밖에 없는 이유 중 하나는 제대로 된 설계가 없이 무작정 바위를 밀면서 프로젝트를 시작하기 때문이다. 멕코넬은 이것을 일단 작성하고 고쳐보는 개발(Code and Fix development)라고 부른다. 일단 무작정 바위를 옮겨놨다가 잘못된 곳으로 옮겼음을 깨달으면 바위를 다시 옮기는 식이다. 시도하고 문제가 있으면 다시 고친다(Trial & Error). 이를 한국의 개발자 용어로 '삽질'이라고 부른다. 유사어로 '맨땅에 헤딩하기'가 있다. 최고의 경험적 방법이지만, 안타깝게도 회사의 고위층에게 이런 구석기시대의 비효율을 감내해줄만한 인내가 전혀 없다는 것이 문제다.

대부분 한번 바위를 옮기고 나면, 잘못된 곳으로 옮긴 바위덩어리를 되돌리거나 방향을 트는 것은 매우 어려운 일이다. 결국 채석장에서 새로운 바위를 가져다가 다시 옮기게 된다. 자신들이 지성의 결정체라고 자부하는 자존심 강한 엔지니어들이 어찌하여 이런 어리석은 행태를 반복하는 것일까? 가장 큰 이유는 그것이 가장 쉬운 방법이기 때문이다. 간단하다. 그냥 바위를 들어다 옮기면 된다. 잘못 옮겼으면 다른 바위를 옮기면 된다. 이런 바보같은 행태를 반복할 수 밖에 없는 또 다른 이유는 조급증에 시달리는 관리자와 경영진에게 물리적인 진행상황을 보여줄 수 있는 고육지책이기 때문이기도 하다.

또하나의 이유는 경험과 이론이 부족한 경우다. 모자라고 경험없는 수많은 개발자들끼리 머리를 맞대고 고민해봤자, 경험있고 이론을 갖춘 단 한명의 개발자의 기획과 설계를 따라갈 수는 없다. 중요한 프로젝트의 경우 외부로부터의 아웃소싱 또는 해당 분야의 이론을 갖춘 경험있는 개발자 채용은 반드시 필요하다. 회사에 중요하지 않는 프로젝트가 어디 있겠냐만은, 이런 전사적인 지원없이 모자란 사랃들끼리 머리를 맞대고 시행착오를 거치는 프로젝트가 적지 않다. 이 경우 삽질은 피할 수 없다. 가능한 미리 많은 삽질을 해봐야 하며, 다양한 삽질을 해봐야 한다.

사실 삽질은 체험으로 배우는 가장 확실한 방법이기도 하다. 실제 해보지 않고서는 알 수 없다는 주장은 어느정도 진실이다. 허나 무분별하게 맨땅에 헤딩하는 것을 경계하고자 한다면, 우리는 생각이라는 것을 먼저 해야만 한다. 철학자 하이데거가 말한대로 생각이라는 것은 익숙하지 않은 상황과 조우할 때 생겨난다. 익숙하지 않은 것들을 많이 해볼수록 생각은 생겨나고 삽질은 정교해진다. 단순히 무의식적으로 똑같은 삽질을 반복해봤자 나오는 것은 흙덩어리뿐이다. 버그를 잡는다고 똑같은 코드에 printf만 넣는 것을 반복할 것이 아니라, 디버거도 써보고 다른 모듈과의 연계성도 검토해봐야 한다. 익숙하지 않더라도 새로운 시도로써 삽질의 범위를 넓히고, 동시에 정교한 타겟팅 능력을 길러야 한다. 삽질을 가장 잘 하는 사람은 한번의 삽질로 가장 많은 땅을 팔 수 있는 사람이 아니다. 가장 삽질을 잘 하는 사람은 어느 곳에 삽을 대야 하는지 아는 사람이다. 그것은 경험과 이론이 적절히 결합되어야 가능한 경지다. 소프트웨어 개발의 절반은 삽질이지만, 제대로 된 삽질은 고도의 기술과 예술적 경지에 이르러야 가능한 일이다.
IP *.121.156.75

덧글 입력박스
유동형 덧글모듈