[소고] 코드 리딩(reading)의 중요성

@codemaru · September 18, 2007 · 8 min read

내가 컴퓨터 공학과 교과 과정에서 느끼는 가장 큰 안타까움은 코드 리딩의 중요성을 누구도 가르치지 않는다는 점이다. 그래서 컴퓨터 공학과를 졸업하고도 코드 리딩이 무엇인지, 그것이 어떻게 도움이 되는지를 모르는 웃지 못할 일들이 벌어진다. 이는 영문학을 전공한 학생이 영어 소설 한번 읽어보지 않고 졸업한 것과 다를 바 없는 상황이다. 왜 이런 악몽 같은 일이 벌어졌을까? 바로 베끼기 때문이다. 수업 과제로 나오는 프로그래밍 과제를 베끼지 않게 하기 위해서 남의 코드를 읽거나 서로 보여주는 것이 나쁘다고 학생들에게 주입시킨 결과라고 할 수 있다. 정말 안타까운 일이 아닐 수 없다.

예전에 “성공 시대”라는 TV 프로에 안철수씨가 나온 적이 있다. 그 때 안철수씨가 바둑을 배운 과정이 짤막하게 소개되었다. 우리는 바둑을 처음 배울 때 으레 화점에 돌을 놓는 것에서 시작한다. 하지만 안철수씨는 이와는 달리 바둑은 두지 않고, 바둑 관련 서적만을 열심히 읽었다고 한다. 그렇게 몇 십 권의 바둑 서적을 독파하고 나서야 처음으로 바둑을 두었는데, 신기한 사실은 처음 바둑을 둔 그의 실력이 아마추어로는 상당한 수준이었다는 점이다. 책을 읽으면서 실전의 다양한 경우에 대한 사전 경험을 했던 것이다. 코드를 작성하는 것도 이와 별반 다를 것이 없다. 좋은 코드를 읽는다는 것은 바둑 책을 읽는 것과 같다. 윈도우 개발자를 꿈꾼다면 완성된 윈도우 프로그램 소스를 분석해 보도록 하자. 어떤 책에서 배울 수 있는 것 보다 더 값진 경험을 하게 될 것이다. 이렇듯 좋은 코드를 작성하기 위함이 코드를 읽어야 하는 첫 번째 이유가 된다.

우리는 많은 경우에 남이 작성한 소스를 수정하는 일을 한다. 처음부터 완전히 새로 무엇을 만드는 경우는 흔치 않다. 이미 만들어진 소스의 버그를 수정하거나 새로운 기능을 추가하거나 하는 작업이 대부분이다. 이런 경우에 남의 소스를 읽어본 적이 없는 사람은 굉장히 당황한다. 자신의 생각 외에는 읽는 방법을 모르기 때문이다. 심지어는 다른 인덴트 방식, 다른 네이밍 방식 때문에 소스가 눈에 들어오지 않는 경우도 있다. 이는 코드 리딩을 충분히 하지 않은 탓이다. 코드 리딩을 많이 해본 개발자라면 자신의 스타일과 다른 코드도 별 무리 없이 읽고 그 뜻을 이해할 수 있다. 과거 그러한 패턴의 코드를 읽어본 경험이 많이 때문이다. 이와 같이 이미 만들어진 소스를 분석하는 작업을 쉽게 하기 위함이 코드를 읽어야 하는 두 번째 이유다.

몇 해전 작성한 코드를 지금 한번 다시 만들어 보자. 그리고 새로운 코드를 몇 해전에 작성한 코드와 비교해 보자. 아마 기교적인 부분은 상당히 바뀌었겠지만 큰 흐름은 별로 바뀌지 않았을 것이다. 그래프 컨트롤을 새로 만들었다고 생각한다면 DC를 조작하고 점을 나열해서 그리는 것과 같은 테크닉은 발전했을 지라도 그래프의 각 요소를 C++의 클래스화 시키는 구조나 그래프의 점들을 저장하는 구조, 좌표를 변환하는 체계 등은 변하지 않는다는 말이다. 쉽게 바뀌지 않는 이유는 그것이 그 사람의 생각의 틀이고, 그 사람의 사고 방식이기 때문이다. 보통 성인이 되면 성격과 사고 방식은 굳어져서 쉽게 바뀌지 않는다. 남의 코드를 읽지 않는다면 이러한 자신의 틀 속에서 빠져 나올 수가 없다. 심지어는 그것이 늘 최선의 방법이라고 생각하는 우를 범할 수도 있다. 이런 자신의 도그마(dogma)를 깨는 가장 좋은 방법이 코드 리딩이다. 자신과 동일한 분야의 다른 소스를 봄으로써 다른 사람의 사고 방식, 생각의 구조, 논리의 패러다임을 배울 수 있다. 자신의 생각의 한계를 깨고 좀 더 유연한 사고를 가지기 위함이 코드 리딩의 세 번째 이유다.

코드 리딩이 가지는 이런 이점에 비해서 학교에서 지적하는 베끼기란 아주 사소한 부작용에 지나지 않음을 알 수 있다. 말 그대로 빈대 잡으려다 초가 삼간 태우는 형국이 아닐 수 없다. 코드를 좀 더 넓은 관점에서 바라볼 필요가 있다. 논어, 맹자, 중용, 대학, 시경, 서경, 주역에 이르는 사서삼경을 우리는 고전이라 부른다. 그리고 그것을 선대 학자들이 우리에게 남겨준 위대한 선물로 생각한다. 그것을 읽는 것을 누구도 부끄럽게 여기지 않는다. 코드는 이와 같이 앞서간 선배 개발자들이 우리에게 남겨준 엄청난 문화유산이다. 우리는 그것을 읽고, 갈고 닦아서 더 나은 것을 만드는 밑거름으로 사용해야 한다. 그러한 것을 버리고 굳이 돌도끼부터 새로 시작할 필요는 없는 것이다.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중