梦想家

代码是诗

[转载]创造者的品味

2010年8月4日22:40 - Dreamer

本文是 Paul Graham 写于2002年的一篇文章,虽然经过了那么长时间,但这篇文章依然没有过时。恰恰相反,随着技术的高速发展和软件开发的日益工业化,文中的观点更显得有价值。现在越来越多的开发者变成了写代码的“机器”,而不是一个“创造者”,二者的区别就在于,“创造者”对美是有追求的,从而大大提高了软件质量。正如《Unix 编程艺术》中所说的那样:“美在计算机科学中的地位,要比在其他任何技术中的地位都重要,因为软件太复杂了。美是抵御复杂的终极武器。

原文地址 | 译文地址

翻译:王新米

“在美学上对地心说,是哥白尼拒绝托勒密天文学体系的重要原因。” ——托马斯·库恩,《哥白尼的革命》

“在凯利·约翰逊的训练下,我们狂热的相信他的主张:一架看上去很美的飞机飞的也会很美。”——本·里奇,《臭鼬工厂》

“美是第一道测验:对丑陋的数学而言,这个世界上没有永恒之地。”——戈弗雷·哈罗德·哈代,《一名数学家的辩白》

我最近和一位在麻省理工教书的朋友聊天。他教的领域很热门,每年都会被那些毕业要读研究生的学生的申请给淹没掉。“他们大部分看起来挺聪明的,”他说。“但我不能确定他们是不是有品味。”

品味。现在很少听到这个词了。但是无论我们怎么称呼它,我们依然需要明确这个概念。我朋友的意思是,他希望他的学生不仅仅是好的技术人员,还能够运用技术知识,去设计出美好的事物。

数 学家们直呼出色的工作是“美”的,过去或现在的科学家、工程师、音乐家、艺术家、设计师、作家、画家也如此。这仅仅是他们碰巧用了同一个形容词,还是他们 指的东西其实是有重合之处的?如果真有重合之处,那我们是不是能够利用在一个领域里对“美”的探索经验,去帮助我们在另一个领域里进行探索?

对我们这样的设计者而言,这不仅仅是理论问题。如果的确存在一个东西叫做“美”,我们需要有能力去辨识它。我们需要好的品味,去做出好的东西。与其将“美”视作抽象的概念进行喋喋不休的谈论,我们不如直接将它归纳为一个实际的问题——怎样才能创造出美好的事物?

如 今,当你提起“品味”这个词,很多人会告诉你:“品味是主观的”。他们相信美感对他们来说是一种直觉。他们喜欢某些东西,却并不知道为什么——可能是因为它很漂亮,或者自己妈妈曾经拥有一个,也有可能是电影明星带着这玩意儿上过杂志,或者是知道它价格昂贵。他们的品味思维,处在未经梳理的混沌状态中。

大多数人从小就被鼓励停留在这种随心所欲的混沌状态下。如果你取笑你的弟弟把图画书上的小人涂成绿色,你妈妈就可能对你说:“你有你喜欢的方式,他有他喜欢的方式”。

就像很多其他大人说的事一样,这个道理半真半假——跟很多他们说的其他事儿自相矛盾。在再三向你灌输“品味不过是个人喜好”发的道理后,他们又带你去博物馆,告诉你:仔细点儿看,达芬奇是个伟大的艺术家!

此 时,这个小孩儿脑中将闪过什么样的观点?他会怎么想“伟大的艺术家”这件事呢?在经过很多年“每个人按自己喜欢的方式做事就是对的”的观点后,他不太可能 做出“伟大的艺术家是指他的作品比别人的好”的结论。更有可能的情况是,在他托勒密式的宇宙观里,伟大的艺术家就是像花椰菜一样对自己有好处的东西——书里是这么说的。

说“品味只是个人喜好”,的确是防止争端的好方式。但问题是,这不是真的!当你开始做设计时,你就会感到这一点了。

无 论人们做什么工作,都自然而然的希望自己做的更好。足球运动员希望赢得比赛,CEO 们希望增加收入。在工作中做的更好,能让你感到愉悦和骄傲。但如果你的工作是做设计,那“美”不是一个确切存在的东西,你就没有确切的方式把工作做得更好 ——如果品味就是主观的,那所有人的东西都已经是完美的了,你喜欢你喜欢的,就成了。

就像做任何工作一样,如果你持续的投入,设计就会越做越好。你的品味改变了,像所有工作越做越好的人一样,你知道你自己在进步——这样,你之前的品味就不仅仅是跟现在的不同,它更坏。让“什么品味都没错”的道理一边儿去吧!

如今相对主义盛行,这可能妨碍你思考“品味”,即使你的品味正在发展进步。不过如果你面对现实,并且承认,至少对你自身而言,存在着好设计和坏设计,你就可 以开始仔细从细节研究什么是好设计了。你的品味是怎么改变的?当你犯错误时,什么让你犯了错误?其他人从设计中学到了什么?

一旦你开始检视这些问题,你就会惊讶的发现在不同的领域里,对美的概念有不少地方时共同的。相同的“好设计”原则一遍又一遍的出现。

好的设计是简单的。从 数学到画画,你都听到这样的观点。在数学里,这意味着更简短的证明往往更好。特别是公理的阐述——少即是多。这在编程里意味着同样的事情。对架构师和设计 师而言,这意味着美更多的依赖一些被精心选择的结构性元素,而不是一些表面的装饰。(装饰品本身并不坏,只有在掩饰本身很平淡的东西时很坏)相似的,在绘画中,被仔细观察和扎实的描摹的静物画,往往比一幅浮华的但没有思想、重复性的、如蕾丝领子的画,更有趣。在写作中,这意味着你需要简洁的说出你的想法。

必 须去强调简单——这听起来很奇怪。你可能认为,“简单”是缺省就存在的,装饰则是更多的工作。可是当人们开始进行创作时,一些东西挟持了他们。菜鸟作家使 用华丽的语调,听上去根本不像他们平时说话,设计师努力成为艺术家,而依赖面饰和花体。画家则发现自己是表现主义者。这些都是在逃避,在又臭又长的句子和 那些“富有表现力”的绘画技巧下,(创作本身)不再有什么进展了,这是令人害怕的事。

当你被迫做的简单之时,就是被迫直面问题本质之时——如果你不能放弃装饰,你就得放弃本质。

好的设计是永恒的。在数学里,每个证明,除非有错误,都是永恒的。那哈代所说的:“对丑陋的数学而言,这个世界上没有永恒之地”是什么意思呢?他和凯利·约翰逊是一个意思——如果一样东西(方法)是丑陋的,那它绝不可能是最佳解决方案,一定有更好的方法,且最终一定会有人发现。

以永恒为目标,是迫使自己发现最佳答案的一个方法:如果你能想象出别人超过你的方式,你应该自己去做。一些大师级的人物在这方面做得如此之好以至于没怎么给后来者留空间,如丢勒之后的版画家就不得不生活在在他的阴影之下。

以永恒为目标,也是避免自己被“时尚”劫持的好方法。“时尚”从定义上讲即随着时间而变化,如果你做些东西,它们在遥远的未来依然看起来不错,那它的感染力一定更多来自于内在品质而非时尚。

奇妙的是,如果你想做出吸引将来的人的作品,一种方式是尝试去吸引过去的人。我们很难猜测到未来会怎么样,但可以肯定将来的人跟过去的人一样,不会怎么关心现在的时尚。如果你能做些东西它既能够吸引公元1500年的人,又能够吸引现在的人,那它很可能还能吸引公元2500年的人。

好的设计解决正确的问题。一 个典型的火炉,有四个出火口,排成一个正方形,每个出火口由一个开关控制。怎么排序放置这些开关?最简单的回答是将它们排成一列——可这个简单的答案解决 的不是正确的问题。开关是给人用的,如果排成一列,可怜的烹饪者就不得不每次都停下来,思考哪个开关控制哪个出火口。更好的方法是:把开关们也排成一个正方形,和出火口一一对应。

很多坏设计是精巧的,却方向错误。二十世纪中期,有一股使用无衬线(Sans-Serif)字体的风气,的 确,这种字体更接近纯粹和基本的文字形状,但文字设计中需要解决的问题主要不是这个。要提高易读性,重要的是使字母和字母更易辨别。Times Roman(译注:典型的衬线字体)看起来可能“维多利亚”了一点,但其小写 g 和小写 y 确实更易区分。

问题和解决方法一样,都可以被改进。在软件领域,一个难处理的问题,通常可以被一个等价的、更容易解决的问题替代。物理学因为将需要解决的问题,从协调世界与圣经的关系,变更为预测可观测的事物的行为,而发展的更快了。

好的设计是暗示性的。简·奥斯丁的小说基本上没有描写,她不直接告诉你事物长什么样,但她的故事好到了你自己可以想象出整个场景。同样,暗示性的画比描绘式的更有吸引力——每人心里都有一个属于自己的蒙娜丽莎。

在建筑和设计领域,这个原则意味着:一幢建筑物,或者一件物品,应该能让人们自如的去使用它。举个例子,一幢好的建筑物,可以充当起人们在其中按自己的生活方式来生活的背景和舞台,而不是迫使居住者像在履行建筑设计师你定好的程序那样去用它。

在软件领域,这个原则意味着你应该给用户一些可以按自己需求自由组合的元素——就像乐高玩具那样。在数学中,这意味着,一个能成为很多新工作基础的证明,远 比一个虽然解决了非常困难的问题,却不能引导出未来新发现的证明更可取。在科学领域,一般来说,引用次数,被认为是体现研究成果价值的粗略指标。

好的设计常常有点好笑。这条定律并不总是真的,但丢勒的雕版画和埃列尔·萨里宁的子宫椅、古罗马的万神殿,以及最早的保时捷 911,对我而言,看起来真有点滑稽。哥德尔不完全定律看起来就像一个恶作剧。

我想这可能是因为,幽默与力量有关。有幽默感,就有力量:保持幽默是对不幸的一种蔑视。而失去幽默感,就容易被不幸伤害。因此力量的标志,或者至少说是特 性,就是不要把事情看得太严重。自信经常让你对全程采用一种轻微的调谑态度。就像希区柯克在他的电影中、勃鲁盖尔在他的绘画中,莎士比亚在他的戏剧中,对 问题表现出来的态度一样。

好的设计不必一定表现的滑稽,但很难想象,没幽默感的东西会是好设计。

好的设计是困难下诞生的。如果你看看那些做出伟大成就的人们,他们的共同点之一就是勤勉工作。如果你工作不努力,你很可能是在浪费自己的时间。

难题要求更卓越的努力,在数学中,一个困难的证明,要求有独创性的解决方案,往往也是有趣的方案,在工程学中也一样。

爬一座山的时候,你需要把所有不必要的东西都从行囊里丢出去。同样,一名建筑师在一个条件很差的地方、或者在很少预算的情况下修建,就会发现他必须做出优雅的设计,为了解决各种困难,时尚与浮华的东西只能被丢在一边。

但并不是所有的困难都好的。痛苦也有优劣之分,你需要那种飞奔中感受的痛苦,而不是踩到钉子上的那种。一个难题,可能对设计师有好处,但刁难的客户、不可靠的原料就没什么好处了。

在艺术领域,最高的成就往往授予了人物画,这个传统事出有因。这并非因为描绘人脸的作品给我们留下了深刻印象,而其他画作没有,而是因为我们是如此擅长观察人脸,迫使描摹人像的人需要不停的努力让观者感到满意。如果你描绘树的时候,把树枝画偏了五度,没人会发现。但如果你把眼睛画偏了五度,那每个人都会注意 到。

当包豪斯派的设计师,采用了路易·萨利文“形式服务功能”原则时,他们的意思是——形式应该服从于功能,如果功能足够困难,那形式就不得不跟随它,因为没有出错的余地。野生动物是美丽,因为它们生活的很艰苦。

好的设计看上去很容易。就像优秀的运动员那样,好的设计师会让人觉得做设计很容易。通常来说,这是一种假象,那些简洁、朗朗上口的文章是经过反复的修改而成的。

在科学与工程学中,一些伟大的发现看起来如此简单,以至于你对自己说,我都可以想到这个!那发现者有资格问你:(你这么说的话),为什么不是你发现的?

莱昂纳多·达芬奇的一些头像画作,仅有寥寥数笔。当你看着它们,你心里想着,所有你需要做的就是把这八九条线凑在一个正确的地方,就画出了杰作。哦,是的,你需要精确的把它们画在恰到好处的位置,一点儿的偏差都会让整幅作品失败。

(注: 莱昂纳多是达芬奇的名,达芬奇全名 Leonardo di ser Piero da Vinci,意思是 Leonardo, Messer Piero 的儿子,来自 Vinci。其父全名 Messer Piero Fruosino di Antonio da Vinci。于是我们知道达芬奇他爷爷叫 Antonio。把莱昂纳多叫达芬奇完全是用美国姓名习惯解外国人名的后果,就跟把乌萨玛·本·穆罕默德·本·阿瓦德·本·拉登叫做本·拉登一样,其实, 乌萨马才是他的名字,穆罕默德是他爸爸的名字,阿瓦德是他爷爷的名字,依次类推。)

线条画事实上时最难的视觉媒体,因为它们要求近乎完美。用数学的术语来说,它是闭合形式解,不那么卓越的艺术家,则用逐渐修正接近的方法来解决问题。一个十岁的小孩放弃绘画还的原因之一是——当他们决心像大人那样画画,并第一次尝试画一张脸——好难!

在 大多数的领域中,“容易”是和练习联系在一起的。也许练习能够让你用潜意识来完成一些本该由意识完成的任务。一些情况下,你真正是在训练你的身体,专业的 钢琴家可以比大脑传递给手信号更快的按键,同样的,经过一段时间练习的画家,可以让视觉感知直接从眼反映到手,就像有些人用脚打拍子那样是条件反射。

当人们说“进入状态”时,我想可能是指脊椎神经控制了身体。脊椎神经(相比大脑)更少犹豫,从而解放自由意识以思考更难的问题。

好的设计使用对称。我想,对称可能仅仅是通向简单的一条路径,但它很重要,值得被单独指出来。大自然大量使用对称,这是一个很好的征兆。

有两种类型的对称:重复与递归。递归是指在子层次上的重复——就像一片树叶上的脉络那样。

如今,对称在一些领域不再流行——这是以前滥用对称导致的一种反弹现象。建筑师从维多利亚时代开始,就有意识的在建筑中采用不对称设计。到了一九二零年代,“不对称”成了现代建筑主义的外在前提。然而即使这些建筑物在中轴线上不再对称,它们中依然存在大量对称的细节。

在写作的每个层次中,你都能找到对称——从句子中的成语词组,到小说的结构层次。你会发现音乐和绘画领域存在同样的现象。马赛克画(和某些塞尚的画)通过重 复同样的元素形成了强烈的视觉冲击力,而组合对称产生了一些最令人难忘的的作品,尤其对称的两半互相起反应时,就像画作《亚当的诞生》和《美式哥特》。

在数学和工程学中,应用递归,特别的有效。数学归纳法简洁优美。在软件中,一个问题用递归来解决,几乎可以肯定是最好的解决方法。埃菲尔铁塔看起来非常惊人的部分原因是,它的结构是递归式的,一个塔叠着一个塔。

对称的危险性,尤其是重复循环的危险性在于,它可能被用于替代思考。

好的设计近似自然。与其说,去模仿自然有些固有的好处,还不如说大自然已经花了相当长的时间来解决各种问题,如果你的答案看起来很类似自然界里的东西,那是个好迹象。

临摹并非作弊,鲜有人会否认“故事应该像生活”。从生活中获得灵感是绘画的有效手段,但它用处常常被误解——从生活中学习画画的目标,并非简单做记录,要点在于,你要从生活中获取些值得咀嚼玩味的东西:当你目光注视着一些东西,你的双手进行更有趣的工作。

工程里模仿自然也是有效的。船只拥有长长的脊骨和肋骨,就像动物的胸腔那样。在有些情况下,我们不得不等待更好的技术出现:早期飞行器的设计者把飞行器设计 成鸟儿的样子失败了,是因为他们没有足够轻巧的材料和足够强大的动力(莱特兄弟的引擎重达 153 磅,却只有 12 马力的输出),也没有精密的控制系统,能够让飞行器像鸟一样飞翔。不过我可以预测,小型的、无人驾驶的、像鸟一样飞翔的侦察机,会在五十年之内出现。

现在,我们有了拥有强大计算能力的计算机,我们不但可以模仿大自然的结果,还可以模仿大自然的方法。基因的运算,能够让我们创造出因为太过复杂而在通常条件下设计不出来的东西。

好的设计是再设计。第一次就把事情做对的可能性事很小的。专家会预料到,会丢掉一些初期的作品,他们为计划的变更做了计划。

把作品扔掉需要自信。你必须有魄力想,会出现更好的成就。例如,当人们开始画画,他们常常不愿因去重画那些不对的地方,他们觉得做到这样已经足够幸运了,如 果他们再做一次,可能会变得更糟糕。他们说服自己:这画其实还不错,真的——事实上,也许他们的意思是看起来就该这样。

这样很危险!你应该培养出一种不满足的精神。在达芬奇的作品里,一根正确的线条背后,往往是五次六次的尝试。与众不同的保时捷 911 后车厢,是粗笨的原型上再设计而成的。在赖特早期给古根海姆现代艺术博物馆做的设计中,右半部是一个古巴比伦金字塔式的建筑,他把它倒转过来,成了现在的模样。

犯错误是正常的。与其把错误视为灾难,不如让它们更容易检验与修复。达芬奇或多或少发明了素描,使得绘画这件事,能够承受住更多的探索与负荷。开源软件的 Bug 更少,因为它更能容纳 Bug 发生的可能性。

一些介质能够让改变变得更容易。当油画颜料在十五世纪取代蛋彩(用蛋清代油调和的鸡蛋水胶做成的颜料),画家更容易处理一些诸如人像画的困难题材了,和蛋彩不同,油画颜料可以混合,也可以被覆盖。

好的设计可以进行模仿。对模仿的态度,往往是反复的——初学者一知半解时最容易模仿,然后开始尝试原创,最终他意识到追求正确比追求原创更重要。

无知的模仿是通向坏设计的良方。如果你不知道你的想法是从哪来的,你很有可能在模仿一个模仿者。拉斐尔风格在十九世纪中期如此流行,以至于每个尝试画画的人都要模仿他,经常带些删改。正是这种情况,而并不是拉斐尔本人的工作,惹恼了前拉斐尔学派3。

(注:前拉斐尔学派,他们认为拉斐尔时代以前古典的姿势和优美的绘画成分已经被学院艺术派的教学方法所腐化。)

雄心勃勃的人不满足于模仿。品味成长的第二阶段是有意识的以原创为目标。

我想伟大的大师们已经到达了一种忘我的境界,他们一心想得到正确的答案。如果正确答案的一部分已经为他人所发现,没理由不使用它。大师们有足够的自信:从他人处学习采纳,而不担心自己的信念在这个过程中迷失。

好的设计常常是奇特的。那些杰作往往拥有奇特的特质:欧拉公式、勃鲁盖尔的《雪中猎人》、黑鸟战斗机、Lisp语言。它们不仅仅是美的,而且是具有奇异的美。

我不太知道原因,也许因为我本身还很无知。罐头开启器可能对狗来说也是不可思议的,如果我足够聪明的话,可能会觉得 ei*pi = -1(欧拉公式之一)是世界上最自然不过的事情——必然如此。

大部分我在文中提到的品质是可以被培养的,但我不认为“奇特的特质”可以被培养。你能做的最好的事情,就是当它出现苗头时,不要去打压它。爱因斯坦并没有试图把相对论弄得奇特。他试图寻找真理,而这真理本身显得很奇特。

在一所我曾经就读的艺术学校里,学生们想的做多的是如何建立个人风格。但如果你仅仅是试图做出优秀的东西,你就不可避免的形成独特的风格,就如同每个人走路的姿势都不一样。米开朗基罗并没有试图画的“很米开朗基罗”,他只是想画好画,他自然的就画得像米开朗基罗。

唯一值得去拥有的风格,是你没法刻意追求的那种。对“奇特的品质”而言,尤其是这样。没有捷径可走。风格主义者、浪漫主义者和两代美国高校生追寻的西北航道是不存在的。到达它的唯一方法,是经由好的设计,从另一侧到达。

(注: 西北航道是一条穿过北冰洋,联通大西洋和太平洋的新航道,它位于加拿大的沿岸,由于能快速连接北美、北欧和东北亚的确,因而被称作“梦幻航道”,但由于覆盖坚冰一直很难航行,军事家与航海家一直期望北冰洋温度升高融化而使其可用性提高。作者在这里使用西北航道,是比喻一条想象中的捷径。)

好的设计批量出现。十五世纪佛罗伦萨的居民中出现了:布鲁内勒斯基、吉尔伯提、多纳泰罗、马萨其奥、菲利波·利比、弗拉·安吉利科、维洛及欧、波提切利、达芬奇和米开朗基罗。当时的米兰和佛罗伦萨一样大,你能说出来几个米兰艺术家呢?

有些事在十五世纪的佛罗伦萨发生了,它不能被传承,因为它不会再发生了。你需要去想象是什么赋予了达芬奇和米开朗基罗先天的能力。有些人出生在了米兰,为什么米兰没有出现达芬奇里昂纳多?

美国现在的人口总数,大约是十五世纪的佛罗伦萨的一千倍。如果 DNA 能支配一切的话,我们中间有一千个达芬奇、一千个米开朗基罗,我们天天都会碰到艺术杰作——而我们没有。原因是要创造出一个达芬奇,不仅需要他个人的天赋,还需要一四五零年的佛罗伦萨。

没有什么问题能有效过去探索天才群体的共同之处了。比较起来,基因的作用无足轻重,具有达芬奇的遗传基因,并不能弥补住的地方离米兰近、离佛罗伦萨远带来的 影响。现代人的迁移更频繁的,但不相称的是,伟大的作品依然多来自几个热区:鲍豪斯、曼哈顿计划、《纽约客》、洛克希德公司的臭鼬工厂、施乐帕克研究中 心。

在任何时候,都只有非常有限的伟大的课题,以及非常少的研究这些课题的小组。如果你离这些工作中心太远,你就几乎不太可能有出色的工作。你可以在某些程度上顺应会反对这些趋势,但你不能脱离它。(也许你可以,但米兰的达芬奇就没有成功。)

好的设计常常是大胆的。在历史上的每个时期,人们都会坚信一些荒谬的东西。他们是如此的坚信这些谬论,所以你得冒着被排斥、甚至是被暴力对待的风险,说出不同的观点。

如果我们的时代有何不同的话,那真是太好了。但就我目前的观察,还没有。

这 个问题不仅折磨着每个时代,在某种程度上,也折磨着每个领域。许多文艺复兴时期的作品,在那个年代被长期认为是可怕的:根据瓦萨里的说法,波提切利忏悔并 且放弃了绘画,而巴托罗米奥修士和洛伦兹·迪·库若迪竟然烧掉了自己的部分作品。爱因斯坦的相对论让许多同时代的物理学家感到了冒犯,在法国,相对论几十 年来都没被完全的接受,直到二十世纪五十年代。

今天实验性的错误,是明天的新理论。如果你想发现伟大的新事物,就不应该对传统智慧、理论没有怎么涉及到的地方视而不见。相反,你应该特别注意它们。

一个实际的问题,我想,看到丑陋要比想象美丽更容易。大部分创造出美好事物的人,是通过修正他们认为丑陋的地方来达到目标的。伟大的作品往往是这样产生的: 有人看到一些事物,想:我能比它做的更好。乔托看见按拜占庭传统方式绘制出来的圣母像,在几个世纪里都令人感到满意,但他自己觉得它们笨拙而不自然(注: 从而画出了《宝座上的圣母》),哥白尼被一个同时代人普遍接受的理论困扰,觉得一定有更好的解决方案。

不能忍受丑陋还不够。在培养出知道 哪儿需要改进的嗅觉前,你得对这个领域非常的了解,你需要做(大量的)基础功课。但当你成为了专家后,你就能听到内心的声音了:这么做不对!一定有更好的 办法!别忽略这些声音,培养它们。伟大的作品的秘诀是——非常精准的品味,加上能够使它满足的能力。

推荐一个博客:到高处呼吸

2010年7月23日0:41 - Dreamer

先放上要推荐的博客:到高处呼吸

忘记什么时候发现这个博客的了,根据以前的日志记录来看,在2007年5月份的时候我就转载过上面的一篇文章,没有记错的话,那个时候应该是已经看了这个博客一段时间了。

当时我正在上大三,有一阵子看尼采的东西,很多东西不是很能明白,想要找一些参考,然后就通过搜索引擎发现了这里。刚看到这个博客的时候有一种非常惊艳的感觉,没有想到在乱糟糟的、所有人都在娱乐的互联网上居然还有这么一个地方,像另外一位读者在留言中所说的:“居然有你这样的人在这个角落里存在,太让人兴奋了!”。一直到现在,我也觉得这个博客是我看过的所有博客当中最好的一个,没有之一。

和其它的博客不一样,这个博客的主人几乎是不说话的,我只看到过一篇“到高处呼吸”署名是他自己,用博主本人的话来讲,“这个小站是大师的居所。在他们面前,我如何敢开口呢?” 也正如他所说的一样,这个小站确实称得上是大师的居所,看一下它右侧的分类列表吧,从梵高到茨威格,从甘地到庄子,哪一个在精神上没有很高的成就呢?如果这个小站只是到处搜集有关大师的文章然后放在一块,这样的“大杂烩”也许并不值得推荐,但是从这个博客的内容中明显可以感受到博主之用心,很多文章应该都是博主一个字一个字敲上去的。他不是原作者,但文章是他筛选的,自然会有他的影子,所以即使博客涵盖了艺术、哲学和文学,也没有丧失博客的整体性,我们也可以从这种整体性中感受到博客主人的独特的品位和精神气质。

自从发现这个博客之后,它就一直放在我的收藏夹里,每当我在网上无所事事的时候就过去看两篇文章。因为这个博客,我开始看《瓦尔登湖》,开始了解罗曼罗兰,于是一扇窗户就此打开,另一个世界的清新空气扑面而来。要不是后来开始忙着学业和找工作,我一定会在这个博客的指引下按图索骥一样去扫荡图书馆的。

后来不知道为什么,这个博客的主人把整站都加密了,输入密码才可以访问,又过了一段时间,网址也无法访问了。当时很后悔当初没有及早把整个网站备份下来,从那之后到现在,我每隔一段时间就会心血来潮去搜索一下这个博客,希望可以重新见到这个博客。在无数次的失望之后,没有想到,昨天竟然被我找到了!激动之余,立刻找工具把这个博客整个地备份下来放在了硬盘里,然后长长舒了一口气:总算失而复得了。

这也是为什么我现在才推荐这个2007年就停止更新的博客的原因。

下面我凭着记忆和搜索的资料来回顾一下关于这个博客的一些东西,算是立此存照吧。

博客的主人的昵称是 zweig ,就是茨威格,不太清楚为什么他会用这个名字,个人猜测可能是因为茨威格为大师写过不少传记。头像是卡夫卡,在个人资料页面显示他的性别是女,不过在这个博客的链接中有一个关于梵高的博客,根据内容来看应该也是他本人的,而在这个博客的个人资料页面显示他的性别是男,所以性别不详,所在地应该是上海长宁。另外,那个关于梵高的博客也很好,可惜很多日志都加密了。

当时这个博客的界面并不是现在这样凌乱,而是和 Keso 的博客风格一样,干净优雅,和博客中的文字以及整体气质都很协调。从我发现这个博客起,它的标题一直都是“到高处呼吸”。副标题偶尔有变化,我清楚地记得两个:

1. 有了思想,我们可以在清醒的状态下,欢喜若狂。

2. 我的忧郁是人们所不懂的。羡我舒卷之自如么?

第一句出自《瓦尔登湖》,第二句出自周梦蝶的一首诗[1]。

记得的就只有这些了。每次想起这个博客,我都想起顾城说过的一句话:一朵花开的时候,不会去想有没有人在看的问题。一个安静的博客,和一群同样安静的读者,这样的事情可能再也不会出现了。

到高处呼吸”和“凡高·梵高” 在 2007 年底同时停止更新,尽管不知道发生了什么事情,但希望博客的主人身体健康,一切都好。

最后,哪位有天涯的ID,帮忙回答一下这位同学的问题,谢谢。

注:
[1] 周梦蝶 《云》,全诗如下:

永远是这样无可奈何地悬浮著,
我的忧郁是人们所不懂的。

羡我舒卷之自如么?
我却缠裹着既不得不解脱
而又解脱不得的紫色的镣铐;
满怀曾经沧海掬不尽的忧患,
满眼恨不能沾匀众生苦渴的如血的泪雨,
多少踏破智慧之海空
不曾拾得半个贝壳的渔人的梦,
多少愈往高处远处扑寻
而青鸟的影迹却更高更远的猎人的梦,
尤其,我没有家,没有母亲
我不知道我昨日的根托生在那里
而明天──最后的今天──
我又将向何处沉埋……

我的忧郁是人们所不懂的!
羡我舒卷之自如么?

[转载]黑客与画家

2010年7月19日0:58 - Dreamer

本文是 Paul Graham 写的一篇关于黑客与画家共同之处的文章,深入探讨了黑客工作的艺术性与创造性。虽然大部分的程序员都觉得艺术是一件很遥远的事情,但对于那些愿意仔细打磨代码追求精益求精的优秀黑客来说,在创造的过程中总是能感受到艺术的真实存在(尽管可能只是隐约感受到,而且羞于把自己和艺术联系起来)。艺术之所以会让人觉得高高在上远离生活,是因为大部分人都是在衣着光鲜地谈论着艺术,而不知道什么是创造。要成为一个创造者,你所要做的不是夸夸其谈,而是投入全部热情去不断实践。Dirty Your Hands

英文原文 | 译文地址

黑客与画家

我读完计算机本科以后,去艺术学校学习绘画。许多人感到奇怪,喜欢计算机的人也会喜欢美术吗?他们大概认为编程序和画画是两种完全不同的工作,编程需要冷静,精密,和正确的方法,而画画是表达某种狂热的情感。

这种印象是不对的,编程和画画有很多共同之处,实际上,在我认识的不同类型的人中间,画家和黑客是最相似的。

画家和黑客的相似之处在于:他们都是创造者,就好像作曲家,建筑师,以及作家一样。黑客和画家类似,他们的目的是创造某种美好的事物。尽管在创造的过程中,也许会发现新技术,但他们的根本目的并不是研究技术。

我从来都不喜欢”计算机科学”这个词,因为这种东西根本就不存在。这门学科的内容,不过是由于历史原因偶然凑合到一起的大杂烩,就好像南斯拉夫国的形成一样。一头是数学家们,他们摆弄计算机是为了得到国防部的资金赞助,中间部分,一伙人在研究仿佛是计算机自然史之类的东西--比如网络上数据流算法的行为特征等等。在另一个极端上,是黑客们,他们编写有趣的软件。对他们来说,计算机是表达的工具,如同水泥之于建筑师,颜料之于画家。这三种人凑在一块的群体,就好像是数学家,物理学家和建筑师被分到一个专业里。

有时候黑客们干的事被称为”软件工程”,这个词也是一种误会。比起建筑师来,软件设计师离工程师的距离更远。建筑师和工程师的分界并不十分精确,但却是实实在在存在的。其分界在于做什么和如何做:建筑师决定做什么,工程师考虑如何做出来。

这两件事情也不能分得太开,如果你不懂得如何做,那么你设计的时候就会陷入难局。但是编程当然不是仅仅决定如何实现某种特性那么简单,在最好的情况下,编程实际上就是设计软件的特性--往往最好的设计方式就是实现它

说不定哪一天,”计算机科学”会分裂成几个专业,就好像南斯拉夫最终分裂成几个国家那样。这也许是件好事。尤其是这意味着我所擅长的编程,会变成独立的专业。

这些不同类型的工作绑到一个专业里,当然有利于行政管理,但是却会引起智力上的困惑。这也是我不喜欢这个名词的另一个原因。处于中间部分的那伙人所干的,和经验科学差不多,但是另外两头的人,数学家和黑客,可不太象是在干真正的科学。

数学家好像并不为这个问题发愁,他们就象数学系的同行一样,很高兴地做着理论研究,不久就忘了办公大楼的牌子写的是”计算机科学系”。但是对黑客们来说,这个牌子就很成问题。既然他们干的事被称作科学,他们就会感到好歹要象那么回事,于是大学和研究所的黑客们觉得应该写论文,而不是写优美的程序。但是不幸得很, 后者才是他们真正应该干的。

论文充其量不过是一个手续。黑客写出很棒的程序,然后再做一篇论文,论文表示软件上的成绩。但是两者之间的不协调引起了问题:好的软件比起糟糕的软件来,更加不适合做论文的题材。

好的软件不适合作论文的题材。首先,论文要有独创性的,写过博士论文的都知道,要想保证你开垦的那片地是处女地,就等于说是你划出一片别人都不想要的地来。第二,论文必须言之有物。糟糕的软件使论文材料充足,你有很多事实可以描述你是如何克服那些困难的。糟糕的假设总是会产生大量问题。大部分AI 研究就是好例子。比如,你假定,以抽象概念为参量的逻辑表达式列表可以用来表示知识,那你要论证的内容可就多了。就像Ricky Ricardo说的,Lucy,这下可够你解释了。

创造美好事物的过程,常常是对已有事物的细微调整,或者是把已有概念用新方式组合起来。这种事情,恐怕不太好做研究论文吧。

那么为什么大学和研究所还要用论文来衡量黑客呢? 同样的, 为什么要用标准化考试来衡量学术才能呢?为什么要用代码行数来衡量程序员的工作量呢?这些考试的好处是容易实施,而且有一点效果, 因此才会引诱我们继续采用这些措施。

真正的黑客能够写出优雅的代码, 但是识别这种黑客的方法,真的很不容易找到。要有好的嗅觉才可能识别出真正优秀的设计。是否真的有这种嗅觉,和是否自信有这种嗅觉,这两者之间没什么关联,即使有,也是负面的。

真正的考验是时间。经过时间的考验,好的东西会发展壮大,坏的东西会丢弃。不幸的是,需要的时间往往太长, 以至超过人的寿命。Samuel Johnson说,需要一百年的时间,才能形成一个作家的真正声誉。你得等到这个作家有影响的朋友都死了,他的追随者也都死了才行。

我想黑客不得不接受名声上的不确定性,这一点上, 他们和其他创造者没什么不同。实际上比较起来还要幸运一些。在编程领域,一时的流行风气虽然也有影响,但没有绘画领域那么大。

还有比别人的误解更糟的事情。更糟的危险是你可能自己误解自己。你通常在相关领域寻找灵感。如果你在计算机系,很自然地会以为,编程的本质就是实现计算机理论。我读本科的时候有一种令我很不舒服的感觉,我觉得自己应当多学一点计算机理论,可是期末考试完了不到三个礼拜,我就把那些东西全忘光了。这让我觉得自己不够尽责。

现在我认识到我那时的想法都是错误的。黑客对计算机理论的了解程度,只要达到画家对颜料化学所了解的程度就够了。你应当知道怎样计算时间和空间复杂度,知道图灵机模型。也许应当知道状态机,至少知道这个概念,如果要写语法解析或者正则表达式库的时候会用得到。画家对颜料的学问上,要记的东西比这还要多一些呢。

对我来说,灵感的源泉不是来自于那些挂着计算机招牌的地方,而是那些聚集着创造者的地方。我从绘画方面得到的灵感比我从计算机理论上得到的,要多得多。

打个比方。我上学的时候,学生在上机之前,要把整个程序先用纸笔写出来。可是我觉得这不是我写程序的方式。我喜欢坐在计算机前面写程序,根本不用纸笔。我并不先在纸上写出程序并检验其正确性,我喜欢先敲一段代码,当然好多毛病,然后慢慢敲打成型。我受到的教育告诉我,调试应当是检查输入错误的最后一关,而按照我的方式,程序基本上就是调试出来的。

好长一段时间我都感到很沮丧,念小学的时候,我捉铅笔的方式和老师教的不一样,那时我也感到同此刻一样的沮丧。如果我那会知道别的创造者-比如画家和建筑师-的做法的话,我就早该知道这种方法的名字,那就是:打草稿。我可以告诉你,他们在大学时教我的方法是错的。你应当是一边写程序一边来确定程序的走向, 这和画家, 作家以及建筑师的做法完全一样。

这里蕴涵着软件设计的真义, 认识到这一点, 就意味着程序语言应当首先要具有延展性。语言要有助于在编程中思考, 而不是仅仅表达思考的结果。它应该象铅笔, 而不是象钢笔。如果程序员真的象大学里教的那样写程序, 那么静态类型语言就是不错的选择。但是我所知道的黑客都不是那样子编程序的。我们需要这样一种语言, 我们用它来随意涂抹。而使用静态类型语言编程序的感觉, 就好象手放在膝盖上, 小心翼翼握着茶杯, 正襟危坐着和一个严肃的老太太谈话。

谈论静态类型, 以及创造者这种话题, 我们除去了另外一个困扰的科学的问题: 数学嫉妒。科学界的每个人暗地里都认为数学家比自己聪明。我想数学家们自己大概也这么认为。反正科学家们总是把自己的作品弄得象数学论文一样。这对物理学倒还没什么大害, 但是你要是在自然科学上走得越远, 就越发现这个问题的严重性。

印上一整页的公式, 看上去很让人敬畏的样子, 用上希腊字母就更加不得了。这种倾向可能诱惑你去研究那些可以公式化的问题, 结果是忽略了真正重要的东西。

如果黑客认同创作者的身份, 像是画家和作家一样, 他们就不会受此诱惑。作家和画家才不理会数学呢, 根本就是不相干的事情。我认为, 黑客也应当这样看。

如果大学和研究所不让黑客做自己想做的事情, 他们还可以去公司, 可惜, 公司和大学的做法是一丘之貉。大学和研究所要求黑客当科学家, 而公司要求黑客当工程师。

我也是最近才发现这问题的。Yahoo买了Viaweb之后, 他们问我的意向, 我一向就不喜欢商业公司, 我就说我还是想编程序。进了Yahoo以后, 我发现在他们那里, 编程序的意思就是代码实现, 和设计没关系。程序员就是代码工人, 他们把产品经理的愿望, 以代码形式记录下来。

看起来这是大公司的一贯的做法。这样做的目的是减低工作的偏差。只有少数程序员真正懂得设计软件, 而且这些有才能的人很不容易一下子识别出来。所以与其把软件的未来寄托在少数聪明人身上, 不如把软件设计让一个委员会来作, 程序员只管编码实现。

如果你想赚钱, 那么记住我的话, 因为我讲的, 正是小公司取胜的机会。大公司采取保险的做法, 意图规避风险。但是试图限制这种工作效果上的震荡的时候, 固然避免了最坏的可能,但也失去了最好的。这对大公司当然不是问题, 大公司取胜的原因不是因为发明了伟大的产品, 而是因为犯的错误比其他大公司少而已。

如果你有办法和一个大公司竞争某种产品, 这个公司的产品是产品经理们设计的, 那么, 他们永远赶不上你。不过这样的机会很不容易找到。你很难和大公司卷入软件竞争, 就好比你很难和对手在城堡里徒手搏斗一样。写一个比微软的word还要好的字处理器是可能的, 但是在操作系统这个微软独占的堡垒里, 他们对你根本就不屑一顾。

软件竞争只能在全新的市场中展开, 因为在那里还没有谁建立起防御工事。你有可能采取大胆的策略, 集合那些既做设计又做编码的人, 来赢得竞争。微软最初就是这样做的, 苹果,HP也莫不如此。我想任何成功的创业公司都是走的这条路。

所以, 创造伟大软件的一个办法就是创业开公司。不过这里面还有两个问题。第一, 开公司以后, 除了编程序, 你需要做好多其他事情。在Viaweb的时候, 我真的希望自己能挤出四分之一的时间编程就好了。实际上我四分之三的时间都是在做很讨厌甚至很麻烦的事情。对此我深有体会, 有一次当我开完董事会去补牙, 坐在诊所的椅子上, 我觉得简直抵得上度假了。

还有另一个问题。写有趣的软件, 和写赚钱的软件, 经常是没多少共同之处。设计语言是很有趣的工作, 微软的第一个产品就是。但是现在没人会花钱买语言。要想赚钱就得写那种很麻烦的, 没人会免费干的软件。

所有的创造者都会面临这个问题。价格是供求关系决定的, 对有趣软件的需求总是比较少,而解决一般用户的平凡问题的需求, 总是多一些。在高速公路边上演出, 观众一定少, 在庙会搭个台子演出, 观众一定多。写长篇小说的收入, 比不上写广告词的收入, 虽然那些广告最后的归宿是垃圾箱。设计一种语言的回报一定不多, 而搞定某些公司的老掉牙的数据库和web server的连接问题, 回报会丰厚得多。

我认为这个难题的答案, 是创造者们应当找一个养家糊口的”日常工作”。这个名词最初是惯于晚上演出的音乐家们使用的。它的意思是: 你做一个工作是为了赚钱, 另一个工作是因为你喜欢。

几乎所有的创造者在他们职业生涯的早期, 都有日常工作。其中最为人所知的就是画家和作家。如果能赚钱的日常工作刚好是你所喜爱的工作, 那你就太幸运了。音乐家就经常在唱片店工作。正在用某种语言或者操作系统的黑客, 也应当找个相近的系统管理或维护的工作。[1]

黑客应当找个日常工作糊口, 业余时间做自己喜爱的程序。我的这个说法并不是独出心裁。所有的开源社区的黑客都是这样做的。我要说的是, 开源社区的模型也许是正确的模型, 因为这种模型被其他创造者分别独立地验证过。

一般的雇主都不太愿意雇员参与开源项目, 这让我有一点惊奇。在Viaweb则相反, 我们不愿意雇佣没有做过开源项目的人。面试程序员的时候, 我们考虑的一个首要问题就是, 他们业余时间写什么软件。你要不是真的热爱这个工作, 就不可能干的出色。如果你热爱编程, 就必然会有自己热爱的业余项目。[2]

黑客是创造者, 不太象是科学家。黑客寻找灵感的地方, 不应当是科学领域, 而是其他创造者工作的领域。那么, 我们从绘画上, 能够得到什么启示呢?

第一件可以从绘画领域学习的, 或者说可以验证的, 就是怎样学习编程。绘画都是在实践中学会的, 编程亦然。大部分黑客都不是因为念大学计算机课才走上编程之路的。他们13岁年纪就开始学着写程序。即使是上了大学计算机课, 你真正学会编程, 大多也是通过自己实际写程序。[3]

画家通常会留下一系列作品, 你可以从中观察到他们在实践中学习的过程。如果你按年代顺序观察一个画家的作品, 你会发现后一个作品在前一个作品基础上的提高。如果一幅画中的某样东西特别出色, 你多半会在更早的作品中发现其发展成熟的轨迹。

我认为大多数创造者都是这样工作的。作家和建筑设计师也不例外。对于黑客而言, 我觉得这样的做法大概比较好: 从一个大概的草稿开始起步, 不断尝试采纳新的想法, 做修订版,而不是连续几年埋头做一个题目。

这种工作模式是区别黑客和科学家的另一个显著标志。科学家并不通过干活来学习科学, 他们通过做实验和解题来学习科学。科学家总是从完美的东西开始, 也就是说他们重复前人已经做过的工作, 最后达到某种高度, 才开始做自己创造性的工作。而黑客呢, 一开始就是做创造性的工作–当然这时候作品还不成样子。黑客从创造开始, 最终达到完美。而科学家从完美开始, 最终达到创造。

创造者学习的另一种方法是观摩杰作。对画家来说, 美术馆是技巧的宝库。几百年来, 美术馆都是画家学习和借鉴大师作品的地方, 它成为传统教育方式的一个部分。观摩杰作强迫画家仔细观察那幅画是如何画成的。

作家也是如此。本杰明-富兰克林曾经总结Addison和Steel的散文的特点, 并加以模仿。Raymond Chandler也是这样学写侦探小说的。

同样, 黑客也是通过看优秀的程序来学习编程–不仅看它的外在表现, 而且要看源码。开源软件有一个少人提及的优点就是: 你很容易从中学习编程。我学编程的时候, 不得不依赖书里的例子。其中有一大堆代码是属于Unix的, 但Unix也不开源。大部分人是读John Lions的书里的源代码, 而这些内容是不合法的。这本写于1977年的书, 直到1996年都还被禁止出版。

绘画的过程就是不断改进的过程, 这是值得我们学习的另一个地方。绘画通常从草图开始,逐渐地添上细节, 但又不仅仅是添上细节那么简单。有时候会发现最初的想法是错的。无数的人像作品, 在x光照射之下, 会发现面部轮廓修改过, 嘴的位置也移动过, 诸如此类。

这就是我们应当学习的榜样, 编程也应当遵循同样的做法。想要假设软件的规格设计完美无缺, 这显然是不切实际的。预先接受这种现实对你有好处, 写程序的时候就会有所准备,随时应对可能发生的设计规格上的改变。

(大公司很难做到这一点, 这又是一个小公司可以发挥优势的地方。)

现在差不多每个人都知道过早优化的危险。我认为我们也同样应当顾虑另外一个问题, 就是过迟确定软件的设计规格。

好的工具可以帮助我们避免这个危险。好的语言也可以帮助你较容易地改变主意。动态类型语言就有这个优点, 你用不着预先就指定数据的表现形式。不过, 我认为弹性的关键之处在于, 它使语言具有较高的抽象度, 如果一个程序比较短, 那它就比较容易修改。

这似乎听起来让人迷惑。但是伟大的作品总是精益求精。例如, 达芬奇在国家美术馆画Genevra de Benci像的时候, 头像后面是桧柏树丛, 他仔细地描绘每一片叶子。许多画家也许认为,这些东西是衬托头像的, 没人会仔细看。

达芬奇并不这样认为。他绘画的认真程度, 并不取决于看画的人的认真程度如何。达芬奇和米开朗琪罗一样, 都是一丝不苟。从总体看去, 那些似乎看不见的细节也会变得显著。这是一丝不苟的重要之处。观众经过这幅画的时候, 注意力一下子就被吸引过去, 那些原本不易觉察的细节, 综合在一起产生了惊人的效果, 就好像一千个细微的声音唱出的和声一样。

伟大的软件对于美的追求, 也需要超人的投入。当你仔细查看好软件的时候, 会发现那些不为人注意的部分同样优美。我不是说我自己写的软件是伟大的, 但我知道, 写代码的时候,要尽量写得清晰易读。有的程序变量名取得丑陋极了, 有的程序行缩进乱七八糟, 读这样的代码真能让我发疯。

如果把黑客仅仅当作代码工人的话, 那他会像工人挖水沟一样从一头干到另一头。但是如果把黑客当作创造者的话, 我们就必须考虑灵感的因素。

编程序的过程和绘画的过程类似, 也会有起有落。上新项目的时候, 一天干16个小时不知道累, 也有时候, 无论如何都提不起兴致。

这种状况也必须考虑在内, 你应对的方法不同, 效果也会不一样。当你开着手动档汽车过山的时候, 有时候为了防止抛锚, 不得不松开离合器。松开离合器可以防止抛锚。在绘画和编程之中, 有一些是关键的东西, 另外一些是常规的工作, 留下一些容易作的工作, 等你厌倦的时候, 就做这些较轻松的工作。

比如说, 在编程时可以故意留一些bug, 我比较喜欢找bug。这时候, 黑客这个词的含义可以说恰当极了。你面临的问题总体上是有限制的, 你要做的就是解决掉它。假定你的程序应该做x, 结果却做了y, 哪里出了问题? 你可以断定最终一定是可以解决的。这个活跟刷墙一样, 是不错的调剂。

绘画不仅可以教我们如何处理自己的工作, 还教我们如何协同工作。过去很多伟大的作品都是由一群人共同完成的, 尽管在美术馆的标签上可能只写着一个人的名字。达芬奇在Verrocchio 的工作室当学徒时, 就参与绘制<<基督受洗>>中的天使。这样的事情当时很常见。当米开朗其罗坚持要自己一人绘制西斯廷教堂屋顶的人像时, 就被认为是很不得体的事情。

就我所知, 画家们一起作画时, 他们并不是一起画一个共同的部分, 而是一个主要画家画主题人物, 他的副手画背景和其他部分, 绝对不会有人掺和别人正在画的东西。

我认为这种模式也适用于软件开发, 不过别走得太远。如果一段代码有三四个程序员分别写过, 那么没人真正对它负责。结果就会变成公用房间一样没人收拾, 又冷清又灰暗。正确的做法是把程序分成严格定义的模块, 每个模块有专人负责, 仔细设计模块之间的接口, 使之尽可能像程序语言本身那样, 精确地表达出来。

软件和绘画一样, 都是为人而做的。黑客也应当像画家一样, 努力创作出伟大的作品。你必须为用户的立场着想。

我小时候, 就听人讲要学会从别人的立场来设想。意思就是做别人想要你做的事情, 而不是做你自己想做的事情。这当然给” 换位思考”这个词带来了坏名声。因此我一直不愿意这样做。

可是, 我错了。换位思考确实是成功的秘密, 这并不意味着放弃自我。理解别人的观点, 并不是说你要按别人的兴趣办事。在某种情况下刚好相反, 举个例子, 打仗的时候, 理解敌人观点, 其目的恰好是要反其道而行之。[4]

大多数创作是为人的, 你得理解人的需要。差不多所有伟大的作品主题都是人, 因为人最感兴趣的, 就是人类自身。

好程序员和伟大的程序员之间的唯一的差别, 就是体察别人的能力。有些程序员很聪明, 但论到”换位思考”, 则是完全的自我主义者。这样的人不可能设计出伟大的软件[5], 他们从来不懂得理解别人的观点。

判断一个人换位思考的能力如何, 最好的办法是看他怎样向那些不懂技术的人讲解技术问题。我们大概都见过那样一些人, 不管多么聪明, 这件事情上却是糟得很。如果有人问, 什么是编程语言, 他们会说, 呃, 就是一种高级语言, 能经过编译器处理产生目标码。高级语言?编译器? 目标码? 不知道编程语言的人, 难道会知道这些东西?

软件的目标之一, 就是解释自己。你要写出好程序, 就应当知道用户对软件了解甚少。他们用软件时, 全无思想准备。如果软件的行为刚好合乎他们的设想, 那就最好了。别指望用户会去读操作手册。这方面, 我见过的最好系统是早期的苹果, 那时候还是1985年。苹果干了所有软件都做不了的事情, 那就是能正常运行。[6]

源码同样也应当解释自己。如果让人回忆关于编程的名言, 经常提到的是结构化和解释语言初期的一句话:

程序写出来是给人看的, 碰巧机器也能运行。

你不但要为用户设身处地地着想, 对读者也是一样, 因为读者可能就是你自己。好多程序员写了程序, 过半年再看, 简直看不懂究竟是怎么回事。我就见过有几个人因为这原因放弃了perl。[7]

缺乏换位思考的能力仿佛是高智商的特征, 尤其在某些地方, 这都成了一种风尚。但我不觉得真的有什么关联。数学和自然科学和人类感情无关, 这些领域的人显然都很聪明, 于是乎高智商就和”不通世故人情”挂起构来。事实上好多平常智商的人在这方面也不行。看看脱口秀节目里那些站起来发问的人, 那些问题问的, 真叫拐弯抹角, 主持人得重新梳理一遍, 才能搞得清是啥意思。

如果编程和绘画写作一样的话, 它也一样酷吗? 毕竟, 人只有一次生命, 最好是做有意义的事情。

这问题真难回答。在赢得名气上总是有很大的滞后。这就好像遥远的星星发出的亮光, 要经过好多年才能到达我们眼里。绘画行业光芒四射是因为500年前就产生的杰作。那时候,没人会象我们现在这样看重这些作品。我们现在所知的Urbino公爵Federico daMontafeltro先生的形象, 是从Piero della Francesca的作品里的高鼻子男人哪里得来的。这在当时的人眼里看来, 一定是非常奇特的。

所以当我说编程没有绘画那么酷的时候, 我们应当记住绘画在它古老的光辉年代, 同样也不见得那么酷。

我们可以自信地说, 现在正是黑客事业的光辉年代, 在大部分领域, 伟大的作品诞生很早。1430-1500年代的绘画现在仍难以超越, 莎士比亚彷佛生来就是戏剧家, 把这门艺术推进到如此之高的程度, 以致于后来的剧作家都生活在他的阴影里。Albrecht Durer之于雕刻, 奥斯丁之于小说, 也是如此。

一次又一次, 我们看到同样的模式。新的媒体诞生了, 人们热情高涨, 短短几代人就把它的能量发挥到极至。黑客事业似乎也正处于这样的时期。

达芬奇时代的绘画行业并不酷, 是他的杰作造就了绘画行业的酷。黑客事业之未来, 全依赖我们今日之创造。

作者注:

[1] 照相术的出现, 毁掉了画家的日常工作。历史上很多画家靠替人画像维持生计。

[2] 我听说微软不鼓励员工从事开源项目, 业余搞也不行。不过现在有那么多黑客都在做开源项目, 这种政策也许会令他们难以招募到很多一流程序员。

[3] 大学所能学到的编程技术, 其状况相当于你学到的关于读书, 打扮或者约会的知识: 你上高中那时候的品味多差啊。

[4] 这里有一个”换位思考”的例子。在Viaweb的时候, 如果在两个选择之间下不了决心, 我们就会问: 我们的对手最恨什么? 当一个对手在软件里加了个没用的特性, 这个特性我们没有, 他们就在媒体上大作文章。我们当然也可以解释说这个特性根本是废物, 但是我们还是决定也实现它, 因为这样的话, 对手会更生气。于是当天下午我们就加上了这个特性。

[5] 不包括文本编辑器和编译器。因为这两样东西黑客自己也天天用, 自己就是典型用户,所以用不着了解别人的观点。

[6] 差不多如此。他们在内存使用上弄巧成拙, 产生好多很麻烦的磁盘交换。几个月后, 我买了个新驱动器加上, 这问题就解决了。

[7] 给程序加注释, 并不是增加易读性的好办法。我把Abelson和Sussman的话再发挥一下:程序语言是用来表达算法的, 碰巧也能在机器上运行。好的编程语言, 表达软件的能力比英语更好。只有在代码含义复杂难解的地方, 才有必要加注释, 就好像高速公路上急转弯的地方才会有警告标志。

感谢Trevor Blackwell, Robert Morris, Dan Giffin, 和Lisa Randall阅读本文的草稿, 感谢Henry Leitner和Larry Finkelstei邀请我讲话。

Essays 1.0 发布

2010年7月10日12:48 - Dreamer

由于最近想要开始好好锻炼一下写作,提高自己的表达和逻辑思维能力,于是就着手把这个 Blog 改造成我的试验田。

第一件要做的事情就是找一个合适的 WordPress 主题,这个主题应该功能简单,利于阅读。原以为 WordPress 有上千个主题可以选择,而我的需求又是如此简单,可以毫不费力找到一款自己需要的主题,但事实恰恰相反。公开发布的 WordPress 主题大部分都要考虑到用户需求之间的差异,所以在通用性方面会做得比较多,这样就导致了大多数主题都带有很多很酷但是我不想要的功能,少数几款走极简路线的或者布局不好看,或者对中文的支持不好,以至于我在 WordPress 网站上挑选了好久都没有找到一款完全满意的主题。在感慨了用户对软件定制需求之多以及为什么我想要的东西总是找不到之后,我想起了我的程序员的身份,于是决定为自己写一款中文 WordPress 主题。

我构想的主题应该有这样几个特性:

1. 功能简单。这个 Blog 面向的是真正的“读者”,而非“访问者”,访问量和评论数都不是我想要关心的东西,所以相关文章、热门文章等功能就完全没有存在的必要,再加上内容几乎是纯文字,那么可以显示文章和评论、发布评论和搜索就足够了。

2. 界面简洁。尽管 Blog 内容中可能偶尔会出现一些图片,但是对于主题本身来说,我不希望有很多的图片出现,那样只会增加页面的噪音,干扰读者的注意力。

3. 良好的中文显示。WordPress 的主题大部分都是国外的设计师制作的,很少有考虑到中文的显示,有一些特别漂亮的主题如果把文字换成中文,就变得非常难看。我相信文字是可以作为界面的,尽管文字的很大一部分作用在于承载信息。如果把文字承载信息的功能抽掉,依靠良好的字体选择和排版,它依然可以在界面中发挥很大的作用。我的意思是,就算一个完全不懂中文的人无意中来到这里,即使获取不到任何信息,也仍然可以感受到美。

接下来,经过了几天的设计和编码,Essays 1.0 完成了,样子就是你现在看到的。尽管还有很多需要完善的地方,不过我十分确定它就是我想要的。

细心的人应该会发现,这款主题大量模仿了 WordPress 的官方 Blog ,窃取了很多细节。一开始的时候我打算用尽全力形成自己的风格,但后来我发现把事情做正确要比追求个性重要。现在 Essays 只是 1.0 版本,它不会只满足于模仿的。

在设计这款主题的时候我大量参考了 37SignalsWordPress ,感谢它们对美的追求和在设计上的精雕细琢。在开发过程中使用到了很多迷人的工具:YUI Grids 使得页面布局的工作大大简化,Git 提供了方便快速的版本管理,FireBug 使得即时调整页面细节成为可能,还有 VIM ,几乎是世界上最好的编辑器,让我远离了工作流被打断的困扰。

因为设计和编码时间都比较短,Essays 1.0 肯定有许多错误和不足,非常欢迎大家提出批评和建议。

最后,希望以后写出的内容可以对得起自己精心设计的主题。

© 2010

Proudly powered by WordPress & Essays.