《黑客与画家》,这本书2004年出版,作者Graham在10年前就提出如下这些观点,现在这些观点被人们广泛接受和理解,可见其远见卓识:

1.黑客与画家本质上是一样的,需要不断练习提高技能,独立思考的能力,热情与努力。

2.创造用户需要的产品,关注产品才能成功,互联网软件可以快速验证用户需求。

3.创业公司要成功,需要具备可测量性与可放大性。 互联网产品具备可放大性,小团队的工作具有可测量性。保持小团队,创业团队更容易成功,生产效率比大公司可以有30-100倍的提升。

2001年,作者讨论到苹果在与微软的PC之争,认为 “苹果公司还没有失败,如果它能把iPod升级成手机,并且将网络浏览器包括在其中,那么微软公司就有大麻烦了。” 后来果然如作者语言,12年来,我们见证了苹果的发展,iPod升级成了手机,叫iPhone,Mac到处都是,微软曾经的优势在互联网的世界中荡然无存。。。

1. 背景

1.1 2004年

我们生活中的一切,都在成为计算机。

  • 打字机被计算机取代了,
  • 电话也成了计算机,照相机亦如此。
  • 很快电视也是如此。

Note: 如今小轿车锁具备的计算能力比1970年占满一间屋子的大型计算机还要强。 (2013年,电视机已经如此,电视盒子,Apple TV, 小米TV,智能路由)

信件,图书,报纸,甚至本地的小店都在被互联网取代。

所以,如果你想理解我们目前的世界,以及它未来的动向,那么多了解一些黑客的想法会对你有帮助。

1.2 Graham 其人

1964年生,

康奈尔主修哲学 -> 哈佛计算机,人工智能 -》 哈佛艺术系 -》绘画

毕业后三年追求艺术家梦想,生活窘迫,入不敷出。 有一天决定不再当画家,先彻底解决自己的收入问题。

1995年初夏,找到朋友Robert Morris,打算写软件赚钱(Morris在88年编写了历史上第一个蠕虫病毒,莫里斯蠕虫)。

当时赶上网景公司Netscape上市,Graham想,如果网景公司的设想是正确的,未来人们都在互联网上购物,那么必须有人为零售商们开发软件。所以,他决定开发一个搭建网店的软件。

Note: 关于netscape:发明了SSL,javascript,90年代中期浏览器份额占到90%。后来在浏览器的战争中逐渐落败,成立了Mozilla基金会,mozilla基金会后来推出Firefox.

Viaweb

一开始,他们的软件采用传统模式,用户 -> 先下载安装 -> 硬盘上做出网店 -> 上传到服务器 后来Graham想:为什么不让用户直接通过浏览器操作服务器呢,这样就完全省去了安装和上传的步骤。

-》 决定做成互联网程序,取名为Viaweb,成为了世界上第一个通过互联网使用的软件。

Note: 8月初第1个demo版本,10月筹集到10万美金,12月正式开发发展客户。 96年70家客户。 98年yahoo收购,4900万美金。

后来Graham在雅虎继续编程,一年半后离职,总是感觉不自在,不适应雅虎的企业文化。“运营创业公司,每天都像在战斗;而为大公司工作,就像在窒息中挣扎。”

YC Combinator

2005年,Graham成立Y Combinator,Y Combinator是Y算子,意为创造其他函数的函数。

YC是一个创业公司孵化器,也是一个创业团队的辅导机构,逐渐成为硅谷最火的风投。从YC孵化毕业出来的公司失败率低于20%,远低于业内90%的水平,YC学员成为新一代硅谷创业公司的主流,逐渐组成一张不断壮大的关系网,被人们成为“YC匪帮”。

Note: hacker news时他们的新闻聚合网站, http://news.ycombinator.com, 很多创业公司和hacker在上面发布最新的新闻。

1.3.Paul Graham的创业哲学:

1.搭建原型

2.上线运营 (别管bug)

3.收集反馈

4.调整产品

5.成长壮大

鼓励创业公司要快速发布产品 -> 这样可以尽早知道: 一个创意是否可行。 小团队更容易成功,创始成员总数最好不要超过3个人,其中一个原因是人越多,每个人的贡献越难衡量。

Note: 一定要特别关注:用户需要什么,这样才有办法把一个坏项目转变成好项目。 许多伟大的公司,一开始的时候做的都是与后来业务完全不同的事情。乔不是创造苹果公司后的第一个计划是出售计算机零件,然后让用户自己组装,后来才变成开发苹果电脑。

YC学员进入YC时会收到一件白色T恤衫,上面写着“Make something people want”。 等到他们的项目得到风险投资后,又会收到一键黑色T恤衫,上面写着:I made something people want。

2.什么是黑客

2.1 不同人眼中的黑客

  • 媒体和普通人眼里 = 入侵计算机的人。
  • Richard Stallman: 出于兴趣而解决某个难题,不管它有没有用,这就是黑客。

Note: Richard Stallman,美国自由软件运动的精神领袖,GNU计划的创建者,Emacs,GNU C,GDB是他的作品。

2.2 黑客伦理

在《黑客:计算机革命的英雄》(Hackers: Heroes of the Computer Revolution)一书中,把黑客的价值观总结为6条黑客伦理(hacker ethic):

  • (1) 使用计算机以及所有有助于了解这个世界本质的事物都不应受到任何限制。任何事情都应该亲手尝试。
  • (2) 信息应该全部免费。
  • (3) 不信任权威,提倡去中心化。 
  • (4) 判断一名黑客的水平应该看他的技术能力,而不是看他的学历、年龄或地位等其他标准。
  • (5) 你可以用计算机创造美和艺术。 
  • (6) 计算机使生活更美好。

** 黑客伦理的必然推论 ==> 黑客不服从管教,具有叛逆精神。**

Note: 分享, 开放, 民主, 自由, 进步。

3.黑客如何成长? 他们如何看待世界?

3.1 黑客与画家的共同之处:他们都是创作者

  • 与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。
  • 他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。

Note: none

3.1.1 计算机科学、软件工程

根本不存在"计算机科学"这种东西。

计算机科学就像一个大杂烩,很多不相干的领域被强行拼装在一起。

1.这个学科的一端是纯粹的数学家 (他们自称“计算机科学家”,只是为了得到国防部研究局的项目资助。)

2.中间部分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。

3.另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。

所以,在“计算机科学”的名下,数学家、物理学家、建筑师都不得不待在同一个系里。

黑客做的事情: 被称为“软件工程”(software engineering),但是这个词也是误导的。

Note: 与其说优秀的软件设计师是工程师,还不如说是建筑师:建筑师决定"做什么",工程师想出"怎么做"。 在英语中,“建筑师”(architect)和“架构师”(architect)是同一个词.

当然,“做什么”和“怎么做”不应该分得太开。如果你决定做一件事,却不知道怎么做,你就是在自找麻烦。 但是,只是单纯地决定如何实现某种规格,那肯定不是黑客。黑客的最髙境界是创造规格。

3.2 大学,企业,黑客与工程师

如果大学和实验室不允许黑客做他们想做的事情,那么适合黑客的地方可能就是企业。 不幸的是,大多数企业也不允许黑客做他们想做的事情。

  • 大学和实验室强迫黑客成为科学家。
  • 企业强迫黑客成为工程师。

Note: 雅虎收购Viaweb的时候,他们问我想做什么。我对商业活动从来都没有太大兴趣,就回答说我想继续做黑客。等我来到雅虎以后,发现在他们看来,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”翻译成代码。

这似乎是大公司的普遍情况。大公司这样安排的原因是为了减少结果的标准差。

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。微软公司自己一开始就是这样走向成功的,苹果公司和惠普公司也是如此。我觉得几乎所有的创业公司都是这样取得成功的。

3.3 黑客如何才能做自己喜欢的事情?

找一份养家糊口的“白天工作”(day job)。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。

几乎所有的创作者在职业生涯的早期都有一份“白天工作”。画家和作家尤其显著。如果幸运的话,你能找到一份与你的“真正工作”非常相关的“白天工作”。音乐家似乎常常是在唱片行工作。同样地,钻研某种编程语言或操作系统的黑客,很可能会得到一份使用这些工具的“白天工作”。^

阿尔伯蒂(文艺复兴时期的代表人物)有一句名言:“任何一种艺术,不管是否重要,如果你想要在该领域出类拔萃,就必须全身心投入" 。

Note: 令我惊讶的是,雇主都很犹豫,不愿意手下的黑客为开源软件项目工作。但是,在Viaweb,要是你不愿意这样干,我们会很犹豫要不要雇用你。我们面试程序员的时候,主要关注的事情就是业余时间他们写了什么软件。因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开发你自己的项目。^

「微软不鼓励雇员为开源项目做贡献,甚至业余时间也不行。但是,如此之多的一流黑客都在从事开源项目,所以这个政策主要的效果,可能就是使得微软公司很难雇到一流的程序员。」

因为黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示,而是应该观察其他类型的创作者。那么,从画家身上,我们还能借鉴到什么对黑客的启示呢?

3.4 如何学习编程?

  • 有一件事情是可以借鉴的(至少可以确认),那就是应该如何学习编程。画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,他们从实践中学习,13岁时就自己动手写程序了。即使上了大学,黑客学习编程依然主要通过自己写程序。^

  • 还有一个可以借鉴绘画的地方:一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在X光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。

  • 绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。

Note: 你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。大公司的内部结构,使得它们很难这样做。这是又一个创业公司占优之处。

3.4.1 普通黑客与优秀黑客的所有区别

  就像绘画作品一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需要,这样才能做出伟大的产品。你必须能够站在用户的角度思考问题,也就是说你必须学会“换位思考”。

  普通黑客与优秀黑客的所有区别之中,会不会“换位思考”可能是最重要的单个因素。有些黑客很聪明,但是完全以自我为中心,根本不会设身处地为用户考虑。这样的人很难设计出优秀软件,因为他们不从用户的角度看待问题。^

  判断一个人是否具备“换位思考”的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。我们大概都认识这样一些人,他们在其他方面非常聪明,但是把问题解释清楚的能力却惊人低下。

Note: 软件的部分功能就是解释自身。为了写出优秀软件,你必须假定用户对你的软件基本上一无所知。你要明白,用户第一次使用你的软件的时候,不会预先做好功课,他们没有任何准备就开始用了,所以软件的使用方式最好能符合用户的直觉,别指望用户去读使用手册。在这方面,我见过的最佳系统是1984年原始的Macintosh电脑。它做到了那时别的软件都做不到的事情:它真的能用。^

源代码也应该可以自解释。如果我只能让别人记住一句关于编程的名言,那么就是《计算机程序的结构与解释》的卷首语:程序写出来是给人看的,附带能在机器上运行。

3.5 良好的坏习惯

  黑客是不服从管教的,这就是他们的本性。这也是美国人的本性。硅谷出现在美国,而不是出现在法国、德国、英国、日本,这绝非偶然。后面那些国家的人们总是按部就班地行事。

  很自负的人必须培养出敏锐的感觉,及时发现周围情势的变化,知道怎样才能脱身。最近,黑客就感觉不太对,大气候变了。对于不服从管教,政治气氛变得严厉了。^

^「2001年9·11事件以后,美国通过了“爱国者法案” ——译者注」

  近来一系列的政策变化,使得这个国家的公民自由范围不断收缩减小。对于黑客来说,这是非常不好的兆头。普通人肯定会感到大惑不解,为什么黑客如此在乎公民自由?为什么程序员会比牙医、销售员、园艺师更在乎呢?

Note: 公民自由并不仅仅是社会制度的装饰品。公民自由使得国家富强。如果将人均国民生产总值与公民自由的关系画成图,你会发现它们是很清楚的正相关关系。公民自由真的是国家富强的原因,而不是结果吗?一个人们拥有言论自由和行动自由的社会,往往最有可能采纳最优方案,而不是采纳最有权势的人提出的方案。专制国家会变成腐败国家,腐败国家会变成贫穷国家,贫穷国家会变成弱小国家。经济学里有一条拉弗曲线(Laffer curve),认为随着税率的上升,税收收入会先增加后减少。我认为政府的力量也是如此,随着对公民自由的限制不断上升,政府的力量会先增加后减小。

至少现在看来,我们的政府很可能蠢到会真的把这个实验付诸实施,亲自验证一下这个观点。但是,税率提高了还能再降下来,而一旦这个实验铸成大错,就悔之晚矣,因为极权主义制度只要形成了,就很难废除。

如果正如黑客所担忧的,近来那些旨在保护国家安全和知识产权的措施最终却成为一枚导弹,不偏不倚瞄准了美国的优势所在,那可真是太讽剌了。不过,这种事情早有先例:人们惊慌失措时采取的措施到头来产生了适得其反的效果。

4.黑客怎么做出自己的成果,这些成果怎样对全世界产生影响?

4.1 下一个潮流

在创立Viaweb的时候,我们对别人说软件运行在服务器上,几乎没人懂这是什么意思。

超过一半的美国家庭拥有电脑,我妈妈就有一台,用来收发邮件和记账。几年前,她收到苹果公司的一封来信,上面说她可以优惠购买新版的操作系统。老太太被这些术语吓坏了。

一个65岁的妇女,只用电脑收发邮件和记账,却被迫要和操作系统打交道,搞清楚要不要安装一个新版本,这真是太过分了。普通用户根本没必要知道“操作系统”这个词,更不要说“驱动程序”和“补丁”了。

4.2 互联网软件有什么不同?

  • 用户的胜利

使用互联网软件,除了软件本身,大多数用户不需要知道别的事情。所有那些乱七八糟、经常变动的东西,都放在服务器端,由精通此道的专业人员维护。

  • 语言的选择

对于互联网软件,你可以使用任何你想用的语言。当今,许多顶尖黑客使用Perl,Python,甚至还有Lisp。

Note: 不同的语言适合不同的任务,你应该根据不同场合,挑选最合适的工具。尤其是在竞争存在的情况下,“可以这样做”就变成了“必须这样做”,如果你不利用语言的优势,那就会听任对手超过你。

4.2 互联网软件有什么不同? (continued)

  • 软件的发布变得便捷

  互联网软件带来的最大变化之一,就是软件发布方式的改变。对于桌面软件来说,发布新版本是一个很痛苦的过程,整个公司不得不使尽全力,满头大汗地挤出一大块巨型代码。从过程和结果上来看,无异于一次分娩。

  • 软件bug:可以随时修复 互联网软件则完全不同,就像你写给自己用的程序一样,修改起来很方便。在Viaweb经常是一天发布三到五个版本。

Note: 互联网软件的另一个技术优势在于,你能再现大部分的bug。用户的数据都在你的硬盘上。如果某个用户使用软件时出错了,你就不必像开发桌面软件那样苦苦猜测到底发生了什么事情。一般来说,只要用户通过电话向你描述一番,你就能把问题再现出来。如果你的程序中有自动侦测错误的代码,那么不用等到用户找上门,你可能已经知道哪里出错了。

  软件公司有时会受到指责,因为他们竟然把发现bug的任务交给用户去完成。说实话,我其实提倡这种做法。对于互联网软件,这样做的好处很多,因为它的bug相对比较少,而且处理周期比较短。

  Viaweb和其他许多软件公司一样,大部分代码都有明确的负责人,而且只有一个。如果你负责某件事,那就真的是你负责。除了你以外,没有人能批准(他们甚至都不知道)这部分代码的发布。

4.2 互联网软件有什么不同?- 逆向的《人月神话》

我曾在一家中等规模的桌面软件公司工作,那里的工程部规模就超过100人,但是其中只有13人负责产品开发,剩下的人负责软件发布、软件移植以及其他事情。开发互联网软件,你最多只需要那13个人,因为不存在软件发布、软件移植以及其他事情。

Viaweb的开发者只有3个人^。我一直在不停地招聘,压力很大,因为我们要把公司卖掉。我们很清楚地知道,买家不愿花大价钱买下一个只有3个程序员的公司。(解决方法:雇更多的人,在公司内创设其他项目,让他们去做。)

  随着参与人数的增加,人与人之间需要的沟通呈现指数式增长。人数越来越多,开会讨论各个部分如何协同工作所需的时间越来越长,无法预见的互相影响越多越大,产生的bug也越多越多。幸运的是,这个过程的逆向也成立:人数越来越少,软件开发的效率将指数式增长。我不记得我们在Viaweb开过讨论如何编程的会议。步行去吃午饭的路上,我们就能把该说的话说完,从来没有例外。

Note: 如果要说有什么缺点,就是由于开发人员比较少,每个程序员都必须承担一点儿系统管理的责任。

  只要你还在很活跃地开发产品,就免不了要亲自做系统管理,我认为没有其他可能。如果你梦想写完代码,向服务器递交(check in),然后就可以回家,一天工作结束,这在互联网软件身上肯定没有实现的可能。互联网软件是活的,每时每刻都在你的服务器上运行。一个严重的bug影响的可能不是一个用户,而是所有用户。如果某个bug破坏了硬盘上的数据,更是必须马上修复,诸如此类。 我们的心得是,第一年之后就不必每分钟都盯着服务器了,但是对新变动的部分一定要密切关注。不要在半夜里发布代码,然后回家睡觉。

4.3 关注用户

  软件应该做到用户认为它可以做到的事情。但是,你不知道用户到底怎么想,除非你亲眼看到他们如何使用你的软件,相信我,看到和看不到大不相同。互联网软件能够让你前所未有地了解用户行为。 因为你能得到用户数据,所以就不用依赖基准测试了。

关注用户不仅有助于优化程序,还有助于指导你的设计。(用户会提建议) 通过关注用户,你可以知道他们在使用软件的过程中什么时候遇到了麻烦。因为顾客总是对的,所以这表明你需要修正软件。 推广Viaweb的关键,就是允许访问者在线试用。这可不是仅仅展示几张图片,而是真的让你使用我们的产品。 只需要五分钟,你就能自己搭建起一个真实可用的网上商店。

Note: 几乎所有我们的新客户都是通过在线试用发展起来的。我想大多数互联网软件都是如此。 如果用户坚持从头到尾成功地完成在线试用,那么表明他们喜欢这个产品。如果他们感到很困惑或者很乏味,就不会坚持试用到底。 所以,只要我们能让更多的访问者坚持完成在线试用,我们的用户增长率就会提升。

4.3 关注用户-订阅模式

应该让用户像订报纸那样按照使用时间长短订购软件的使用权。“订报纸模式”正是互联网软件天然的收费模式。

如果某家公司想要开发一个平台,吸引他人在此之上创业,这家公司必须使得黑客本人愿意使用这个平台。这意味着它必须是便宜的,而且有着良好的设计。苹果公司的Mac电脑自从一问世,就在黑客之中很流行,许多黑客为它写软件^。你在Windows身上就很少看到这种现象,因为黑客不喜欢使用Windows。现在,善于写软件的那类人更喜欢使用Linux或者FreeBSD操作系统。

Note: ^「你可能会问,如果Mac电脑真那么出色,为什么后来它的市场表现不佳?还是那个老生常谈的原因:成本太高。微软公司把所有精力都集中在软件上面,所以很多厂商只要专攻硬件就可以了,把硬件成本降了下来。单单是微软的软件或者第三方厂商的硬件都不足以赢得市场优势,但是它们结合起来,就在个人电脑出现后一段关键时期中主导了市场。苹果公司同时做软件和硬件,所以成本上没有优势。(但是,苹果公司还没有失败,如果它能把iPod升级成手机,并且将网络浏览器包括在其中,那么微软公司就有大麻烦了。)(译者注:这段话写于2001年9月,苹果公司的iPhone手机已于2007年6月上市。)」

4.4 关注用户-互联网迫使程序员编程管理员

有了互联网就可以绕过Windows,直接在Unix系统上发布软件,用户通过浏览器使用。

这种趋势将会迅猛发展,很像20年前PC刚刚诞生时的情景。(现在看来是30年前了,2013年)

桌面软件迫使用户变成系统管理员,互联网软件则是迫使程序员变成系统管理员:用户的压力变小了,程序员的压力变大了。这未必是坏事。

如果你的创业公司正在与一家大公司竞争,这一点就很有利^。互联网软件提供了一种天然的途径,使得你可以用较少的人力完成较多的工作,从而超过竞争对手。创业公司对这一点应该感到心满意足。

4.4.1 为什么不尝试一下呢?

E.B.怀特^曾经从一个农民朋友那里听到一则趣闻。许多农场用电篱笆防止奶牛逃跑,但是不少电篱笆其实并没有通电。不过奶牛们已经吃过苦头,显然学会了不去碰电篱笆,这时不通电也能起到效果。“奶牛们,行动吧!”他写道,“趁着统治者打鼾时,夺回你们的自由!”

如果你是一个黑客,并且梦想自己创业,可能会有两件事情令你望而却步,不敢真正开始采取行动。一件是你不懂得管理企业,另一件是你害怕竞争。可是实际上,这两件事都是没有通电的电篱笆。

4.4.2 企业管理

  首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。只要做到这两点,你就会超过大多数创业公司。随着事业的发展,你自己就能琢磨出来其他的诀窍。

  刚开始的时候,你可能入不敷出,但是只要亏损不持续太久,你就不会有事。如果初期阶段缺少资金,这至少有助于你养成勤俭节约的习惯。开支越小,就越不会超支。幸运的是,编写一个互联网软件是非常便宜的。我们的总支出就不超过1万美元,现在应该更便宜了。其中,我们不得不花了几千美元买了一台服务器,又花了更多钱购买SSL。(那时唯一出售SSL软件的公司就是网景。)现在,你可以租到一台强大得多的服务器,上面已经安装好了SSL,而费用比我们当时的带宽费还要少。如今,开发一个互联网软件的费用比购买一把高级办公椅还要便宜。至于如何做出用户喜欢的产品,下面是一些通用规则。

从制造简洁的产品开始着手,首先要保证你自己愿意使用。

然后,迅速地做出1.0版,并且不断以改进,整个过程中密切倾听用户的反馈。用户总是对的,但是不同的用户要求不一样。

Note: 低端的用户要求简化操作和清晰易懂,高端的用户要求你增加新功能。软件最大的好处就是让一切变得简单。 但是,做到这一点的方法是正确设置默认值,而不是限制用户的选择。如果竞争对手的产品很糟糕,你也不要自鸣得意。 比较软件的标准应该是看对手的软件将来会有什么功能,而不是现在有什么功能。无论何时,你都要使用自己的软件。 Viaweb的主要功能是建立网上商店,但是我们也使用它建立自己的网站。不要只因为对方的头衔是市场专家、设计师或产品经理,就盲目听从他们的话。 如果他们的观点真的很好,那就听从他们,关键是你要自己判断,不要盲从。 只有懂得设计的黑客,才能设计软件,不能交给对软件一知半解的设计师。如果你不打算自己动手设计和开发,那就不要创业。

4.4.3 竞争

  其次,让我们来看看竞争。你所害怕的大概不是与你一样的黑客,而是那些像模像样,有着办公室、商业计划、销售员的公司,对不对?可是实际上,他们害怕你胜过你害怕他们,而且这一点上,他们并没有错。几个黑客搞懂如何租用办公室,或者如何雇用销售人员,要比那些公司(不管大公司还是小公司)搞懂如何正确写出软件容易得多。大公司的生产效率仅仅相当于小型创业公司的十分之一。没有任何一家大公司能做得更好。

4.5 如何创造财富

  如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。几百年来,这一直是致富的可靠途径。“创业公司”(startup)这个词诞生于20世纪60年代,但是它与中世纪集资进行的航海冒险活动其实也相差无几。

  创业公司往往与技术有关,所以“高技术创业公司”这个短语几乎就是同义重复。创业公司其实就是解决了某个技术难题的小公司。

  从经济学观点看,你可以把创业想象成一个压缩过程,你的所有工作年份被压缩成了短短几年。你不再是低强度地工作四十年,而是以极限强度工作四年。在高技术领域,这种压缩的回报尤其丰厚,工作效率越高,额外报酬就越高。

4.5.1 72倍的工作效率

  下面举一个简单的例子说明这个经济学命题。 一个20多岁的优秀黑客,每年的薪水大约是8万美元。 这意味着,平均来看,你必须每年至少为公司带来8万美元利润,这样才能保证公司没有亏钱。

但是,你的真正工作时间其实可以是公司上班时间的2倍, x2
如果你全神贯注,每小时的产出可以提高3倍^。 x3
如果再把大公司里令人讨厌的中间管理层除去(他们经常以主管的身份妨碍你的工作),你的效率可以再提高2倍。x2
还有一个可以提高效率的地方:你不用再完成强行指派给你的工作,尽可以根据自己的愿望,做出最能发挥你聪明才智的成果。 x3
假定这会把工作效率再增加三倍。将这些因子放在一起做乘法,你的工作效率将是在公司时的36倍^^。
(还有用正确的工具和技术,可以提高2倍,x2 x3 x2 x3 x2 = 72倍。)

如果一个优秀黑客在大公司里的身价是每年8万美元,那么一个勤奋工作、摆脱杂事干扰的聪明黑客,他的工作相当于每年新创造300万美元的价值。

4.5.2 不受干扰的环境

^「往往只有在创业公司里,你才能得到一种宝贵的工作环境,就叫做“不受干扰”。不同的工作对“不受干扰”有不同的要求。文稿校对人员每15分钟被打断一次,工作效率也不会有太大损失。但是,黑客要求的“不受干扰”的时间是非常长的,有时你要用1个小时才刚刚把一个问题理清。所以,人事部突然打电话要你去填一张表格,会造成巨大的成本损失。

这就是为什么当你打扰黑客让他们从屏幕前扭过头回答问题时,他们会恶狠狠地盯着你的原因。他们大脑内部精心构建的精巧建筑,瞬间就崩溃了。

仅仅因为工作经常受到干扰,黑客就会无法应对高难度的项目。这就是为什么黑客往往在深夜工作的原因,也是黑客无法在小隔间里写出优秀软件的原因(除非在半夜)。创业公司的一个巨大优势就是不会有任何人来打扰你。没有人事部,也没有表格,自然也就不会有人打电话要求你填表格。」

许多大公司的内部,平均主义泛滥。如果采用自由市场制度那样的机制,你的公司就可以变成一个很有效率的地方。

这里的假设是,如果每个员工按照他创造的财富获得报酬,那么整个公司的利润将将最大化。」

这个计算是很粗糙的,有很大的误差。我不会争论这些数字是否准确,但是计算的根据是靠得住的。我没有说放大因子不多不少正好是36,但肯定是大于10的,在个别情况下甚至高达100。

4.5.3 更努力地工作

大公司会使得每个员工的贡献平均化,这是一个问题。我觉得,大公司最大的困扰就是无法准确测量每个员工的贡献。 在大公司中,个人的表现无法单独测量,公司里其他人会拖累你。

4.5.4 可测量性和可放大性

  要致富,你需要两样东西:可测量性和可放大性。你的职位产生的业绩,应该是可测量的,否则你做得再多,也不会得到更多的报酬。此外,你还必须有可放大性,也就是说你做出的决定能够产生巨大的效应。

  单单具备可测量性是不够的。比如,血汗工厂的工人报酬是按照计件制计算的,这是一个只有可测量性、没有可放大性的例子。

  CEO也是一种同时具备可测量性和可放大性的工作。公司的表现就是CEO的表现,所以它具备可测量性。CEO的决策决定了整个公司的方向,所以它具备可放大性。

我认为,任何一个通过自身努力而致富的个人,在他们身上应该都能同时发现可测量性和可放大性。我能想到的例子就有CEO、电影明星、基金经理、专业运动员。有一个办法可以发现是否存在可放大性,那就是看失败的可能性。因为收入和风险是对称的,所以如果有巨大的获利可能,就必然存在巨大的失败可能。CEO、电影明星、基金经理、运动员的头顶都悬着一把宝剑,随时可能掉下来。一旦他们搞砸了,他们就完了。如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险,就几乎等于没有可放大性。

  但是,如果你想同时具备可测量性和可放大性,不一定非当上CEO或电影明星不可。你只需要成为某个攻克难题的小团体的一部分就可以了。

4.5.5 小团体=可测量性

  就算你无法测量每个员工的贡献,但是你可以得到近似值,那就是测量小团队的贡献。

  整家公司产生的收入是可以测量的,如果公司只有一个员工,那么就可以准确知道他的贡献了。所以,公司越小,你就越能准确估计每个人的贡献。一家健康的创业公司可能只有10个员工,那么影响收入的人员因子最多也只有10。

  因此,创业或加入一家创业公司最可能实现前文的情况,那就是你对老板说,我打算十倍努力地工作,请你把我的薪水也增加十倍吧!但是,有两个区别。第一个区别是你的要求并非向老板提出,而是直接向顾客提出(毕竟老板只是顾客的代理人)。第二个区别是你并非一个人完成这个任务,而是在一个小团体中与其他几个有同样抱负的人一起合作完成。

4.5.6 高科技=可放大性

  创业公司为每个人提供了一条途径,同时获得可测量性和可放大性。因为创业公司是小团队,所以具备可测量性。因为创业公司通过发明新技术盈利,所以具备可放大性。

  什么是技术?技术就是某种手段,就是我们做事的方式。如果你发现了一种做事的新方式,它的经济价值就取决于有多少人使用这种新方式。技术就是钓鱼的鱼竿,而不是那条鱼。这就是创业公司与餐馆或理发店的区别。餐馆煎鸡蛋,理发店剪头发,每次只能为一个顾客提供服务,但是如果你解决了一个热门的技术难题,别人都会使用你的解决方案。这就是可放大性。

小团队天生就适合解决技术难题。技术的发展是非常快的,今天很有价值的技术,几年后可能就会丧失价值。小团队在如今这个时代可谓如鱼得水,因为他们不受官僚主义和繁琐管理制度的拖累。而且,技术的突破往往来自非常规的方法,小团队就较少受到常规方法的约束。

  大公司也能开发出新技术,就是开发得比较慢而已。大公司的规模决定了它们无法快速行动,也无法测量并奖励表现优异的员工。所以在现实中,大公司开发出来的新技术只出现在那些需要大规模资本投入的领域,比如微处理器、电厂、大型民用飞机等,因为在这些领域内创业公司没有能力与之竞争。

你必须时刻牢记的最基本的原则就是,创造人们需要的东西,也就是创造财富。如果你想通过创造财富使得自己致富,那么你必须知道人们需要什么。很少有公司真的关注如何使顾客更满意。

4.5.7 公理的不同意见

  你经常可以听到有人批评某种政策会加剧贫富分化。隐藏的意思就是,贫富分化的加剧一定是坏事,这好像已经成了公理。

  我想提出一种相反的观点:现代社会的收入差距扩大是一种健康的信号。技术使得生产率的差异加速扩大,如果这种扩大没有反映在收入上面,只有三种可能的解释:(a)技术革新停顿了;(b)那些创造大部分财富的人停止工作了;(c)创造财富的人没有获得报酬。

4.6设计者的品味

什么是好的设计?

  • 好设计是简单的设计。
  • 好设计是永不过时的设计。
  • 好设计是解决主要问题的设计。
  • 好设计是启发性的设计。
  • 好设计通常是有点趣味性的设计。
  • 好设计是艰苦的设计。
  • 好设计是看似容易的设计。
  • 好设计是对称的设计。
  • 好设计是模仿大自然的设计。
  • 好设计是一种再设计。很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。

扔掉早期原型是需要信心的,你必须有本事看出什么地方还可以改进。举例来说,刚刚开始学画的人往往不愿意重画画错的地方。他们觉得能画成现在这样已经很不错了,如果重画某些部分,结果可能还不如现在。所以,他们就说服自己,我的画已经过得去了,没准别人也会这么看。 这想法很危险。你应该培养对自己的不满。

  • 好设计是能够复制的设计。
  • 好设计常常是奇特的设计。
  • 好设计是成批出现的。
  • 好设计常常是大胆的设计。

5.黑客的工具和工作方法

5.1为什么Viaweb选择了Lisp

Viaweb主要采用lisp语言开发。它是最早的用Lisp语言开发的大型应用程序。

埃里克·雷蒙德写过一篇文章《如何成为一个黑客》(How to Become aHacker)。文中有一部分专门谈到,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从Python和Java入手,因为它们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用来对付Unix系统,后者用来系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习Lisp:

Lisp很值得学习。你掌握它以后,会感到它给你带来的极大启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp。

5.1.1 Lisp语言确实可以使你成为更好的程序员

  如果埃里克·雷蒙德没有说错,Lisp语言确实可以使你成为更好的程序员,那么为什么你不使用它编程呢?   为什么不用呢?编程语言毕竟是一种工具。如果Lisp语言真的能开发出更好的程序,你就应该用它。如果它无助于编程,那么就不会有人需要它。

  回到1995年,我们懂得一些竞争对手不懂的事情(至少在我们看来是如此),这些事情甚至直到今天都很少有人懂:如果开发只在自己服务器上运行的软件,这意味着你想用什么语言就能用什么语言。如果开发桌面软件,就完全不一样了,大多数情况下你只能使用操作系统所用的开发语言。10年前,开发桌面软件就意味着要使用C语言。但是,对于互联网软件,你能使用任何你想用的语言。如果你还同时拥有操作系统和语言的源码,那么你的自由就更大了。

  如果选择哪种语言都行,你到底使用哪一种语言?我们选择Lisp。首先,很明显,对于这个市场来说,快速开发出产品是很重要的。我们所有人都是从零开始,所以能够快速做出新功能的公司就会取得巨大的竞争优势。我们知道Lisp语言真的非常合适快速开发软件,而且我们的软件运行在服务器端,你一写完代码就能发布出去,所以这又进一步放大了快速开发的效果。

Note: 可以这样说,我们使用Lisp只是一个大胆的冒险。我们设想如果用Lisp语言开发自己的软件,就能比竞争对手更快地写出新功能,还能做到他们做不到的事情。同时,因为Lisp是一种抽象层次非常高的语言,所以就不需要非常庞大的开发团队,这会降低成本。

  这次冒险的结果如何?多少有点出人意料,它竟然达到了我们的设想。我们前前后后遭遇到很多竞争对手,一共大概有二三十个,但是他们的软件没有一个能与我们竞争。我们的软件运行在服务器端,用户可以“所见即所得”地搭建网上商店,感觉就像在操作桌面软件。我们的竞争对手使用CGI脚本。我们在功能上总是遥遥领先于他们。有时,他们出于绝望,试图引入我们没有的功能。但是,有了Lisp语言的帮助,我们的开发周期很短。有时候,竞争对手刚刚发布新闻稿宣布将引入新功能,我们就能在一两天内做出自己的版本。当对手找来的记者抽出时间打电话过来想了解我们的反应,我们就会告诉他我们已经有了这个功能。

  竞争对手一定觉得我们好像拥有了某种秘密武器,能够破解他们内部的通信或者其他机密。事实上,我们的确拥有秘密武器,但是没他们想的那么复杂。从来没有人向我们泄露他们的内部机密,只是我们的开发速度比别人想象的更快而已。

Lisp语言的好处不在于它有一些狂热爱好者才明白的优点,而只在于它是目前最强大的编程语言。它没有得到广泛使用的原因就是因为编程语言不仅仅是技术,也是一种习惯性思维,非常难于改变。当然,上面两句话都需要进一步解释。

5.2编程语言的编程能力差异

  我先从一个争议极大的命题开始讲起:编程语言的编程能力有差异。至少不会有人反对高级语言比机器语言更强大这一观点。

徒手用机器语言写出整个程序是一件很蠢的事。但是,把这个观点推广到一种更普遍的情况,知道的人就不多了。如果你有好几种语言可以选择,在不考虑其他因素的情况下,你不选择最强大的那种语言就是一件很蠢的事。

  如果你为大公司工作,想要改用Lisp语言可能不是一件容易的事。你很难说服自以为是的老板,让他允许你用Lisp语言开发程序。老板受到报纸的影响,认为某些其他语言将主宰世界(就像20年前Ada语言受到的评价)。但是,如果你为创业公司工作,那里没有这样的老板,那么你就能和我们一样,将他人的Blub困境转变为你的优势。你的竞争对手被牢牢粘在那些很普通的语言上面,永远都追不上你使用的技术。

5.2.1 从编程语言看竞争对手

  如果你为创业公司工作,那么这里有一个评估竞争对手的妙招——关注他们的招聘职位。他们网站上的其他内容无非是一些陈腐的照片和夸夸其谈的文字,但是招聘职位却不得不写得很明确,反映出他们到底想干什么,否则就会引来一大批不合适的求职者。

  在Viaweb创业期间,我读过大量竞争对手的招聘职位。差不多每个月都有一个新的竞争对手浮出水面。我首先会看他们的产品有没有一个试用版,然后就去找他们的招聘职位。这样过了几年,我就知道哪些公司值得关注,啷些公司不用在意。有些公司的职位描述使用了大量的IT词汇,这样的内容越多,这家公司就越不构成威胁。最不用担心的竞争对手就是那些要求应聘者具有Oracle数据库经验的公司,你永远不必担心他们。如果是招聘C++或Java程序员的公司,对你也不会构成威胁。如果他们招聘Perl或Python程序员,就稍微有点威胁了。至少这听起来像一家技术公司,并且由黑客控制。如果我有幸见到一家招聘Lisp黑客的公司,就会真的感到如临大敌。

  当你按照Java、Perl,Python,Ruby这样的顺序观察这些语言,你会发现一个有趣的结果。至少,如果你是一个Lisp黑客,你就看得出来,排在越后面的语言越像Lisp。Python语言模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能也一起模仿了。至于Ruby语言,如果回到1975年,你声称它是一种有着自己句法的Lisp方言,没有人会提出反对意见。编程语言现在的发展不过刚刚赶上1958年Lisp语言的水平。

5.3 为什么Lisp语言很特别

 Lisp语言诞生的时候就包含了9种新思想。其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的。

  (1) 函数也是一种数据类型。在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够存储在变量中,也能当作参数传递。一种数据类型应该有的功能,它都有。

  (2) 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。

  (3) 程序由表达式组成。Lisp程序是一些表达式树的集合,每个表达式都返回一个值。这与大多数后来的语言都截然不同,它们的程序由表达式和语句组成。

  (4) 符号类型。符号实际上是一种指针,指向存储在散列表中的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符地比较。

  (5) 代码使用符号和常量组成的树形表示法。

  (6) 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码,也可以在编译期读取或运行代码,还可以在运行期读取或者编译代码。

Note: 在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法;在编译期运行代码,则是Lisp宏的工作基础;在运行期编译代码,使得Lisp可以在Emacs这样的程序中充当扩展语言(extension language);在运行期读取代码,使得程序之间可以用S表达式(S-expression)通信,近来XML格式的出现使得这个概念被重新“发明”出来了^。

5.4 随大流的代价

  使用一种不强大的语言,你的损失有多大?实际上有一些现成的数据可以说明这个问题。

  衡量语言的编程能力的最简单方法可能就是看代码数量。所谓高级语言,就是能够提供更强大抽象能力的语言,从某种意义上,就像能够提供更大的砖头,所以砌墙的时候用到的砖头数量就变少了。因此,语言的编程能力越强大,写出来的程序就越短(当然不是指字符数量,而是指独立的语法单位)。

  强大的编程语言如何让你写出更短的程序?一个技巧就是(在语言允许的前提下)使用“自下而上”(bottom-up)的编程方法。你不是用基础语言(base language)开发应用程序,而是在基础语言之上先构建一种你自己的语言,然后再用后者开发应用程序。这样写出来的代码会比直接用基础语言开发出来的短得多。实际上,大多数压缩算法也是这样运作的。“自下而上”的编程往往也便于修改,因为许多时候你自己添加的中间层根本不需要变化,你只需要修改前端逻辑就可以了。

  代码的数量很重要,因为开发一个程序所耗费的时间主要取决于程序的长度。对于同一个软件,如果用一种语言写出来的代码比用另一种语言长三倍,这意味着你开发它耗费的时间也会多三倍。而且即使多雇人手,也无助于缩短开发时间,因为当团队规模超过某个门槛时,再增加人手只会带来净损失。Fred Brooks在他的名著《人月神话》中描述了这种现象,我的所见所闻印证了他的说法。

  如果使用Lisp语言,程序能变得多短?以Lisp和C的比较为例,我听到的大多数说法是C代码的长度是Lisp的7倍到10倍。但是最近,New Architect杂志上有一篇介绍ITA软件公司的文章^,里面说“1行Lisp代码相当于20行C代码”,因为此文都是引用ITA总裁的话,所以我想这个数字来自ITA的编程实践。如果真是这样,那么我们可以相信这句话。ITA的软件不仅使用Lisp语言,还同时大量使用C和C++,所以这是他们的经验之谈。

The End, Thanks