黑客与画家 Hackers and Painters: Big Ideas from the Computer Age

来源:互联网 发布:a javascript void 0 编辑:程序博客网 时间:2024/05/16 15:16

Paul Graham

http://www.paulgraham.com/articles.html

http://book.douban.com/subject/6021440/


译者序

cool hack (neat hack), ugly hack (quick hack)


Hacker ethic (from the book “Hackers: Heroes of the Computer Revolution):

(1) Access to computers -- and anything that might teach you something about the way the world works -- should be unlimited and total. Always yield to the Hands-On Imperative!

(2) All information should be free.

(3) Mistrust Authority -- Promote Decentralization.

(4) Hackers should be judged by their hacking, not bogus criteria such as degrees, age, race or position.

(5) You can create art and beauty on a computer.

(6) Computers can change your life for the better.


Hacker <> Cracker


前言

行为怪异的人和愤世嫉俗的人比普通人更可能成为黑客。计算机世界就像是智力世界的大西部,在那里没有你不敢想的事情,只要你愿意承担冒险后果。


CH1 为什么书呆子不受欢迎

……“书呆子”与“高智商”有强烈的正相关关系……“书呆子”与“受欢迎”之间,有一种更强烈的负相关关系。

……这就是问题的根源。“书呆子”的目标具有两重性。他们毫无疑问想让自己受欢迎,但是他们更愿意让自己聪明。

……书呆子没有认识到这一点。他们没有认识到“受欢迎”需要付出如此之多的努力。一般来说,对于那些高度困难的领域,只有身处其中的人,才能意识到成功需要不间断(虽然未必是自觉的)付出。……

书呆子不受欢迎的真正原因,是他们脑子里想着别的事情。……

……书呆子从小琢磨的却是如何更聪明,心底里也是这样追求的。这都是受父母的影响,书呆子被教导追求正确答案,而受欢迎的小孩被教导讨人喜欢。……


但是,问题在于,孩子们自己创造出来的世界是一个非常原始的世界。

……在学校里不受欢迎等同于被歧视和被欺负。……一部分原因是,青少年在心理上还没有摆脱儿童状态,许多人都会残忍地对待他人。……另一个原因是为了让自己感到好受一些。……在任何社会等级制度中,那些对自己没自信的人就会通过虐待他们眼中的下等人来突显自己的身份。……主要原因也与追求“受欢迎”的心理有关。……没有什么能比一个共同的敌人更能使得人们团结起来了。……这种虐待不是针对个人的……他们只是需要一个共同的目标。

……最受欢迎的孩子并不欺负书呆子……大部分欺负来自……那些焦虑的中间层……麻烦的是,这样的人数量庞大。……


公立学校的老师很像监狱的狱卒。看管监狱的人主要关心的是犯人都待在自己应该待的位置。……结果,学生就像犯人一样,发展出了野蛮的内部文化。

……真实世界的关键并非在于它是由成年人组成的,而在于它的庞大规模使得你做的每件事都能产生真正意义上的效果。……发现正确的答案就开始变得重要了,这正是书呆子的优势所在。……

至于学校,不过是这个虚假环境中关住牲口的围栏。表面上,学校的使命是教育儿童。事实上,学校的真正目的是把儿童都关在同一个地方,以便大人们白天可以腾出手来把事情做完。……让我困扰的,不是把孩子关在监狱里,而是 (a) 不告诉他们这一点,(b) 把这监狱的大部分交给犯人来管理。

……他们(今天的青少年)的疯狂源于到处都是一片可怕的无聊。……逃离这种空虚生活的唯一方法,就是向它屈服。……它与当前的其他许多难题有着共同的起因,那就是“专业化”。当工作的专业程度越来越高时,我们就必须接受更长时间的训练。……

“倒退至人缘比赛”……某个人的排名不是根据他的真正能力……

……学校并没有其他的真实目的……校园生活的两大恐怖之处——残忍和无聊——也是处于同样的原因。


对于书呆子来说,意识到学校并非全部的人生,也是很重要的事情。学校是一个很奇怪的、人为设计出来的体系,一半像是无菌室,一半像是野蛮洪荒之地。……它只是一个暂时的过程,只要你向前看,你就能超越它……


CH2 黑客与画家

首先,科学研究必须具有原创性。写过博士论文的人都知道,确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。其次,科学研究必须是能够产生大量成果的,而那些不成熟的、障碍重重的领域最容易写出许多篇论文……没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能领域的大部分情况,都符合这条“如何凭空创造出问题“的规律……

打草稿……把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。

……编程语言首要的特性应该是允许动态扩展 (malleable) 。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。

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


大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能性排除在外。……大公司只要做到不太烂,就能赢。

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。


……黑客解决生计问题的方法是找一份“白天工作”,然后在其余时间开发优美的软件……开源软件界的黑客早就这样做了。

……黑客就像画家,工作起来是有心理周期的……


CH3 不能说的话

如果别人告诉你应该相信什么,你就真的相信了,那么你就会和别人一样犯下同样的错误。

……最先从你头脑中跳出来的想法,往往是最困扰你、很可能为真的想法。你已经注意到它们,但还没有认真思考过……

家长要塑造孩子的心灵……孩子“被迫”在一个精心设计的环境中长大……孩子眼里的世界是不真实的,是一个被灌输进他们头脑的假想世界。将来当孩子长大以后接触社会,就会发现小时候以为真实的事情,在现实世界中是荒唐可笑的。

道德禁忌的最大制造者是那些权力斗争中略占上风的一方……这一方有实力推行禁忌,同时又软弱到需要禁忌保护自己的利益。

流行的思想观点……的传播途径……第一批的接受者总是带有很强的抱负心,他们有自觉的精英意识,想把自己与普通人区分开来。当流行趋势确立以后,第二批接收者就加入进来了,人数比上一批庞大得多,恐惧心在背后驱使着他们。他们接受流行,不是因为想要与众不同,而是因为害怕与众不同。


找出“不能说的话”:判断言论的真伪、关注“异端邪说”、回顾过去(或比较其他文化观念)、关注卫道者说、理解禁忌的产生机制(观察流行的产生方式)

优秀作品往往来自于其他人忽视的想法,而最被忽视的想法就是那些被禁止的思想观点。……一个好的科学家,并不仅仅是避开传统观点,还要努力打破传统观点。

……科学家比其他领域的学者更聪明……在科学中,命题的真伪更显而易见,所以这使得科学家能够更勇敢地质疑传统观点。

……智力越高的人,越愿意去思考那些惊世骇俗的思想观点……传统观念对他们的束缚力很小,很容易摆脱。

自由思考比畅所欲言更重要……

你的策略……就是不赞同这个时代的任何一种歇斯底里,但是又不明确告诉别人到底不赞同哪一种歇斯底里。

……你不要直接攻击某个标签,而要攻击它的“元标签 (meta-label) ”……另一种反击的方法就是使用隐喻 (metaphor) ……在所有反击方法之中,最好的一种可能就是幽默。


对于那些被流行抓住的人,流行就不再是流行,而是应该要做的正确事情。只有保持一定的距离才能观察到人们观念的变化,发现流行(也就是人们自以为正确的事情)到底是什么。

时间就是一种产生距离的简单方法……不过想要摆脱自己的时代的流行,需要一点自觉。没有了时间所产生的距离,你不得不自己创造距离……尽可能地远离人群……

各式各样的标签可能是外部线索的最大来源,帮助你发现这个时代流行的是什么。


CH4 良好的坏习惯

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

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


CH5 另一条路

普通用户根本没必要知道“操作系统”这个词,更不要说“驱动程序”和“补丁”了。……你所需要的设备只要有键盘、屏幕、浏览器就够了,可能还有无线网卡。这样的设备没准就是指手机。

……“你的电脑”这个概念正慢慢成为过去时,取而代之的是“你的数据”。……终端设备不应该存储数据……


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

Trevor Blackwell:“随着软件规模的增大,开发成本指数式上升。这可能是因为修正旧bug的原因。如果bug都能被快速发现,成本的上升形态就能基本保持线性。

……如果软件是经常性发布,每次只有小幅度的变化,那么就不容易产生复合式bug。

……客户支持实际上就是质量监控,也是某种程度的市场营销……也扮演了使用者的代理人……

提高软件可靠性的关键在于开发时全神贯注,而不是降低开发速度。……

这样写软件也有局限。它适用于小型的、由优秀可靠程序员组成的开发团队,不适用于大型的、充斥大量平庸之辈的软件公司,在那里不是程序员想出好的构思,而是一个委员会集体批准坏的构思。


“订报纸模式”正是互联网软件天然的收费模式。

……软件的定价特别适合采用价格歧视,因为软件的边际成本接近于零。……盗版实质上是一种价格歧视,只不过针对的是最底层的消费者……软件公司明白这个道理,所以故意对某些盗版行为睁一只眼闭一只眼。由于互联网软件无法盗版,所以软件公司必须想出其他策略推广软件。

……大公司付出的高价之中,很大一部分是商家为了让大公司买下这个商品而付出的费用。……最好的安排就是把个人和小企业客户放在第一位。其他的客户该来的时候就会来。


创业公司的压力很大,……而且,你能够做到这一点,意味着竞争者也能做到这一点,所以长时间工作变成了一种必需,不得不如此。因为你能做到,所以你必须做到。

……桌面软件迫使用户变成系统管理员,互联网软件则是迫使程序员变成系统管理员……

从制造简洁的产品开始着手,首先要保证你自己愿意使用。然后,迅速地做出1.0版,并且不断加以改进,整个过程中密切倾听用户的反馈。……做到这一点的方法是正确设置默认值,而不是限制用户的选择。……比较软件的标准应该是看对手的软件将来会有什么功能,而不是现在有什么功能。


CH6 如何创造财富

创业公司不是变魔术。它们无法改变创造财富的法则,它们只是代表了财富创造曲线远端上的一点。这里有一个守恒定律:如果你想赚100万美元,就不得不忍受相当于100万美元的痛苦。……承受较大的压力通常会为你带来额外的报酬……

金钱不等于财富……我们需要的东西就是财富……人类历史上的财富一直在不停的地增长与毁灭(总体上看是净增长)。


公司就是许多人聚在一起创造财富的地方,能够制造更多人们需要的东西。……找工作其实就是加入另一个组织……公司的业务高度专业化,掩盖了它们都是在创造财富的这种相似性……公司存在的目的就是满足人们的某种需要……真正重要的是做出人们需要的东西,而不是加入某个公司。

大公司最大的困扰就是无法准确测量每个员工的贡献……

……要致富,你需要两样东西:可测量性和可放大性……小团体 = 可测量性……高科技 = 可放大性

……小团队天生就适合解决技术难题……选择公司要解决什么问题应该以问题的难度作为指引,而且此后的各种决策都应该以此为原则……我们故意选择那些很困难的技术问题……进入壁垒……其他人复制你的模式是否很困难。


创业的付出与回报虽然总体上是成比例的,但是在个体上是不成比例的……保险的做法就是在早期卖掉自己的创业公司,放弃未来发展壮大(但风险也随之增大)的机会,只求数量较少但是更有把握的回报。

……用户数量就是判断公司好坏的指标……尽快拿出1.0版,然后根据用户的反映而不是自己的猜测进行软件优化。

……创造人们需要的东西,也就是创造财富。


CH7 关注贫富分化

金钱只是用来交易财富的一种手段,财富才是有价值的东西,我们购买的商品和服务都属于财富。

……由于每个人创造财富的能力和欲望强烈程度都不一样,所以每个人创造财富的数量很不平等。……每个人的技能不同,导致收入不同,这才是贫富分化的主要原因。

……在自由竞争的市场经济中,价格由买家的需求决定……如果收入完全根据个人创造的财富数量而分配,那么结果可能是不平均的,但是很难说是不公平的。


很多人对贫富分化不满意的第二个原因就是,在大部分的人类历史中,积累财富最常见的办法其实是偷窃。

……致富的方法不是创造财富,而是以统治者的强权进行搜刮掠夺。

……创造财富真正取代掠夺和贪污成为致富的最佳方式,并不是发生在中世纪,而是发生在工业革命时代……


技术对生产效率的提高不是线性的,而可能是多项式形态的……技术应该会引起收入差距的扩大,但是似乎能缩小其他差距。

……要避免的是绝对贫穷,而不是相对贫穷


CH8 防止垃圾邮件的一种方法

对于大多数用户来说,错过一封正常的邮件后果要比收到垃圾邮件严重得多。

……识别垃圾邮件特征的过滤器为每封邮件计算一个“得分”,而贝叶斯方法为每封邮件算出一个概率。“得分”方法的缺点在于没人知道这个分数到底是什么意思……

……因为贝叶斯方法计算的是概率,所以它必须考虑邮件中所有的线索,不管是肯定性线索还是否定性线索。

……刚开始的时候可以有一个所有人共享的基本概率分布表,但是到了最后,每个用户应该都分别有自己的概率分布表,这是根据他收到的邮件对每一个词进行统计后得出的。

……除了基于内容做出判断以外,还可以有一张白名单……

……更严格的法律或许无法减少我们收到的垃圾邮件的数量,但是肯定有助于减少逃过过滤器拦截的垃圾邮件的数量。


CH9 设计者的品味

http://blog.csdn.net/lllcfr1/article/details/8505628


CH10 编程语言解析

当你在C语言中为输入的内容分配出一片内存(也叫“缓存”)时,它会被分配在当前运行代码的返回地址旁边。所谓“返回地址”指的是一块特定内存,当前代码运行完毕以后,就要运行这块内存中包含的代码。……假定有人打算入侵你的计算机,他们猜出你会为某种输入分配256字节的缓存,于是他们就提交多于256字节的内容,目的是覆盖旁边的“返回地址”。那么,当前代码运行完毕之后,程序的控制权就交给了他们指定的内存地址。这个地址通常是缓存的首地址,缓存中是入侵者事先编好的机器码……一旦接受用户输入的时候你没有检查输入长度,就创造出了一个安全漏洞……“缓冲区溢出攻击”……覆盖返回地址是最经典的一种。


CH11 一百年后的编程语言

编程语言的进化与生物学进化还是有区别的,因为不同分支的语言会发生聚合……一个原因是它的概率空间比较小,另一个原因是它的突变不是随机的。语言的设计者们总是有意识地借鉴其他语言的设计思想。

……那些内核最小、最干净的编程语言才会存在于进化的主干上。

……编程语言设置字符串似乎就是一个过早优化的例子。……在语义上不需要同时存在列表和字符串,单单列表就够了。而在实现上做好编译器优化,使它在必要时把字符串作为连续字节的形式处理。

……浪费程序员的时间而不是浪费机器的时间才是真正的无效率。

……文学研究者的任何成果几乎对文学创作者都毫无影响。


CH12 拒绝平庸

……从图灵等价(Turing-equivalent)的角度来看,所有语言都是一样强大的,但是这对程序员没有意义。

……Lisp的宏是独一无二的……

很显然,那些很普通的编程语言正在主导一切……向日本合气道选手学习,利用这种势力削弱你的竞争对手,让他们自食其果。


CH13 书呆子的复仇

……必须找到一个能够同时满足两个方程的最佳解……第一个方程是找到(相对于要解决的问题)能够适用20年左右的最佳语言,第二个方程是(为这种语言)找到合适的程序员、函数库的机会有多大……

1958年,约翰·麦卡锡第一个提出了Lisp语言……麦卡锡的一个学生史蒂夫·拉塞尔看到了eval函数的定义,意识到如果把它翻译成机器语言,就可以把Lisp解释器做出来。

……Lisp和Fortran代表了编程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。从那时起,这两大方向一直在互相靠拢……直到今天,最高级的主流语言也只是刚刚接近Lisp的水平……

……说Lisp语言古怪倒不是因为它的语法很古怪,而是因为它根本没有语法,程序直接以解析树(parse tree)的形式表达出来。在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基本数据结构。……意味着你可以写出一种能够自己编程的程序……最常用的做法就是使用宏。

……Lisp的最大优势体现在编程任务的另一端,就是在激烈竞争的条件下开发那些解决困难问题的复杂程序……

……编程语言的所谓“业界最佳实践”,实际上不会让你变成最佳,只会让你变得很平常。

……如果你想在软件业获得成功,就使用你知道的最强大的语言,用它解决你知道的最难的问题,并且等待竞争对手的经理做出自甘平庸的选择。

皮特·诺维格发现,总共23种设计模式之中,有16种在Lisp语言中“本身就提供,或者被大大简化”。(www.norvig.com/design-patterns)


CH14 梦寐以求的编程语言

发展最早的20个用户的最好办法可能就是使用特洛伊木马:你让人们使用一种他们需要的应用程序,这个程序偏巧就是用某种新语言开发的。

……一种语言必须是某一个流行的计算机系统的脚本语言,才会变得流行。……无法以一种语言本身的优缺点评判这种语言。

语言设计者应该假定他们的目标用户是一个天才,会做出各种他们无法预知的举动,而不是假定目标用户是一个笨手笨脚的傻瓜,需要别人的保护才不会伤到自己……

……一种真正优秀的编程语言应该既整洁又混乱。“整洁”的意思是设计得很清楚,内核由数量不多的运算符构成,这些运算符易于理解,每一个都是很完整的独立用途。“混乱”的意思是它允许黑客以自己的方式使用。C语言就是这样的例子,早期的Lisp语言也是如此。

随着互联网软件的兴起,越来越多的程序主要不是受限于计算机的运算速度,而是受限于I/O的速度……

……一般情况下内存才是瓶颈,你能够同时支持的用户数量取决于用户数据所消耗的内存。

帕金森定律:对一种资源的需求总是会消耗光这种资源的所用供应。(工作总是到最后一刻才会完成、数据总是会填满所有空间)


CH15 设计与研究

设计与研究的区别看来就在于,前者追求“好”(good),后者追求“新”(new)。……只有应用“新”的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题(也就是“好”的难题),才会诞生最佳研究。

……让用户满意并不等于迎合用户的一切需求。用户不了解所有可能的选择,也经常弄错自己真正想要的东西……大多数优秀设计都是这样产生的,它们关注用户,并且以用户为中心。

……科学观点不需要服从人类工程学(ergonomic)……设计必须以人为本……

“画作永远没有完工的一天,你只是不再画下去而已。”





原创粉丝点击