해커와 화가 (폴 그레이엄, 2005) 독후감
리스프(Lisp) 얘기가 나오면 컴퓨터 프로그램의 구조와 해석 (SICP)과 같이 언급되는 책이다. 리스프가 짱이고 빠심이 충만한 책이라고 들었다. 마침 SICP로 내 속에 리스프에 대한 빠심이 쌓여 있는 터라 지금이 아니면 못 읽겠다 싶어서 책을 구해서 읽었다. 절판이라 도서관에서 빌렸다. 요즘은 정말 절판이 겁나서 당장 필요하지 않아도 괜찮다 싶으면 책을 산다.
대부분의 언론 매체들은 ’해커’를 누군가 남의 컴퓨터에 침입한 사람이라는 의미로 사용한다. 하지만 프로그래머 사이에서는 좋은 프로그래머라는 의미다.
그래 이게 진짜 해커란 단어가 가진 뜻이다. 아무것도 모르는 언론 매체 덕분인가 크래커(cracker)를 지칭하는 용어가 어느새 해커가 되어 버렸다. 크래커라 하면 먹는 것처럼 느껴져서 해커라고 불렀나? 것 참. 여튼 덕분에 진짜 해커들을 부를 용어가 사라졌다.
하지만 내가 그 당시에 화가나 건축가 같은 다른 창조자들이 일하는 방식을 알았더라면, 내가 프로그래밍하는 방식을 지칭하는 특별한 이름이 있다는 사실을 알 수 있었을 것이다. 그 이름은 바로 ’스케치’다. 적어도 내가 보기에 대학 시절에 배운 프로그래밍 방식은 전부 잘못되었다. 소설가, 화가, 그리고 건축가의 작업이 그런 것처럼 프로그램이란 전체 모습을 미리 알 수 있는 것이 아니라 작성해 나가면서 이해하게 되는 존재다.
올바른 도구는 우리가 이러한 위험을 피하도록 도와준다. 좋은 프로그래밍 언어는 마치 유화 물감처럼 여러분의 생각을 나중에 번복하는 것을 용이하게 만들어 주어야 한다. 동적인 타입 체크는 특정한 데이터 표현을 처음부터 고민할 필요가 없도록 만들기 때문에 바로 이와 같은 역할을 담당해 준다. 하지만 이와 같은 유연성과 관련된 핵심적인 사항은 언어를 매우 추상적으로 만드는 것으로 보인다. 수정하기에 가장 용이한 프로그램은 결국 짧은 프로그램이기 때문이다.
프로그래밍 언어에 대한 폴 그레이엄에 통찰 때문에 이 책이 유명한 것 같다. 프로그래머와 화가는 무언가를 만든다는 것 그리고 만드는 과정이 비슷하다고 설명한다. 그런데 화가가 만드는 방식과 다르게 프로그래머는 확정되지도 않고 알 수도 없는 전체 모습을 미리 그리는 문제를 안고 있다.(요즘은 점진적인 설계를 수용하고 있다.) 덧칠을 쉽게 해서 화가가 좋은 작품을 만들 수 있게 한 유화 물감처럼 프로그래밍 언어 또한 쉽게 번복하고 수정할 수 있다면 좋은 작품을 만드는 데 도움이 된다. 그런 언어가 바로 리스프(나왔다. 리스프!)이다.
걍 리스프가 짱이라는 얘기로 들릴 수가 있어 반감이 들 수도 있겠지만, 많이 동의하는 부분이 있다. 작성하면서 이해한 경험도 많아서 ‘스케치’란 용어가 특히 와 닿았다. 주로 C++을 사용해서 개발을 하는데, 설계에 대한 생각을 번복하는 게 여간 번거로운 게 아니다. C++ 특성상 워낙 다양한 문법, 구현 구조가 있어 IDE나 add-on에서 리팩토링 기능을 지원하는 게 한계가 있어 보인다. (제발 킹왕짱 프로그램이 나타나주길) 완벽히 지원하면 좋으련만 이러다 보니 다른 곳에 신경을 써야 해서 설계에 대한 집중이 깨지기 십상이다. 이런 부분은 동의.
추가로 검증 후 버리는 프로토타입과 달리 다시 사용할 코드를 작성하는 경우 달리 부를 적당한 이름이 없어서 고민했는데, ’스케치’라 부르면 적당하겠구나.
리스프는 그것을 마침내 손에 넣게 되었을 때 경험하게 되는 심오한 깨달음을 위해서라도 배울 가치가 있다. 리스프를 이용할 일이 그렇게 많지 않다고 할지라도 그 경험은 그 자체만으로도 당신을 훨씬 훌륭한 프로그래머로 만들어줄 것이다.
리스프 빠심 충전 완료. 읽고 나니 리스프를 진지하고 제대로 배우고 싶어진다.
프로그래밍 언어에 대한 통찰력만으로도 이 책은 충분한 값어치가 있다. 거기에다 벤처 기업에 대한 생각, 프로그래머가 창조하는 부에 관한 얘기, 비아웹 경험담처럼 재미가 쏠쏠한 얘기도 실려 있다.
Update
표지 사진 교체