对书呆子来说,意识到学校并非全部的人生,是很重要的事情。学校是一个很奇怪的,人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。它就像人生一样,里面无所不包,但又不是事物的真实样子。它只是一个暂时的过程,只要你向前看,就能超越它,哪怕现在还身处其中。 如果你觉得人生糟透了,那不是因为体内激素分泌失调(你父母相信这种说法),也不是因为人生真的糟透了(你本人相信这种说法)。那是因为你对成年人不再具有经济价值(与工业社会以前的时期相比),所以他们把你扔在学校里,一关就是好几年,根本没有真正的事情可做。任何这种类型的组织都是可怕的生存环境。你根本不需要寻找其他的原因就能解释为什么青少年是不快乐的。<P17>
我一直不喜欢“计算机科学”(computer science)这个词。主要原因是根本不存在这东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部研究局的项目资助。中间部分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。另一端则是黑客,只想写出有趣的软件,对他们来说计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。所以在“计算机科学”的名下,数学家、物理学家、建筑师都不得不待在同一个系里。<P18>
编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是钢笔。……我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。<P22>
科学界的每一个人,暗地里都相信数学家比自己聪明。……最后的结果就是科学家往往会把自己的工作尽可能弄得看上去像数学。……一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是真正重要的问题。 如果黑客认识到自己与其他创作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。<P22>
坚持一丝不苟,就能取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。当人们从达·芬奇的《女性肖像》前面走过的时候,他们的注意力往往立刻就被它吸引住了,那时他们甚至还没有看到说明的标签牌,没有意识到这是达·芬奇的作品。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个细微的声音都以同一个音调在歌唱。 同样地,优秀的软件也需要对美的狂热追求。如果你查看优秀软件的内部,就会发现那些预料中的没有人会看见的部分也是优美的。我对待代码的认真程度远远超过我对待其他的事情,如果我以这种态度对待日常生活的每件事,那么我就够资格找心理医生开处方药了。看到代码前面的缩进乱七八糟,或者看到丑陋的变量名、都会把我逼疯的。<P29>
判断一个人是否具备“换位思考”的能力有个好办法,那就是看他怎样向没有技术背景的人解释技术问题。<P31>
源代码应该可以自己解释自己。如果我只能让别人记住一句关于编程的名言,那么这句名言就是《计算机程序的结构与解释》一书的卷首语:程序写出来是给人看的,附带能在机器上运行。<P32>
我们能够有把握说的就是,现在正是编程的黄金年代。大多数领域的伟大作品都诞生于很早以前。1430年到1500年之间的绘画杰作,至今仍然是不可超越的。莎士比亚出现的时候,戏剧这种文艺体裁才刚发展起来,专门表演戏剧的场所“戏院”才刚刚诞生。他把戏剧这种艺术形式提升到一个难以触及的高度,让后世的每一个剧作家都不得不生活在他的阴影中。德国雕塑大师丢勒、英国小说家简·奥斯汀都是这样的大师。 我们看到这种模式一再反复出现。一种新的媒介刚刚诞生的时候,人们热情高涨、兴奋不已,短短几代人就探索清楚了这种媒介的大部分可能性,把它的能量发挥到极致。编程目前好像就处在这个阶段。 在达·芬奇的年代,绘画并不是一件很酷的事情,达·芬奇用自己的工作推动绘画成为一种伟大的表达方式。同样,编程到底能够有多酷,取决于我们能够用这种新媒介做出怎样的工作。<P33>
触怒他人的言论是那些可能会有人相信的言论。我猜想,最令人暴跳如雷的言论,就是被认为说出了真相的言论。 如果伽利略说帕多瓦城的人身高三米,他只会被当作一个古怪的疯狂科学家。但是,他说地球围绕太阳运转,性质就完全不一样了。教廷知道,这种话会让人开始思考。<P36>
为了在全社会制造一个禁忌,负责实施的团体必定既不是特别强大也不是特别弱小。如果一个团体强大到无比自信,它根本不会在乎别人的抨击。美国人或者英国人对外媒体的诋毁就毫不在意。但是,如果一个团体太弱小,就会无力推行禁忌。……我猜想,道德禁忌的最大制造者是那些权利斗争中略占上风的一方。你会发现,这一方有实力推行禁忌,同时又软弱到需要禁忌保护自己的利益。<P42>
流行的思想观点与流行的服饰产生方式不尽相同,但是它们的传播途径却很相似。第一批的接受者总是带有很强的抱负心,他们有自觉的精英意识,想把自己与普通人区分开来。当流行趋势确立以后,第二批接受者就加入进来了,人数比上一批庞大得多,恐惧心在背后驱使着他们。带动流行的两种力量之中,恐惧心比抱负心有力得多。他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。<P43>
不管问谁,人们都会说同样的话:“我们心态很开放,愿意接受新思想。”但是实际上,人们脑子里有一根界线,早就认准了什么是对的,什么是错的。换言之,在他们看来,所有观点都是可以讨论的,除了那些错的观点。 如果你的数学不好,那么自己会知道,因为考试时你得不出正确答案。但是,如果你的思想很保守,你自己不会知道,而且很可能还会有相反的看法。所谓“流行”(传统观念也是一种流行),本质上就是自己看不见自己的样子。否则就不会有流行了。对于那些被流行抓住的人,流行就不再是流行,而是应该要做的正确事情。只有保持一定的距离才能观察人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。<P50>
如果一个命题是错的,这就是它所能得到的最坏评价,足够批判它了,根本不用再加上任何其他标签。但是,如果一个命题不是错的,却被加上各种标签,进行压制和批判,那就有问题。因为只要不是错的观点,就不应该被压制讨论。所以每当你看到有些话被攻击为出自XX分子或XX主义,这就是个明确的信号,表明背后有问题。<P51>
如果你想要清晰地思考,就必须远离人群。但是走得越远,你的处境就会越困难,受到的阻力也会越大,因为你没有迎合社会习俗,而是一步步地与它背道而驰。小时候,每个人都会鼓励你不断成长,变成一个心智成熟、不再耍小孩子脾气的人。但是,很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人。 如果你自己就是潮水的一部分,怎么能看见潮流的方向呢?你只能永远保持质疑。问自己,什么话是我不能说的?为什么?<P51>
Viaweb的开发者只有3个人。我一直在不停地招聘,压力很大,因为我们要把公司卖掉。我们很清楚地知道,买家不愿花大价钱买下一个只有3个程序员的公司。(解决方法:雇更多的人,在公司内创设其他项目,让他们去做。)<P72>
一个大学毕业生总是想“我需要一份工作”,别人也是这么对他说的,好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是“你需要去做一些人们需要的东西”。即使不加入公司,你也能做到。公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。<P98>
选择公司要解决什么问题,应该以问题的难度作为指引,此后的各种决策都应该以此为原则。……假定你是一个身手敏捷的小男孩,身后有一条壮硕的大狗正在追你。你跑到楼梯口,这时应该上楼还是下楼?应该上楼。如果下楼的话,大狗可能跑得跟你一样快。上楼的话,大狗的庞大身躯就将成为劣势。不错,跑上楼你会比较吃力,但是大狗会感到更加吃力。 假定软件有两个候选的新功能,它们创造的商业价值完全相同,那么我们总是选择比较困难的那个功能。不是因为这个功能能带来更多的收入,而是因为它比较难。我们很乐于迫使那些又大又慢的竞争对手跟着我们一起走进沼泽地。创业公司就像游击队一样,喜欢选择不易生存的深山老林作为根据地,政府的正规军无法追到那种地方。我还记得创业初期我们是多么筋疲力尽,整天都为一些可怕的技术难题绞尽脑汁。但我还是感到很高兴,因为那些问题连我们都觉得这么困难,那么竞争对手就更会认为是不可能解决的。……这其实是创业公司的本质,VC为它起了一个名字:进入壁垒(barriers to entry)。如果你有一个新点子去找VC,问他是否投资,他首先就会问你几个问题,其中之一就是其他人复制你的模式是否很困难。也就是说,你为竞争对手设置的壁垒有多高。<P103>
创业是有一些潜规则的,其中一条就是很多事情由不得你。比如你无法决定到底付多少。你只想勤奋工作2到3倍,但真正创业以后,你的竞争对手决定了你到底要有多辛苦。……另一条是创业的付出与回报虽然总体上是成比例的,但是在个体上是不成比例的。……创业公司不像能经受打击的黑熊,也不像有盔甲保护的螃蟹,而是像蚊子一样,不带有任何防御,就是为达到一个目的而活着。蚊子唯一的防御就是,作为一个物种,他们的数量极多,但做为个体,却极难生存。<P105>
最好的防御就是进攻。如果你开发出来的技术是竞争对手难于复制的,那就够了,你不需要依靠其他防御手段了。一开始就选择较难的问题,此后的各种决策都选择较难的那个选项。——总的来说,这也是很好的处事原则。如果你有两个选择,就选较难的那个。如果你要选择是在家里看电视,还是外出跑步,那就出去跑步吧。这个方法有效的原因可能是遇到两个一难一易的选择时,往往出于懒惰的缘故,你会选择较易的那个选项。在意识深处,你其实知道不懒惰的做法会带来更好的结果,这个方法只是迫使你接受这一点。<P105>
收购这件事最难的地方是让买方真正拿出钱。大多数时候,促使买方掏钱的最好办法不是让买家看到有获利的可能,而是让他们感到失去机会的恐惧。对于买家来说,最强的收购动机就是看到竞争对手可能收购你。我们发现这会使得CEO们连夜行动。次强的动机则是让他们担心如果现在不买你,你的高速成长将使未来的收购耗资巨大,甚至你本身可能变成他们的竞争对手。<P107>
好设计是简单的设计。 在数学中,它表示简短的证明往往是更好的证明。在编程中这种说法也基本适用。对于建筑师和设计师,它意味着美依赖于一些精心选择的结构性元素,而不依赖于表面装饰品的堆砌。(装饰品本身并不是坏事,只有当它被用来掩盖结构的苍白时,才变成了一件坏事。)绘画也是类似的,认真观察的、非常有代表性的静物作品往往要比表面极尽华美、和实际上只是无意义重复的“巨作”(比如再现非常复杂的花边的绘画作品)更有价值。在写作上,这种说法意味着只说必须要说的话,并且说得简短。……当你被迫把东西做的很简单时,你就被迫直接面对真正的问题。当你不能用表面的装饰交差时,你就不得不做好真正的本质部分。<P135>
如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。<P138>
幽默一定程度上反映了力量。幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。所以,强壮的标志(或至少是特点)就是轻松面对自己的人生。充满自信的人常常像燕子一样,以一种居高临下的姿态轻盈地看待周围的一切。<P138>
好设计是艰苦的设计。 德国包豪斯学派采纳了美国建筑师路易斯·沙利文的观点“功能决定形式”。……真实情况是,如果开发功能非常艰难,那么形式不得不全部都由功能决定,因为没有多余的精力再单独开发“形式”了。人们常常觉得野生动物非常优美,原因就是它们的生活非常艰苦,在外形上不可能有多余的部分了。<P139>
好设计是一种再设计。 很少有人一次就把事情做对,专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。 扔掉早期原型是需要信心的,你必须有本事看出什么地方还可以改进。举例来说,刚刚开始学画的人往往不愿意重画画错的地方。他们觉得能画成这样已经很不错了,如果重画某些部分,结果可能还不如现在。所以,他们就说服自己,我的画已经过得去了,没准别人也会这么看。 这想法很危险。你应该培养对自己的不满。<P143>
在Viaweb创业期间,我读过大量竞争对手的招聘职位。差不多每个月都有新的竞争对手浮出水面。我首先会看他们的产品有没有一个试用版,然后就去找他们的招聘职位。这样过了几年,我就知道哪些公司值得关注,哪些公司不用在意。有些公司的职位描述使用了大量的IT词汇,这样的内容越多,这家公司就越不构成威胁。最不用担心的竞争对手就是哪些要求应聘者具有Oracle数据库经验的公司,你永远不必担心他们。如果是招聘C++或Java程序员的公司,对你也不会构成威胁。如果他们招聘Perl或者Python程序员,就稍微有些威胁了。至少听起来像一家技术公司,并且由黑客控制。如果我有幸见到一家招聘Lisp黑客的公司,就会真的感到如临大敌。<P179>
发明新事物的人必须有耐心,要常年累月不断做市场推广,直到人们开始接受这种发明。……不过,好消息是,简单重复同一个信息就能解决这个问题。你只需要不停的重复同一句话,最终人们会开始倾听。人们真正注意到你的时候,不是第一眼看到你站在那里,而是发现过了这么久你居然还在那里。<P209>
为写出优秀软件,你必须同时具备两种互相冲突的信念。一方面要像初生牛犊一样,对自己的能力信心万丈,另一方面,你又要像历经沧桑的老人一样,对自己的能力抱着怀疑态度。……你的乐观和怀疑分别指向两个不同的对象。必须对解决难题的可能性保持乐观,同时对当前解法的合理性保持怀疑。……如果你能平衡好希望和担忧,它们就会推动项目前进,就像自行车在保持平衡中前进一样。在创新活动的第一阶段,你不知疲倦的猛攻某个难题,自信一定能够解决它。到第二阶段,你在清晨的寒风中看到自己已经完成的部分,清楚的意识到存在各种各样的缺陷。此时只要你对自己的怀疑没有超过对自己的信心,就能坦然接受这个半成品,心想不管多难我还是可以把剩下的部分做完。<P210>
可是,让用户满意不等于迎合用户的一切要求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西。做一个好的设计师就像做一个好医生一样。你不能头痛医头,脚痛医脚。病人告诉你症状,你必须找出他生病的真正原因,然后针对病因进行治疗。<P214>
一种人眼里的优秀设计可能在另一种人眼里却是糟糕无比。重点是你必须选出某些人作为你的目标客户。我觉得,除非设定目标用户,否则一种设计的好坏根本无从谈起。如果目标用户群体涵盖了设计师本人,那么最有可能诞生优秀设计。如果目标客户与你本人差别很大,你往往会假定目标用户的需求比你本人的需求更简单,而不是更复杂。低估用户(即使出于善意)一般来说总是会让设计师出错。我怀疑那些设计“公共住宅项目”的建筑师根本没想过自己住在里面会是什么感觉。……如果你觉得自己在为傻瓜设计产品,那么很有可能不仅无法设计出优秀产品,而且就连傻瓜也不喜欢你的设计。<P214>