끊임없는 훈련
일을 할 때의 방법은 그 실행 결과만큼이나 중요하다. 품질이 좋은 코드를 능숙하게 작성하고 싶다면 높은 품질의 코드를 작성하는 방법을 훈련해야 한다. 훈련 외에 다른 수단은 없다. 훈련을 할 때는 문제의 해결 자체가 아니라 해결에 사용한 테크닉에 집중해야 한다. 급여를 받는 이유는 문제 해결에 사용한 테크닉이 아니라 문제 해결 자체에 대한 대가이지만, 훈련을 할 때는 그 문제를 ‘어떻게’ 해결하는지가 중요하다. 예를 들어 테스트 주도 개발 방법론을 배운다고 하자. 이 방법론은 마스터하기 매우 어렵다. 개발된 것도 없는데 테스트를 먼저 한다는 것은 직관에 반하기 때문에 능숙하게 할 수 있으려면 훈련이 필요하다.
운전을 처음 어떻게 배웠는지 기억을 떠올리자. 언덕길을 오를 때마다 신호등이 빨간색으로 바뀔까봐 조마조마했다. 그때마다 “신호등 앞에서 멈추었다가 다시 출발해야 할 수도 있으니... 기어를 1단으로 넣고, 클러치를 천천히 떼면서, 차가 뒤로 밀리거나 시동이 꺼지지 않게 해야 해.”라고 되뇌었다. 처음으로 자동차에 친구를 태웠던 때도 기억한다. “산드로! 라디오 좀 켜봐.” 잔뜩 긴장한 상태로 양쪽 백미러를 보면서 핸들을 꽉 잡고 있는 나에게 그 요구는 무리였다. “지금은 안돼!” 친구에게 이렇게 대답할 수밖에 없었다. 자동차도 걱정이 되고 기어 변경은 까다롭고 백미러도 봐야 하고, 다른 자동차들이 너무 가까이 있는 것도 신경이 쓰이고, 차를 똑바로 가도록 핸들을 잘 잡고 있어야 하고, 회전할 때 다른 차선을 침범하지 않아야 하는 등, 라디오를 켜기에는 나의 주의력에 여유가 전혀 없었다. 이제 자동차 운전에 익숙해진 이후를 생각해보자. 익숙해지면 자동차 안에 있다는 사실을 그다지 의식하지 않게 된다. 핸들과 기어, 엑셀, 브레이크 조작이 어떻게 연계되어 자동차를 움직이는지 전혀 의식할 필요가 없다. 이제는 목적지로 제대로 가고 있는지에만 신경 쓴다. 운전을 하는 와중에도 의식적인 노력 없이 라디오를 듣고 노래를 부르며 동승자와 대화도 할 수 있다. 익숙해지면 마치 자동차가 우리 몸의 일부인 것처럼 몸에 배어 자연스러워진다.