- 지은이의 글
- 마이크로소프트, 세이버와 같은 휩쓸고 있는 전자예약 시스템 시장에 오비츠라는 회사가 성공적으로 진입할 수 있었던 이유는 경쟁사가 사용하고 있는 언어보다 더 좋은 프로그래미 언어를 사용했기 떄문이다.
- 프로그래머들은 자기가 사용하는 언어에 따라서 작은 부족으로 나뉘는 경향이 있다. 그들이 만드는 소프트웨어의 종류가 아니라 언어에 따라서 나뉘는 것이다. => 지은이는
- 소프트웨어에서 혁신이 너무나 중요한데, 사실 혁신과 이단은 원칙적으로 같은 것이기 때문이다. 좋은 해커는 모든 것에 대해서 의문을 품는 습관을 지니고 있다.
- 공부벌레는 왜 인기가 없을까?
- 해커와 화가
- 해커들에게 있어서 컴퓨터는 자기를 표현하기 위한 매체에 불과하다. 건축가에게는 콘크리트가, 화가에게는 그림이 그런 역활을 하는 것과 마찬가지다. 결과적으로 한 학과 안에 수학자, 물리학자, 그리고 건축가를 뒤섞어 놓은 것과 같이 된다. => 동의
- 무언가 아름다운 것을 만드는 방법(멋진 소프트웨어를 작성) 은 대개 이미 존재하는 것을 살짝 뒤틀거나, 아니면 알려진 아이디어 몇 개를 새로운 방식으로 결합하는 것이다. 그리고 이런 종류의 일은 연구 논문으로 설명하기 어렵다.
- 아름다운 소프트웨어인지 아닌지 측정할 수 있는 유일한 방법은 시간이다. 시간이 지남에 따라서 아름다운 것은 퍼지고 못난 것은 사라진다.
- 해커는 계산 이론에 대해서 알아야한다. 예컨대 해거는 시간과 공간의 복잡성을 계산하는 방법을 알아야하고 파서를 작성하고 싶으면 상태 머신의 개념을 알아야한다.
- 전체적인 프로그램을 미리 신중하게 적어서 생각하는 방향이 옳은지 여부를 확인하기 전에 조각난 코드부터 대책 없이 늘어놓은 다음 그것의 모양을 조금씩 잡아 나가는 방법으로 프로그래밍을 했다. 프로그래밍이 자체가 디버깅
- 화가의 '스케치' 화가의 작업이 그런 것처럼 프로그램이란 전체 모습을 미리 알 수 있는 것이 아니라 작성해 나가면서 이해하게 되는 존재다. => 동의
- 정적인 타이핑 , 해커에게 필요한 언어는 마음껏 내갈기고, 더럽히고, 사방에 떡칠할 수 있는 언어다. 엄격한 컴파일러 숙모와 마주 앉아 데이터 타입을 채운 찻잔을 무릅위에 다소곳이 놓고 대화할때 쓰는 언어가 아니다.
- 대학과 연구소는 해커에게 모종의 과학자가 될 것을 강요하고, 회사는 엔지니어가 될 것을 요구한다.
- 야후의 일원이 되었을때 그들이 말하는 해킹은 내가 알고 있는 것처럼 소프트웨어를 디자인하는 것이아니라 단지 구현하는 것에 불과함을 알게 되었다. 그들에게 있어서 프로그래머는 제품 관리자의 비전을 코드로 전환하는 기술자에 불과 했다.
- 극소수의 해커만이 소프트웨어를 실제로 설계할 수 있으면, 회사를 경영하는 사람이 그 일을 대신 하기는 어렵다 그래서 대부분의 회사는 소프트웨어의 미래를 한 명의 천재적인 해커에게 맡기기보다는, 여러 명으로 구성된 팀으로 소프트웨어를 설계하고 해커들에게는 단순 구현을 맡긴다.
- 스타트업 회사가 승리할 수 있는 비결 중 하나: 큰 회사는 최악의 재난을 피하기 위해서 설계 산출물에 대한 표준 편차를 줄이려고 노력한다. 하지만 활기차게 진동하는 기운을 억누르면 진폭의 저점만이 아니라 고점도 함꼐 잃어버림을 기억해야 한다. 큰 회사는 출륭한 제품을 만들어서 번창하는 것이 아니기 떄문에 고점의 상실이 문제 되지 않는다. 그들은 다른 큰 회사에 비해서 상대적으로 덜 망치면 되는 것이다.
- 따라서 덩치가 크기 때문에 소프트웨어가 제품관리자에 의해서 설계되어야 하는 회사와 당신의 회사가 설계를 놓고 전쟁을 치르는 상활을 만들어 내기만 하면 그들은 절대로 당신의 회사를 따라잡을 수 없다.
- 하지만 그렇상황을 만들어 내기란 쉬운 일은 아니다. 예를 들어 마이크로소프트의 워드보다 더 훌륭한 워드프로세서를 만드는 것 자체는 어려운 일이 아지만 운영체제 독점이라는 철벽 안에 숨어 있는 마이크로소프트는 그런 워드프로세서가 개발되었다는 사실조차 알지 못할 것인다.
- 디자인 전쟁을 치르기 좋은 장소는 아직 누구도 요새를 구축하지 못한 새로운 시장인 것이다. 그곳에서 당신을 한 사람(해커)이 제품을 디자인하고 구현하도록 만드는 대담한 방식을 통해서 커다란 승리를 거둘 수 있다.
- 훌륭한 소프르퉤어를 만드는 방법은 자기 자신의 스타트업 회사를 만드는 것이다 하지만 2가지 문제가 있다.
- 소프트웨어를 작성하는 일 이외에도 여러가지 다른일을 해야한다. 4분의 3의 시간에 짜증하는 일을 처리해야 한다.
- .돈을 벌 수 있는 소프트웨어와 작성하고 싶은 재미있는 소프트웨어 사이에는 별로 겹치는 부분이 없다는 사실이다. 돈을 벌고 싶다면 자기에게 흥미로운 일을 찾을 것이 아니라, 너무나 짜증 나는 일이라서 누구도 그것을 공짜로 해결할 엄두를 내지 않는 힘겨운 일을 찾아야 할 것이다.
- 우리가 프로그래머를 면접 볼 때 집중적으로 물어본 질문은 그가 여유 시간에 작성한 소프트웨어가 무엇인가 하는 것이었다. 무엇을 진정으로 사랑하지 않는다면 그것을 정말로 잘 해낼 수 없다. 마찬가지로 해킹을 정말로 좋아한다면 자기 자신의 프로젝트를 수행하지 않고는 견딜 수가 없을 것이다. => 동의하지만 나는 재미를 느끼지만 이정도로 미처 있지는 않은 것 같다.
- 해커는 과학자라기보다 창조자에 가깝다. 하나의 프로젝트를 붙들고 몇 년 동안 일하면서 나중에 새롭게 떠오느는 생각은 프로젝트에 부준적으로 적용하여 개정판을 만들어 나가는 것보다는 화가와 같이 처움부터 새롭게 시작하는 프로젝트를 규칙적으로 반복하는 것이 더 바람직하다고 본다.
- 해커들도 좋은 프로그램을 들여다봄으로써 프로그래밍을 배운다. 겉핥기식으로 프로그램이 어떤 일을 하는지만 보는 것이 아니라 내부의 소스코드를 들여다 보는 것이다.
- 대부분의 사람이 성는의 최적화를 지나치게 일찍 시도하는 것이 위험하다는 사실을 알게되었다. 너무 성급한 디자인도 성능의 최적화와 똑같은 정도로 빈판의 대상이 되어야 옳다.
- 좋은 프로그래밍 언어는 중간에 바뀌는 것을 쉽게 만들어 주어야 한다. 동적인 타이핑은 특정한 데이터 표현을 처음부터 고민할 필요가 없기 떄문에 바로 이런 상황에 적합하다. 하지만 이와같은 유연성을 위해서는 언어를 매우 추상적으로 만들어야 한다. 수정하기에 가장 쉬운 프로그램은 결국 짧은 프로그램이이기 때문이다. => 동의
- 그림이든 해킹이든 격정적인 열망을 요구하는 순가이 있는가 하면, 조횽히 반복되는 잔잔한 업무도 있다. 그래서 열정이 아주 식는 것을 방지하기 위해서 조용히 쉬는 순간이 왔을 때 할 만한 단순한 일을 남겨두는 것도 좋은 방법이다. 이말은 해킹의 경우 약간의 버그를 남겨준다는 것을 의미한다.
- 사물을 언제나 다른 사람의 시각에서 바라보도록 노력하라는 말을 듣곤 했다. 이 말이 의미하는 바는 보통 내가 원하는 것이 아니라 다른 사람이 원하는 것을 하라는 것이다. 감정이입을 부정적으로 생각하게 하는 말이다. 나중에 사물을 다른 사람의 입장에서 바라본다는 것이 곧 성공의 비밀이라는 사실을 나중에 깨달았다.
- 어느 사람이 감정이입을 잘하는지 여부를 판별하는 좋은 방법은 기본 지식이 없는 사람에게 어떤 기술적인 내용을 설명해 보라고 시키든 것이다.
- 소프트웨어가 수행해야 하는 일의 일부는 자기 자신을 설명하는 것이다 따라서 좋은 소프트웨어를 만들기 위해서는 도대체 사용자가 얼마나 조금 알고 있는지을 이해해야한다. 사용자가 아무 생각없이 만지작 거려도 재대로 작동하는 것이다. => 애플 매키토시가 그런일을 해냈다.
- 프로그램은 오직 사람이 읽기 위해서 작성되어야 한다. 컴퓨터가 그것을 실행하는 것은 부가적인 일이다.
- 우리가 말할 수 없는 것
- 사람들을 화나게 만드는 말이 있다면 그것은 다른 사람들이 믿을지도 모를 만큼 진실에 근접한 말이다.
- 모범적인 '불량 태도'
- 또 하나의 길
- Application service provider => ASP
- 사용자를 위한 승리
- 웹기반 어플리케이션이란 웹 서버에서 동작하면서 웹 페이지를 사용한 인터페이스로 사용하는 프로그램이다. 일반 사용자들에게 있어서는 이러한 소프트웨어가 더 쉽고, 싸고, 이동성이 좋고 , 안정적이면, 데스크톱 소프트웨어보다 훨씬 더 강력하다.
- '내 컴퓨터'라는 개년은 사라져가고 있으며 대신 '내 데이터"라는 개념이 도래하고 있다. 그 데이터는 어떤 컴퓨터에서도 접근이 가능해야 한다. 사실 꼭 컴퓨터일 필요조차 없는 어떤 클라이언트에서 접근이 가능해야한다고 말하는 것이 더 정활할 것이다.
- 클라이언트는 데이터를 저장하지 않아야 한다.
- 웹 기반 애플리케이션에는 사람들이 모두 동일한 버전을 사용하며, 버그는 눈에 띄자마자 수정된다. 그래서 웹 기반 소프트웨어는 데스크탑 소프트웨어에 비해 버그가 적다.
- 웹 기반 애플리케이션은 여러 사람에 의해서 동시에 사용될 수도 있다.
- 웹기반 어플리케이션을을 사용하면 데이터는 더욱 안전하게 보호된다.
- 웹 기반 소프트웨어는 바이러스의 침투에 대해서 내성이 있는 편이다.
- 오늘날의 최상위 해커들은 C, C++ 로 부터 멀리 떨어저 있는 언어를 사용한다. 그것은 펄, 파이썬, 그리고 심지어 리스프다.
- 릴리즈
- 전형적인 데스크톱 소프트웨어 회사는 보통 일년에 한두 번 정도 릴리즈 한다. 비아웹 시절에 우리는 하루에 세 번에서 다섯 번의 릴리즈를 수행했다.
- 서버에 게반한 소프트웨어에서는 대부준의 변경 폭이 작고 점진적이다. 그래서 그 자체로는 버그를 초래할 가능성이 낮다.
- 소프트웨어를 릴리즈하게 위해서 테스트할 대상이 무엇인지 정확히 알 수 있다는 장점도 제공한다. 테스트할 대상은 바로 맨 마지막에 수정한 내용인 것이다. 겨국 코드의 내용을 확실하게 파악할 수 있게 된다.
- 제대로 작동하지 않는 소프트웨어를 출시하는 일이 없다. 소프트웨어를 제대로 작동하는지 확인한 순간이 바로 출시일이다.
- 버그 잡기
- 웹 앱은 거의 모든 버그를 재현할 수 있다. 사용자의 데이터를 바로 눈앞에 있는 개발 디스크에 담고 있기 때문이다.
- 수정한 내용을 릴리즈하기 전에도 일정한 테스트를 수행하므로 치명적인 버그가 실수로 릴리즈되는 경우는 없다.
- 새로 등장한 버그를 수정하는 것은 오래 묵은 버그를 잡는 것보다 수월하다.
- 버그를 일찍 잡아낸다는 것은 여러 개의 문제가 결합된 복합적인 버거의 가능성을 줄인다는 의미
- 함수형 프로그래밍( Funcional programming)을 사용. 부작용을 피하는 것을 의미한다.
- 코드 전체를 순수하게 함수 프로그래밍으로 작성할 수는 없지만, 실적적인 크기의 코드 덩어리를 함수 프로그래밍으로 작성할 수 있는 있다. 이러한 방법으로 작성된 코드는 상태(State)를 갖지 않기 때문에 테스트하기에 간편하며 , 특히 코드를 지속적으로 고치면서 테스트할 때 매우 편리하다.
- 고객지원
- 버그를 그 자리에서 수정한다는 우리의 정책은 고객 지원담당 직원과 해커의 관계를 재정립했다.
- 고객 지원 담당 직원이 버그에 대해서 설명을 듣고, 프로그래머에게 전달한 모종의 양식을 작성한다. 그리고 프로그래머는 그것을 자신의 할 일 목록에 추가
- 비아웹: 고객 담당 직원이 버그를 접수하자마자 프로그래머에게 버그라는 말을 듣게 했다. 프로그래머와 가깝게 지내며 그들은 QA이면 마케팅을 담당하기도 했다.
- 단순히 버그를 찾는데서 그치는 것이 아니라 사용자를 다소 혼란스럽게 하는 복잡한 문제에 대한 지식을 보존하는 지킴이 까지 이르렇다. 사용자 그룹을 대행하는 역할 까지 수행했다.
- 브룩의 가설 역적용 - 맨먼스 미신
- 적은 수의 프로그래머로 소프트웨어를 개발할 수 있다면, 그것이 절약해 주는 것은 돈에 그치지 않든다.
- 프로젝트에 사람을 더 많이 투입하는 것은 오히려 프로젝트의 진행 속도를 둔화 시킨다. 개발자 사이에 연결할 수 있는 선의 수는 팀의 크기가 증가함에 따라서 기하급수적으로 늘어난다.
- 그룹이 커질수록 그들은 소프트웨어가 어떻게 작동해야 하는지에 대한 논의에 더 많은 시간을 투입해야 하고, 미처 예상하지 못한 버그가 끊임없이 출현하는 것은 목격하게 된다.
- 그룩의 크기가 작아질 수록, 소프트웨어 개발은 효율성이 기하급수적으로 높아진다.
- 비아웹으 프로그래머가 실질적으로 희의에 참석하는 것을 본적이 없다.
- 점심을 먹으러 걸어가는 동한 하룻 있는 이야기보다 더 많은 이야기를 모여서 해야할 필요가 없었다.
- 단점은 모든 프로그래머가 어느 정도는 시스템 관리자의 역할도 수행해야 한다는 것이다. => 클라우드가 역할을 대신 한다. :)
- 웹 앱은 코드를 작성하고 체크인하고, 집으로 돌아가면 모든 것이 끝나는 그런 것이 아니다. 그것은 지금 서버 안에서 살고 있는 생물이다.
- 악성 버그가 중단시키는 것은 사용자 한 명의 작업이 아니다. 그것은 모든 것을 중단시킨다. 당신이 작성한 코드가 디스크에 있는 데이터를 오염 시킨다면 그것을 바로 그 순간 고처야 한다. 코드를 한밤중에 릴리즈하면 곤란하다.
- 사용자 관찰하기
- 소프트웨어는 사용자가 기대하는 대로 작동해야한다.
- 사용자가 어떤 행동을 취하는지 직접 보기 전에는 사용자가 무슨 생각을 하는지 결코 알 수 없다. 하지만 웹 앱은 사용자의 행위에 대해 전례가 없을 정도로 풍부한 정보를 제공해준다.
- 하드웨어 비용은 운영자가 감당해야 하기 떄문에 서버 중심의 소프트웨어에서 효율성은 실질적인 의미를 가진다. 서버 한 대당 지원할 수 있는 사용자의 수는 전체 자본 비용을 나누는 분모가 된다. 따라서 소프트웨어를 효율적으로 작성하면 경쟁 업체와의 가격 경쟁을 앞지르면서 계쏙 이익을 남길 수 있다.
- 사용자를 관찰하는 것은 최적화만이 아니라 설계에도 도움은 준다
- 그들이 곤란한 문제에 부딪히는 시점을 알 수 있다.
- 고객은 언제나 옳기 때문에 그것은 당신이 무언가를 수정해야 한다는 것을 의미한다.
- 대부분의 신규 사용자를 시험 운전을 통해서 확보했다. 사용자가 시험 운전을 성공시킬 수 있으면 그들은 그제품을 좋아할 것이다. 하지만 혼동이나 지루함을 느낀다면 그 제품을 좋아하지 않을 것이다.
- 시험 운전을 통해서 많은 사람을 확보할 수 있었다는 사실은 우리의 성장률을 높이는 데 크게 기여했다.
- 시험운전을 치르는 사람이 보여주는 클릭의 패턴을 연구해서 그들이 어느 순간에 혼란을 느끼고 브러우저의 뒤로가기 버튼을 누르는지 찾아냈다.
- 돈의 경로
- 소프트웨어는 "사용료 비즈니스"
- 처음부터 솔직하게 사용료를 거두는 것이, 사용자에게 돈을 받으려고 그들에게 소프트웨어의 새 버전을 구입하고 설치하도록 강제하는 것보다 낫다. 웹 기반 앱에서는 이렇게 사용료를 받는 것이 자연스럽다.
- 웹 기반 앱은 구입하기가 간편하기 떄문에 데스크톱 소프트웨에 비해서 잘 팔리기도 한다.
- 웹 기반 앱은 가끔 소매상 역할을 담당하는 ISP를 통해서 판매되기도 한다. 이것은 좋은 생각이 아니다.
- 하드웨어와 소프트웨어는 둘 다 지속적으로 개선될 필요가 있기 때문에 서버를 관리하는 사람은 당신 자신이 되어야 한다.
- 서버에 대한 직접적인 통제권을 포기한다면, 웹 기반 앱이 가지고 있는 장점의 많은 부분을 포기하는 것이된다.
- 고객 찾기
- 여러분은 돈을 안전하게 보관하고자 할 떄 자신의 베개 아래 감춰 두는가 아니면 은행에 맡기는가? 이러한 논리는 서버 관리에도 적용시킬 수 있다.
- 보안 관점에서만 아니라, 업타임, 대역폭, 로드 관리, 백업 등의 면에도 그대로 해당된다. 우리의 존재 자체는 바로 이런 일을 제대로 처리하는가 아니가에 달려 있다.
- 서버에 문제가 발생한다는 것은, 마치 아이들이 가지고 놀기에 위험한 장난감이 유통되거나 음식에서 살모넬라가 발생하는 것처럼 도저히 용납할 수 없는 일이다.
- 인트라넷은 인터넷, 클라우드보다 비싼 것이다.
- 서버의 아들
- 요즘 시작하는 스타트업이 웹 기반 앱을 작성하는 다른 이유는 데스크톱 앱을 개발하는 것이 예전에 비해서 훨씬 재미가 덜하게 되었다.
- OS에 종속된 소프트웨어 개발은 OS 회사의 시작 분석을 도와주는 것과 다름 없다.
- 스타트업을 넘어서
- 고전적인 스타트업은 적은 수의 사람과 적은 돈으로 꾸려진 빠르고 비형식적인 회사다. 그들은 매우 열심히 일하면, 그들이 내리는 기술적인 결정은 효과를 극대화 한다. 일단 성공하면 그 성공은 엄청난 것이다.
- 웹 기반 앱을 작성하는 스타트업 안에서는 모든 것이 극잔으로 치닫게 된다. 당신은 훨씬 더 적은 수의 사람과 돈으로 새로운 제품을 작성하고 출시할 수 있다. 당신은 빠르고 비형식적이어야 한다.
- 스타트업은 스트레스로 가득 차 있는데, 불행하게도 그것은 웹 기반 앱에 더 극단으로 치닫는다.
- 많은 소프트웨어 회사의 개발자들이 적어도 초기 단계에는 책상 아래에서 잠을자거나 한다.
- 최악은 일하는 시간이 아니라 책임감
- 프로그래머는 버그에 대해서 걱정하고, 시스템 관리자는 인프라에 걱정한다.
- 웹 기반 앱에서는 이 두가지 스트레스가 하나로 결합한다. 프로그래머가 시스템 관리자가 되는 것이다.
- 데스크탑 소프트웨어는 사용자가 시스템 관리자가 되도록 강제한다. 웹 기반 소프트웨어는 프로그래머가 관리자가 되도록 강제한다. 큰회사와 경쟁하는 작은 스타트업 회사 입장에서 보면 그건 좋은 소식이다. 결국 웹 기반 앱은 경재자를 물리칠 수 있는 손쉬운 방법을 제공하는 것이다. 스타트업 회사 운영자 중에서 이 사실을 모르는 사람은 없다.
- 안될 이유는 없다.
- 스타트업을 시작하고 싶은 해커가 실행에 옮기지 못하는 이유
- 비즈니스에 대해서 아무것도 모른다
- 경쟁이 두렵다
- 비즈니스에 대해서 알아야 하는 것은 오직 두 가지 뿐이다.
- 사용자가 좋아할 만한 것을 만드는 것
- 자기가 쓰는 비용보다 더 많은 돈을 벌어야 한다.
- 무엇보다도 우선 스스로 사용하고 싶어할 만큼 간다하고 깔끔한 소프트웨어를 만드는 데에서 출발하라. 1.0 버젼을 빠르게 내놓은 다음,
- 사용자의 반응에 신중하게 귀를 기울이면서 개선해 나가라. 고객은 언제나 옳지만 , 서로 다른 고객은 서로다른 의견을 내어놓기도한다.
- 경험이 부족한 사용자는 기능을 더 단순하고 명확하게 만들라고 지적
- 경험이 풍부한 사용자는 - 새롭게 추가하는 기능에 대해 이야기
- 당신이 만든 소프트웨어를 비교할 대상은 경쟁자의 소프트웨어가 아니라, 소프트웨어가 도달할 수 있는 최고의 경지가 되어야 한다.
- 당신이 작성한 소프트웨어를 언제나 직접 사용해 보아야 한다.
- 소프트웨어는 그것에 대해서 아무것도 모르는 설계자가 아니라 설계방식을 잘 이해하고 있는 해커에 의해서 만들어저야 한다.
- 당신이 소프트웨어의 설계와 적용을 모두 할 수 있는 상황이 아니라면 아예 처음부터 스타트업을 시작하지 말아야 한다.
- 내가 당신이라면 자바스크립트 조차 사용하지 않을 것이다. 웹에서 보게 되는 자바스크립트는 대부분 불필요하고 많은 수가 버그를 안고 있다.그리고 이제 휴대폰에서 웹을 브라우징하는 시절이 온다면 자바스크립트가 지원이 된다고 어떻게 장담할 수 있는가?
- 부자가 되는 법
- 스타트업을 시작하거나 스타트업에 참여
- 스타트업이란 어려운 기술적인 문제에 도전하는 작은 회사
- 명제
- 스타트업이란 한 사람이 평생 할 일을 몇 년이라는 짧은 시간으로 압축시키는 것이다.
- 낮은 밀도록 40년 일하는 대신, 당신이 할 수 있는 최고의 속도로 딱 4년만 일하느 ㄴ것이다.
- 이런 태도는 빠른 속도가 삶과 죽을 가르는 테크놀로지 분야에는 큰 장점
- 스타트업은 마술이 아니다. 여기에도 질량 보존의 법칙이 존재한다.
- 당신이 백만 달러를 벌기 원하면, 백만 달러 어치의 고통을 감수해야 한다.
- 억만 달러가 아니라 백만 달러
- 실제를 부자가 되는 방법은 간단하다. 사람들이 원하는 뭔가를 하거나 만들면 되는 것이다.
- 돈은 부가 아니다.
- 부는 돈과 같은 것이 아니다.
- 돈이 부에 이르는 지금길 이기 때문에 사람들은 항상 돈에 대해 이야기
- 대부분의 비즈니스가 진짜로 하는 일은 부를 창출하는 것이다. 사람들이 원하는 무엇을 수행하는 것이다.
- 파이의 괘변
- 당신은 더 많은 부를 만들 수 있다. 부는 인류의 역사 속에서 창조되고 파괴되어 왔다.
- 장인
- 부가 새롭게 만들어질 수 있는 무엇이라는 점을 쉽게 이해하는 사람, 장인
- 현존하는 장인 중에서 제일 큰 규모를 이루고 있는 사람들이 컴퓨터프로그래머
- 상위의 5%에 속하는 프로그래머가 제대로 된 소프트웨어의 99%를 작성하는 것이다.
- 해커들은 누구나 무료로 이용할 수 있는 오픈소스 소프트웨어를 작성함으로써 그들이 창출한 부를 사회에 제공한다.
- 직업이란 무엇인가
- 당신이 회사에서 하는 일은 다른 사람들이 하는 일과 뭉뜽그러져서 하나의 평균값으로 평가된다.
- 회사라는 것은 결국 사람들이 원하는 일을 하기 위해서 여러 사람이 한 자리에 모인 것에 불과하다. 중요한 것은 어떻 그룹에 소속되는 것이 아니라, 사람들이 원하는 일을 하는 것이다.
- 대개 사람들에게 최고의 선택은 이미 존재하는 회사에 들어가는 것이다. 하지만 당신이 수행한 일이 다른 사람들이 수행한 일과 함께 하나의 평균값으로 뭉뚱그러지는 것이다.
- 더 열심히 일하기
- 많은 일을 하더라고 당신의 성과는 평균이 된다는 것이다.
- 영업직원과, 최고 경영자만 성과에 따라 월급을 지급한다.
- 어느 회사가 판매 직원이나 최고 경영자 이외에 모든 직원에게 그렇게 쉽고 정확하게 지급할 수 있는 체계를 갖췄다면 그 회사는 성공을 거둘 것이다.
- 당신이 빠르게 전진하고 싶다면 일이 다른 사람의 일과 한 덩어리로 뭉처 있다는 사실이 문제가 된다. 커다란 조직에서 당신의 능력은 독자적으로 측정되는 대상이 아니다. 다른 사람이 당신의 일을 지연 시킨다.
- 정당한 평가와 영향력
- 부자가 되기 위에서 두가지를 갖춘 환경에 있어야 한다.
- 무엇보다도 사람들의 능력을 공평하게 평가하는 곳에 있어야 한다.
- 그렇지 안하면 더 많이 일해 더 많이 받는 것이 불가능해진다.
- 그와 동시에 영향력도 있어야 한다.
- 당신이 내린 결정이 큰 영향을 행사할 수 있는 상황을 만들 필요가 있다는 뜻
- 당신이 제법 안전하다고 느껴지는 직업을 가지고 있다면 당신은 부자가 될 가능성이 없다. 위험이 존재하지 않는 곳에는 영향력이 존재할 이유가 없기 때문이다.
- 어려운 문제를 해결하기 위해서 모인 작고, 활기찬 집단에 소속되는 것이 필요하다.
- 소규모 = 정당한 평가
- 스타트업을 시작, 합류 한다는 것은 결국 자기 보스에게 가서 이제부터 열배로 열심히 일한 테니 그에 맞도록 열 배의 급여를 달라고 주장할 수 있는 상황에 가까워지는 것을 의미한다.
- 그말을 보스에게 하는 것이 아니라 고객에게 한다는 것
- 일을 혼자서 하는 것이 아니라 비슷한 정도로 야심 찬 사람으로 이루어진 작은 그룹 안에서 수행
- 스티브 잡스는 스타트업의 성공과 실패는 처음 열 명이 어떻게 구성되는가에 달려 있다고 지적했다.
- 테크놀로지 = 영향력
- 계란을 굽거나 머리를 깍는 일은 손님 한 사람에 대해서만 수행할 수 있다.
- 하지만 많은 사람이 관심을 가지고 있는 일과 관련된 기술적인 어려움을 해결하는 것은 모든 사람을 한꺼번에 돕는 일이다 이것이 바로 영향력의 위력이다.
- 규모가 작다는 것과 어려운 문제를 해결한 다는 것 사이에 자연스러운 궁합이 존재.
- 우리가 일부러 어려운 문제를 찾으려고 노력했다는 사실디다.
- 추가 기능이 두가지 있을때 그 기능이 가지 가치가 어려운 정도에 비례한다고 했을 때, 언제나 어려운 쪽을 선택했다.
- 당신의 생각과 똑같은 제품을 개발하는 것이 얼마나 어렵습니까? 라는 질문은 당신과 잠재력 경쟁자 사이에 얼마나 깊은 골을 파 놓았는지를 물을 것이다.
- 따라서 당신의 테크놀로지를 똑같이 복제하는 것이 얼마나 어려운지에 대해서 설명할 준비를 하는 것이 좋다.
- 그렇지 않으면 큰 회사가 당신의 아이디어에 대해서 알게 되었을 때, 그들이 가진 브랜드, 자본, 배급망을 동원해서 똑같은 제품을 만들고 시장을 순식간에 빼앗아 갈 것이다.
- 진입장벽을 구축하는 하나의 방법은 특허는 별로 대단한 보호장치가 되지 못한다.
- 최선의 방어는 공경이다. 경쟁자들이 복제할 수 없을 정도의 제품을 만들면 고민할 필요가 없는 것이다.
- 시작 자체를 가장 어려운 문제에서 출발한 다음, 의사결정을 내려야 하는 고비를 만날 때마다 더 어려운 쪽을 선택해 나가는 것이다.
- 함정
- 잠깐이라도 쉬어갈 수 있는 시간을 당신이 결정 할 수 없다는 사실이다.
- 일을 몇 배로 더 많이 해야하는지에 대해서도 스스로 결정을 내릴 수 없다.
- 스타트업에서도 수입과 생산성 사이에 존재하는 비례관계가 평균적인 수준에서 그친다. 30배의 생산이 30배의 수입은 아니다.
- 스타트업은 모기와 비슷하다 , 오직 하나의 목적을 위해서 만들어졌다.
- 효율성을 극대화 , 점수를 올리는 것이다.
- 자기가 세운 스타트업을 낮은 가격에라도 확실한 수익을 위해서 성장 가능성(그리고 위험)을 포기하고 초기에 파는 것이다.
- 사용자 확보하기
- 할 수만 있다면 회사를 파는 것은 괜찮은 방법이다.
- 잠정적 구매자에게 그들의 경쟁자가 당신의 회사를 사려고 한다는 인상을 심어주는 것
- 지금 회사를 사지 않으면 나중에는 훨씬 더 많은 돈을 내야하거나, 회사가 팔리지 않으면 그들의 경쟁자로 남아 있을 것이다라는 우려를 주는 것
- 위 두가지에 있어서 중요한 것은 결국 사용자다. 구매자가 수행하는 조사는 당신이 확보한 사용자의 수에만 집중될 뿐이다.
- 성급한 최적화를 피하는 것이다. 너무 많은 기능을 붙잡고 꾸물거리지 말고 최대한 빨리 1.0 버전을 내놓아야 한다.
- 소프트웨어의 성공 여부를 정확하게 평가할 수 있는 사용자가 존재하기 전에 수행하는 최적화는 모두 근거 없는 추측에 불과할 뿐이다.
- 부란 사람들이 원하는 것이라는 사실이다. 부를 창출함으로써 부자가 되고 싶다면 사람들이 원하는 것이 무엇인지 알아야 한다.
- 테크놀로지 세계에서는 당신이 내놓은 요리를 수많은 사람이 먹는다. 그렇게 때문에 사람들이 원하는 것과 당신이 전달한 것 사이에 존재하는 아주 미세한 차이가 거대하게 증폭된다.
- 당신은 사용자 전부를 기쁘게 하거나, 아니면 그들 전부를 짜증 나게 하는 것이다.
- 어쨌든 사용자가 원하는 것에 더 가깝게 다가갈 수록 , 당신은 더 맣은 부를 창출할 수 있다.
- 부과 권력
- 스타트업이 경제적으로 무엇을 의미하는 기억
- 더 빠르게 일하고 싶다고 말하는 것과 같은 의미다.
- 50년 동안 정상적인 수준의 월급을 천천히 나누어서 받지 않고, 가능하면 그것을 한꺼번에 받고 싶다고 말하는 것이다.
- 1200년대의 유럽이 강하게 성장한 이유, 부를 창출한 사람이 그것을 갖도록 인정했기 때문이다.
- 차이에 대한 연구
- 부의 모델
- 아이들은 세장에 존재하는 부는 일정한 양으로 고정되어 있다고 믿는다.
- 부는 돈과 같은 것이 아니다.
- 부라는 것을 일을 통해서 창출하는 것이 아니라 어떤 공통의 원천으로 부터 붅배되는 것이라고 보고 있는 것이다. 아니다 다른 사람들 보다 훨씬 더 많은 수입을 올리는 사람은 더 많은 부를 창출하고 있는 사람이다.
- 부를 훔치기
- 중산층의 성장과 함께 부는 제로섬 게임에서 해방되었다. 잡스와 워즈니악을 부자가 되기위해서 다른 사람을 가난하게 만들 필요가 없었다.
- 테크놀로지의 영향력
- 부자와 가난한 사람 사이에 존재하는 차이를 넓힐 것인가?
- 확실한 것은 생산적인 사람과 그렇지 않은 사람의 차이를 더욱 넓힐 것=> 테크놀로지의 핵심이다.
- 수입과 수입 사이에 존재하는 차이를 증가시기지만 다른 차이는 감소
- 100년 전에는 부자 마차, 말을 소유 , 하인도 소유
- 현재는 부자도 , 보통 사람과 다를 바 없는 삶은 산다.
- 대부분의 사람들은 자동차를 소유한다.
- 테크놀로지가 저렴하게 만들 수 없는 유일한 대상은 브랜드다
- 사람들은 특별이 비싼 브랜드 차를 식볋할 수 있을 정도로 훈련이 잘되어 있다.
- 어떤 것에 대해서 충분한 수요가 존재하면, 테크놀로지는 그것을 대량 판재하는 것이 가능하도록 만든다, 그렇게 대량 생산된 제품은, 더 나은 제품이 아니라면, 적어도 더 편리한 제품이다. 대량 생산되 제품은 부자나 서민이나 비슷한 제품은 쓴다.
- 테크놀로지는 부자와 가난한 사람 사이에 존재하는 차이를 넓히는 것이 아니라 좁히는 것으로 보인다.
- 스팸을 위한 계획
- 창조자의 심미적 취향
- 좋은 디자인은 간단하다
- 좋은 디자인은 시간에 구애 받지 않는다.
- 좋은 디자인은 제대로 된 문제를 해결한다.
- 좋은 디자인은 무언가를 제안한다.
- 상상 그런 것은 아니지만 좋은 디자인은 조금 우습기도 하다.
- 좋은 디자인은 어렵다.
- 좋은 디자인은 간단해 보인다.
- 좋은 디자인은 대칭이다.
- 좋은 디자인은 자연을 닮았다.
- 좋은 디자인은 무언가를 다시 디자인하는 것이다.
- 좋은 디자인은 복사가 가능하다.
- 좋은 디자인은 이사할 때도 있다.
- 좋은 디자인은 뛰어난 사람들의 모임에서 나온다.
- 좋은 디자인은 대담하다
- 프로그래밍 언어에 대한 설명
- 고수준 언어
- 컴파일러는 사람이 이해하기 편한 방식으로 작성된 프로그램을 해석해서 하드웨어가 이해할 수 있는 간단한 언어(기계어)로 변환해 주는 프로그램
- 프로그램의 일부만 검사하여 그에 상응 하는 기계어를 그때그때 실행하는 인터프리터를 사용할 수도 있다.
- 언어의 전쟁
- 정말 중요한 건 제대로 될 일을 하는 것이다. 좋은 일을 하면 되는 거야.
- 안전 벨트 혹은 수갑? (정적 타이핑)
- 나는 동적 타이핑을 선호한다. 나는 무엇을 하라고 강제적으로 명령하는 언어를 싫어한다. 하지만 어떤 똑똑한 친구들은 정적 타이핑을 좋아하는 것처럼 보인다. 결국 이 질문은은 아직 정답이 없는 상태
- OOP
- 객체지향의 2가지 의미
- 당신이 객체지향 스타일로 프로그램을 짤 수 있도록 허용- 더 유연
- 당신이 반드시 객체지향 방법론으로 프로그램을 짜도록 한다.(강제)
- 100년 후의 프로그래밍 언어
- 세상에는 좋은 낭비와 나쁜 낭비가 있다. 나는 더 많이 소모함으로써 더 단순한 디자인을 얻을 수 있는 좋은 낭비에 관심이 있다.
- 우리가 새롭고 더 빠른 하드웨어를 통해서 얻을 사이클을 마음껏 낭비할 수 있는 기회를 어떻게 활용한 것인가?
- 구현에 대해서 적게 정해 놓을 수록 프로그램이 더 유연해지기도 한다. 스펙은 프로그램이 만들어지는 동안에 변경되기도 하는데, 이것은 단순히 불가피한 일이 아니라 바람직한 일이기도 하다.
- 비효율적인 소프트웨어가 그 자체로 엉터리인 것은 아니다. 진짜 엉터리는 프로그래머에게 불필요한 일을 하도록 강제하는 언어다. 기계의 시간이 아니라, 프로그래머의 시간을 낭비하는 것이 진짜 비효율성이다. 컴퓨터의 속도가 더 빨라질수록, 이러한 사실은 점점 더 명확해질 것이다. => 동의
- 재사용성이라는 개념은 어떻게 하다보지 1980의 객체지향 프로그래밍과 연결
- 재사용성 가능성을 보장하는 것은 객체지향성이 아니라 상향식 접근 방법이다. 라이브러리를 생각해보라. 그들은 객체 지향 스타일로 작성되었뜬 아니든 하나의 언어처럼 존재하기 때문에 재사용이 가능한 것이다.
- 병렬처리
- 병령주의하는 것은 엄청난 속도를 제공하는 하드웨어와 마찬가지로 꼭 필요한 경우에는 사용하겠지만 평상시에는 사용하지 않을 것이다.
- 이것은 100년 뒤에 나타날 병렬주의가 특별한 어플리케이션을 제외한 대부분의 애플리케이션에서 별로 대단한 의미를 갖지 않으리라는 점의 시사한다.
- 100년 내에는 병렬주의는 특별한 목적의 애플리케이션을 제외한 보통 프로그램에는 사용되지 않을 가능성이 높다.
- 병렬주의를 사용한다면 그것은 성급한 최적화의 예가 될 것이다.
- 평균 뛰어 넘기
- 비밀 무기
- 에릭 레이몬드 - 진짜 심각한 해커는 리스프를 배우는 것을 고려한 필요가 있다고 했다.
- 프로그래밍 언어란 결국 도구일 뿐이다. 리스프가 진짜로 더 나은 프로그램을 산출한다면 , 당신은 그것을 사용해야 한다. 더 나은 프로그램을 산출하지 않는다면, 도대체 그 언어를 필요로 하는 사람이 누가 있겠는가.
- 스타트업에서는 당신이 잘못된 테크놀로지에 ㅂ재팅을 하게 되면, 당신의 경쟁자가 그 즉시 당신을 묵사발로 보린다.
- 리스프가 소프르퉤어를 빠르게 작성할 수 있는 언어라느 사실과, 서버기반 앱은 빠른 개발의 효과를 증폭시킬 것라는 점을 깨닫고 있었다. 서버기반 앱은 소프트웨어가 완성된 지 몇 분 많에 출식하는 것이 가능하기 때문
- 리스프를 이용하면 기능을 경재자들보다 더빠르게 구현할 수 있고, 그들이 만들지 못하느 기능을 우리는 만들 수도 있을 것이라는 점이었따.
- 고수준의 언어 이므로 비용을 낮출 수도 있었다. 더 낮은 가격으로 나은 제품
- 경쟁업체들은 우리가 갖지 못한 기능을 선보이기도 했다. 하지만 리스프를 이용한 개발 사이틀은 너무나 빨랐기 때문ㅇ네 그들이 새로운 기능을 언론에 발표한 지 하루 이틀이 지나면 우리는 그와 동일한 기능을 만들어낼 수 있었다.
- 우리는 단지 사람들이 생각하는 것보다 훨씬 빠른 속도로 소프트웨어를 개발 할 수 있을뿐이었다.
- 스타트업은 경쟁업체에 가능하면 적은 정보를 노출할 필요가 있기 때문이다. 우리의 소프트웨어가 어떤 언어로 작성되었는지에 대해서 어차피 경쟁업체들이 알고 있지 못한다면, 굳이 그것을 밝힐 이유가 없다.
- 블럽의 역설
- 다른 사람들이 그것을 이요하지 않는 이유는 프로그래밍 언러라는 것이 단순히 테크놀로지가 아니라 습관이기 떄문이다. 이 세상에서 습관처럼 천천히 변하는 것이 또 없다.
- 다양한 언어 사이에 존재하는 기능적 차이를 이해하고 있는 사람은 가장 강력한 언어를 사용하고 있는 사람이다.
- 리스프는 파싱 트리를 조작하는 프로그램을 작성할 수도 있다.
- 매크로: 프로그램을 작성하는 프로그램
- 스타트업을 위한 합기도
- 경쟁자를 판단하는 간단한 방법
- 그들의 구인광고를 살펴보는 것, 그들이 정확히 무엇을 원하는지 대해서 설명
- C++ , JAva 개발자를 요구하는 경우 걱정할 일이 없다.
- 펄이나 파이썬 프로그래머를 찾는 경우 약간 긴장
- 최소한 기술적인 부서는 해커에 의해 운영된다는 증거
- 리스프 해커를 찾는 구인 광고를 보았다면 진짜 걱정
- 공부벌레의 역습
- 뽀족머리 보스(개발자 출신이 아닌) 공통적인 성질
- 테크놀로지에 대해서 아무것도 아는 것이 없다.
- 테크놀로지에 대해서 매우 강한 의견을 가지고 있다.
- 그는 어떤 언어를 써야하는 알고 있다. 자바이다.
- 자바는 곧 표준이다. 그것은 시장에 수많은 자바 프로그래머가 많다는 뜻이므로 일잘하던 녀석이 갑자기 회사를 그만두어도 대신할 사람을 쉽게 구할 수 있다는 뜻이다.
- 세상에 존재하는 프로그래밍 언어가 모두 동일한 것이라고 착각하고 있다. 사실이사면 그의 생각은 옳다. 언어가 모두 비슷비슷하다면 , 많은 사람이 이용하는 것을 선택하는 것은 옳다.
- 언어는 동일하지 않다.
- 어떤 특정한 문제를 해결하기 위해서는 어느 언어가 다른 언어에 비해서 더 나을 수 밖에 없다.
- 풀어야 하는 문제에 대해 가장 알맞은 것을 고르는 것
- 프로그래머나 라이브러리 등을 쉽게 구할 수 있는지 여부 (뾰족머리 보스가 선택하는 방식)
- 자바, 펄 파이썬, 루비는 리스프를 닮아가는 패턴을 보인다.
- 1950년대에 탄생한 리스프가 오늘날에도 여전히 유효한 이유에는 , 그것이 테크놀로지가 아니라 수학이었다는 사실 일 것이다.
- 리스프와 포트란은 컴퓨터 언어의 진화 계보에서 두개의 큰 줄기를 형성
- 리스프 - 수학에 뿌리
- 포트란 - 기계의 아키텍처
- 리스프는 실행 시간에 코드를 읽거나 컴파일 하는 것도 가능, 컴파일 시간에 코드를 실행하는 것은 매크로의 기본이 된다.
- 언어 선택이 필요한 시점
- 리스프와 같은 언어에서 이점은 엄청난 경쟁 속에서 어려운 문제를 해결하기 위한 정교한 프로그램을 작성해야 하는 극한 상황에서 나타난다.
- 구심력
- 덜 유명한 언어를 사요하는 데 따르는 세가지 문제
- 다른 언어로 작성된 프로그램과 함께 어울려서 작동 할 때 제대로 작동하지 않을 수 있다.
- 사용할 수 있는 라이브러리가 제한
- 크게 복잡하지 않은 움제를 해결할 때는 라이브러리의 존재가 언어 자체의 고유한 기능보다 더 큰 의미를 가질 수 있지만
- 강력한 언어의 기능이 미리 존재하는 라이브러리의 편히함을 앞지를 수 있다.
- 프로그래머 고용이 어려움
- 스타트업을 시작한다면, 벤처 투자자나 잠정적 구매자를 기쁘게 할 목적으로 제품을 만들지 말아야 한다.
- 오직 사용자를 기쁘게 만들기 위해서 제품을 만들어야 한다.
- 사용자를 얻게 되면 나머지는 저절로 따라온다.
- 사용자를 얻지 못하면 당신이 선택한 기술적인 내용들이 아무리 정통 표준을 따르고 있다고 해도 관임을 같는 사람은 아무도 없을 것이다.
- 평균이 지불해야 하는 비용
- 고수준 언어의 핵심
- 더많은 추상화, 즉 더 커다란 벽돌을 제공함으로써 당신이 벽을 쌓을 때 필요한 벽돌의 갯수를 줄여주는 것이다.
- 언어가 더 강력할 수록, 프로그램은 어 짧아진다( 글자의 수가 아닌 서로 구별되는 요소의 수)
- 상향식 프로그래밍
- 애플리케이션을 주어진 언어로 작성하는 것이 아님
- 주어진 언어를 이용해서 당신이 만들고자 하는 애플리케이션에 적합한 언어를 새로 만듬
- 그 새로운 언어를 이용해서 애플리케이션을 작성하는 것
- 코드의 길이다 3배로 늘어난면 그것을 작성하는데 걸리는 시간도 3배
- 하지만 사람은 더 고용한다고 해서 나아지는 것은 아님, 특정한 수준을 넘으면 사람을 더 고용하는 것이 오히려 손해 - 맨먼스 미신
- 방법
- 언어는 기능적 힘을 서로 달리한다.
- 대부분의 매니저들은 이러한 사실을 일부로 무시한다.
- 소프트웨어 비즈니스에서 승리하고 싶다면, 당신이 구할 수 있는 것 중에서 가장 기능적 힘이 뛰어난 언어를 선택한 다음, 경쟁사에서 일하는 보스들이 평균값으로 복귀하는 것을 지켜보기만 하면 되는 것인다.
- 기능
- OOP 언어에서는 제한된 수준에서나마 (주번에서 둘러싸고 있는 코드에서 정의된 변수들을 가리키는 함수인) 클로저를 흉내 낼 수 있다.
- C# Lambda , 익명 메소드 등등
- OOP 세계에서 패턴
- 인간 컴파일러에 대한 증거.
- 프로그램 안에서 패턴을 발견하면 그것을 뭔가 문제가 발생하고 있다는 신호로 받아들인다.
- 프로그램의 형태는 오직 그것이 해결해야 하는 문제만 반영해야 한다.
- 코드에 존재하는 그 밖의 모든 정현성은 최소한 나에게 있어서는 내가 충분히 강력하지 않은 추상을 이용하고 있다는 신호
- 때로는 간결한 메크로를 작성하는 것이 아니라, 매크로가 확장된 형태를 일일이 손으로 작성하고 있는 것이다. => 프로그램을 만드는 코드를 어떻게 작성해야 하는지 모르겠다...
- 내 생각
- 저자는 개발자 혹은 창업자가 뛰어난 해커라를 가정하에 이야기를 하는 것 처럼 보인다. 하지만 그렇게 뛰어한 해커들이 얼마나 있을까? 리스프라는 언어를 사용해서 자신만의 라이브러리를 구축해서 개발을 할 수 있는?
- 꿈의 언어
- 유명세의 메카니즘
- 전문적인 해커들은 대개 보스나 교수진으로서 , 다른 프로그래머들에게 특적안 언어를 사용할 것을 주문하는 위치에 있는 경우가 많다.
- 외적인 요소
- 프로그래밍 언어는 당연히 그 언어로 구현된 훌륭한 소프트웨어를 가지고 있어야 한다. 그것 또한 무료로 배포되ㅓ야 한다.
- 해킹의 가능성
- 해커들은 해킹을 좋아한다. 해킹이란 바로 어떤 존재의 내부에 침투하는 것, 그리고 원래 설계자의 마음을 읽어내는 것을 의미한다.
- 당신의 마음이 해커들에게 읽히도록 내버려둬라 , Github에 코드 공개?
- 디자인과 연구
- 디자인은 사용자에게 좀더 관심을 기울인다는 것이다.
- 무엇을 원하는 가가 아니라 => 무엇이 필요한가 라고 말한 것에 주목.