코드리뷰는 왜 필요한가

당신이 아는 것과 당신이 안다고 생각하는 것 - 사이언스 팩토리

사람들은 자신의 생각을 평가하는데 ‘너무’ 뛰어난 나머지 스스로의 생각을 과대평가 하는 경향이 있다고 한다. 이것은 심리학자들의 실험에서도 드러났는데, 가짜 철학, 문학, 생물학 용어를 만들어 낸 다음 (예를들자면 ultra-lipids, bio-sexual, retroplex 같은 식의 이상한 합성어들) 이것에 대해 사람들에게 알고 있는지, 익숙한 용어인지 물어보았다고 한다. 무려 124명중 110명의 사람이 이 가짜 용어에 익숙하다고 했다. 자신이 아는 것을 확대해석하기 때문에, 처음보는 가짜 용어이지만 안다고 생각한 것이다.

위 영상에 소개된 재미있는 실험이 한 가지 더 있는데, 실험자들에게 논리추론 문제를 풀게한 다음 답에 대해 논증을 쓰게 했다고 한다. 그리고 같은 문제에 대해서 다른 사람의 논증을 평가하도록 했는데, 사실 그 논증은 다른 사람의 논증에 자신이 쓴 논증이 섞여있는 것이었다. 놀라운 사실은 이들 중 절반은 섞인 논증을 알아차렸지만 알아차리지 못한 사람들도 있었고, 이들 중 일부는 극도로 비판적으로 자기 자신의 논증을 비판했다.

Self-serving biases와 코드리뷰

프로그래밍도 논리추론과 마찬가지로 논리를 전개해나가는 과정이니 소스코드는 논증과 유사하다고 할 수 있다. 비슷한 프레임워크, 비슷한 라이브러리, 비슷한 프로그래밍 언어는 때때로 개발자가 ‘안다’고 생각한 나머지 정작 자신이 모르는 것을 보지 못하게 만들 수 있다.

이런 자신에 대한 과대평가가 어느 순간 버그를 만들어내고, 디버깅을 힘들게하는 요소로 작용한다. 그리고 자신이 작성한 코드와 소프트웨어는 대개 ‘너무 잘’ 평가한다. (그렇지 않다면 프로덕션에서 버그리포팅이 올 리가 없지…) 그렇기 때문에 이런 심리적인 문제를 극복하려면 동료들의 도움이 필요하다. 코드리뷰를 통해서 다른 사람이 쓴 코드를 볼 때, 자신이 쓴 코드를 보는 것 보다 비판적으로 볼 수 있고 어떤 경우에는 자신이 쓴 코드마저 비판적으로 보이는 순간이 있기 때문이다.