통찰력(insight)을 찾아서

@codemaru · May 11, 2007 · 6 min read

통찰력이란 문제의 지엽적인 부분보다는 전체를 통해서 근본적인 원인을 꿰 뚫어보는 능력을 말한다. 여기서 가장 중요한 부분은 넓게 본다는 것이다. 한 가지 변수만을 고려하지 않고 여러 가지 변수를 통합적으로 보는 것이 핵심이다. 문체 해결을 주업으로 삼고 있는 개발자에게 통찰력이란 특히 더 중요한 능력이다. 그렇다면 이렇게 중요한 통찰력을 기르기 위해서는 어떻게 해야 할까?

가장 큰 근간은 경험이다. 많은 경험은 더 많은 변수를 동시에 볼 수 있도록 시야를 넓혀준다. 연애를 천 번 해본 카사노바와 이제 처음 연애하는 순진남이 애인과 싸웠을 때 누가 더 능숙하게 대처할 수 있을까? 당연히 전자다. 개발자에게 가장 큰 경험은 직접 프로그램을 작성하는 것이다. 자신이 불편함을 느낀 점, 다른 사람이 자신에게 불편함을 호소한 것에 관해서 자발적으로 프로그램을 작성하는 것은 훌륭한 경험이 된다.

그렇다면 단순히 많이 경험하는 것이 전부일까? 그렇다면 통찰력은 아마 나이 순대로 매겨질 것이다. 하지만 그렇지 않다. 간접 경험인 독서가 있기 때문이다. 양질의 스타크래프트 경기를 경험하는 데는 최소 30분 이라는 시간이 걸린다. 다른 사람의 리플레이를 보는 데는 그보다 짧은 10분이 걸린다. 해당 경기의 요점을 정리한 노트를 읽는 데는 1분이면 충분하다. 이것이 독서의 힘이다. 경험하는데 걸리는 시간을 비약적으로 단축시키는 것이다. 개발자에게 독서는 다른 사람의 코드를 읽는 것이다. 대부분의 오픈 소스 프로그램은 잘 훈련된 개발자들에 의해서 만들어지기 때문에 훌륭한 코드인 경우가 많다. sourceforge.net과 같은 사이트에서 자신의 관심 분야와 관련된 코드를 꾸준히 읽도록 해야 한다. 뉴스그룹을 구독하거나 FAQ 등을 읽는 것도 훌륭한 간접 경험이다.

불행히도 경험과 독서는 시작에 불과하다. 통찰력을 키우는데 가장 중요한 것은 사색이다. 아무리 많은 경험을 하고, 독서를 하더라도 그것을 뒤돌아 보지 않는다면 그것은 경험하지 않은 것과 똑같다. 그래서 반드시 사색을 해야 한다. 이 과정에서 경험과 독서를 통해 얻은 정보가 몸에 베고 진정한 자기 것이 된다. 또한 그 숙성 과정이 좀 더 심화되면 자신만의 이론과 체계를 세울 수 있다. 사색이라고 해서 단순히 자신이 작성한 프로그램과 읽은 코드에 관해서 앉아서 명상을 하는 것은 아니다. 이 단계에서 사용할 수 있는 효과적인 방법으로 코드 리라이팅과 패치가 있다.

코드 리라이팅은 동일한 기능을 하는 코드 조각을 다른 관점에서 새롭게 작성해 보는 것이다. 좀 더 짧게 만들어 보기도 하고, 범용적으로 만들어 보기도 하고, 특정한 제약을 두어서 만들어 보는 것이다. 이 과정에서 기존 코드가 가진 문제점을 발견할 수 있고, 제약이 있는 상황에서의 문제 해결 능력을 기를 수 있다.

패치는 자신이 읽은 코드 내지는 자신이 만든 프로그램의 코드를 좀 더 발전시켜 보는 것이다. 패치 작성을 통해서 이미 만들어진 프로그램을 고치는 것이 어렵다는 것과 수정이 손쉽게 만들 수 있는 구조에 관해서 많은 것들을 배울 수 있다. 신입 개발자들은 여러 가지 이유로 수정보다는 새로 만드는 것을 선호한다. 하지만 반드시 기억해야 할 점은 위대한 소프트웨어는 수많은 패치를 통해서 제작된다는 점이다.

세상에 공짜는 없다. 시간이 지난다고 저절로 되는 것도 없다. 통찰력도 마찬가지다. 10년 동안 개발을 한다고 저절로 생기는 것이 아니다. 통찰력으로 무장한 백발의 개발자를 꿈꾼다면 체계적으로 준비하고 부단히 노력해야 할 것이다.

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