2014년 6월 16일 월요일

해커와 화가


Hackers & Painters
Big Ideas from the Computer Age
Released: May 2004

2014년 봄이 시작되기 직전 서점에서 우연히 발견했다. 내용이 너무 좋아서 사람들에게 추천을 했다. 사람들은 어떤점이 좋은지, 제목이 왜 해커와 화가인지, 둘 사이에 어떤 공통점이 있는지 궁금해 했다. 바로 대답을 못했다. 단지 대기업에서 소프트웨어 개발을 15년 넘게 해온 나에게 15개의 챕터는 어렴풋하게 가지고 있던 나의 생각들에 어떠한 깨달음을 주는듯 했다. (참고로 두번째 챕터의 제목이 해커와 화가다.)
다 읽고나서 책을 다시 한번 훝어 보았다. 이런! 이책은 15개의 주제를 개별적으로 얘기하고 있는 것이 아니었다. 단 하나의 주제에 대한 얘기를 하고 있는 것이었다. 그것은 무언가 아름다운 것을 만드는 방법에 관한 것이었다. 해커는 이러한 것을 만드는 사람을 말했다.
그리고 무언가 아름다운 것을 만드는 방법은 "대개 이미 존재하는 것을 살짝 뒤틀거나, 아니면 알려진 아이디어 몇 개를 새로운 방식으로 결합하는 것"이라고 했다. 이제부터는 그 방법을 저자의 말을 빌어 한번 훓어보겠다. 

1) 비밀
디자인 전쟁을 치르기 좋은 장소는 아직 누구도 요새를 구축하지 못한 새로운 시장일 것이다. 그곳에서 당신은 한 사람이 제품을 디자인하고 구현하도록 만드는 대담한 방식을 통해서 커다란 승리를 거둘 수 있다. 만약 돈을 벌고 싶다면 자기에게 흥미로운 일을 찾을 것이 아니라, 너무나 짜증 나는 일이라서 누구도 그것을 공짜로 해결할 엄두를 내지 않는 힘겨운 일을 찾아야 할 것이다. 사물을 다른 사람의 입장에서 바라본다는 것이 곧 성공의 비밀이라는 사실. 좋은 소프트웨어를 만들기 위해서는 도대체 사용자가 얼마나 조금 알고 있는지를 이해해야 한다. 사용자가 아무 생각 없이 만지작거려도 제대로 작동하는 것이어야 한다. 우리의 인생은 단 한 번뿐이다. 그래서 인생을 뭔가 멋진 데에 쓰는 것은 중요하다.

2) 스타트업
큰 회사에서는 구체적인 기능을 구현하는 대신 계획을 세운다. 앞으로 6개월 동안 무엇을 할 계획이냐고? 그게 무엇이든 우리에게 가장 도움이 될 만한 일을 할 것이다. (계획을 세우는데 너무나 많은 시간을 소비하는 구조) 훌륭한 소프트웨어를 만드는 방법은 자기 자신의 스타트업 회사를 만드는 것이다.
스타트업을 시작하고 싶은데 그 계획을 실행에 옮기지 못하는 이유는 아마 두 가지일 것이다. 하나는 비즈니스에 대해서 아무것도 모른다는 사실이다. 그리고 다른 하나는 경쟁이 두렵다는 것이다. 비즈니스에 대해서 알아야 하는 것은 오직 두 가지뿐이다. 사용자가 좋아 할 만한 것을 만드는 것 (무엇보다도 우선 스스로 사용하고 싶어할 만큼 간단하고 깔끔한 소프트웨어를 만드는 데에서 출발하라. 1.0 버전을 빠르게 내놓은 다음, 사용자의 반응에 신중하게 귀를 기울이면서 개선해 나가라. 기본 설정값을 올바로 정함으로써 간단하게 하라). 그리고 자기가 쓰는 비용보다 더 많은 돈을 벌어야 한다는 것.
큰 회사에서 일하는 것의 문제는 당신이 수행한 일이 다른 사람들이 수행한 일과 함께 하나의 평균값으로 뭉뚱그려지는 것이다. 커다란 조직에서 당신의 능력은 독자적으로 측정되는 대상이 아니다. 다른 사람이 당신의 일을 지연시킨다. 부자가 되기 위해서는 두 가지를 갖춘 환경에 있어야 한다. 정당한 평가영향력. 무엇보다도 우선 사람들의 능력을 공평하게 평가하는 곳에 있어야 한다. 그렇지 않으면 더 많이 일해서 더 많이 받는 것이 불가능하기 때문이다. 그와 동시에 영향력도 있어야 한다. 당신이 내린 결정이 뭔가 큰 영향을 행사할 수 있는 상황을 만들 필요가 있다는 뜻이다. 영향력을 가지고 있는지를 판단하기 위한 하나의 단서는 실패할 가능성이 있는가다. 성공을 위한 기회가 있다면 무서운 실패의 가능성도 존재해야 한다. 당신이 제법 안전하다고 느껴지는 직업을 가지고 있다면 당신은 부자가 될 가능성이 없다. 위험이 존재하지 않는 곳에는 영향력이 존재할 이유가 없기 때문이다. 어려운 문제를 해결하기 위해서 모인 작고 활기찬 집단에 소속되는 것이 필요하다. 규모가 작기 때문에 정당한 평가를 제공하고, 새로운 테크놀로지를 발명하는 과정을 통해서 돈을 벌기 때문에 영향력도 제공한다. 무언가를 수행하기 위한 새로운 방법을 발견했다면, 그 가치는 새로운 방법을 사용하는 사람들의 수를 곱한 것만큼 늘어난다. 최첨단 테크놀로지는 빠르게 움직인다. 지금은 엄청난 가치를 지닌 테크놀로지가 몇 년 뒤에는 아무런 소용이 없을 수 있다. 작은 회사에는 뒷발을 붙잡는 관료주의가 없기 때문에 이렇게 급변하는 세상에 편하게 적응할 수 있다. 기술적인 진보는 기존의 관성에서 벗어난 새로움에서 이루어지는 경향도 있다.

3) 부자가 되는 법
반드시 사람들이 원하는 것을 제공해야만 하며, 그렇지 않다면 돈을 벌 수 없다. 부는 사람들이 원하는 것이다. 사람들이 당신의 소프트웨어를 사용하지 않는다면, 그것은 단순히 서투를 마케팅 때문이 아니다. 당신이 사람들이 원하는 것을 만들지 않았기 때문이다. 스타트업은 단순히 문제를 해결하는 것이 아니다. 당신은 사용자들이 필요로 하는 문제를 해결해야 한다. 스타트업을 사용자의 수에 의해서 성능이 측정되는 최적화 문제라고 생각해 보자. 너무 많은 기능을 붙잡고 꾸물거리지 말고 최대한 빨리 1.0 버전을 내놓아야 한다. 소프트웨어의 성공여부를 정확하게 평가할 수 있는 사용자가 존재하기 전에 수행하는 최적화는 모두 근거 없는 추측에 불과할 뿐이다. 여기에서 시선을 떼지 말아야 하는 근본적인 원리는 부란 사람들이 원하는 것이라는 사실이다. 부를 창출함으로써 부자가 되고 싶다면, 사람들이 원하는 것이 무엇인지 알아야 한다.
천천히 일하는 것의 문제는 단순히 기술적인 혁신의 속도가 느려진다는 데 있지 않다. 기술 혁신이 완전히 멈춘다는 것이 문제다. 혁신은 빠른 속도가 장점으로 인정받는 프로젝트에서 어려운 문제를 찾아서 노력할 때만 이루어질 수 있다. 정당한 평가는 작은 그룹에서 일할 때 가능하고, 영향력은 새로운 기술을 개발함으로써 형성된다.

4) 경쟁
소프트웨어에 더할 수 있는 기능이 두 가지 있을 때, 그리고 기능이 가진 가치가 어려운 정도에 비례한다고 했을 때, 언제나 어려운 쪽을 선택해야 한다. 당신의 테크놀로지를 똑같이 복제하는 것이 얼마나 어려운지에 대해서 설명할 준비를 하는 것이 좋다. 여전히 최선의 방어는 공격이다. 경쟁자들이 복제할 수 없을 정도의 제품을 만들면 고민할 필요가 없는 것이다. 시작 자체를 가장 어려운 문제에서 출발한 다음, 의사결정을 내려야 하는 고비를 만날 때마다 더 어려운 쪽을 선택해 나가는 것이다. 당신과 경쟁자는 항상 같은 결정을 내린다. 그것은 언제나 할 수 있는 최고의 강도로 일한다는 것이다.

5) 발견하기
재능 있는 사람이 모여서 관련된 문제를 연구하는 커뮤니티보다 강력한 것은 없다. 오늘날의 실험적 오류는 내일의 새로운 이론을 위한 밑거름이 된다. 새롭고 위대한 무언가를 발견하고자 한다면, 전통적인 지혜와 진실이 서로 어긋나는 상황을 좌시하기보다는 그런 곳에 시선을 집중해야 한다. 추함을 참을 수 없는 것. 그 자체만으로는 충분하지 않다. 좋은 후각을 발달시키기 전에 해당 분야의 일을 충분히 이해하고 있어야 한다. 창조 이전에 자기 숙제부터 해야 하는 것이다. 어떤 분야의 전문가로 성장함에 따라서, "이런, 이것보다 더 나은 방법이 있을 거야."라는 희미한 목소리를 듣게 될 것이다. 그 목소리를 무시하지 않기 바란다. 위대한 작품을 만드는 방법은 바로 자기 자신만의 미적 취향과 그것을 만족하게 할 수 있는 능력에 달려 있는 것이다.

6) 스타트업에서 일하기 (스피드)
큰 회사에서 일하는 사람은 다른 큰 회사에서도 하는 보통 일을 하면서 지낼 것이다. 하지만 스타트업의 경우에는 다른 스타트업에서 하는 일을 하고 있을 수가 없다. 만약 다른 스타트업이 하는 일을 비슷한 수준으로 따라 하면, 평균적인 수준의 실적을 기대할 수 있다. 문제는 평균이라는 것이 망하는 것과 동일한 지점을 가리키고 있다는 점이다. 스타트업의 생존 확률은 50% 미만이다. 따라서 스타트업을 경영할 때는 뭔가 특별한 일을 하지 않으면 곤란하다. 이 시장에서는 앞으로 빠른 개발이 중요해질 것이라는 점이 분명하다. 빠른 개발의 효과를 증폭시킬 언어(예, Lisp)와 개발 환경(서버 기반)을 활용해야 한다.
스타트업을 시작한다면, 벤처 투자자나 잠정적 구매자를 기쁘게 할 목적으로 제품을 만들지 말아야 한다. 오직 사용자를 기쁘게 만들기 위해서 제품을 만들어야 한다. 사용자를 얻게 되면 나머지는 저절로 따라온다. 사용자를 얻지 못하면, 당신이 선택한 기술적인 내용들이 아무리 정통 표준을 따르고 있다고 해도 관심을 갖는 사람은 아무도 없을 것이다. 

7) 사용자
훌륭한 건축가는 디자인을 한 다음에 사용자를 생각하지 않는다. 그는 예상되는 사용자에 대한 연구를 통해서 그들이 정확히 무엇을 필요로 하는지를 알아낸 후 시작한다. "무엇을 원하는가"가 아니라 "무엇이 필요한가"에 주목하라. 사용자에게 부응한다는 것이 곧 사용자가 말하는 대로 따라 한다는 의미는 아니다. 사용자들은 대게 선택 가능한 내용이 무엇이 있는지 다 알지 못한다. 그래서 그들은 자기가 원하는 것에 의해서 잘못 이끌린다. 디자인을 하는 것은 마치 의사가 되는 것과 마찬가지이다. 환자가 아픈 증상을 이야기하면, 정확히 무엇이 잘못된 것인지 의사가 알아내야 한다. 그 다음에 치료를 하는 것이다. 핵심은 어떤 사용자 그룹이라도 일단 선택을 해야 한다는 것이다. 목표로 삼는 사용자가 없으면 도대체 디자인이 좋은지 나쁜지조차 말할 수 없기 때문이다. 목표로 삼은 사용자 안에 설계자 자신이 포함되어 있으면 좋은 디자인을 산출할 가능성이 한층 높아진다. 좋은 디자인을 얻기 위해서는 우선 사용자에게 가깝게 다가가야 하고, 거기에 머물러야 한다. 올바른 방법은 제대로 된 큰 윤곽을 빠르게 대충 그린 다음, 이 스케치를 천천히 다듬어 나가는 것이다.

"화가가 작품을 완성하는 경우는 없다. 단지 그는 작업을 멈출 뿐이다."