1장. XP란 무엇인가?
XP는,
- 오래되고 효과가 없는 사회적 습관들을 버리고 효과 있는 새로운 습관들을 채택하는 것이다.
- 오늘 내가 기울인 모든 노력에 대해 자신을 인정해 주는 것이다.
- 내일은 좀더 잘해보려고 애쓰는 것이다.
- 팀 전체가 공유하는 목표에 내가 얼마나 기여했는지를 잣대로 자신을 평가하는 것이다.
- 소프트웨어 개발을 하는 중에도 여러분의 인간적 욕구 가운데 일부를 채우겠다고 요구하는 것이다.
이런 변화를 불러일으키기 위해 무엇을 해야 할까? 그게 경제적으로 효과가 있는 것이기는 할까? 이 책의 나머지 부분에서 그런 것들을 탐구할 것이다.
이 책은 두 부분으로 나뉘어 있다.
- 실용적인 부분. 인간적 욕구들을 감안할 뿐 아니라 충족도 시켜주는 소프트웨어 개발 실천 및 사고 방법을 설명한다.
- XP의 철학적, 역사적 뿌리를 다루고, XP를 현재의 맥락 속에 위치시킨다.
1부. XP 탐험하기
2장. 운전하는 법 배우기
운전은 그냥 목적지를 맞추어두고 그대로 두는게 아니다. 계속 신경을 쓰면서 이쪽으로 조금, 저쪽으로 조금씩 방향을 고치면서 가는 것이다.
이것이 XP의 패러다임이다. 깨어 있고 적응하며 변하는 것.
소프트웨어의 모든 것은 변한다. 요구사항도, 설계도, 비즈니스도, 기술도, 팀도. 변화는 반드시 일어나기 때문에, 문제가 되는 것은 변화 자체가 아니다. 변화를 극복하지 못하는 우리의 무능력이 문제다.
운전 메타포는 XP에 두 가지 차원으로 적용된다. 고객은 시스템 내용의 방향을 결정한다. 그리고 개발 팀은 개발 프로세스의 방향을 결정한다. XP는 작은 수정을 빈번히 하도록 한다. 그러면 변화에 적응할 수 있고, 잘못된 길에 들어섰을 때 금방 알아차릴 수 있다.
고객이 시스템 내용의 방향키를 잡듯, 전체 개발팀은 개발 프로세스의 방향키를 잡는데, 이것은 현재 쓰는 실천들의 집합에서 시작된다. 개발을 진행하면서 팀은 현재 자기네 프랙티스 중 어떤 것이 팀을 목표 쪽으로 이끄는지, 어떤 것이 멀어지게 하는지 깨닫는다. 프랙티스 하나하나가 효율성, 의사소통, 자신감, 생산성을 개선하는 실험이다.
3장. 가치, 원칙, 실천방법
정원을 가꾸는 기본적인 기술들은 책 한 권만 읽으면 쉽게 익힐 수 있지만, 그것만으로는 정원사가 되지는 못한다. 폴(전문가)과 나(초보자)의 차이는 무엇일까?
폴은 더 많은 기술을 알고 있으며, 심지어 내가 알고 있는 기술일지라도 폴의 솜씨가 더 뛰어나다. 이 수준에서의 지식과 이해를 실천방법(practice)이라고 말할 수 있다. 실천방법은 우리가 매일 하는 그러한 일이다.
그 뿐 아니라, 폴은 정원 일에서 어떤 것이 좋고 나쁜지에 대해 고도로 발달된 감각을 가지고 있다. 그가 이런 것을 느낄 수 있는 까닭은 나보다 가지치기를 잘해서가 아니라, 정원에서 작용하는 여러 힘들에 대한 전반적인 감각이 뛰어나기 때문이다. 내가 생각하고 궁리해야 알 수 있는 것이 그에게는 간단하고 명백한 것이다. 이 수준의 지식과 이해를 가치(value)라고 부를 수 있다.
가치를 명시하는 일이 중요한 까닭은, 가치가 없이는 실천이 기계적인 활동, 아무런 목적이나 방향도 없이 그냥 그렇게 하라니까 하는 것이 되어버리기 쉽기 때문이다.
실천방법은 명확하다. 내가 아침에 스탠드업 미팅을 했는지 안했는지는 누구나 알 수 있다. 그러나 내가 정말 의사소통을 가치 있게 여기는지는 애매하다. 내가 의사소통을 강화하는 실천방법을 계속 실천하는지는 구체적으로 알 수 있다. 가치가 실천방법에 목적을 부여하듯, 실천방법은 가치에 책임을 부여한다.
가치는 보편적이다. 하지만 실천방법은 어떤 상황이냐에 따라 완전히 달라져야 한다.
가치와 실천방법 사이를 잇는 다리가 원칙이다. 원칙은 특정한 영역에서 영원한 지침이 되는 것이다. 폴은 인접한 식물이 서로 약점을 보완해야 한다는 '같이 심기'의 원칙을 이해하고 있다. 금잔화는 딸기를 먹는 해충 가운데 몇몇을 자연스레 쫓아낸다.
책을 읽는다고 XP 프로그래머가 될 수는 없다. 익스트림 스타일로 프로그래밍하고, XP의 가치를 공유하며, 여러분의 실천방법 가운데 일부를 공유하는 사람들의 공동체에 참여하고, 여러분이 아는 것을 다른 사람과 공유해야만 익스트림 프로그래머가 될 수 있다.
4장. 가치
정원 일에 조예가 깊은 폴은 다음에 무슨 일을 해야 할지 직관적으로 안다. 폴은 어떤 것이 중요하며 어떤 것이 중요하지 않은지 본능적으로 안다. 새겨져 있는 것이다.
내가 이랑을 똑바로 파는 것을 중요하게 여겨서, 그것에 심혈을 기울인다. 지나가다 그걸 본 폴이 한 마디 한다. '왜 그렇게 열심히 이랑을 반듯하게 만들려고 들어? 진짜 필요한 일은 퇴비를 더 많이 주는 거야."
내가 가치 있게 생각하는 것과 정말로 가치 있는 것 사이의 차이에서 낭비가 생긴다. 윌 로저스는, '문제는 자네가 모르는 것 때문에 생기는게 아니야. 잘못 아는데서 생기지'라고 말했다.
팀에게 중요한 것이란 무엇일까? XP는 개발을 이끌기 위한 다섯 가지 가치를 포용한다.
- 의사소통
- 단순성
- 피드백
- 용기
- 존중
5장. 원칙
6장. 실천방법
7장. 기본 실천방법
8장. 시작하기
9장. 보조 실천방법
10장. 전체 XP팀
11장. 제약이론
12장. 계획 짜기: 범위를 관리하기
13장. 테스트: 일찍, 자주, 자동화
14장. 설계하기: 시간의 가치
15장. XP 확장
16장. 인터뷰
2부. XP의 철학
17장. 창조 이야기
18장. 테일러주의와 소프트웨어
19장. 도요타 생산 시스템
20장. XP 적용하기
21장. 순수성
22장. 해외 개발
23장. 시간이 지나도 변치 않는 프로그래밍 방식
24장. 공동체와 XP
25장. 결론