지은이 / 폴 그레이엄 | 옮긴이 / 임백준
해커와 화가
초판발행 2014년 1월 6일
지은이 폴 그레이엄(Paul Graham)
옮긴이 임백준
펴낸곷 한빛미디어(주) /서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부
나는 학창시절에 공부벌레였던 사람을 많이 알고 있는데 그들이 하는 말은 대개 엇비슷하다. 즉, 똑똑하다는 것과 공부벌레라는 사실 사이에는 비례관계가 뚜렷이 보인다는 것. 하지만 공부벌레라는 사실과 아이들에게 인기가 좋다는 사실 사이에는 반비례 관계가 더 뚜렷하게 나타난다는 것이다. [15p]
공부벌레들은 두 마리 토끼를 쫓는 셈이다. 그들은 인기를 바라지만, 그보다 똑똑해지는 것을 더 열망한다. 더구나 인기라는 것은 남는 시간을 써서 어떻게 해볼 수 있는 것도 아니다. [17p]
하지만 내가 보기에 아이들이 공부벌레를 배척하는 진짜 이유는, 말하자면 그런 배척이 인기를 얻는 원리의 일부이기 때문이다. 개인의 매력은 인기에 부분적으로만 관여한다. 사실 인기는 연합과 더 깊은 관련을 가진다. 좀 더 많이 얻기 위해서는 다른 인기 있는 사람들과 가까워지기 위해 끊임없이 노력해야 한다. 그리고 그렇게 하는 데에는 공동의 적을 갖는 것보다 좋은 방법은 없다. [22p]
인기가 없는 아이들로부터 거리를 유지하는 것은 인기를 관리하는 데 도움이 되지만, 그 아이들에게 가까이 다가가면 인기가 떨어진다는 측면도 있었다. 내가 아는 어떤 여자아이는 고등학교 시절에 사실 공부벌레들을 좋아했지만, 다른 친구들이 자기를 놀릴까 봐 그들에게 가깝게 다가가지 못했다고 고백했다. 인기가 없다는 사실은 일종의 전염병에 속한다. [23p]
내가 보기에 가장 중요한 것은 사회가 성장한 어른으로 구성되었다는 것이 아니라, 사회는 굉장히 크고, 그 안에서의 어떤 행동은 구체적이고 실질적인 결과를 초래한다는 점이다. 이것은 학교, 감옥, 점심시간에 모이는 여자들의 조직에 없는 부분이다. 그런 세계의 구성원은 어떤 행동이 결과가 그 세계의 테두리를 벗어나지 못하는 작은 물방울 같은 공간에 갇혀 있다. 그렇기 때문에 그런 조직은 시간이 지남에 따라 차츰 별 볼 일 없는 모습으로 퇴화한다. [25~26p]
만약 어떤 행동을 수행한 결과가 구체적이고 실질적인 의미를 갖기 시작하면, 단순히 즐거움을 추구하는 것은 더는 충분한 동기가 되지 못한다. 이제는 올바른 답을 찾는 것이 가장 중요한 의미를 갖기 시작하며, 바로 이 순간 공부벌레가 지니고 있는 장점이 빛을 발하기 시작한다. [26p]
좀 더 자랐을 때 나는 갈 곳도 없고, 할 일도 없다고 느꼈다. 이것은 우연이 아니다. 교외라는 곳은 아이들에게 위험을 초래할 수도 있는 외부 세계를 철저하게 격리하도록 정교하게 설계되었기 때문이다. [28p]
르네상스 시절의 십 대 견습생들은 일하는 개와 다르지 않았다. 하지만 오늘날의 십 대들은 신경 질환에 걸린 애완용 개 같다. [30p]
십 대 아이들은 원래 사회에서 좀 더 활동적인 역할을 담당해 왔다. 산업혁명 전의 시기에는 그들이 가게든, 농장이든, 아니면 심지어 전함에서든, 무언가 실질적인 것을 위한 견습생이었다. 그들이 자기들만의 사회를 형성하도록 방치되지 않았다. 그들은 어른의 사회에 속한 주니어 멤버였다. [31p]
해커와 화가의 공통점은 우선 그들이 둘 다 무언가를 창조한다는 사실이다. 작곡가, 건축가, 작가와 마찬가지로 해커와 화가는 좋은 무엇을 만들어 내기 위해서 노력한다. 그들은 연구를 수행하지는 앟ㄴ지만, 창조의 과정에서 훨씬 좋은 새로운 기술을 발견하기도 한다. [40~41p]
자루 한 가운데에는 컴퓨터의 자연사, 즉 네트워크에서 데이터를 라우팅하는 알고리즘의 행동 등을 연구하는 사람들이 존재한다. 자루의 반대편 끝에는 뭔가 재미있는 소프트웨어를 만들기 위해서 노력하는 해커들이 자리잡고 있다. [41p]
해커가 수행하는 일은 가끔 “소프트웨어 엔지니어링”이라는 말로 불리기도 하는데 이것은 컴퓨터 사이언스에 못지않게 잘못된 인식을 심어준다. 훌륭한 소프트웨어 설계자가 엔지니어가 아니라는 것은 건축가가 엔지니어가 아닌 것처럼 지극히 자명하다. 건축과 공학의 경계선이 분명한 것은 아니지만, 아무튼 경계는 존재한다. 그 경계선은 ‘무엇’과 ‘어떻게’라는 두 개념 사이에 놓여있다. 건축가는 무엇을 할지를 결정하고 엔지니어는 어떻게 할지를 알아낸다. [41p]
좋게 봐도 그런 논문은 단지 형식일 뿐이다. 해커가 멋진 소프트웨어를 작성한 뒤에 그에 대한 논문을 쓰면, 이 논문은 소프트웨어가 이루어낸 성과를 드러내는 대변인proxy 구실을 한다. 하지만 대변인의 존재가 여러 문제를 일으킨다. 단지 논문 주제에 더 어울린다는 이유 하나만으로 아름다운 무엇을 창조하는 대신 별 볼 일 없는 것을 만드는 데 열중하는 일이 생기기 때문이다. [43p]
불행히도 아름다운 대상이 언제나 논문을 위한 최고의 주제가 되는 것은 아니다. 첫 번째로, 연구는 독창적이어야 하기 때문이다. 박사 논문을 써본 사람이라면 알겠지만, 자기가 새로운 영역을 개척하고 있다는 사실을 확신하기 위한 방법은 누구도 원하지 않는 영토에 과감하게 발을 들여놓는 것 뿐이다. 두 번째로, 연구는 실질적이어야 한다. 그래서 후진 시스템일수록 오히려 더 내용이 충실한 논문을 산출하게 된다. 연구의 과정에서 극복해야만 했던 장애물에 대해서 시시콜콜 설명할 수 있기 때문이다. 그런 면에서 보자면 틀린 전제에서 출발한 연구 이상으로 더 충실한 내용을 낳는 것이 없을 정도다. [43p]
무언가 아름다운 것을 만드는 방법은 대개 이미 존재하는 것을 살짝 뒤틀거나, 아니면 알려진 아이디어 몇 개를 새로운 방식으로 결합하는 것이다. 그리고 이런 종류의 일은 연구 논문으로 설명하기 어렵다. [43p]
아름다운 소프트에어인지 아닌지 측정할 수 있는 유일한 외적인 방법은 시간이다. 시간이 지남에 따라서 아름다운 것은 퍼지고 못난 것은 사라진다. 불행하게도 여기에서 이야기하는 시간은 사람의 수명보다 길 수도 있다. [44p]
사람들이 당신의 작품을 엉뚱하게 이해하는 것보다 더 나쁜 일은 얼마든지 있다. 예를 들자면 누구보다도 우선 당신이 스스로의 작품을 잘못 이해하는 것이 그것이다. [45p]
예를 들어서 대학 시절에 어떤 문제를 풀 때에는 그것을 우선 종이 위에서 완전하게 푼 다음 컴퓨터 앞에 앉아야 한다고 배웠다. 하지만 나는 프로그래밍을 그런 식으로 하지 않았다. 나는 종이 한 장보다는 컴퓨터 앞에 앉아서 프로그래밍하는 것을 더 즐겼다. 또 전체적인 프로그램을 미리 신중하게 적어서 생각하는 방향이 옳은지 여부를 확인하기 전에 조각난 코드부터 대책 없이 늘어놓은 다음 그것의 모양을 조금씩 잡아 나가는 방법으로 프로그래밍을 했다. 그리고 나는 디버깅이란 틀린 철자나 부주의한 실수를 잡아내는 최후의 과정이라고 배웠다. 그러나 내가 일한 방식대로라면 프로그래밍 자체가 완벽하게 디버깅으로 이루어져 있다.
초등학교 시절에 선생님이 가르쳐준 정석대로 연필을 쥐지 못해서 괴로워했던 것처럼, 나는 오랫동안 이런 프로그래밍 방식에 대해서 남몰래 부끄러워했다. 하지만 내가 그 당시에 화가나 건축가 같은 다른 창조자들이 일하는 방식을 알았더라면, 내가 프로그래밍하는 방식을 지칭하는 특별한 이름이 있다는 사실을 알 수 있었을 것이다. 그 이름은 바로 ‘스케치’다. 내가 보기에 대학 시절에 배운 프로그래밍 방식은 완전히 잘못되었다. 소설가, 화가, 그리고 건축가의 작업이 그런 것처럼 프로그램이란 전체 모습을 미리 알 수 있는 것이 아니라 작성해 나가면서 이해하게 되는 존재다. [46p]
한 페이지를 가득 메운 수학 공식은 겉보기에 그럴듯하다(조언하자면 그리스 문자를 사용하면 좀 더 인상적이다). 그렇기 때문에 사람들은 실제로 중요한 문제보다 수학 공식에 입각해서 다룰 수 있는 문제를 풀어 보고자 하는 유혹을 받게 된다.
만약 해커가 소설가나 화가와 같은 종류의 창조자와 함께 분류된다면 이러한 유혹을 받을 일은 없을 것이다. 소설가와 화가는 수학에 대한 질투에서 자유롭다. 그들은 자기가 하는 일이 수학과 아무 상관이 없다고 생각하기 때문이다. 내가 볼 때는 해커도 그와 마찬가지다. [47p]
큰 회사는 훌륭한 제품을 만들어서 번창하는 것이 아니기 때문에 고점의 상실이 문제 되지 않는다. 그들은 다른 큰 회사에 비해서 상대적으로 덜 망치면 되는 것이다. [48p]
우리가 프로그래머를 면접 볼 때 집중적으로 물어본 질문은 그가 여유 시간에 작성한 소프트웨어가 무엇인가 하는 것이었다. 무엇을 진정으로 사랑하지 않는다면 그것을 정말로 잘 해낼 수 없다. 마찬가지로 해킹을 정말로 좋아한다면 자기 자신의 프로젝트를 수행하지 않고는 견딜 수가 없을 것이다. [51p]
위대한 작품을 그대로 모방하는 것은 수백 년 동안 전통적인 교육의 일부였다. 모방 과정은 그 작품을 매우 자세하게 들여다보도록 모방자를 강제하기 때문이다. [52p]
프로그램을 위한 스펙 요구사항이 완벽할 것이라고 기대하는 것은 환상이다. 그것을 처음부터 인정하고, 개발 도중에 스펙이 바뀌는 것을 수용할 수 있는 방식으로 프로그램을 짜는 것이 현명할 것이다. [53p]
하지만 레오나르도는 달랐다. 그가 자신의 그림에 열과 성을 쏟아 붓는 정도는 다른 사람들이 얼마나 자세히 그림을 들여다볼 것인가와 아무런 상관이 없었다. 그런 점에서 그는 마이클 조던과 닮았다. 두 사람 모두 자기 일에 대해서 만큼은 가차 없이 냉혹했던 것이다.[54p]
보이지 않는 섬세함이 모이고 쌓이면 마침내 눈에 보이게 되는 법이기 때문에 결국은 빛을 발하기 마련이다. 사람들이 지네브라 벤치의 초상화 앞을 지나갈 때, 그림 옆에 붙은 표시를 통해서 그것이 레오나르도 다 빈치의 그림이라는 사실을 확인하기도 전에 이미 그 엄청난 세부묘사에 압도된다. 눈에 보이지 않는 세부 묘사가 모여서 마치 들리지 않는 천 개의 목소리가 거대한 화음을 이루는 것 같은 장관을 연출하기 때문이다. [55p]
- 2+2가 5라고 말하거나 피츠버그에 사는 사람들의 키는 3미터라고 말해서 곤란을 겪는 사람은 없다. 사람들은 그렇게 명백하게 사실이 아닌 말은 농담이나, 혹은 정신이상의 징후로 간주한다. 그런 말은 아무도 화나게 하지 않는다. 사람들을 화나게 만드는 말이 있다면 그것은 다른 사람들이 믿을지도 모를 만큼 진실에 근접한 말이다. 그런 면에서 보자면 사람들을 가장 화나게 만드는 것은 그들 자신이 진심일지도 모른다고 믿는 것이 발설되었을 때다.
만약 갈릴레오가 파두아에 사는 사람들의 키가 3미터라고 말했다면, 그는 단지 별 볼 일 없는 괴짜로 인식되었을 것이다. 하지만 지구가 태양의 주변을 돈다고 말하는 것은 전혀 차원이 다른 문제였다. 교회는 그 발언의 진실성이 사람들의 마음을 파고들 것이라는 점을 알고 있었다. [67~68p]
- 진실인지 여부를 떠나서, 사람들이 다른 사람들의 생각에 동의하지 않을 때 쓰는 말을 살펴보면 그 시기에 유행하는 딱지가 무엇인지 쉽게 확인할 수 있다. 어떤 정치가가 그의 반대자에게 당신은 뭔가 오해하고 있다고 말하면 그것은 단순한 비판이다. 하지만 그가 무엇을 틀렸는지 차분히 논박하지 않고, 그가 "분열을 조장"하며 "인종차별적"이라고 공격을 한다면 우리는 그 속을 들여다볼 필요가 있다. [69p]
- 물리학과 같은 영역에서 우리가 과거의 세대와 의견이 다르다면, 그것은 대개 우리가 옳고 그들이 틀렸기 때문이다. 하지만 과학의 확실성에서 멀어질수록 우리가 옳고 그들이 틀렸을 가능성은 급격하게 줄어든다. 질문의 영역을 사회적인 현상으로 옮겨 보면 과거 세대와의 차이란 다만 유행의 차이에 불과하다. 예를 들어서 결혼을 해도 좋은 나이라는 것도 마치 스커트 길이처럼 제멋대로 변한다. [71p]
- 아마도 대부분의 크고 작은 터부를 능가하는 진정한 터부만이 보편적인 터부일 것이다. 예컨대 살인 같은 것이 그렇다. 그렇지만 많은 시간과 공간 속에서 무해한 것으로 받아들여졌음에도 불구하고 지금 우리에게 터부로 존재하는 것이 있다면 그것은 우리가 잘못 생각하고 있다는 증거일 가능성이 높다. [72p]
- 아이를 키우는 내 친구들은 아이가 들을 수 있는 반경 내에서는 "망할"이나 "제길"과 같은 말을 입에 담지 않으려고 애를 쓴다. 아이가 그런 말을 따라 하는 상황을 원하지 않기 때문이다. 하지만 이런 말은 어디까지나 언어의 일부분이며, 어른들은 일상적으로 사용하고 있다. 결국 부모는 그런 말을 억누름으로써 아이들에게 언어에 대한 비현실적인 이미지를 심어주는 것이다. 왜 그러헥 하는가? 그들은 아이들이 언어를 있는 그대로 전체적으로 사용하는 것이 적절하지 않다고 생각하기 때문이다. 아이들이 순진해 보이기를 원하는 것이다. [73p]
- 권력 투쟁에서 두 세력의 어느 한 쪽도 주도권을 쥐지 못할 때가 도덕적 터부가 생기기 가장 좋은 때가 아닐까 생각한다. 그러한 상황에 처한 집단은 대개 터부를 퍼뜨릴 만한 힘이 충분히 있지만 동시에 터부 없이 존재하기는 어려운 약한 존재일 것이기 때문이다. [75p]
- 사상의 유행과 옷의 유행이 서로 다른 뿌리를 둔 것은 사실이지만, 그들이 받아들여지는 매커니즘은 거의 동일하다. 유행에 처음 발을 담그는 얼리 어댑터는 야망에 의해서 움직인다. 자기가 정말 멋지다고 생각하는 사람들은 자신이 평범한 군중과 차별화되기를 원한다. 유행이 일단 하나의 대세로 자리를 잡으면 그에 참여하는 두 번째 단계의 사람들이 생기기 시작한다. 수가 훨씬 많은 이 사람들을 움직이는 힘은 두려움이다. 이 사람들은 스스로 멋있게 보이기 위해서 유행을 따르는 것이 아니라, 무리에서 배제되는 것을 두려워하기 때문에 움지인다. [76p]
- 이유가 무엇이든지 머릿속에 충격적인 생각을 떠올리는 데는 지성과 의지가 뚜렷한 연관성을 보여준다. 똑똑한 사람이 전통적인 생각에 존재하는 작은 틈을 남들보다 더 열심히 파고들기 때문이 아니다. 전통은 똑똑한 사람한테 별 영향을 주지 않는다. 그들이 입는 옷차림을 생각해 보면 알 것이다. [79p]
- 미국 자동차 브랜다는 이제 거의 나쁜 브랜드의 대명사가 되었을 정도다. 그 브랜드이기 때문에 사는 것이 아니라, 그 브랜드임에도 불구하고 사는 그런 브랜드가 된 것이다. [79p]
- 당신의 생가고가 말 사이에 날카로운 경계선을 그어라. 머릿속에서는 무엇이라도 허용이 된다. 나 역시 머릿속에서는 사람으로서 가능한 가장 대담하고 파격적인 상상을 즐긴다. 하지만 비밀 클럽처럼 건물 안에서 벌어진 일이 외부자에게 발설되면 곤란하다. [80p]
- 하지만 당신의 생각을 비밀로 유지하는 것은 토론의 가능성을 없앤다는 문제를 부른다. 어떤 생각에 대한 토론은 더 많은 생각을 이끌어 낸다. 따라서 최선의 해결책은 무엇이라도 공개적으로 털어놓고 말할 수 있는 친구를 사귀는 것이다. 이것은 단지 생각을 개발하기 위한 것만은 아니다. 이것은 좋은 친구를 선택하는 방법이 되기도 한다. [81p]
- 최고의 방법은 무엇보다도 유머다. 그들의 신조가 무엇이든 열성주의자들에게는 불기피하게도 유머 감각이 없다. 그들은 농담에 대해서 친절하게 답변하지 못한다. 그들은 유머의 영역에 들어서게 되면 마치 스케이트 링크에 들어선 중세의 기사처럼 불행해진다. [83p]
- 아이들이나 회사 직원을 위한 웹 필터는 종종 포르노그래피, 폭력, 그리고 혐오 연설을 담고 있는 사이트를 제한한다. 도대체 포르노그래피와 폭력을 규정짓는 기준은 무엇인가? 그리고 "혐오 연설"이란 정확히 무엇인가? [85p]
- 경찰은 우선 범죄의 동기에서부터 수사를 시작한다. 범죄 동기가 될 만한 것이 그렇게 많지는 않다. 마약, 돈, 섹스, 복수 등 몇 가지에 불과하다. 그런데 FBI의 목록에는 지적 호기심이라는 항목이 없었다. 결국 해킹과 관련된 모든 것이 그들에게는 낯선 대상이 될 수밖에 없었던 것이다. [91p]
- 최근의 지적재산권 관련법은 새로운 아이디어를 얻기 위해서 이미 존재하는 테크놀로지의 이모저모를 뜯어보는 행동을 지나치게 제약하고 있다. 과거에는 어렵게 만든 제품을 경쟁업체가 그대로 복제해서 파는 것을 방지하기 위해서 특허를 사용했지만, 내부의 작동 원리를 이해하기 위해서 그것을 뜯어보는 행위까지 막지는 않았다. 하지만 최근의 법은 이런 행위마저 범죄 행위라고 못을 박는다. 현재의 테크놀로지가 어떻게 작동하는지 모른다면 그것을 개선하는 새로운 테크놀로지를 도대체 어떻게 개발할 수 있단 말인가? [94p]
무엇인가를 만들어 냈을 때 우리는 대개 그것의 완전함에 대해서 100% 확신하지 못한다. 하지만 그 무엇이 정당화될 수 있는 잘못을 담고 있다면, 그 잘못은 오히려 희망적인 신호가 된다. 보통 프로그래밍을 명확하고 체계적인 것이라고 생각하는 게 이상한 일이다. 명확하고 체계적인 것은 프로그래밍이 아니라 컴퓨터다. [96p]
정부가 사람들을 감시한다고 해서 프로그래머가 갑자기 엉터리 코드를 쓰는 것은 아니다. 그렇지만 그런 감시는 나쁜 아이디어가 승리하는 세상을 만들어 낸다. 해커에게는 좋은 아이디어가 승리하는 사회를 갖는 것이 너무나 중요하기 때문에 그들은 그런 조짐에 대해서 남보다 민감하다. [97p]
규칙을 부과하는 위치에 있는 사람들은 자연히 그 규칙이 준수되기를 바란다. [98p]
소프트웨어가 데스크톱을 떠나서 서버로 올라가면 개발자는 기존의 세계와 전혀 다른 의미의 새로운 세계를 맞이하게 되는 셈이다. [101p]
하지만 대부분의 사람이 컴퓨터를 가지고 하는 일을 고려해 본다면 10분의 1초에 해당하는 반응 지연 시간은 별로 문제가 되지 않는다. 내 어머니는 컴퓨터가 아니라 가계부가 필요한 것이며, 그런 사람은 한 두명이 아니다. [103p]
이제 “내 컴퓨터”라는 개념은 사라져가고 있으며 대신 “내 데이터”라는 개념이 도래하고 있다. 그 데이터는 어떤 컴퓨터에서도 접근이 가능해야 한다. 사실 꼭 컴퓨터일 필요조차 없는 어떤 클라이언트에서 접근이 가능해야 한다고 말하는 것이 더 정확한 것이다. [104p]
서버에 기반을 두고 있는 소프트웨어의 경우에는 어떤 언어를 선택해도 상관이 없다. 오늘날 최상위 해커들은 C와 C++로부터 멀리 떨어져 있는 언어를 사용한다. 그것은 펄, 파이썬, 그리고 심지어 리스프다. [109p]
새로 등장한 버그를 수정하는 것은 오래 묵은 버그를 잡는 것보다 수월하다. 방금 전에 작성한 코드에서 나타난 버그를 수정하는 것은 비교적 쉽기 때문이다. 새 코드에서 버그가 나타나는 경우, 개발자는 이미 무의식적으로 그것을 염려하고 있었기 때문에 심지어 코드를 보기 전에도 어디가 절못되었는지 알 수 있다. 6개월 전(일 년에 한 번 릴리즈하는 경우에 평균적인 시간이라고 말할 수 있다)에 작성한 코드에 숨은 버그를 수정하는 것은 훨신 더 많은 노력을 요구한다. [114p]
어떤 글을 쓸 때, 실제로 쓴 내용의 반 이상은 글을 쓰는 동안에 생각해 낸 것이라는 사실을 깨달은 적이 있는가? 소프트웨어도 이와 똑같다. 어떤 생각을 구현하기 위해서 일하는 동안 더 많은 생각이 떠오르는 것이다. 그래서 어떤 생각을 창고에 넣어 둔다는 것은 그 생각의 구현을 연기한다는 문제뿐만이 아니라 그것을 구현하는 동안 떠올려을지도 모르는 수많은 좋은 생각 역시 창고에 넣어 둔다는 문제도 만들어 낸다. [118p]
내가 보기에 아예 처음부터 솔직하게 사용료를 거두는 것이, 사용자에게 돈을 받으려고 그들에게 소프트웨어의 새 버전을 구입하고 설치하도록 강제하는 것보다 낫다. [125p]
오늘날 데스크톱 소프트웨어를 개발한다는 것은, 마이크로스프트의 API를 호출하는 것처럼 버그로 가득한 OS를 대상으로 소프트웨어를 만드는 것을 의미한다. 그리하여 만약 소프트웨어를 성공적으로 판매하기 시작한다고 해도, 결국에는 그 일이 마이크로소프트라는 회사의 시장 분석을 도와주는 것과 다름없다는 사실을 깨닫게 된다. [133p]
비즈니스에 대해서 알아야 하는 것은 오직 두 가지뿐이다. 사용자가 좋아할 만한 것을 만드는 것, 그리고 자기가 쓰는 비용보다 더 많은 돈을 벌어야 한다는 것이 그것이다. [141p]
야후를 깎아내리려는 것이 아니다. 그들은 좋은 해커를 데리고 있으며, 최고 경영진에 포진한 사람들은 진자로 자유분방한 사람들이었다. 큰 회사를 기준으로 한다면 예외적일 정도였다. 하지만 여전히 작은 회사에 비하면 생산성을 10%정도였다. 큰 회사는 여기서 더 나을 수가 없다. 마이크로소프트가 무시무시한 것은 바로 그렇게 덩치가 큰 회사가 여전히 소프트웨어를 만들어 내고 있다는 사실이다. 마치 걸어 다니는 산 같은 느낌이 든다. [143p]
부는 돈과 같은 것이 아니다. 돈은 부의 한 형태를 다른 형태와 교환하기 위해서 사용되는 편리한 수단에 불과하다. 우리가 사는 상품과 서비스의 내면에 숨어 있는 근원적인 존재는 돈이 아니라 부다. [181~182p]
그렇지만 어떤 사람이 다른 사람에 비해서 100배 정도로 더 높은 생산성을 가지고 있는 경우를 상상하기란 어려운 일은 아니다. 고대 로마에서는 노예의 가격이 노예가 가지고 있는 기술적인 능력에 따라서 50배 정도 차이가 났다. [183p]
부자가 되는 길은 부를 창출하는 것이 아니라, 부를 약탈한 만한 힘을 가진 지배자에게 충성하는 것이다.
유럽에서 중산층이 성장하면서 이러한 상황에 변화가 생겼다. 요즘에는 중산층이라고 하면 부자도 아니고 가난하지도 않은 사람들을 떠올리게 되지만, 원래 그들은 뚜렷한 정체성을 가진 그룹이었다. 봉건 사회에는 두 계급이 존재했다. 전쟁 귀족과 그들의 재산을 위해서 일하는 사람들이었다. 이때 중산층이라는 존재는 제조업이나 상업에 종사하면서 주로 도시에 몰려 사는 새로운 세 번째 그룹을 의미했다. [186~187p]
테크놀로지가 저렴하게 만들 수 없는 유일한 대상은 브랜드다. 우리가 요즘 브랜드에 대해서 많이 듣게 되는 이유가 바로 이것이다. 브랜드는 그러니까 부자와 가난한 자 사이에 존재하는 실질적인 차이가 증발하면서 남게 된 찌꺼기 같은 것이다. 당신이 소유한 물건 위에 어떤 브랜드가 찍혀 있는가 하는 문제는, 그 물건을 실제로 갖느냐 갖지 못하느냐 하는 문제에 비하면 별로 중요하지 않다. [191p]
요즘에는 일을 하지 않아도 충분할 정도로 부자인 사람들조차 일을 한다. 사회적인 압력이 있기 때문에 그런 것이 아니다. 일하지 않고 빈둥거린다는 것은 외롭고 기운이 빠지는 일이기 때문이다. [192p]
요즘에는 많은 사람들이 미적 취향을 “주관적인 것”이라고 말한다. 정말 그들에게는 그렇게 느껴지기 때문에 미적 취향은 주관적인 것이라고 믿는 것이다. 그들은 무언가를 좋아할 때, 그것이 왜 좋은지에 대해서는 생각하지 않는다. 그것은 그냥 아름답기 때문일 수도 있고, 그들의 어머니가 똑같은 물건을 가지고 있기 때문일 수도 있고, 잡지에서 본 영화배우가 그 물건을 가지고 있었기 때문일 수도 있고, 단지 그것이 비싸기 때문일 수도 있다. 사람들의 생각은 확인되지 않은 충동이 얽혀 있는 실타래와 비슷하다. [215~216p]
어떤 일에서나 마찬가지이지만, 무언가를 지속적으로 디자인하다 보면 디자인 실력이 늘어난다. 그리고 미적 취향도 변한다. 그렇게 실력 향상과 함께 자신이 점점 성장하고 있음을 깨닫는다. 성장을 했다면 과저의 미적 취향은 단지 현재의 것과 달랐던 게 아니라 덜 성숙한 것이었던 셈이다. 미적 취향은 개인적인 것이기 때문에 잘못될 수 없다는 공리가 가진 허점이다. [217p]
좋은 디자인은 간단하다.
좋은 디자인은 시간에 구애받지 않는다.
좋은 디자인은 제대로 된 문제를 해결한다.
좋은 디자인은 무언가를 제안한다.
항상 그런 것은 아니지만 좋은 디자인은 조금 우습기도 하다.
좋은 디자인은 어렵다.
좋은 디자인은 간단해 보인다.
좋은 디자인은 대칭을 이용한다.
좋은 디자인은 자연을 닮았다.
좋은 디자인은 무언가를 다시 디자인하는 것이다.
좋은 디자인은 복사가 가능하다.
좋은 디자인은 이상할 때도 있다.
좋은 디자인은 뛰어난 사람들의 모임에서 나온다.
좋은 디자인은 종종 대담하다. [218~233p]
어떤 분야의 전문가로 성장함에 따라서, “이런, 이것보다 더 나은 방법이 있을 거야.”라는 희미한 목소리를 듣게 될 것이다. 그 목소리를 무시하지 않기 바란다. 위대한 작품을 만드는 방법은 바로 자기 자신만의 미적 취향과 그것을 만족하게 할 수 있는 능력에 달려 있는 것이다. [234p]
그럼 이렇게 많은 언어 중에서 어느 것을 사용해야 하는가? 그 질문에 대해서는 수많은 대답이 존재한다. 문제인 것은 어떤 언어를 오랫동안 사용하면, 어느 순간부터 사고 자체가 그 언어로 이루어진다는 사실이다. 이런 상황이 되면 실질적으로 다른 언어에 본질적으로는 잘못된 것이 아무것도 없음에도 불구하고, 터무니없이 어색하게 느껴진다. 경험이 부족한 프로그래머들이 언어에 대해서 내리는 판단은 이러한 심리적 효과에 영향을 받기도 한다. [241p]
사실 객체지향에는 두 가지 의미가 있다. 어떤 언어는 당신이 객체지향 스타일로 프로그램을 짤 수 있도록 허용한다는 점에서 객체지향적이고, 어떤 언어는 당신이 반드시 객체지향 방법론으로 프로그램을 짜도록 한다는 점에서 객체지향적이다. [245p]
언어 자체는 테크놀로지가 아니기 때문에 천천히 발전한다. 언어는 표기notation다. 프로그램이란 컴퓨터가 수행했으면 하는 일을 공식적으로 표기한 것에 지나지 않는다. 따라서 프로그래밍 언어의 발전 속도는 교통수단이나 통신수단이 아니라 수학적 표기 방법의 발전 속도와 비슷하다. 수학적 표기 방법도 발전하기는 하지만, 테크놀로지만큼은 아니다. [254p]
우리는 첫 번째 버전의 프로그램에서 모든 것이 리스트로 표현되도록 작성한다. 이러한 초기 버전은 놀라울 정도로 비효율적이라서 프로그램이 수행하는 일이 무엇인지에 대해서는 아예 생각조차 하지 말아야 할 정도이다. [258p]
비효율적인 소프트웨어가 그 자체로 엉터리인 것은 아니다. 진짜 엉터리는 프로그래머에게 불필요한 일을 하도록 강제하는 언어다. 기계의 시간이 아니라, 프로그래머의 시간을 낭비하는 것이 진짜 비효율성이다. 컴퓨터의 속도가 더 빨라질수록, 이러한 사실은 점점 더 명확해질 것이다. [258p]
모든 학문 분야에는 연구해도 좋은 일들과, 그렇지 않은 일들이 공존한다. 불행한 것은 허용되는 주제와 금지된 주제를 가르는 기준이 실제로 얼마나 유용한 결과를 얻게 될 것인가가 아니라, 그 주제가 연구 논문에 등장했을 때 얼마나 지적으로 보이는가에 의해서 결정되는 경우가 대부분이라는 점이다. 가장 극단적인 경우는 문학일 것이다. 문학을 연구하는 쪽에서 문학을 생산하는 사람들에게 조금이라도 도움이 될 만한 이야기를 언급하는 경우는 거의 없다. [264p]
하지만 무엇을 할 수 있는지에 대한 상상의 범위는 자기가 사고할 때 쓰는 언어에 의해서 제한되기 때문에, 이미 쉬운 프로그램이 더 쉬운 모습으로 표현될 수 있다는 사실이 놀랍게 보일 정도다. 그렇기 때문에 그것은 누구나 자연스럽게 받아들일 수 있는 사실이 아니라 의식적으로 발견하려고 노력해야 겨우 알 수 있는 대상이다. [265p]
비즈니스에서 경쟁자가 이해하지 못하는 기술을 갖는 것만큼 소중한 것이 없다. 전쟁에서와 마찬가지로 비즈니스에서는 상대방을 깜짝 놀라게 만드는 것이 구체적인 물리력만큼이나 소중한 의미를 가진다. [277p]
리스프가 대단한 이유는 리스프가 가장 강력한 언어이기 때문이다. 다른 사람들이 그것을 이용하지 않는 이유는 프로그래밍 언어라는 것이 단순히 테크놀로지가 아니라 습관이기 때문이다. 이 세상에서 습관처럼 천천히 변하는 것이 또 없다. [278p]
어느 프로그램이 다른 언어로 작성된 프로그램과 밀접하게 연관될 필요가 있다면 새로운 프로그램을 아예 처음부터 동일한 언어로 작성하는 것이 좋다. 새로 작성하는 프로그램이 숫자를 처리하거나 비트 연산을 수행하는 것처럼 단순한 일을 할 뿐이라면, 추상적이지 않은 언어를 선택하는 것이 좋다. 그쪽이 더 빠르기 때문이다. 만약 짧은 일회용 프로그램을 만드는 것이라면, 그것이 수행할 일과 관련된 좋은 라이브러리를 가지고 있는 언어를 선택하는 것이 좋다. 그렇지만 이런 예외를 제외한 일반적인 경우에는 애플리케이션 소프트웨어를 위해서 기능적 힘이 가장 뛰어난 (그리고 어느 정도 효율적인) 언어를 선택하는 것이 최선이다. 그런 언어가 따로 존재함에도 불구하고 다른 언어를 이용하는 것은 기계어 프로그래밍을 하는 실수와 다를 바가 없다. [279p]
1950년대에 탄생한 이 언어가 오늘날에도 여전히 유효한 이유에 대한 간단한 설명은 바로 그것이 단순히 테크놀로지가 아니라 수학이었다는 사실일 것이다. 수학은 변질되지 않는다. [294p]
디자인은 반드시 새로울 필요가 없지만, 좋아야 한다. [339p]
예술의 분야에 따라서 다르겠지만, 고객이 원하는 대로만 따라가는 사람이 최고의 작품을 만들게 되는 분야는 없다. [339p]
목표로 삼는 사용자가 없으면 도대체 디자인이 좋은지 나쁜지조차 말할 수 없기 때문이다.
목표로 삼은 사용자 안에 설계자 자신이 포함되어 있으면 좋은 디자인을 산출할 가능성이 한층 높아진다. [340p]
프로토타입을 조금씩 수정해서 무언가를 만드는 것은 당신의 관심을 계속 끌어당기기 때문에 사기를 진작시킨다. 소프트웨어를 작성할 때 나의 규칙은 항상 실제로 동작하는 코드를 만드는 것이다. [345p]