해커와 화가 - Paul Graham
Hackers & Painters - Paul Graham
Publication date: 2010.07.06
Author: Paul Graham
Rate: ★ 3.8
Pages: 364
Comment: 폴 그레이엄이 가진 프로그래밍에 대한 신념이, 생각의 다양성을 이끌어냈다. 한 번도 생각해보지 못했던 프로그래밍에 대한 표현을 만날 수 있었고, 새로움이 재미로 다가왔다.
책은 그가 분석한 해커 세상에 대한 날카롭고 대범하며, 솔직한 견해를 덧 붙인다.
크게 아쉬웠던 부분은 문장력이었는데, 원문이 원인인지 번역이 원인인지 알 수 없지만, 각주나 문장에서 역자의 노력이 보임에도 불구하고 외국어를 한국어로 번역할 때의 부자연스러움을 꽤 느꼈다.
summary: 해커와 화가는 닮았다. 그들은 새로운 것을 창조하며, 혁신적인 생각으로 뛰어난 작품을 만들어 낸다. 그들은 아름다운 것을 만들어 내며, 좋은 디자인을 만들어 가는 공통된 특징이 있다.
Hacker?
대부분의 "해커"를 남은 컴퓨터에 침입한 사람이라는 의미로 사용한다.
하지만, 프로그래머에게 있어서 "해커"란 문자 그대로 어떤 것에 정통했다는 의미를 담고 있다.
즉, 컴퓨터가 원하든 아니든 컴퓨터를 자기가 원하는 대로 조작할 수 있는 사람이라는 의미다.
일반인이 생각하는 해커로는 해킹을 하고 정보를 훔치는 나쁜 일을 하는 크래커의 개념으로 많이 알고도 있는 것을 보게 된다.
저자가 소개하는 해커와 화가의 공통점
- 그들은 둘 다 무엇인가를 창조한다.
작곡가, 건축가, 작가와 마찬가지로 해커와 화가는 좋은 무엇을 만들어 내기 위해 노력한다.
창조의 과정에서 훨씬 좋은 새로운 기술을 발견하기도 한다.
좋은 해커는 모든 것에 대해서 의문을 품는 습관을 지니고 있다. 기계식 손목처럼 복잡하면서 그 크기는 수천 배인, 단어로 이루어진 컴퓨터를 상대로 일할 때는 그렇게 끊임없이 의문을 품는 습관이 반드시 필요하다.
둘, 해커와 화가
재밌게 읽었던 부분은, 저자가 "컴퓨터 사이언스"라는 말을 좋아하지 않는 이유였다.
그 첫 번째 이유로, 컴퓨터 사이언스는 존재하지 않는다고 말한다.
이 단어가 겉보기엔 연관된 것처럼 보이는 영역을 연결시켜둔 것처럼 느껴진다고 한다.
실제로 컴퓨터를 다루는 일이 수학, 물리학, 건축학을 섞어놓은 영역이라는 점에서,
과연 "컴퓨터 사이언스"라는 단어가 이 모든 것을 함축시킬 수 있는지를 본다면
전혀 아니라는 것이다.
같은 맥락에서 "소프트웨어 엔지니어링"도 잘못된 인식을 심어준다고 말한다.
두 번째 이유로는, 단어 그대로 "과학"이 아니라는 이유에서다.
컴퓨터를 다루는 아주 내부 영역은 실험 과학일 수 있더라도, 그 외의 사람들은 과학을 하지 않는다.
아름다운 소프트웨어인지 아닌지 측정할 수 있는 유일한 외적인 방법은 시간이다.
시간이 지남에 따라서 아름다운 것은 퍼지고 못난 것은 사라진다.
책을 읽으면 종종 들었던 인상적인 점은,
저자가 소프트웨어를 다루는 일을 실제 하나의 예술을 다루는 것처럼 표현한다는 점이었다.
폴 그레이엄은 본인이 프로그램하는 방식에 특별한 이름을 붙였다.
바로 "스케치"이다.
전체적인 프로그램을 미리 신중하게 적어,
생각하는 방향이 옳은지 여부를 확인하기 전에 조각난 코드부터 대책 없이 늘어놓은 다음,
그것의 모양을 조금씩 잡아 나가는 방법으로 프로그래밍했다.
디버깅이란 틀린 철자나 부주의한 실수를 잡아내는 최후의 과정이라고 여겨지지만,
내가 일한 방식대로라면 프로그래밍 자체가 완벽하게 디버깅으로 이루어져 있다는 것이다.
그것은 프로그래밍이라는 것이 부드럽고 말랑말랑한 존재라는 엄연한 사실에 대한 재확인이다.
또, 소프트웨어를 제작할 때 완벽한 시작은 없다는 것을 말하는 내용도 있었다.
우리가 그림 그리기에서 생각해 볼 수 있는 것 또 하나는 그림이 점진적인 세공의 과정을 거쳐서 완성된다는 점이다.
그림은 대개 스케치에서 시작되어 세밀한 부분이 조금씩 더해진다.
...
엑스레이를 통해 서 들여다보면 많은 그림에서
팔다리를 여기저기로 옮기고 얼굴 표정을 셀 수 없이 고친 흔적을 고스란히 볼 수 있다.
우리가 그림으로부터 배울 수 있는 것이 이것이다.
나는 해킹도 이와 같은 방식으로 진행되어야 한다고 생각한다.
프로그램을 위한 스펙 요구사항 이 완벽할 것이라고 기대하는 것은 환상이다.
그것을 처음부터 인정하고, 개발 도중에 스펙이 바뀌는 것을 수용할 수 있는 방식으로 프로그램을 짜는 것이 현명할 것이다.
폴 그레이엄은 이 내용에 덧붙여
큰 회사에서는 이런 수정이 어렵기 때문에 스타트업이 가질 수 있는 강점으로 말했다.
셋, 우리가 말할 수 없는 것
그는 해커와 이단이 세상의 통념에 반해 혁신적인 생각을 한다는 의미에서 비슷하다고 본다.
이와 관련해, 위대한 업적은 다른 사람이 간과하는 생각에서 자라난다는 주장을 하며,
훌륭한 일을 수행하기 위해서는 우선 당신의 두뇌가 가볼 수 있는 모든 곳을 열심히 가보는 것이 좋다고 말한다.
이와 관련해서 기억에 남는 이야기가 하나 있다.
닫힌 사고,
: 말할 수 없는 것을 발견했을 때, 그것을 입 밖에 내지 말라.
미래에 노란색을 금지하는 운동이 일어날 거라고 가정해 보자.
노란색을 쓰려는 움직이려 한다면, 오직 노란색만 좋아하는 사람이라는 의미를 띤 "노란색주의자"라는 경멸적인 딱지가 붙는다.
오렌지색을 좋아하는 사람은 다소 의심을 받긴 하지만 용납이 된다.
그런 상황에서 당신이 노란색이 문제될 건 없다는 사실을 깨달았다고 하자.
만약 당신이 이 말을 한다면, "노란색주의자" 라는 딱지가 붙을 것이다.
또, 반노란색주의자들과의 엄청난 논쟁에 휘말리게 될 것이다.
당신의 삶의 목표가 노란색의 권리를 회복시키는 것이라면, 원하던 바일 것이다.
하지만 당신이 다른 일에 더 관심이 있다면, 노란색주의자라는 딱지는 방해가 될 것이다.
-
가장 중요한 점은 당신이 원하는 것을 말하는 것이 아니라, 그냥 생각하는 것이다.
만약 당신이 스스로 생각하는 모든 것을 입 밖으로 내어 말한다면, 그것은 파격적인 생각에 방해가 된다.
당신의 생각과 말 사이에 날카로운 경계선을 그어라.
머릿속에서는 무엇이라도 허용이 되지만, 외부자에게 발설되면 곤란하다.
그의 재미난 생각이 인상깊었고, 그가 이를 통해 전하고자 하는 얘기 또한 흥미로웠다.
과감한 생각을 창의적인 스토리로 표현해냈다는 게 인상깊었던 것 같다.
사실, 해당 내용의 저자가 하고 싶은 내용을 온전히 받아들이진 않은 것 같다.
이유는 머리로는 이해를 했고, 실제로 본인이 머릿 속에서만 생각을 해온 적이 있기 때문이다.
하지만, 이 것이 한 번도 파격적인 생각을 만들어 낸다는 생각을 해본 적이 없어서 그렇다고 느낀다.
만약 이후 본인이 파격적인 생각을 하고 있고, 이를 통해 더 큰 파격적인 생각을 했음을 의식한다면
그 때 분명 이 책이 기억날 것이다.
여덟, 스팸을 위한 계획
폴 그레이엄은 스팸 필터 알고리즘을 처음 개발한 사람으로도 유명한데,
관련된 내용을 본 책에서 다루었다.
스팸 메일을 필터링할 때 어떻게 할지 한 번 생각해보며 읽어보며 그 내용은 꽤 흥미로웠다.
스팸은 몇 가지 간단한 규칙만으로도 대부분의 스팸을 막아낼 수 있다.
가령, "클릭"이라는 단어를 포한한 메일을 스팸으로 간주해보면 79.9%가 올바르게 필터링 되었고, 1.2%의 정상 메일이 잘못 걸러졌다.
오히려 필터링 규칙을 지나치게 강화하면 잘못된 필터링의 확률이 높아진다고 한다.
이와 관련한 메일 필터링에 대한 저자의 이야기가 더 나오는데, 이 부분을 굉장히 흥미롭게 읽었다.
열하나, 100년 후의 프로그래밍 언어
그는 언어를 만들면서 스스로 깨달은 사실과 그의 견해들을 분석적이고 냉소적으로 말하곤 한다.
내가 자바는 성공적인 언어가 아니라고 말하는 이유는 더 구체적이다.
결국 자바도 진화의 과정에서 언젠가 막다른 길에 이르게 될 것이라는 의미다.
폴 그레이엄은 자바 언어에 대한 종말의 가능성을 열어둔다.
그가 주장하는 내용들을 보았을 때, 이런 주장을 꽤 선명하게 느낄 수 있다.
위 문장의 바로 다음 문장에 부정의 가능성을 열어두지만 말이다.
하지만 이것은 단지 추측에 불과하다. 내가 틀릴 수도 있다.
이후, 그가 말하는 프로그래밍 언어의 특징에서 그 이유를 찾을 수 있는데,
그 내용은 바로 다음 문단에 나오는 말이다.
프로그래밍 언어의 발전 가능성은 제한되어 있고,
쉽게 변종이 탄생하지 않기 때문에 수렴convergence이라는 현상은
실제 종의 진화보다 언어에서 더 잘 일어날 것이다.
언어를 설계하는 사람들은 다른 언어로부터 아이디어를 빌려오기 위해서 의식적으로 노력하기도 한다.
위를 본인의 표현으로 풀어보자면 다음과 같다.
프로그래밍 언어는 수 많은 나무 줄기처럼 생성되기도, 뻗어나아가기도 한다.
하지만, 프로그래밍 언어의 진화는 마치 로그 그래프가 점근선을 따라 한계지어지는 것처럼,
점근선이라는 한계가 존재한다는 것이다.
언어가 발전될 때 발견할 수 있는 재미있는 사실이 있는데,
고급 프로그래밍 언어와 점점 멀어지는 언어들이 생겨난 후,
그 언어들이 발전할 때마다 그 언어는 점점 근본 언어들의 모습과 비슷해진다는 것이다.
이후에는 리스프 언어에 대한 이야기들이 주를 이룬다.
한 번쯤 읽어보기 좋은 내용들로 구성된다.
만약, 본인이 신입이거나 자신의 개발 이념을 환기시키고 싶다면 한 번쯤 읽어볼만한 내용이다.