man-month-myth-cover.jpeg

전체적으로는

정반합이라는 단어가 떠오르는 책이었다. 저자는 소프트웨어 분야가 근본적으로 복잡성이 증가할 수 밖에 없는 구조를 가지고 있는 분야라며 충분한 근거를 들어 이야기하였다. 그리고 소프트웨어 분야 종사자들 모두가 머리를 싸매는 이 복잡성을 해결해 줄, 물리학으로 치면 통일장 이론과도 같은 하나의 명쾌한 답(silver bullet)은 존재하지 않는다고 이야기하였다.

그러나 다른 많은 엔지니어들은 그에 대해 반론을 제기했다. 조작할 수 없다는 사실에 반례를 들면서 저자가 언급한 소프트웨어의 본질적인 복합성에 대한 해답을 내놓기도 하였고, 본질이 아닌 부수적인 복합성에 대한 해답을 내놓기도 하였다. 그리고 그것들은 현 시대에서 프로그래밍을 하는 우리들의 삶에 자연스럽게 녹아져있다.

그리고 더 이전에도 엔지니어들은 그 복잡성을 줄이기 위한 어마어마한 노력들을 하였다. 그 결과물은 우리가 지금 숨쉬듯 자연스레 사용하고 있는 것들이다. 일괄 처리 시스템에서 round robin scheduling algorithm 으로 대표되는 시분할 처리 시스템의 등장, 고수준 언어의 개발, UNIXstdio 같은 표준형 개발규격의 탄생 등이 바로 그것이다. xerox labs 등에서 창발한 프로그래밍 패러다임인 OOP 도 포함될 것이다.

복잡성을 줄이기 위한 노력들, 해결할 수 없는 본질적인 복잡성이 존재한다는 저자의 주장, 저자의 주장에 반박을 하기 위해 더 나은 대안을 제시하는 사람들, 그리고 그 사람들의 대안을 합리성을 근거로 검토하여 인정하고 반박하여 더 나은 방향을 제시하는 저자와 사람들의 모습이 잘 담겨져있는 책이었다.


책의 내용을 살펴보며

man-month myth

우선 공감이 가는 내용들이 상당히 많았다. 특히 이 책의 제목인 man-month myth 와 직접적으로 연관된 초반부 내용부터가 가장 인상깊었다. ‘진척이 되지 않는 프로젝트에 무작정 사람을 더 투입하는 행위는 해당 프로젝트를 오히려 더 망친다’ 는 주장과 근거들이 담긴 단락부터 정말 흥미진진하고 공감을 해가며 읽었었다.

거기에 저자 본인의 경험법칙과 이런저런 근거들을 복합적으로 적용한, ‘설계에 30%, 구현에 20%, 초안 테스트에 25%, 최종 테스트에 25%를 할당하는 것이 썩 괜찮았다’ 라는 이야기엔 정말 고개를 끄덕이게 되었다. 추가로, 소프트웨어는 시간이 흐르고 기능이 추가되며 유지보수를 거치는 과정 속에서 본질적으로 복잡성이 확대될 수 밖에 없다는 의견에도 상담히 동감했다.

ready to throw away

이 부분 또한 공감가는 부분이었다. 예전에 테슬라와 관련된 techcrunch 의 칼럼 중 봤던 ‘비행중인 비행기의 부품을 고친다’ 라는 말을 항상 기억하면서 소프트웨어라는 건 이름(soft + ware)에 걸맞게 변화란 어쩔 수 없구나 라고 생각하고 있었는데, 이 부분의 표현은 더욱 직설적이었다. ‘버릴 준비를 하라’ 라니.

그러나 이 단락을 읽어보면 읽어볼 수록, 너무 맞는 말이라는 생각이 들었다.

그러므로 우리가 해야 할 질문은 파일럿 시스템을 만든 뒤에 버릴 것이냐 말 것이냐가 아니다. 그 일은 어차피 일어날 것이다. 버릴 시스템을 만들기 위해 계획을 미리 세울 것인가, 아니면 그것을 고객에게 납품하겠다고 약속할 것인가 이다.

파일럿 시스템은 만들어진 후에 폐기되어야 하고, 변화된 발상으로 재설계하는 일이 불가피하단 것을 인지했다면, 변화라는 현상자체를 직면하는것이 도움이 된다.

널리 쓰이는 프로그램을 유지보수 하는 비용은 통상 개발비용의 40% 혹은 그 이상이다. 이 비용은 놀랍게도 사용자의 수에 영향을 크게 받는다. 사용자가 많을수록 더 많은 버그가 발견되는 것이다.

특히 이 부분이 정말 공감이 갔다. 어차피 일어날 것이고, 소프트웨어의 유지보수와 기능개선은 또 다른 유지보수와 기능개선을 낳을 수 밖에 없는 일이기에 변화를 인정할 수 밖에 없다는 이야기.