조엘 온 소프트웨어

by SL

풍부한 프로그래밍 경험과 지식을 가지고 있으며 현업 소프트웨어 제작업체의 CEO로 활약 중인 저자 조엘은 프로그래밍과 소프트웨어 개발에 대하여 상당히 현실적인 조언을 들려준다.

2장 “기본으로 돌아가기”에서 그는 기본기를 강조하여 프로그래머라면 고급 언어로 작성한 코드가 실제 프로세서에서 실행될 때 어떤 일이 발생하는지를 이해하고 있어야 한다고 주장한다. 왜냐하면, 그렇지 않은 경우 추상화에 구멍이 뚫려서 문제가 발생했을 때 효과적으로 대처할 수 없기 때문이다. 대학생이 졸업 전에 갖춰야 할 지식 목록에 조엘이 C 언어를 넣은 것은 바로 그런 상황에 대한 염려로 이해할 수 있다.

또 34장 “세상에 쉬운 일은 없습니다”에서는 기능 설계의 중요성을 예를 통해 차분하게 설명한다. 단순히 설계를 건너뛰기 위한 변명으로 리팩토링을 들먹이다가는 “실제 작업 진행은 고사하고 소프트웨어 허상을 좇아 리팩토링만 계속하는 순환에 빠지게” 된다는 경고와 함께.

22장 “테스터를 두지 않는 (잘못된) 이유 다섯가지”에서는 테스터의 중요성을 역설한다.

프로그래머 두 명 당 테스터가 적어도 한 명은 있어야 합니다. 프로그래머는 각자 만든 빌드를 자주 던져주면서 테스터와 밀접하게 일해야 합니다.

테스터를 고용할 돈이 없다는 핑계에 대해서는 이렇게 일침을 가한다.

아무리 테스터를 찾기가 어려워도, 테스터는 프로그래머보다 쌉니다. 훨씬 쌉니다. 테스터를 고용하지 않으면 프로그래머가 테스팅을 해야 합니다. 테스터가 자꾸 빠져나가 힘들다고 생각하신다면, 연봉 10만달러 짜리 스타 프로그래머가 “출시 전에 몇 주 테스트해보라”는 말에 지쳐서 좀더 전문적인 회사로 옮겨버릴 경우를 상상해 보십시오. 스타 프로그래머를 교체하는 데 드는 비용이 얼마인지 계산해보십시오. 프로그래머 한 명 교체하는 비용으로 테스터 세 명 연봉에 구인 비용까지 충당할 수 있을 겁니다.

최근 이슈가 되고 있는 IT 업계의 관습화된 초과 근무와 연관지어 여러 가지를 생각하게 하는 대목이다.

드러난 모든 버그는 당연히 수정해야 한다고 생각하는 사람에게, 11장 “고리타분한 버그 수정”은 조금 색다른 관점을 제시할 것이다. CEO답게 조엘은 버그 수정의 경제성을 얘기한다.

버그 수정은, 수정한 버그 가치가 수정 비용을 넘어설 때만 그 의미가 있습니다.

하지만 그것이 치명적이지 않은 버그는 고치지 않아도 좋다는 뜻은 결코 아니다. 오히려 그는 -아주 특별한 상황이 아닌 다음에는- 사소한 버그를 수정하는 것도 명백한 투자 대비 효용가치가 있다는 견해를 밝히고 있으니까 말이다.

개인적으로 가장 통쾌함을 느끼며 읽었던 건, 14장 “화성인 아키텍트를 조심하세요” 였다. 진정한 핵심을 놓치고, 아키텍쳐를 위한 아키텍쳐에 빠져버린 사람을 그는 화성인으로 분류한다.

추상화를 추구하기 위해서 너무 높이 올라가면, 산소 부족에 시달릴 겁니다. 때로는 똑똑한 사상가라도 어디서 멈출지를 모르기 때문에, 모순이 생기고 전체만을 아우르는, 그저 멋지고 훌륭한, 고차원적인 성운 사진만 찍어 냅니다. 하지만 실제로 이 사진에는 어떤 의미있는 내용도 담겨있지 않습니다. 이런 사람을 화성인 아키텍트라고 부르겠습니다.

물론, 실용성이 조금 떨어지더라도 그러한 연구는 필요하고 또 그 나름의 의미를 갖는다고 보지만, 조엘은 철저하게 실용성의 기준에서 비판한다. 아마도 쓸데없이 과장된 마케팅 수사에 지쳤던 게 아닐까.

화성인 아키텍트는, 해결하면 도움이 되는 문제점보다는, 풀 수 있을 것 같은 문제점만을 해결한다는 점을 명심하세요. (중략) 제발 제가 옛날에 할 수 없었던 일을 가능하게 해주는 신기술을 알려주세요. 위대한 화성인 여러분, 앞으로는 화성에서 그냥 조용히 지내시면서 더 이상 황금같은 제 시간을 낭비하지 말아주세요.

37장 “전략 메모II: 닭이 먼저냐, 달걀이 먼저냐”와 38장 “전략 메모 III: 나 다시 돌아갈래!”에서는 마이크로소프트가 치열한 소프트웨어 경쟁에서 승리할 수 있었던 비밀을 들려준다. IBM PC의 소프트웨어 플랫폼 시장에서 PC-DOS가 경쟁자들을 물리칠 수 있었던, 또 DOS에서 윈도우 3.x를 거쳐 윈도우 95로 성공적으로 이주할 수 있었던 비결을, 조엘은 바로 하위호환성 확보에서 찾는다. 특히 심시티 게임(의 버그)을 위해서 윈도우 95개발자들이 특별한 플래그를 추가했다는 대목에서는, 그 철두철미함에 살짝 전율까지 느껴졌다.

파이어폭스 개발자들이 내부적인 반대에도 불구하고 비표준태그인 document.all을 지원하기로 했던 결정이, 오늘날 (한국에서의) 파이어폭스 점유율과 무관하지 않다는 사실을 떠올리게 된다.

37장에서 압도적인 시장 지배자가 없는 상황에서 치고 나올 수 있었던 이유를 설명했다면, 38장에서는 이미 업계 1위의 로터스 123이 있는 시장에서 엑셀이 승리할 수 있었던 비결을 소개한다. 잠재고객이 언제든 쉽게 돌아갈 수 있도록, 강요하지 않는 성숙한 전략이 프로그램에 대한 진입장벽을 낮추었고 결국 사용자를 끌어올 수 있었다는 것이다.

그밖에도 에릭 레이몬드의 “The Art of Unix Programming” 책에 대한 감상문으로 느껴지는 18장 “더불어 살기”에서는 (유닉스 문화와 비교해가며) 최종 사용자에 대한 배려를 무엇보다 우선시하는 윈도우 문화에 대해서, 그리고 그러한 가치를 이끌어낸 배경에 대해서 조리있게 설명한다.

또 개인적으로는 30장 “이 나라에서는 개가 무슨 일을 하죠?”의, 개발 중인 소프트웨어를 스스로 사용해보라는 조언을 실천하면서 그의 말이 옳았음을 실감하고 있기도 하다.

프로그래머가 이 책을 읽는다면, 그의 주력 플랫폼이 무엇이건 개발하는 소프트웨어가 무엇이건 상관없이 저자의 경험으로부터 우러나오는 실용적인 조언들을 통해 많은 통찰을 얻을 수 있을 것이다.