정보

  1. 장르: 자기 계발, 소프트웨어
  2. 저자: 산드로 만쿠소

정리

이 책은 구체적으로 어떻게 해야하는지와 같은 행동 지침에 대한 책은 아니다. 하지만 행동 지침보다 중요한 것은 그 아래 근거를 두고 있는 마음가짐이다. 이 책은 마음가짐에 대한 것이다. 마음가짐이 가장 중요하며, ‘소프트웨어 장인정신'은 이러한 마음 가짐으로부터 파생되는 것들이라고 생각해도 무방하다.

줄거리

소프트웨어를 만드는 사람들의 마음가짐과 행동 지침에 대한 책이다. 표지에서 보이듯이, 소프트웨어를 만드는 사람으로써 프로페셔널리즘을 강조한다. 큰 프로젝트를 경험해본 사람으로써 경험을 바탕으로 ‘소프트웨어 장인’ 운동을 설명한다. ‘이념과 태도’ 파트에서 개발자1의 책임에 대해서 강조를 하지만, 그 외에 사람을 채용하는 법, 애자일 등의 소프트웨어 공학적인 요소에 대해 회의적인 사람들을 설득하는 법 등 내가 필요하다고 생각하지만 생각해보지 않은 부분에 대한 내용을 포함하고 있다.

자세히

이념과 태도

애자일이 피드백 루프를 짧게 만들어, 변화와 고객의 요구에 빠르게 대응할 수 있게 해준다. 하지만 애자일은 절차와 도구로 끝나버린다. 이러한 절차들이 개발자들을 기술적으로 발전시키지 않는다. 따라서 이를 보완하기 위해 ‘소프트웨어 장인정신'이 필요하다.

‘소프트웨어 장인정신'은 프로페셔널리즘을 뜻한다. 이를 설명하기 위해 변호사, 회계사, 의사를 예시로 든다. 이 비유가 ‘소프트웨어 장인정신'을 이해하는 것을 쉽게 해준다. 여기서는 의사를 비유로 설명하려고 한다. 먼저 환자(관리자)는 문제(요구사항)를 가지고 의사(개발자)를 찾는다. 이 때, 환자가 의사에게 어떻게 하라고 하나하나 지시하지 않는다. 단지 어디가 아픈지를 기반으로 진단을 한다. 또한 말이 안되는 치료, 수술을 요구할 때 의사는 ‘아니오'라고 말을 한다. 개발자 또한 관리자 또는 고객 에게 요구사항에 대해 전달 받고, 요구사항을 기반으로 판단하고 안되는 것은 ‘아니오'라고 말할 수 있어야 한다. 하지만 ‘아니오'에는 대안이 필요하다.

‘아니오'라고 말 못하는 부분을 ‘영웅이 되고 싶은 마음'과 ‘선의'로 비유한다. 말도 안되는 일정을 맞추면 결국 팀은 ‘영웅'이 될 수 있다는 생각에 며칠을 밤을 새며 일을 한다. 하지만 저자의 경험에서도 설명되어 있듯이 프로젝트 결과는 좋지 않은 결과를 가져온다.

하지만 항상 ‘아니오'만을 해서는 안된다. ‘아니오'에는 대안을 보여주는 것이 좋다. 또한 개발자 자신의 능력을 키워 더 좋은 대안, 궁극적으로는 요구사항을 만족해야 한다. 그러기 위해 필요한 것은 자기계발이다. 이에 대해서도 예시를 들어 설명한다. 동료가 회사가 자신을 발전시킬 기회를 주지 않는 것을 불평한다. 하지만 이는 ‘프로페셔널리즘'과는 거리가 먼 행동이다. 공장 노동자는 고용된 회사에서 제공하는 훈련에 의존한다. 보통 이러한 공장 노동자는 회사가 시키는 대로 일한다. 반복적인 작업만 하는 것이 개발자가 바라는 것은 아닐 것이다. 따라서 자기 커리어는 자신의 것이듯이 자기계발 또한 자신의 책임이다. 물론 회사에서 도와준다면 그것은 그 회사의 매리트이며 결국 좋은 인력은 그런 회사로 모이게 될 것이다.

독서, 블로그 등 과 같은 자기계발 방법과 오픈소스, 페어 프로그래밍 등의 소프트웨어적인 자기계발 방법에 대한 내용들도 포함되어 있다. 하지만 이 부분은 어디서나 강조하는 것들이고, 특별한 방법을 제안하는 것은 아니라고 생각한다.

애자일에 대해서도 유연한 관점을 이야기한다. 만약에 피드백 루프를 짧게 만들 수 있는 다른 방법이 있다면 그것이 애자일을 대체하여야 한다고.. 결국 유연하고 변화를 거부하지 않는 태도를 강조한다.

완전한 전환

이념과 태도에서 개발자에 대한 마음가짐과 책임을 설명했다면, 이 섹션은 소프트웨어 공학적인 요소를 적용하기 위한 방법들에 대한 것이 주가 된다. 채용, 면접하는 방법 등에 대한 내용은 아직은 나와는 거리가 있는 것 같아 읽지 않았다. 물론 지금 도움이 될만한 섹션들도 있어서, 해당 섹션들은 읽을 계획이다.


  1. 개발자라고 적지만, 정확하게는 시스템 아키텍처가 더 정확한 것 같다. 여기서 개발자는 단순히 개발을 하는 사람이 아닌 요구사항을 파악하고, 테스트까지 책임지는 사람을 의미한다. 그 것이 에자일의 기반인 것 같다. ↩︎