우리는 왜 프로그래밍을 하는가?
Frederick은 "창조의 즐거움", "다른 이에게 유용함을 제공", "복잡한 설계와 그것의 구현체가 동작하는 것을 바라볼 때의 즐거움", "지속적인 배움", "유연하고 풍부한 표현 수단으로 작업하는 것" 의 5가지 이유를 제시했다. 나 역시 프로그래밍 활동의 창조적인 면에 이끌려 프로그래밍의 길을 걷고 있지만, 확실히 다른 공학 분야와 구별되는 점을 들자면 위 이유 중 마지막을 들 수 있다. 다른 이유들은 다른 공학 활동에도 해당하는 이야기이지만, (2022년 현재) 컴퓨터만 있으면 누구든 프로그램을 설계하고, 돌아가는 결과물을 만들 수 있다는 것이 프로그래밍의 주요한 특징이자 매력이다.
막 프로그래밍에 입문한 초심자들은 이러한 희망찬 꿈을 가지며 살 테지만, 몇 십 년간 시스템 프로그래밍을 해 온 Frederick은 현역 개발자들이 맞이할 무시무시한 늪의 이야기를 들려준다. 마음대로 창작을 할 수 없거나 나의 창조물이 시대에 뒤쳐지고 쓸모없는 것으로 치부된다면 정말 슬픈 일일 것이다.
소프트웨어 개발 일정은 초기에 낙관적으로 생각하며 일정을 정하는 일이 많기 때문에 일정이 밀리는 일이 허다하다고 한다. 이 때 관리자들은 man-month 미신이라는 믿음을 가지고 추가로 개발 인력을 투입하게 된다. man-month란 해야 할 작업량을 (인력)x(시간) 으로 계산하는 것이다. 예를 들어 4명이 5개월 간 작업해서 완료할 수 있는 20 man-month 짜리 작업이 있으면 10명으로 이루어진 팀으로는 2개월만에 개발을 끝낼 수 있다는 식으로 계산하는 것이다.
10명 이상으로 이루어진 팀에서 일을 해 본 적이 있는 사람이라면 2-3명이 있는 팀과 비교해서 커뮤니케이션 비용이 linear하게 늘어나지 않는다는 것을 알 것이다. 각 part가 모두 조율이 이루어져야 한다면
투입된 인원을 프로젝트에 맞게 교육하고, 일할 준비를 시키는 것도 기존 팀이 해야 할 새로운 일이다. 필요한 시간은
늦어지는 일정에 인원을 투입하며 일이 해결되기를 기도하는 대신, man-month 미신을 버리고, 수립된 일정도 버리고, 비대해진 팀도 구조 조정을 하는 과감한 결정을 내려야 프로젝트를 늪에서 건질 수 있을 것이다.