[책] 소프트웨어 장인
2016 / 03 / 01
장인이라니. 제목을 보자마자 미소를 지었습니다. 범상치 않은 책인 것 같았습니다. 다른 책을 빌리러 도서관에 갔다가 발견했고, ‘소프트웨어, 누가 이렇게 개떡같이 만든거야?’ 옆에 있어서 둘다 빌렸습니다. 저는 ‘방망이 깎던 노인’ 이야기를 좋아합니다. 이 책도 좋아할 것 같은 느낌이 들었습니다.
저자의 이름은 산드로 만쿠소Sandro Mancuso. 브라질 사람입니다.
산드로 만쿠소는 아주 어린 시절부터 코딩을 시작했다. 직업으로서 코딩을 시작한 것은 1996년부터였다. 스타트업, 작은 소프트웨어 용역 업체, 솔루션 개발사, 다국적 컨설팅 펌, 다국적 투자 은행에서 근무했고, 2013년 10월에는 소프트웨어 장인정신의 원칙과 가치에 기반을 둔 건설팅 업체 ‘Codurance’를 공동 창업했다. 저자의 ‘소프트웨어 장인정신’과 관련한 활동은 2010년 런던 소프트웨어 장인 협회(LSCC)를 설립하면서 시작되었다. LSCC는 2,000여 명의 회원으로 구성된 세계에서 가장 큰 소프트웨어 장인정신 모임이다. 지난 4년간 저자는 유럽, 미국 및 기타 여러 곳에서 소프트웨어 장인 커뮤니티를 조직하기 위해 개발자들을 독려하고 돕고 있다.
- 저자소개, 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015
그가 프로그래밍을 시작한 이유는 오직 런던에서 살아보고 싶기 때문이었습니다. 가난한 동네에서 살던 작가는 자신이 런던에서 일자리를 구할 방법이 개발자가 되는 것 밖에 없었습니다. 그저 런던에서 살기 위해 도구로 선택한 코딩이 아이러니하게도 그를 세계적 위치에 올려놓았습니다.
이 책은 개인의 노력과 능력을 강조합니다. 저자가 가장 강조하는 키워드는 열정이고, 개인 시간을 투자해서 능력을 키우라고 말합니다. 요새는 열정이라는 단어만 봐도 부정적인 감정이 들지만, 그리고 책 전반적으로 고용주의 입장을 반영한다는 느낌이 들지만, 저자는 한국사람이 아닙니다.
급여를 대가로 해서 일을 하는 것 말고도 우리의 열정과 헌신 그리고 업무 외 개인 시간을 들여 확보한 지식들을 투자하여 일터를 더 나은 곳으로 만든다. ⋯ 나는 단순히 주어진 업무에만 집중한 적은 한 번도 없다. 언제 어디서도 “그건 내 업무가 아닙니다.”라고 말한 적이 없다. 사실 나는 고용 계약서나 업무 목록을 되돌아 본 적도 없다. 나는 항상 더 많은 것을 제공하고 더 많은 일을 수행해서 내 주변의 모두가 더 나아지도록 노력했다. ⋯ 나는 어떤 회사에서 일하든, 내가 줄 수 있는 최대의 가치를 주기 위해 최선을 다 했다. 그러한 노력들에 대한 보상을 받았다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p314
그의 세상에선 노력하면 보상을 받습니다.
개발자 커뮤니티 okky.kr에서 이 책에 대한 좋지 않은 평을 봤습니다. 야근을 매일같이 하는 한국의 개발자들에게 개인 시간을 투자하라고 말하는 것은 과한 것 같기도 합니다. 노력을 해도 정당한 보상을 받지 못한다는 생각이 만연한 사회에서 이 책은 환영받지 못할 것입니다.
생각의 스케일을 한국에서 세계로 넓히고 이 책을 봤으면 좋겠습니다. 그의 세계에선 노력하면 보상을 받았던 것처럼, 저는 우리가 사는 사회에서도 노력을 하면 보상을 받을 수 있다는 믿음이 자리잡기를 바라고 있습니다.
작가가 정의한 소프트웨어 장인정신은 다음과 같습니다:
소프트웨어 장인정신은 마스터가 되어가는 긴 여정이다. 소프트웨어 장인정신은 소프트웨어 개발자가 스스로 선택한 커리어에 책임을 가지고 지속적으로 새로운 도구와 기술을 익히며 발전하겠다는 마음가짐이다. 소프트웨어 장인정신은 책임감, 프로페셔널리즘, 실용주의 그리고 소프트웨어 개발자로서의 자부심을 의미한다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p57
소프트웨어 장인은 고용주에게 종속적인 노동자가 아닙니다. 독립적으로 활동하며 자신의 능력을 키우기 위해 노력합니다. 회사를 고객으로 생각하며, 고객에게 최선의 것을 전달하기 위해 열심을 다합니다. 환경 탓이 아니라 업무 환경을 바꿔가는 사람입니다.
저자는 회사가 자기를 교육해주기를 바라는 수동적인 태도의 개발자를 ‘공장 라인에 들어가는 개발자’라고 간주합니다. 산업혁명시대의 공장은 노동자를 고용해서 일에 필요한 기술을 가르치고 제품 생산 라인에 투입했습니다. 공장은 노동자에게 일하는 법을 가르치고 노동자는 배운 대로만 일했습니다. 그러나 개발자는 공장 노동자가 아닙니다.
장인은 말 그대로 전문가입니다. 의사(개발자)는 자신이 가진 기술로 환자(회사)를 치료(소프트웨어 개발)합니다. 환자의 판단에 따르는 것이 아니라 전문지식에 의한 판단을 스스로 하고 처방을 내립니다. 그리고 판단에 대해 책임집니다. 환자는 도움이 필요해서 의사를 찾아왔고, 의사는 더 효과적으로 환자를 치료하기 위해 노력해야합니다.
관리자중에서도 산업혁명시대의 사고방식을 가진 사람들이 있습니다. 개발자를 하급 인력으로 간주하고 누가 오던지 상관하지 않는 사람, 소프트웨어에 대한 지식이 부족한 사람. 개발 수준의 하향평준화를 바라는 사람, 잘 알지도 못하면서 업무의 지엽적인 부분까지 관리하려고 하는 사람은 ‘상아탑 아키텍트’라고 부르는데, 저자는 상아탑 아키텍트를 박살 낸 경험을 책에 적어놓았습니다([발췌] 상아탑 아키텍트 대처하기).
장인정신, 애자일, 익스트림 프로그맹, TDD등이 저자가 사용하는 기술입니다.
장인정신은 이데올로기이고 XP(eXtreme Programming)는 방법론이다. 이데올로기는 가치, 태도, 행동양식을 다루고 방법론은 실행 관례와 특정 문제 해결을 다룬다.
XP 역시, 자체적인 추구 가치가 있다(단순함, 소통, 피드백, 존중, 용기). 하지만 XP는 실행 관례들의 집합으로서 더 많이 알려져 있다.
장인정신은 프로페셔널리즘에 집중한다. 프로페셔널한 태도는 우리가 사용하는 실행 관례와 단단히 엮여 있다. 현재의 실행 관례들 대부분은 XP에서 나온 것들이다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p326
우리는 스스로 소프트웨어를 개발하고, 다른 사람들이 개발하는 것을 도와주면서 더 나은 소프트웨어 개발 방법들을 찾고 있다. 이 과정에서 우리는 다음과 같은 가치를 중요하게 생각한다.
절차와 도구보다는 개성과 화합을
방대한 문서작업보다는 동작하는 소프트웨어를
계약 조건에 대한 협상보다는 고객과의 협력을
계획을 따르는 것을 넘어서서 변화에 대처하는 것을
더 가치있게 여긴다.좌측의 사항도 가치가 있음을 인정하지만 우리는 우측의 사항에 더 높은 가치를 둔다는 것이다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p42
소프트웨어 장인을 열멍하는 우리는, 스스로의 기술을 연마하고, 다른 사람들이 기술을 배울 수 있도록 도움으로써 프로페셔널 소프트웨어 개발의 수준을 높인다. 이러한 일을 하는 과정에서 우리는 다음과 같은 가치들을 추구한다.
동작하는 소프트웨어뿐만 아니라, 정교하고 솜씨 있게 만들어진 작품을,
변화에 대응하는 것뿐만 아니라, 계속해서 가치를 더하는 것을,
개별적으로 협력하는 것뿐만 아니라, 프로페셔널 커뮤니티를 조성하는 것을,
고객과 협업하는 것뿐만 아니라, 생산적인 동반자 관계를,이 왼쪽의 항목을 추구하는 과정에서, 오른쪽 항목들이 꼭 필요함을 의미한다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p67
테스트 주도 개발에서 작성되는 테스트는 단위 테스트가 대표적이다. 먼저 단위 테스트는 말 그대로 한 단위만1을 테스트하는 것이다. 단위 테스트를 작성하려면, 일단 테스트를 작성한 뒤 컴파일 에러가 일어나지 않도록 테스트에서 쓰이는 클래스와 그 메소드의 스텁을 만들어 둔다. 테스트가 실패하는 것을 확인하고(= 컴파일 에러는 없는 것을 확인하고) 클래스를 구현한다. 클래스에서 필요한 다른 클래스가 필요하면 일단 스텁으로 지금 작성중인 클래스의 테스트를 통과하게만 해 두고, 나중에 그 클래스의 테스트 케이스를 작성한 후 구현한다. 이런 식으로 프로젝트 전체를 완성해 나간다. 하지만 단위 테스트는 단위 하나하나에 대해서만 검증할 수 있으므로, 이를 해결하기 위해 인수 테스트를 작성한다. 사실 인수 테스트는 전통적으로 사람(QA)의 영역이었지만, 코드로도 약간 구현해두면 품질에 큰 도움이 된다2.
이 책은 요약본이라는 느낌이 든다. 작가는 어떤 것을 설명할 때 어디서 배웠는지 출처3를 알려주기 때문인데, 예비 개발자들의 공부 로드맵을 그릴 수 있을 정도입니다.
책에는 소프트웨어 장인정신이라는 이데올로기뿐만 아니라 실질적인 조언들도 많습니다. 직장 생활을 하면서 개발자들이 공통적으로 겪는 고민들에 대한 해답이 들어있으며, 더 나은 업무 환경을 만들기 위한 실행 지침들도 있습니다. 기술에 대한 것 뿐만 아니라 인간관계, 업무적인 관계에 관한 통찰이 있습니다.
목차에서 실용적이라고 느껴지는 부분을 뽑아낸 리스트입니다.
- 인재 채용
- 비즈니스 협상
- 생산적인 파트너십을 알아보는 방법
- 개발자 채용 면접은 개발자가 보아야 한다
- 잘못된 면접 방식
- 개발자들에게 열정을 불어넣기
- 배움의 문화 만들기
- 북 클럽에 가입하기
- 테크 런치 진행하기
- 그룹 토론회에 참여하기
- 업무 교환하기
- 그룹 코드 리뷰하기
- 코딩 실습하기
- 내부 학습 모임 만들기
- 아무도 참여하려 하지 않는다면
- 기술적 변화를 시작하는 방법
- 상사를 설득하는 방법
- 팀이 TDD를 수용하도록 설득하는 방법
- 회의懷疑론을 상대하는 방법
- 단순한 설계를 위한 네 가지 원칙
책을 통해서 현업에서 어떻게 일하는지 알 수 있었습니다. 애자일, 익스트림 프로그래밍, TDD와 같은 방법론들이 무엇인지 개념을 잡았고 로버트 C, 마틴 같은 훌륭한 저자들도 알게되었습니다.
제가 책을 통해 느낀 저자는 이상을 이야기하고 이상을 현실에 끌어오는 사람이었습니다. '현실은 이렇지만, 바꿀 수 있다'라는 태도를 가진 사람은 이 책을 읽으면서 가슴이 뜨거워질 것이라고 감히 예측해봅니다. 저자의 이상은 실현 불가능한 이상이 아닙니다. 이미 저자 본인이 실천하고 있습니다. 저자는 이상을 현실에 끌어오면서 살고 있습니다. 자신이 있는 곳을 이상의 수준으로 높혀갑니다.
⋯ 소프트웨어 장인의 최종적인 목표는 전 세계적으로 소프트웨어 프로젝트들의 품질과 성공 비율을 오늘날보다 높아지도록 하는 것이다.
소프트웨어 장인은 아침에 일어나서 출근하고 급여를 받는 것 이상을 생각한다. 소프트웨어 장인은 주변의 것들을 더 나아지게 하고 우리가 사는 세상을 변화시킬 것을 생각한다. 소프트웨어 장인이 된다는 것은 잘 짜여진 코드를 만드는 소프트웨어 개발자가 되는 것에서 훨씬 나아간다. 그것은 우리 삶의 철학이다. 탁월함에 헌신하고, 탁월함의 추구를 본성처럼 만든다. 우리 사회의 진화를 이끄는 일에 무한한 자부심을 갖는다.
- 산드로 만쿠소, 권오민 옮김, <소프트웨어 장인>, 길벗, 2015, p322
⋯ 인간이 역사를 통해 형성해 놓은 이 세상의 문화는 불로 정화된 후에 아름답게 회복될 것이며, 우리는 그 문화의 모든 아름다운 것들을 이곳에서 누리게 될 것이다. 그때 우리가 작곡한 음악이 천사들에 의해 연주될 것이고, 우리가 쓴 소설이 자랑스럽게도 천국의 도서관에 꽂혀 있을 것이며, 우리가 밤을 새워 가며 만든 소프트웨어가 천국의 PC방에서 돌아갈 것이다.
소프트웨어 장인정신은 코드의 질을 높여 개발자가 즐겁고 행복하게 일할 수 있도록 도와줍니다. 한 사람이 장신정신 이데올로기를 가지고 있으면 이데올로기는 점차 퍼져나가 동료들에게 전해지고, 업계 전체로 전해져서 장신정신의 최종적인 목표4를 이룰 것입니다. 마음 속에서 하나님 나라를 이룬 사람이 세상을 하나님 나라로 바꿔가는 것처럼.
- 일반적으로 클래스
- 현재 코드가 완전히 사람을 대체하는 것은 불가능한데, 실제 응용 프로그램에서는 가능한 경우의 수가 무한히 많기 때문이다.
- [책] 소프트웨어 장인에서 언급한 책 10권
- 전 세계적으로 소프트웨어 프로젝트들의 품질과 성공 비율을 오늘날보다 높아지도록 하는 것