코드 리딩(reading)의 중요성 :: 2007/09/18 11:21


신입 개발자를 위한 조언
코드 리딩(reading)의 중요성
신영진, codewiz@gmail.com, http://www.jiniya.net

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

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

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

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

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

스폰서
글타래

  • 2주간 인기 글
  • 2주간 인기글이 없습니다.
Trackback Address :: http://jiniya.net/tt/trackback/609
  • code reading

    Tracked from from __future__ import dream | 2007/09/18 13:29 | DEL

    약 1년전만해도 남의 소스 코드 보는걸 굉장히 싫어 했다. 물론 지금도 처음 보기 시작할때는 정말 고통의 연속이다. 눈이 충혈되고, 짜증도 나고..... 쩝 그러다 때려 치기를 여러번, 드디어 고..

  • Code reading

    Tracked from 로니강님의 이글루 | 2007/09/20 05:02 | DEL

    내가 만든 프로그램이 아니면 관심을 가지고 본적이 없었던 것 같습니다.다른 사람에 코드를 읽는다는 것은 나쁜?짓 처럼 느껴졌기 때문이죠.아마 대딩 시절 자료구조나 알고리즘 시간에 각 ..

  • Gravatar Image.
    키눅스 | 2007/09/18 13:03 | PERMALINK | EDIT/DEL | REPLY

    저희 팀에도 이러한 코드 리딩을 우습게(?) 아는 친구들이 있어서.. 늘 안타까워 하고 있습니다. 중요하다 중요하다 해도... 잘 느끼지 못하는 것 같고...

    • Gravatar Image.
      codewiz | 2007/09/19 10:37 | PERMALINK | EDIT/DEL

      정말 안타까운 일이네요.
      알고도 실천하지 않는건 정말 큰일이네요.

  • Gravatar Image.
    object | 2007/09/19 02:18 | PERMALINK | EDIT/DEL | REPLY

    malloc 소스 한 번 분석해보니 참 힘들더구만요. 매크로에 거의 두 손 두 발 다 들뻔했죠. STL 같은 소스도 거의 암호 수준이죠... ㄷㄷㄷ 그래서 늘 생각하고 있는 툴이 있는데요. 소스 코드에도 스타일 시트라는 개념을 도입해서 어떤 소스가 오더라도 자기 입맛에 맞도록 인덴테이션이나 { } 등을 바꿔줬으면 좋겠다는 생각이 들어요. 좀 더 똑똑하면 변수명까지도 바꿔줄 수 있지 않을까요. 헝그리안을 고집하는 건 아닌데 클래스 멤버 변수에 m_ 같은 것이 없으면 늘 헷갈리더라구요. 이런 툴 만들기가 그렇게 아주 어렵지는 않을 것 같은데.. 흠..

    • Gravatar Image.
      codewiz | 2007/09/19 10:54 | PERMALINK | EDIT/DEL

      복잡한 매크로와 템플릿은 코드 읽는 작업의 복잡도를 극도록 올리는 것 같아요. STL 소스는 이상하게 암호문처럼 작성해 두었더군요. 저는 처음 봤을때 기계가 작성한 소스인 줄 알았습니다. ㅋㅋ

      네이밍을 변경해주는 툴은 잘 모르겠지만, 인텐트는 indent나 에디터에 있는 오토 인덴트 기능을 사용하면 자동으로 변환할 수 있습니다. Notepad2에는 artistic style(http://sourceforge.net/projects/astyle/)로 구현한 오토 인덴트 기능이 있더군요.

      네이밍도 지역, 타입에 따라 적절한 프리픽스를 붙이도록 만드는게 아주 어렵지는 않을 것 같습니다.

  • Gravatar Image.
    elixir | 2007/09/19 13:20 | PERMALINK | EDIT/DEL | REPLY

    "영문학을 전공한 학생이 영어 소설 한번 읽어보지 않고 졸업한 것과 다를 바 없는 상황이다"
    적절한 비유에 놀랐습니다. 읽는 것이 기본이 되어야 쓰는 것도 잘 할수 있다고 생각합니다.

    • Gravatar Image.
      codewiz | 2007/09/19 16:38 | PERMALINK | EDIT/DEL

      감사합니다.
      읽기가 잘 되어야 쓰기도 잘 된다는 의견은 저도 같은 생각합니다.

  • Gravatar Image.
    peterpan | 2008/04/16 00:51 | PERMALINK | EDIT/DEL | REPLY

    아 글 너무 멋져요..
    정말 너무 등한시 하고 있었던 듯 한..

    퍼가요~♡

  • Gravatar Image.
    k4type | 2009/07/12 19:28 | PERMALINK | EDIT/DEL | REPLY

    공감하는 내용입니다. 잘보고 갑니다 $;-)

  • Gravatar Image.
    songms | 2011/01/07 17:29 | PERMALINK | EDIT/DEL | REPLY

    읽으며 배울 부분이 많다고 생각합니다.
    일부분 발췌해 가겠습니다. 감사합니다.

  • Gravatar Image.
    정부일 | 2011/10/23 14:02 | PERMALINK | EDIT/DEL | REPLY

    좋은 글입니다.
    좋은 코드와 나쁜 코드를 읽어야합니다.
    왜 좋고 왜 나쁜지.

Name
Password
Homepage
Secret