저는 워드와 짝 프로그래밍 경험이 몇 번 있습니다. 제 공력 증진에 큰 도움이 되었다고 생각하고 있습니다. 오늘은 여러분들을 위해 그 경험에서 배운 것, 특히 워드가 여타의 프로그래머들과 다른 점에 대해 이야기해드리려고 합니다. 아마 프로그래머가 아닌 분들에게도 많은 계발을 주리라 생각합니다.


우선은 수학자 이야기를 잠깐 하겠습니다. 폴 에르되시라는 수학자가 있습니다.

그는 누구든지 그의 마음에 드는 주제를 가지고 온 수학자라면 함께 논문을 썼다. 결과적으로 거의 1500개의 공동 논문을 내, 지금까지의 역사상 가장 공동연구를 많이 한 수학자가 될 것이다. 그와 공동연구를 했던 수학자들은 에르되시 수(Erdős number)란 말까지 만들어 냈다.

혼자서는 논문을 거의 내지 않았기 때문에, 그는 누구보다도 "수학을 사회적 활동"으로 만든 수학자라고 할 수 있다.

[위키피디아에서, 강조는 김창준]
에르되시 수라는 개념이 재미있습니다. 에르되시와 공동 논문 저술을 했으면 에르되시 수가 1이 됩니다. 에르되시 수가 1인 사람과 공동 저술을 했다면 그 사람은 에르되시 수가 2가 됩니다. 에르되시 수가 낮으면 그만큼 자랑거리가 됩니다.

워드 커닝햄이라는 프로그래머에게도 워드 수라는 개념이 붙었습니다. 워드와 짝 프로그래밍(둘이 한 컴퓨터 앞에 앉아서 키보드를 번갈아가며 협력해서 프로그래밍 하는 것)을 하면 워드 수가 1이 됩니다. 그만큼 워드와의 짝 프로그래밍 경험을 인정해 준다는 말이기도 합니다. 워드도 에르되시처럼 프로그래밍을 사회적 활동으로(괴팍한 천재가 어두운 골방에서 기똥찬 프로그램을 만드는 것이 아니라) 만든 사람으로 볼 수 있습니다.

제가 워드와 짝 프로그래밍을 하면서 발견한 그의 탁월한 점은 여러가지가 있는데 오늘은 두 가지만 이야기해보겠습니다.

첫번째입니다.

우리가 생각하는 것보다 훨씬 더 작은 발걸음을 할 수 있다 -- 심지어는 다른 규칙을 어기면서까지.

전문가 연구에서 이런 실험을 한 적이 있습니다. 발레를 두 집단에게 보여줍니다. 한 집단은 무용 전문가들이고 다른 집단은 그렇지 않습니다. 그들에게 전자 버튼을 하나씩 주고, 춤을 보다가 의미있는 동작 단위로 나눌 수 있는 시점에 버튼을 누르라고 주문했습니다. 결과는? 전문가가 훨씬 더 촘촘하게 나눕니다. 그러면서도 동시에 전문가는 훨씬 더 크게 나눌 수도 있었습니다. 예를 들면 일반인은 대충 1~2분 단위로 나눈다면 전문가는 1~2초 단위로 나눌 수도 있고, 또 10~20분 단위로 나눌 수도 있다는 이야기입니다. 다음은 제가 "단락개념"이라는 위키 페이지에 썼던 글입니다.

상급자와 중급/초급자 사이에는 이 단락개념에 차이가 있다.

일명 청킹(Chunking) 과제라고 하는데, 무용 비디오를 보여주면서 의미 있는 단위로 단락이 나뉜다고 생각되는 곳에서 버튼을 눌러달라고 한다. 그래서 피실험자는 무용을 보면서 버튼을 누르게 된다.

의미 단위가 가능하면 작아지도록 버튼을 눌러달라고 했다. 상급자가 중급자보다 더 작게 분절한다.

이번에는 의미 단위가 가능하면 커지도록 버튼을 눌러달라고 했다. 이번에도 상급자가 중급자보다 더 크게 분절한다.

이것을 일러 상급자 쪽이 분절의 유연성이 높다고 한다. 일반적으로 상급자가 분절하는 "단락"에 대한 판단력이 높다.

이 이야기는 사용자스토리나, TDD에서 테스트 케이스를 나누는 것 등에도 적용이 된다.


워드는 제가 생각했던 것보다 훨씬 더 작게 단락을 나눌 수 있었습니다. 예를 들어 현재 A라는 지점에서 프로그래밍을 하고 있고 B로 나아간다고 했을 때 제가 2 단계로 갈 것을 생각하면, 워드는 그걸 4단계로 나눌 수 있었습니다. 저는 나름대로 주변의 프로그래머들에 비해 그런 분절 유연성이 뛰어나다고 생각하고 있었는데 워드를 만나면서 놀라게 되었습니다. 특히나, 저의 2단계를 워드의 4단계로 쪼개기 위해 일시적으로 찝찝한 코드의 상태를 지나쳐야 하는데, 워드는 그런 결정을 할 수 있다는 것도 놀라웠습니다. "이런 코드는 더러워, 초보자들이나 쓰는 코드지"라고 생각할만한 코드를 워드는 아무런 거리낌없이 쓰고 사용합니다 -- 물론 나중에는 그 코드가 좀 더 아름다운 코드로 변모하게 됩니다. 아, 이 사람은 추함과 아름다움의 통념적 경계를 넘나들며 양쪽을 모두 사용하는구나 하는 생각.

두번째는 좀 더 충격적이었습니다.

예상 못한 상황을 맞닥뜨렸을 때 반응이 다르다.

워드 역시 코딩을 하다보면 예상치 못한 상황을 접합니다. 그렇지 않다면 학습을 하고 있지 않은 것이죠(안전 영역으로만 다니는 겁니다). 다른점은 그 상황에서의 반응과 태도입니다.

코딩을 주욱 합니다. 실행 시킵니다. 당연히 멋지게 결과가 나오리라 생각하며 엔터를 누르는데, 어라라랏! 에러가 뜹니다. 머리 속이 깜깜해집니다. 심박이 높아집니다. 주변에 누가 볼까 걱정도 듭니다. 머리에 열이 나기 시작합니다. 5분 정도 지나고 나면 나도 몰래 똑같은 짓을 반복하고 있고(삽질이라고 합니다) 될듯 될듯 뭔가 풀리지 않습니다. 이게 일반적인 프로그래머입니다.

워드는? 뭔가 이상한 에러가 났습니다. 워드가 말했습니다. "Hm... That's interesting." 흠, 이거 흥미롭군요.

엄청난 차이입니다. 저는 워드에게 이런 말을 해줬습니다. "Every unexpected event is a path to learning for you." 예상 못한 사건 하나 하나가 당신에게는 학습으로 가는 길이다.

뭐랄까, 워드 주위에는 차분함의 필드가 존재하는 것 같습니다. 그 사람과 짝 프로그래밍을 하고 있으면 스트레스를 별로 받지 않습니다.

--김창준