요즘에 The Mythical Man-Month라는 소프트웨어 프로젝트 관리에 대한 문제를 소프트웨어 공학적인 측면에서 접근하여 에세이 식으로 쓰여진 책을 읽고 있다. 좀 오래전에 쓰여진 책이라 그런지 아니면 기술 문서가 아닌 에세이 형식으로 쓰여져서 그런지 몰라도 저자의 영어 문장 구사에 상당한 기교가 들어가 있는듯 하여 좀 이해하는데 어려움이 있어서 스스로 내용도 정리하고, 책을 읽기 싫어하는 많은 사람들을 위해 블로그에 그 내용을 간단히 정리하여 연재 하기로 했다. 이 책을 읽어보신 분께서는 해석이 잘못되었다고 생각하시는 것은 지적은 환영합니다~



Chapter 1 The tar pit
선사시대의 한 장면을 떠오르면 아마도, 타르구덩이에 빠져서 헤어나오지 못하는 짐승을 떠오르는 것 처럼 생생 장면은 없을 것이다. 그 짐승이 얼마나 힘이 세든지 타르 구덩이에서 헤어나오려고 하면 할 수록 타르 구덩이에 깊숙이 빠져들게 된다. 소프트웨어 개발 프로젝트도 이와 같다. 프로젝트 진행에 문제가 생겨 해결하려고 발버둥치면 칠수록 더욱 엉망이 되어 결국 실패하게 된다. 왜그럴까? 우리의 이런 문제를 해결하기 위해서는 먼저 소프트웨어 개발이 무엇인지 살펴보고 그 내면의 특성을 잘 이해해야 한다.

누구든지 한번쯤 차고 안에서 훌륭한 소프트웨어를 개발한 듀오들에 대한 이야기를 들어봤을 것이다. 하지만 이렇게 훌륭한 프로그래밍 듀오들이 존재함에도 불구하고, 현실에서는 그런 인력들로 소프트웨어 개발 인력이 대체되지 않는 이유는 무엇일까?

차고 출신의 프로그래밍 듀오가 개발한 소프트웨어는 그저 프로그램에 지나지 않는다. 프로그램이 더 많은 수익을 창출 두가지 방법으로 가능한데, 첫번째 방법은 프로그램을 어떤 플랫폼에서든지 돌아갈 수 있는 범용성을 갖게 만드는 것이다. 그리고, 언제든지 프로그램을 수정하거나 개선할 수 있도록 문서화가 잘 되어 있어야 한다. 이런 프로그램은 우리는 프로그램 패키지라고 한다. 두번째 방법은 input과 output에 대한 인터페이를 잘 정의 한 후에 컴포넌트화 시켜서 그 재활용성을 증대하는 방법이다. 각 방법은 프로그램의 가치를 3배까지 증대 시킬 수 있다고 보는데, 이 두가지 방법을 모두 적용하면 그 가치를 9배로 증가시킬 수 있다. 그렇다면 이런 소프트웨어 개발이이란 도대체 어떤것인가?

  1. 소프트웨어 개발은 인간의 창작욕구를 충족시켜준다.
  2. 사람들에게 유용한 소프트웨어를 만드는 것은 우리에게 뿌듯함을 준다.
  3. 소프트웨어 개발은 문제풀이와 비슷해 문제를 해결하면 큰 성취감을 준다.
  4. 소프트웨어를 개발하면 늘 새로운 것을 배울 수 있게 된다.
  5. 소프트웨어 개발은 매우 손쉽게 할 수 있다.

우리에게 이렇게 즐거움을 선사하는 소프트웨어 개발이 왜 그렇게 어려운가?

  1. 소프트웨어는 완벽해야 하지만 우리는 완벽하지 않다.
  2. 우리는 어떤 소프트웨어를 개발해야 하는지 잘 이해하지 못한다.
  3. 다른 사람이 개발한 소프트웨어에 의존하기도 한다.
  4. 창작은 힘들지만, 그것을 현실화 하는것은 많은 인내가 필요로 한다.
  5. 디버깅 작업은 버그가 줄어들 수록 시간이 더 오래걸린다.
  6. 참신했던 아이디어도 개발을 완료하면 이미 진부한 것이 되기도 한다.


이렇게 소프트웨어 개발은 우리에게 즐거움도 주지만 어려움도 준다.

Posted by Dansoonie