행복한 프로그래밍

컴퓨터 분야에서 전문 지식에 대한 글이 아닌 개발자의 이야기를 다룬 글이 읽고 싶어 한동안 서점을 찾아다녔었다. 개발자와 기획자의 갈등을 다룬 글은 종종 찾아볼 수 있었는데 아쉽게도 그건 내가 원하던 주제가 아니었다.(하지만 갈등이라니 언제나 흥미로운 소재 아닌가 나중에 읽어봐야겠다.) 이 책을 읽기 전에 '나는 프로그래머다'라는 책을 먼저 접했다. '나는 프로그래머다'의 첫 번째 글을 쓴 작가가 바로 '행복한 프로그래밍'의 저자 임백준이다. (사실 읽다가 루슨트 테크놀로지스 사의 이야기가 겹쳐서 그제야 동일 인물임을 깨달았다.) '나는 프로그래머다' 속의 열정에 불타올라 도전하는 개발자의 이야기에 나와 비교하기 시작하고 위축되어 잠시 글 읽기를 멈추었다. 그에 반해 '행복한 프로그래밍'은 훨씬 가벼운 마음으로 글을 읽을 수 있었다.

 

본인의 개인적인 경험뿐만 아니라 컴퓨터 역사에서 있었던 일들까지 머리 아프지 않게 흥미롭게 풀어놓는 작가의 글솜씨에 즐겁게 책 한권을 읽을 수 있었다. 책 중간중간에는 알고리즘 문제들이 끼어있는데, 책장을 넘기던 손을 잠시 멈추고 생각하기에 좋았다. 책의 초반에 나온 통나무 건너기 문제에서 내가 생각한 답을 콕 짚으며, 개발자에게는 본인이 생각한 답이 정말 최선인지 생각하는 자세가 필요하다고 했을 땐 그동안 실행화면에 원하는 답을 출력해내는 것에 급급했던 내 자세에 대해 생각하게 되었다. 

 

사실 알고리즘 문제를 풀기 위해서 무식한 방법(Brutal Method)을 사용하는 것은 흔하다. 문제를 풀기 위한 규칙이 바로 눈에 들어오지 않을 때, 무식하게 먼저 풀다보면 거기서 규칙을 발견하는 일이 흔하기 때문이다. 마치 수학 지문에서 수열을 이용한 탑 쌓기 문제를 풀 때, 그림으로 탑을 쌓아가다가 규칙을 발견하는 것과 같은 이치다. 하지만 무식한 방법을 통해 찾은 규칙과 원리가 가장 좋은 해결 방법인가? 아닐 가능성이 적지 않다. 여태 알고리즘 문제를 풀면서 화면에 '맞았습니다.'라는 결과를 보고 나면 뒤도 돌아보지 않고 다음 문제로 넘어가던 태도를 고치고 '코드를 더 깔끔하게, 더 빠르게, 더 효율적으로 작동하는 방법이 있을 것이다.'라는 생각으로 내 코드를 한 번 더 들여다보는 습관을 가지게 되었다. 

 

너무도 유명한 백준 온라인 저지에서 알고리즘 문제를 풀면(이 책의 저자인 임백준과는 관계 없다. 이 사이트의 대표자는 최백준이다.) 같은 언어를 이용해서 문제를 푼 사람들의 코드 길이와 사용한 메모리와 소요 시간을 볼 수 있다. 내 코드보다 짧고 적은 메모리로 빠르게 푼 코드를 열어 보고 내 코드와 바로 비교할 수 있다면 좋겠지만, 코드를 공개해 놓은 사람은 그리 많지 않아 답은 모른 채로 고민만 하는 시간을 종종 갖는다. 이러한 시간을 갖는 것이 쉽지는 않다. '맞았습니다'보다 '틀렸습니다'를 훨씬 더 많이 보게 되는 풀이 과정에서 지쳐버려 더 이상 문제를 보고 싶지 않기 때문이다. 그렇지만 내 코드의 메모리와 속도를 남의 코드와 비교해 보는 시간은 꼭 갖는다. 남과 비교해 눈에 띄게 좋지 않은 코드일 경우 부끄럽다. 이러한 부끄러움은 다음에 문제를 풀 때, 한 번 더 생각하는 원동력이 된다.

 

이 책에서 가장 공감한 부분은 문제를 해결할 때 갖는 희열 때문에 개발자가 된다는 것이었다. 처음 c언어를 배우면서 "Hello World!"를 보고 시시했다. 하지만 피라미드 모양으로 별찍기를 완성해 검은 화면에 하얀 *이 원하는 모양으로 찍혔을 때, 리스트를 직접 구현하기 위해서 온갖 쓸데없는 예외 처리를 끼워 넣다가 더 많은 버그를 만들어 내다가 겨우 완성했을 때, 이미지를 화면에 띄워 마우스 클릭 포인트를 목적지로 이미지가 이동하게 만들었을 때의 희열은 아직도 생생하다. 이제 별찍기와 같은 문제는 시시해진 지 오래지만, 점점 더 어려운 문제를 접하고 문제를 해결했을 때의 희열에 이제는 벗어나기 힘들 정도로 빠져버렸다.

 

"현실로부터 도피하는 수단 중에서 프로그래밍이야말로 으뜸이다. 그것은 점점 더 중독성을 띠면서 환상의 세계가 된다" 혹은 "이 세계는 자신이 창조해낸 법칙에 따라 움직이도록 하는 힘을 갖고 있기 때문에, 이를 성취하면 프로그래머들은 승리감을 만끽한다"가 되는 식이다. 요컨데 프로그래머들은 자신이 속한 비트의 세계에서 승리를 쟁취하기 위해서 혼신의 힘으로 전진하는 가상 세계의 전사들인 것이다.
- 행복한 프로그래밍 P.35

 

가벼운 마음으로 읽기 시작한 책에서 많은 공감과 새로운 관점을 얻을 수 있었다. 내가 나아가고자 하는 길이 이렇게나 흥미진진한 세계임을 재미있게 풀어주어 저자의 다른 책이 기대된다.

+ Recent posts