Book note:《黑客与画家》

Published: 25 Dec 2011 Category:

保罗·格雷厄姆有一套完整的创业哲学,他的创业公式是:

1.搭建原型

2.上线运营

3.收集反馈

4.调整产品

5.成长壮大

他认为一定要特别关注用户需要什么,这样才有办法将一个坏项目转变成好项目。他说:”许多伟大的公司,一开始的时候做的都是与后来业务完全不同的事情。乔布斯创建苹果公司后的第一个计划是出售计算机零件,然后让用户自己组装,后来才变成开发苹果电脑。你需要倾听用户的声音,琢磨他们需要什么,然后就去做。”

创始人本身比他的创意更重要。

作者目的:通过这本书让普通读者理解我们所处的这个计算机时代。

作者试图从许许多多不同的方面解释这个时代的内在脉络,揭示它的发展轨迹,帮助你看清我们现在的位置和将来的方向。

想把握这个时代,就必须理解计算机。理解计算机的关键,则是要理解计算机背后的人。

我们的时代是程序员主导的时代,而伟大的程序员就是黑客。

根据理查德·斯托尔曼的说法,黑客行为必须包含三个特点:好玩、高智商、探索精神。 黑客价值观的核心原则可以概括成这样几点:分享、开放、民主、计算机的自由使用、进步。

《黑客与画家》这个书名就是在提示应该把黑客与画家当做同一种人看待。和画家一样,黑客只是怀有一门特殊手艺、有创造天赋的普通人。这个书名还有另外一层含义,即编程时一种艺术创作,黑客就是艺术家,开发软件与画家作画、雕塑家雕刻、建筑师设计房屋并没有本质不同。 1.为什么书呆子不受欢迎

校园生活的真正问题是空虚。

学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一般像是野蛮洪荒之地。

2.黑客与画家

黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术。

创造优美食物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。 如果黑客认识到自己与其他创作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画家没有”对数学的嫉妒”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。 黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:找一份养家糊口的”白天工作”。

几乎所有的创作者在职业生涯早期都有一份”白天工作”。 从画家身上,我们还能借鉴到什么对黑客的启示呢?

画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。

创作者的另一个学习的途径是通过范例。

开源运动最鲜为人知的优点之一,就是使得学习编程变得更容易了。

你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。 一幅优秀的作品必须比它应该有的样子更好。

坚持一丝不苟,就能取得优秀的成功。因为那些看不见的细节累加起来,就变得可见了。

就像绘画作品一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需要,这样才能做出伟大的产品。

普通黑客和优秀黑客的所有区别之中,会不会”换位思考”可能是最重要的单个因素。

判断一个人是否具备”换位思考”的能力有一个好方法,那就是看他怎样向没有技术背景的人解释技术问题。

“程序写出来是给人看的,附带能在机器上运行。” <p style="margin-left: 27pt;">——《计算机程序的结构和解释》</p> 3.不能说的话

流行一时的不仅有衣服,还有道德观念。 训练自己去想那些不能想的事情,你获得好处会超过所得到的想法本身。

4.良好的坏习惯

不服从管教,其实是黑客之所以成为优秀程序员的原因之一。

只有深入了解当前的技术,黑客才能构想下一代技术。 公民自由使得国家富强.

如果读美国开国元勋的自述,你会发现他们听起来很像黑客。”反抗政府的精神,”杰弗逊写道,”在某些场合是如此珍贵,我希望它永远保持活跃。”

5.另一条路

我认为,大量的下一代软件都将采用这个模式。甚至最大的输家——微软公司,看来也明白了,部分软件从桌面消失将是不可避免的。如果软件从桌面移到服务器上,一切将发生根本的变化。 互联网软件运行在服务器上,用户界面就是网页。对于普通用户来说,使用这种新型软件将更容易、更便宜、更机动、更可靠,通常也比桌面软件更强大。

如果互联网软件能够击败桌面软件,一定是赢在更方便这一优势上。无论从用户的角度还是从开发者的角度来看都是如此。

用户的胜利

“你的电脑”这个概念正慢慢成为过去时,取而代之的是”你的数据”。

不会有应用软件与操作系统不兼容的问题了。

适用软件将变得非常普遍、容易。

升级不再对用户形成大的冲击。

他们必须正确地设计软件,使得它能够平滑升级,不让使用者感到困惑。

所有用户都是用同样版本的互联网软件,bug一发现就会立刻得到纠正。

适合团队协作性的应用。

数据更安全。

不容易感染病毒。

大多数windows用户使用桌面软件的时候都感到紧张,会有相当大的心理压力,释放这种压力,对你的产品将是一种巨大的推动。

代码之城

设计桌面软件就像设计一幢大楼,而设计互联网软件就像设计一座城市。

软件、硬件。

硬件需要考虑的地方,不仅仅在于怎么才能避免出现问题,还在于怎样才能最大地发挥它们 的作用。

1995年我们创立viaweb的时候,Java applet被认为是互联网软件的解决方案,。但是我们觉得,applet采用的还是过时的概念,它还是要求下载软件到客户端运行。

不同的语言适合不同的任务,你应该根据不通过场合,挑选最合适的工具。如果你不利用语言的优势,那就会听人对手超过你。

软件的发布

互联网软件带来的最大变化之一,就是软件发布方式的改变。

软件的发布可以分解为一系列的渐进式修改,而不是猛地退出一个大幅变动的版本。

软件bug

有一种编程方法叫做”函数式编程”(functional programming),对于互联网软件很有用,很难用纯粹的”函数式编程”完成整个程序,但是它可以用来编写一些重要的部分使得这些部分易于调试,因为他们不包含”状态”,非常便于不断对代码进行小幅的修改和调试。

实现某个构思,会带来更多的构思。所以,将一个构思束之高阁,不仅意味着延迟它的实现,还意味着延迟所有在是实现过程中激发的构思。

要让软件变得可靠,关键是你要全神贯注,而不是开发得很慢。

效率对互联网软件至关重要。

如果软件效率足够高,每个用户的硬件成本现在可以接近免费。

如果新事物真的有重大改进,那么它总是可以找到生存空间的。

你完全能够在只有三个人的情况下让产品开始运营。

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

由于互联网软件的程序员非常辛苦,所以会使得经济优势根本性地从大公司向创业公司转移。互联网软件要求的那种工作强度和付出,只有当公司是其本人所有时,程序员才愿意提供。

因为互联网软件的创业不需要太多的资本,所以大公司可以与创业公司竞争的优势就所剩无几了。

互联网做起来很辛苦,还有许多特别大的压力,但是它们的唯一作用,就是使得创业公司成功的机会变大。

为什么不尝试一下?

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

首先,管理企业其实很简单,只要记住两点就可以了:做出用户喜欢的产品,保证开支小于收入。

开支:勤俭节约;编写一个互联网软件是非常便宜的。

如何做出用户喜欢的产品 <p style="margin-left: 27pt;">从制造简洁的产品开始着手,首先要保证你自己愿意使用。然后,迅速地做出1.0版,并且不断加以改进,整个过程中密切倾听用户的反馈。</p> <p style="margin-left: 27pt;">无论何时,你都要使用自己的软件。</p> <p style="margin-left: 27pt;">不要只因为对方的头衔是市场专家、设计师或产品经理,就盲目听从他们的话。如果他们的观点真的很好,那就听从他们,关键是你要自己判断,不要盲从。只有懂得设计的黑客,才能设计软件,不能交给对软件一知半解的设计师。</p> <p style="margin-left: 27pt;">如果你不打算自己动手设计和开发,那就不要创业。</p> 其次,竞争。大公司害怕你胜过你害怕他们。

6.如何创造财富

如果你想致富,应该怎么做?我认为最好的办法就是自己创业,或者加入创业公司。

如果你想赚100万美元,就不得不忍受相当于100万美元的痛苦。

任何公司的成功历程中,运气都是一个很大的随机因素。

通过创造有价值的东西而致富,这种方法的优势不仅仅在于它是合法的,还在于它更简单。

财富和金钱并不是同义词。财富才是你的目标,金钱不是。

人们觉得做生意就是为了挣钱,但是金钱其实只是一种中介,让大家可以更方便地获得自己想要的东西。大多数生意的目的是为了创造财富,做出人们真正想要的东西。

人们需要的东西就是财富。

公司就是许多人聚在一起创造财富的地方,能够制造更多人们需要的东西。

我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不能把原因推给外界。 “你需要去做一些人们需要的东西”。即使不加入公司,你也能做到。真正重要的是做出人们需要的东四,而不是加入某个公司。

工作就是在一个组织中,与许多人共同合作,做出某种人们需要的东西。

可测量性和可放大性

要致富,你需要两样东西:可测量性和可放大性。 <p style="margin-left: 27pt;">业绩可以测量;你做出的决定能够产生巨大的效应。</p> 如果你有一个令你感到安全的工作,你是不会致富的,因为没有危险,就几等于没有可放大性。

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

小团体=可测量性

这就是创业公司的真正意义。理想情况下,你与其他愿意更努力工作的人一起组成一个团队,共同谋取更高的回报。 创业公司的成败取决于最早加入公司的那十个人。(乔布斯)

我们不需要小村庄的那种”小”,而需要全明星第一阵容的那种”小”。

高科技=可放大性

什么是技术?技术就是某种手段,就是我们做事的方式。

如果你解决了一个热门的技术问题,别人都会使用你的解决方案。这就是可放大性。 创业公司如同蚊子,往往只有两种结局,要么赢得一切,要么彻底消失。你通常不知道自己会是哪一个结局,只有等到最后一刻才会明了。

你开办创业公司不是单纯地为了解决问题,而是为了解决那些用户关系的问题。

你必须时刻牢记的最基本的原则就是,创造人们需要的东西,也就是创造财富。如果你想通过创造财富使得自己致富,那么你必须知道人们需要什么。

财富和权力

没有财富的激励,技术革新就会逐渐停顿。 为什么欧洲在历史上变得如此强大:可能是因为允许赚到大钱的人保住自己的财富。 要鼓励大家去创业。只要懂得藏富于民,国家就会变得强大。让书呆子保住他们的血汗钱,你就会无敌于天下。

7.关注贫富分化 8.防止垃圾邮件的一种方法

9.设计者的品位

如果你是一个设计师,并且你不承认有一种人们共同认可的东西叫做”美”,那么你就没有办法做好工作。如果品位只是一种个人偏好,那么每个人都是完美无缺的:你喜欢自己看上的东西,那就足够了。

众多不同学科对”美”的认识有着惊人的相似度。优秀设计的原则是许多学科的共同原则,一再反复地出现。 好设计是简单的设计。

有人会说,简单就是事物本来的样子,装饰反而意味着更多的工作。但是,当人们自己从事创造性工作的时候,好像就会忘了保持简单这个原则。刚开始写作的人喜欢用浮夸的语调,

根本不像他们平时说话的样子。设计师喜欢用波浪式卷曲表现他们的艺术感。画家发现自己都是表现主义者。这些装饰都是花架子,在作家的长句、画家”表现主义”的画笔之下,根本就是空洞无物,表面的掩饰掩盖了内部的空虚,太可怕了。

当你被迫把东西做的简单时,你就被迫直接面对真正的问题。当你不能用表面的装饰交差时,你就不得不做好真正的本质部分。 好设计是永不过时的设计。

说来奇怪,如果你希望自己的作品对未来的人们有吸引力,方法之一就是让你的作品对上几代人有吸引力。

好设计是解决主要问题的设计。

eg:厨房的煤气灶,四个出火口和调节器的位置摆放。

eg:字体的设计。 好设计是启发性的设计。

eg:英国女作家简奥斯丁的作品:几乎不带有任何描述。

eg:《蒙娜丽莎》:启发式的绘画

一个建筑或一个物品应该允许你按照自己的愿望来使用。

你应该为用户提供一些基本模块,使得他们可以随心所欲自由组合,就像玩乐高积木那样。

好设计通常是有点趣味性的设计。

这是因为幽默一定程度上反映了力量。幽默感是强壮的一种表现,始终拥有幽默感就代表你对厄运一笑了之,而丧失幽默感则表示你被厄运深深伤到。所以,强壮的标志(或者至少是特点)就是轻松面对自己的人生。充满自信的人常常像燕子一样,以一种居高临下的姿态轻盈的看待周围的一切,比如希区柯克拍摄的电影、16世纪画家布勒哲的绘画(甚至莎士比亚也是一个这方面的例子)。

好设计是艰苦的设计。

如果观察那些做出伟大作品的人,你会发现他们的共同点就是工作得非常艰苦。如果你工作得不艰苦,你可能正在浪费时间。

功能决定形式:如果开发”功能”非常艰难,那么”形式”将不得不全部都由”功能”决定,因为没有多余的精力再来单独开发”形式”了。

好设计是看似容易的设计。

作家的文章看起来流畅自如,但是背后其实经过了反复修改。

科学和工程学的一些最重大的发现在形式上往往很简单,会使得你觉得自己也想到过。

在大多数领域,看上去容易的事,背后都需要大量的练习。练习的作用也许是训练你把可以为之的事情变成一种自觉的行为。

好设计是对称的设计 好设计是模仿大自然的设计。

模仿与剽窃并不相同。

好设计是一种再设计。

很少有人一次就把事情做对。专家的做法是先完成一个早期原型,然后提出修改计划,最后把早期原型扔掉。

你应该培养对自己的不满。达芬奇为了把一根线画对,经常要画五六次。

犯错误是很正常的事情。你不要把犯错误看成灾难,要用于承认、用于改正。开源软件因为公开承认自己会有bug,反而使得代码的bug比较少。 好设计是能够复制的设计。

把事情做对比原创更重要。

等你逐渐对一件事产生热情的时候,就不会满足于模仿了。你的品位就进入了第二阶段,开始自觉地进行原创。

我想,最伟大的大师最终会达到一种超脱自我的境界。他们一心想找到正确答案,如果别人已经回答了一部分,那就没理由不拿来用。他们足够自信地使用他人的成功,完全不担心因此丧失个人的特点。 好设计常常是奇怪的设计。

eg:Lisp,黑鸟超音速侦察机;《雪中猎人》

eg:爱因斯坦并不像让相对论变得很奇特,他只想找出真理,是真理本身显得很奇特。

唯一达到”奇特”的方法,就是追求做出好作品,完成之后再回过头看。 好设计师成批出现的。

eg:15世纪的弗洛伦萨涌现一大批伟大艺术家。

推动人才成批涌现的最大因素就是,让有天赋的人聚在一起,共同解决某个难题。互相激励比天赋更重要。

在历史上的任何时刻都有一些热点项目,一些团体在这些项目上做出伟大的成绩。如果你原理这些中心,几乎不可能单靠自己就取得伟大成果。

好设计常常是大胆的设计。

在任何一段历史中,人们都会把有些荒谬的东西当做正确的,并且深信不疑,以至于一旦你出言质疑,就有被排挤或者被暴力伤害的危险。

今天的实验性错误就是明天的新理论。如果你想做出伟大的新成果,那就不能对常会与真理不相吻合之处视而不见,反而应该特别注意才对。

大多数做出优美成果的人好像只是为了修正他们眼中丑陋的东西。伟大成果的出现常常来源于某人看到一样东西后,心想我能做的比这更好。

单单是无法容忍丑陋的东西还不够,只有对这个领域非常熟悉,你才可能发现哪些地方可以动手改进。你必须锻炼自己。只有在成为某个领域的专家之后,你才会听到心里有一个细微的声音说:”这样解决太糟糕了!一定有更好的选择。”不要忽视这种声音,要培育它们。优秀作品的秘诀就是:非常严格的品位,再加上实现这种品位的能力。

10.编程语言解析

开放源码的优势还不仅局限于可以总计动手解决bug。这里的关键是所有人都可以参与。所以,开源软件就像一篇经受同行评议的论文。 语言之间确实有差别,但是很难确定地说哪一种语言是最好的。 如果你非常关注运行速度,那么最好使用接近机器的语言。大多数操作系统都是用C语言写的,这并非偶然。

11.一百年后的编程语言

一种语言的内核设计得越小、越干净,它的生命力就越顽强。

编程语言进化缓慢的原因在于它们并不是真正的技术。

编程语言的进化速度更像是数学符号的进化速度,而不像是真正的技术(比如交通或通信技术)的进化速度。

浪费可以分成好的浪费和坏的浪费。我所感兴趣的是好的浪费,即用更多的钱得到更简单的设计。

essay(论文)这个词来自法语的动词essayer,意思是”试试看”。从这个意义上来说,论文就是你写一篇文章,试着搞清楚某件事。软件也是如此。 我们的思想可能往往会受限于某种现存的语言,只采用在这种语言看来更简单的形式,它对我们思想的束缚作用会大得令人震惊。新语言必须靠你自己去发现,不能依靠那些让你自然而然就沉下去的思维定势。 12.拒绝平庸

Lisp很值得学习。你掌握它以后,会感到它给你带来的极大的启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp。 13.书呆子的复仇 14.梦寐以求的编程语言

15.设计与研究

用户需要的设计,而不是用户要求的设计。

艺术的各个领域有着巨大的差别,但是我觉得任何一个领域的最佳作品都不能由对用户言听计从的人做出来。

让用户满意并不等于迎合用户的一切要求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西。

除非设定目标用户,否则一种设计的好坏根本无从谈起。

如果目标用户群体涵盖了设计师本身,那么最有可能诞生优秀设计。 先做出原型,再逐步加工做出成品,这种方式有利于鼓舞士气,因为它使得你随时都可以看到工作的成效。