Differences between revisions 29 and 30
Revision 29 as of 2020-08-23 08:17:48
Size: 12043
Editor: 정수
Comment:
Revision 30 as of 2020-08-23 08:18:46
Size: 12391
Editor: 정수
Comment:
Deletions are marked like this. Additions are marked like this.
Line 141: Line 141:
의사소통이 중요한 가치라고 하는 경우에도, 긴 문서를 만드는 목적도 의사소통을 위해서이고, 매일 나누는 대화 역시 의사소통을 위해서이다. 그렇다면 둘 중 어느 것이 가장 효과적인 방법일까? 이는 상황에 따라, 부분적으로는 지적인 원칙에 따라 달라진다.

1장. XP란 무엇인가?

XP는,

  • 오래되고 효과가 없는 사회적 습관들을 버리고 효과 있는 새로운 습관들을 채택하는 것이다.
  • 오늘 내가 기울인 모든 노력에 대해 자신을 인정해 주는 것이다.
  • 내일은 좀더 잘해보려고 애쓰는 것이다.
  • 팀 전체가 공유하는 목표에 내가 얼마나 기여했는지를 잣대로 자신을 평가하는 것이다.
  • 소프트웨어 개발을 하는 중에도 여러분의 인간적 욕구 가운데 일부를 채우겠다고 요구하는 것이다.

이런 변화를 불러일으키기 위해 무엇을 해야 할까? 그게 경제적으로 효과가 있는 것이기는 할까? 이 책의 나머지 부분에서 그런 것들을 탐구할 것이다.

이 책은 두 부분으로 나뉘어 있다.

  1. 실용적인 부분. 인간적 욕구들을 감안할 뿐 아니라 충족도 시켜주는 소프트웨어 개발 실천 및 사고 방법을 설명한다.
  2. XP의 철학적, 역사적 뿌리를 다루고, XP를 현재의 맥락 속에 위치시킨다.

1부. XP 탐험하기

2장. 운전하는 법 배우기

운전은 그냥 목적지를 맞추어두고 그대로 두는게 아니다. 계속 신경을 쓰면서 이쪽으로 조금, 저쪽으로 조금씩 방향을 고치면서 가는 것이다.

이것이 XP의 패러다임이다. 깨어 있고 적응하며 변하는 것.

소프트웨어의 모든 것은 변한다. 요구사항도, 설계도, 비즈니스도, 기술도, 팀도. 변화는 반드시 일어나기 때문에, 문제가 되는 것은 변화 자체가 아니다. 변화를 극복하지 못하는 우리의 무능력이 문제다.

운전 메타포는 XP에 두 가지 차원으로 적용된다. 고객은 시스템 내용의 방향을 결정한다. 그리고 개발 팀은 개발 프로세스의 방향을 결정한다. XP는 작은 수정을 빈번히 하도록 한다. 그러면 변화에 적응할 수 있고, 잘못된 길에 들어섰을 때 금방 알아차릴 수 있다.

고객이 시스템 내용의 방향키를 잡듯, 전체 개발팀은 개발 프로세스의 방향키를 잡는데, 이것은 현재 쓰는 실천들의 집합에서 시작된다. 개발을 진행하면서 팀은 현재 자기네 프랙티스 중 어떤 것이 팀을 목표 쪽으로 이끄는지, 어떤 것이 멀어지게 하는지 깨닫는다. 프랙티스 하나하나가 효율성, 의사소통, 자신감, 생산성을 개선하는 실험이다.

3장. 가치, 원칙, 실천방법

정원을 가꾸는 기본적인 기술들은 책 한 권만 읽으면 쉽게 익힐 수 있지만, 그것만으로는 정원사가 되지는 못한다. 폴(전문가)과 나(초보자)의 차이는 무엇일까?

폴은 더 많은 기술을 알고 있으며, 심지어 내가 알고 있는 기술일지라도 폴의 솜씨가 더 뛰어나다. 이 수준에서의 지식과 이해를 실천방법(practice)이라고 말할 수 있다. 실천방법은 우리가 매일 하는 그러한 일이다.

그 뿐 아니라, 폴은 정원 일에서 어떤 것이 좋고 나쁜지에 대해 고도로 발달된 감각을 가지고 있다. 그가 이런 것을 느낄 수 있는 까닭은 나보다 가지치기를 잘해서가 아니라, 정원에서 작용하는 여러 힘들에 대한 전반적인 감각이 뛰어나기 때문이다. 내가 생각하고 궁리해야 알 수 있는 것이 그에게는 간단하고 명백한 것이다. 이 수준의 지식과 이해를 가치(value)라고 부를 수 있다.

가치를 명시하는 일이 중요한 까닭은, 가치가 없이는 실천이 기계적인 활동, 아무런 목적이나 방향도 없이 그냥 그렇게 하라니까 하는 것이 되어버리기 쉽기 때문이다.

실천방법은 명확하다. 내가 아침에 스탠드업 미팅을 했는지 안했는지는 누구나 알 수 있다. 그러나 내가 정말 의사소통을 가치 있게 여기는지는 애매하다. 내가 의사소통을 강화하는 실천방법을 계속 실천하는지는 구체적으로 알 수 있다. 가치가 실천방법에 목적을 부여하듯, 실천방법은 가치에 책임을 부여한다.

가치는 보편적이다. 하지만 실천방법은 어떤 상황이냐에 따라 완전히 달라져야 한다.

가치와 실천방법 사이를 잇는 다리가 원칙이다. 원칙은 특정한 영역에서 영원한 지침이 되는 것이다. 폴은 인접한 식물이 서로 약점을 보완해야 한다는 '같이 심기'의 원칙을 이해하고 있다. 금잔화는 딸기를 먹는 해충 가운데 몇몇을 자연스레 쫓아낸다.

책을 읽는다고 XP 프로그래머가 될 수는 없다. 익스트림 스타일로 프로그래밍하고, XP의 가치를 공유하며, 여러분의 실천방법 가운데 일부를 공유하는 사람들의 공동체에 참여하고, 여러분이 아는 것을 다른 사람과 공유해야만 익스트림 프로그래머가 될 수 있다.

4장. 가치

정원 일에 조예가 깊은 폴은 다음에 무슨 일을 해야 할지 직관적으로 안다. 폴은 어떤 것이 중요하며 어떤 것이 중요하지 않은지 본능적으로 안다. 새겨져 있는 것이다.

내가 이랑을 똑바로 파는 것을 중요하게 여겨서, 그것에 심혈을 기울인다. 지나가다 그걸 본 폴이 한 마디 한다. '왜 그렇게 열심히 이랑을 반듯하게 만들려고 들어? 진짜 필요한 일은 퇴비를 더 많이 주는 거야."

내가 가치 있게 생각하는 것과 정말로 가치 있는 것 사이의 차이에서 낭비가 생긴다. 윌 로저스는, '문제는 자네가 모르는 것 때문에 생기는게 아니야. 잘못 아는데서 생기지'라고 말했다.

팀에게 중요한 것이란 무엇일까? XP는 개발을 이끌기 위한 다섯 가지 가치를 포용한다.

  • 의사소통
  • 단순성
  • 피드백
  • 용기
  • 존중

의사소통

팀 소프트웨어 개발에서 가장 중요한 것은 의사소통이다. 팀 내에서의 지식의 전파가 안되는 문제, 지식이 부족해서 생기는 문제 등.

물론, 의사소통만으로 되는건 아니다. 그냥 친교모임을 만들자는건 아니니까. 팀이 지키는 다른 가치들이 그렇게 되지 않도록 막아준다. 하지만 의사소통 없는 움직임은 전진이 아니다.

단순성

XP의 5가지 가치 중에서, 가장 지적인 측면의 가치다.

제대로 작동할만한 (효과가 있을 법한) 가장 단순한 것은 뭘까? 여러분의 생각을 불필요한 복잡성을 제거하는 쪽으로 기울여라.

다른 가치들과의 관계:

  • 의사소통을 개선하면 오늘의 문제에서 불필요한 요구사항이나 뒤로 미룰 수 있는 요구사항을 제거할 수 있으므로 단순성을 성취하는데도 도움이 된다.
  • 단순성을 성취하면 그만큼 의사소통해야 할 것도 줄일 수 있다.

피드백

고정된 방향이 오랫동안 유효한 경우는 없다. 변화는 불가피하고, 변화는 피드백을 필요하게 만든다.

처음에 아예 제대로 하는게 훨씬 쉽지 않을까?

  • '처음'에는 어떻게 하는 것이 '제대로' 하는 것인지 아직 모를 수 있다.
  • 오늘은 제대로 돌아가던 것이 내일은 그렇지 않을지도 모른다.
  • 오늘 '제대로' 하기 위해 시간이 너무 오래 걸려서, 그 사이에 상황이 바뀔지도 모른다.

그렇기 때문에, 한번에 완벽하게 해결하기보다는 점진적 개선에 만족하기 때문에, 우리는 피드백을 이용해 목표에 점점 더 가까이 다가간다.

XP팀은 팀이 다룰 수 있는 한도 내에서 최대한 빨리, 최대한 많은 피드백을 만들기 위해 노력한다. 그 주기를 주 단위나 월 단위가 아니라, 분 단위나 시간 단위로 줄이기 위해 노력한다. 빨리 알수록 빨리 적응할 수 있기 때문이다.

피드백의 양이 너무 많을 때에는, 팀이 중요한 피드백들에 미처 대응하지 못할 수 있고, (속도를 늦추는 것이 아무리 불만스러울지라도) 피드백 주기의 속도를 늦춰야 한다. 그리고 피드백 초과를 불러들인 근본 원인들을 해결할 수 있다.

다른 가치들과의 관계:

  • 피드백은 의사소통의 핵심이다. '성능이 문제가 될까요?' '잘 모르겠는데요. 간단한 성능 프로토타입을 만들어서 확인해보죠.'
  • 피드백은 단순성에도 기여한다. 세 가지 해결책 중 어느 것이 가장 단순한 방법일까? 셋 다 시도해보고 판단하라. 그게 낭비처럼 보일지도 모르지만, 만족할만하게 단순한 해결책에 도달하는 가장 효율적인 방법일 수 있다. 그리고 시스템이 단순할수록 시스템에 대한 피드백도 더 쉽게 받을 수 있다.

용기

용기는 두려움에 직면했을 때 가장 효과적인 행동이다.

  • 어떤 경우에 용기는 행동을 중시하는 형태로 나타나기도 한다. 문제가 무엇인지 안다면, 그것에 대해 무슨 일이든 해보는 것이다.
  • 어떤 경우에는 용기가 인내로 나타나기도 한다. 문제가 있다는 것은 알지만 정확히 무엇인지 모를 경우, 그 문제가 뚜렷하게 나타날 때까지 기다리는 데에도 용기가 필요하다.

다른 가치들과의 관계:

  • 견제할 다른 가치 없이 용기를 중요한 가치로 삼는 것은 위험하다. 결과를 생각해보지 않고 어떤 일을 하는 것은 효과적인 팀워크가 아니다. 두려울 때면 다른 가치들을 가이드로 삼아 팀워크를 북돋아 주도록 한다.
  • 진실을 말하는 것이 즐겁든 아니든, 진실을 말할 수 있는 용기는 의사소통과 신뢰를 자라게 한다.
  • 실패하는 해결책을 버리고 새로운 해결책을 찾아 나서는 용기는 단순함을 북돋운다.
  • 진짜 답변, 구체적인 답변을 추구하는 용기는 피드백을 낳는다.

존중

만약 팀의 구성원들이 서로 고려하지 않고 다른 사람이 하는 일들에 신경을 쓰지 않는다면, 제대로 XP를 할 수 없다.

자기 삶이 소프트웨어 개발과 맞닿아 있는 모든 사람은 인간으로서 동등한 가치를 지닌다. 소프트웨어 개발에서 생산성과 인간성을 동시에 개선하려면, 팀에 속한 모든 개인의 기여를 존중해야 한다. 나도 중요한 사람이고 당신도 중요한 사람이다.

다른 가치들

위의 다섯 가지 가치만이 소프트웨어를 효과적으로 개발하게 할 수 있는 가치는 아니다. 이것들은 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장. 결론

주석을 단 참고문헌

책/ExtremeProgrammingExplained (last edited 2023-05-09 05:13:04 by 정수)