저자: 폴 그레이엄 / 임백준 역
출처: 해커와 화가(폴 그레이엄 저 / 임백준 역, 2005) 중에서 chapter 2. 해커와 화가
• 해커와 화가 (1)
해커는 자신에 대한 평판 안에 해석의 여지가 많이 존재하도록 뒤로 물러설 필요가 있다. 이러한 점에서 보면 해커는 다른 창조자들과 다를 것이 없다. 해커는 오히려 운이 좋은 편에 속한다. 해킹이 유행에 영향 받는 정도는 그림의 경우보다 크지 않기 때문이다.
사람들이 당신의 작품을 엉뚱하게 이해하는 것보다 더 나쁜 일은 얼마든지 있다. 예를 들자면 누구보다도 우선 당신이 스스로의 작품을 잘못 이해하는 것이 그것이다. 당신은 자기와 관련된 분야에서 아이디어를 구하려고 노력한다. 당신이 컴퓨터 사이언스 학과에 속해 있다면, 해킹이라는 것이 사실은 컴퓨터 사이언스가 구축한 이론이 현실에 적용된 결과에 불과하다고 생각하기가 쉽다. 실제로 대학원 시절에 나는 뭔가 더 많은 이론을 알아야 한다는 강박관념과, 학기말 시험 후 3주가 지나면 공부했던 내용을 모두 잊어버리는 것 때문에 마음 한구석이 늘 불안했다.
그렇지만 이제는 내가 잘못 생각하고 있었다는 사실을 깨닫게 되었다. 해커가 계산 이론(computation theory)에 대해서 알아야 하는 것은 화가가 물감과 관련된 화학에 대해서 이해하는 정도면 충분하다. 예컨대 여러분이 파서(parser)를 작성한다면 시간과 공간의 복잡성(complexity)을 계산하는 방법과 상태 기계(state machine)의 개념에 대해서 알 필요가 있을 것이다. 그렇지만 사실 화가는 물감의 화학적 특징에 대해서 그보다 더 많이 기억하고 있을 필요가 있다.
나는 스스로에게 다가오는 영감의 원천이 “컴퓨터”라는 말이 포함된 학과에 존재하는 것이 아니라 창조자들이 모여드는 영역에 존재함을 알게 되었다. 다시 말하자면 그림은 내게 그 어떤 계산 이론보다 풍부한 영감의 원천이 되어 주었다.
예를 들어서 대학 시절에 어떤 문제를 풀 때에는 그것을 우선 종이 위에서 완전하게 푼 다음 컴퓨터 앞에 앉아야 한다고 배웠다. 하지만 나는 프로그래밍을 그런 식으로 하지 않았다. 그 당시 나는 분명히 몇 장의 종이보다는 컴퓨터 앞에 앉아서 프로그래밍 하는 것을 더 즐겼다. 또 전체적인 프로그램을 미리 신중하게 적어서 내가 생각하는 방향이 옳은지 여부를 확인하기 전에 조각난 코드부터 대책 없이 늘어놓은 다음 그것의 모양을 조금씩 잡아 나가는 방법으로 프로그래밍을 했다. 내가 배우기로 디버깅이란 틀린 철자나 부주의한 실수를 잡아내는 최후의 과정에 속했다. 그러나 내가 일한 방식대로라면 프로그래밍 자체가 완벽하게 디버깅으로 이루어져 있다.
초등학교 시절에 선생님이 가르쳐준 대로 연필이 잡히지 않아서 괴로워했던 것처럼, 나는 오랫동안 이런 프로그래밍 방식에 대해서 남몰래 부끄러워했다. 하지만 내가 그 당시에 화가나 건축가 같은 다른 창조자들이 일하는 방식을 알았더라면, 내가 프로그래밍 하는 방식을 지칭하는 특별한 이름이 있다는 사실을 알 수 있었을 것이다. 그 이름은 바로 ‘스케치’다. 적어도 내가 보기에 대학 시절에 배운 프로그래밍 방식은 전부 잘못되었다. 소설가, 화가, 그리고 건축가의 작업이 그런 것처럼 프로그램이란 전체 모습을 미리 알 수 있는 것이 아니라 작성해 나가면서 이해하게 되는 존재다.
이러한 깨달음은 소프트웨어 디자인에 대한 실질적인 의미를 갖는다. 그것은 프로그래밍이라는 것이 부드럽고 말랑말랑한 존재라는 엄연한 사실에 대한 재확인이다. 프로그래밍 언어는 당신이 이미 머릿속으로 생각한 프로그램을 표현하는 도구가 아니라, 아직 존재하지 않는 프로그램을 생각해내기 위한 도구다. 볼펜이 아니라 연필인 셈이다. 정적인 타입 체크(static typing)는 내가 대학에서 배운 식으로 프로그래밍을 하는 경우라면 별로 나쁘지 않은 생각이다. 하지만 나는 프로그램을 배운 식대로 작성하는 해커를 본 적이 없다. 해커에게 필요한 것은 무릎을 얌전히 모으고 앉아서 차 한 잔 마실 동안 타이핑을 하며 엄격하고 나이든 컴파일러라는 숙모와 대화를 나눌 때 쓰는 언어가 아니라 마음껏 내갈기고, 더럽히고, 사방에 떡칠을 할 수 있는 언어이다.
정적인 타입 체크에 대해서 말이 나온 김에 소프트웨어를 창조하는 사람들의 심리에 대해서도 한마디 하자. 그것은 과학과 충돌을 일으키는 골치 아픈 문제로부터 우리를 구원해줄 것이다. 그 문제란 바로 수학에 대한 질투심이다. 과학에 종사하는 사람들은 내심 우리들 중에서 가장 영리한 사람은 수학자라고 생각한다. 수학자들 자신도 그렇게 생각하는 것을 마다하지 않는 듯하다. 그 결과 결국 과학자들은 자신들의 업적을 최대한 수학적인 모습으로 장식한다. 물리학과 같은 영역에서는 이러한 태도가 별다른 해를 끼치지 않는다. 하지만 자연과학으로부터 멀어질수록 이와 같은 태도는 심각한 문제를 초래한다.
한 페이지를 가득 메운 수학공식은 겉보기에 그럴듯하다. (조언: 좀 더 인상적인 느낌을 주려면 그리스 문자를 사용하라.) 그렇기 때문에 사람들은 실제로 중요한 문제보다 수학공식에 입각해서 다룰 수 있는 문제를 풀어 보고자 하는 유혹을 받게 된다.
만약 해커가 소설가나 화가와 같은 종류의 창조자들과 함께 분류된다면 이러한 유혹을 받을 일은 없을 것이다. 소설가와 화가는 수학에 대한 질투로부터 자유롭다. 그들은 자기가 하는 일이 수학과 아무 상관이 없다고 생각하기 때문이다. 내가 볼 때는 해커도 그와 마찬가지다.