返回

黑客与画家

关灯
护眼
第2章(1 / 2)
强烈推荐: [HP]铂金父子 超级重生协会 野狼吃定小白兔 1621穿明 生活在二次元世界 恶魔宝宝:惹我妈咪试试 加油吧!妈妈 朕是临时工 暗夜精灵吸血鬼骑士同人

2黑客与画家

读完计算机系的研究生,他们似乎ๆ觉得,居然还。

黑客与画家:一个ฐ喜欢计算机的人,学习绘画ฑ!我就去了艺术,在于他们都是创作者,与作曲家、建筑师、作家一样。

这种看法是错的。计算机和画ฑ画有许多共同之ใ处。事实上,在我知道的所有行业中,黑客与画家最相像。许多人很吃惊,摆弄计算机和画ฑ画是两ä。而画ฑ画是某种原始欲望热烈狂放的表达方&#,黑客和画家都是试图创作出优秀的作品。他们本质上都不是在做研究,他们可能ม会,虽然在创น作过程中。

我一直不喜欢“计算机科学”puters9๗cນe这个词。主要原因是根本不存在这种东西。由于某些历史意外,计算机科学就像一个大杂,很多不相干的领域被强行拼装ณ在一起。这个学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为ฦ了得到国防部研究局darpa的项目资助。中间部ຖ分是计算机博物学家,研究各种专门性的题๤目,比如网络数据的路由á算法。另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画ฑ家手里的颜料é。所以,在“计算机科学”的名下,数学家、物理学家、建筑师๲都不得不待在同一个系里。

有时,黑客做的事情被称为“软件工程”soft9areengineering,但是这个ฐ词也是误导的。与其说优秀的软件设计师是工程师๲,还不如说是建筑师๲

。建筑学和工ื程学之间的区别并不是很严格的,但就是存在区别。这表现在“做什么”和“怎么做”:建筑师๲决定做什么,工程师๲想出怎么做。

‘在英语中,“建筑师”aທrcນhitect和“架构师”aທrcນhitecນt是同一个ฐ词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中的“建筑学”aທrcນhitecture也是这种双关用法,同时指“架构学”architecture。一译者注’

当然,“做什么”和“怎么做”不应该分得太开。如果你决定做一件事,却不知道怎么做,你就是在自找麻烦。但是,只是单纯地决定如何实现某种规格,那肯定不是黑客。黑客的最高境界ศ是创造规格。虽然看起来,做到这一点的最好方แ法就是先做出一个ฐ样品把规格实现了。

也许有一天,“计算机科学”分裂成几个ฐ独立的部分。这可能是一件好事,如果我本人的领域——黑客——能够独立出来,那就更好了。

把不同类型的工ื作捆绑在一起,可能是为了行政管理的方便,但是却容易引起混淆。这是我不喜欢“计算机科学”这个词的又一个ฐ原因。中间部ຖ分“计算机科学家”的工作,也๣许还可以被称为计算机的实验科学。但是,两ä端的数学家和黑客,并不是在做计算机的科学研究。

数学家看来并不在乎ๆ自己้搞的是计算机还是数学。他们很高兴来到เ这个ฐ新地方,然后就开始埋头证明新า的定理,与数学系的数学家干的事情完全一样。不一会儿,他们可能就忘了办公楼外的牌子上写的是“计算机科学系”。但是对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工ื作被称为科学,这会让他们感到自己应该做得像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情设计优美的软件,而是觉得自己应该写一些研究性的论文。

要是黑客写论文,最好的情况下,写出来的也只是一些补充性的描述,不会具有太大的实际价值。黑客先开了一个ฐ很酷的软件,然后就写一篇论文,介绍这个软件。论文变成了软件成果的展示。这种结合是错误的,常常会产生问题๤。为ฦ了配合论文研究性的主ว题,你很容易就把工作重点从开优美的软件转移为ฦ开一些丑陋的东西。

优美的软件并不总是论文的合适题材。先,科学研究必须ี具有原创น性。写过博士论文的人都知道,确保自己正在开垦新领ๆ地的方法,就是去找那些没有人要的土地。其次,科学研究必须是能ม够产生大量成果的,而那些不成熟的、障碍重重的领域最容易写出许多篇论文,因为你可以写那ว些为了完成工ื作、你不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能มai领ๆ域的大部分情况,都符合这条“如何凭空创造出问题”的规律。如果你假定,使用一系列ต的谓词逻辑predicນatelogicນ表达式,再加上代表抽象概ฐ念的参数,就能表达人类的知识,那么,你就可以写出许许多多的论文,解释如何完成这项工作。这就像电å视剧《我爱露西》ilovelucy的男ç主ว角rickyricardo的话:“露西,这下够你好好解释的了。”

创น造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已๐有的观点用比较新า的方式组合起来。这种类型的工ื作很难用研究性的论文表达。

那ว么,为什么เ大学和实验室还把论文数量作为考核黑客工ื作的指标呢?这种事情其实在日常生活中普遍存在,比如,我们使用简单的标准化测试考核学生的“学术能力倾向”scນholasticນaptitude,再比如,我们使用代码的行数考核程序员的工作效率。这样的考核容易实施ๅ,而容易实施ๅ的考核总是先被采用。

黑客真正想做的是设计优美的软件,考核这种工作是非常困难的。你本人需要有良好的设计感,才能ม去考核别人的设计是否良好。但是,你觉得你有“良好的设计感”,与你实际是否具有,不存在相关关系,甚至可能存在负相关。

唯一有效的外部ຖ考核就是时间。经过岁月的洗礼ึ,优美的东西生存展的机会更大,丑陋的东西往往会被淘汰。不幸的是,这种考核需要的时间可能比一个ฐ人的生命还要长。塞缪尔·约翰逊

说过,人们对一个作家的评价,需要100年才能达成一致

。你必须先等他的那些有影响力的朋友都死了,然后再等他的追随者都死了,才能对他有一个公正的评价。

‘塞缪尔·约翰逊samueljohnson,1709-1้7๕8๖4,英国词典学家,编撰了历史上第一本广泛使用、影响巨เ大的英文字典。——译者注’

‘塞缪尔·约翰逊在他编辑的《莎士比亚戏剧ຕ集》的前言中写道:“他莎士比亚的影响远远过他的时代,时间就是对他文学成就的检验。不管他的作品从那ว时的暗语、风俗、政治局势之中,得到过怎样的优势,这些优势都已经消เ逝多年了。他在每一幕戏剧中,通过模拟那时的生活所产生的每一个欢乐的主ว题或悲伤的动机,都已经趋于平淡,而不再是戏剧的亮点。贵族的宠爱和对手的竞争,都不再产生效果,朋友和敌人都走进了坟墓,他的作品再也不是支持一方、打击另一方的舆论工ื具;它们既ຂ不能ม产生虚名,也๣不会带来恶意的攻击。人们阅读这些作品,只有一个理由,那就是欣赏作品本身。因此,只有人们真正欣赏它们,才会出赞美……”’

我想,名望有很大的随机性,黑客对此只好听天由á命了。在这一点上,他们与其他创น作者并无不同。事实上,相比而言,他们还是幸运的。暂时性的、一窝蜂式的时代风潮对画家的影响要比对黑客的影响大得多。

人们无法考核你的工作,甚至误解你的工作,都不是最糟的事。更大的危险是你自己也会误解自己的工ื作。因为你总是从相关领域寻找新า思想,如果你现自己้读的是计算机科学系,很自然地,你就会以为“计算机科学”与其他“理论科学”并无不同,你的工ื作属于“理论计算机科学”所涉แ及的那ว种理论的应用研究。读研究生期间,我潜意识里一直有一种很不舒服的感觉,觉得自己应该多学一点理论,不应该期末考试结束还不到เ三个星期,就把所有东西忘得一干二净,那ว样真是不可饶恕。现在,我意识到自己้错了。黑客搞懂“计算理论”theoryofputaທtion的必要性,与画家搞懂颜料化学成分的必要性差不多大。一般来说,在理论上,你需要知道如何计算“时间复杂度”和“空间复杂度”timeandspaceplexity;如果你要写一个ฐ解析器,可能还需要知道状态机staທtema9e的概ฐ念;除此以外,并不需要知道特别ี多的理论。这些可比画家必须ี记住的颜料é成分少很多。

我现,黑客新า想法的最佳来源,并非那ว些名字里有“计算机”三个ฐ字的理论领ๆ域,而是来自于其他创作领ๆ域。与其到“计算理论”领ๆ域寻找创意,你还不如在绘画中寻找创意。

举例来说,我在大学受到的教育是,在上机编程之前๩,应该先在纸上把程序搞清楚。可我自己一直不是这样编程的,我喜欢直接坐在计算机前编程,而不是在纸上编程。更糟的是,我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑不管对错,先把代码堆上去,再慢慢修改。书上说,调试debugging是最后的步骤,用来纠正打字的错误和疏ຕ忽。可是我的工作方แ法看上去却像编程就是在调试。

很长一段时间内我都为此事沮丧ç,就像小学里老师教我怎么拿铅຅笔,我却总是学不会的那种感觉。如果我那时看到其他创น作领域,比如绘画或者建筑,我就会想到,自己的方แ法其实有一个ฐ正式的名称:打草稿。我现在认为,大学里教给我的编程方แ法都是错的。你把整个ฐ程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。

明白这一点对软件设计有重大影响。它意味着,编程语言要的特性应该是允许动态扩展maທlleable。编程语言是用来帮助思考程序的,而不是用来表达你已๐经想好的程序。它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那ว么静态类型staທti9๗g

是一个不错的槪念。但是,我认识的黑客,没有一个ฐ人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己้的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。

‘静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检查,典型代表是cນ、c++和jaທva。在这一类语言中,声明变量的时候,必须指定类型,而且以后不能再改变。这必然意味着,只有在你对整个程序流程和细节思考成熟以后,才能编写代码。与之对应的则ท是动态类型dynami9g语言,变量包含的数据类型可以随时改变。——译者注’

创作者不同于科学家,明白这一点有很多好处。除了不用为ฦ静态类型烦恼以外,还可以免去另一个折磨科学家的难题๤,那就是“对数学家的妒忌”。科学界ศ的每一个人,暗地里都相信数学家比自己้聪明。我觉得,数学家自己也相信这一点。最后的结果就是科学家往往会把自己的工ื作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向展,它就越成为一个ฐ严重的问题。

一页写满了数学公式的纸真是令人印象深刻啊。小窍门:用希腊ຘ字母表示ิ变量名会令人印象更深刻。因此,你就受到巨เ大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题๤。

如果黑客认识到自己与其他创น作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的妒忌”,他们认为自己้在从事与数学完全不相关的事情。我认为,黑客也๣是如此。

如果大学和实验室不允许黑客做他们想做的事情,那ว么เ适合黑客的地方แ可能就是企业。不幸的是,大多数企业也不允许黑客做他们想做的事情。大学和实验室强迫黑客成为科学家,企业强迫黑客成为ฦ工程师。

直到เ最近我才现这一点。雅虎收购via9ebຘ

的时候,他们问我想做什么เ。我对商业活动从来都没有太大兴趣,就回答说我想继续做黑客。等我来到雅虎以后,现在他们看来,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那ว里,程序员被当作技工ื,职责就是将产品经理的“构想”如果这个词是这么用的话翻译成代码。

‘via9eb是一个帮助用户开设网上商店的互联网应用程序,被认为是第一个ฐ互联网应用程序,由作者和罗伯特·莫里斯在1้99๗5年创น立。1้99๗8年,雅虎以4๒50่0่万美元购买了via9ebຘ,更名为yahoo!store。——译者注’

这似乎是大公司的普遍情况。大公司这样安排的原因是为ฦ了减少结果的标准差。因为实际上只有很少一部ຖ分黑客懂得如何正确设计软件,公司的管理层很难正确识别ี到เ底应该把设计软件的任务交给谁。所以,大部分公司不把设计软件的职责交给一个ฐ优秀的黑客,而是交给一个委员会,黑客的作用仅仅是实现那个委员会的设计。

如果某一天你想要去赚大钱๥,那么记住上面这一点,因为ฦ这是创业公司能ม够成功的原因之一。大公司为了避免设计上的灾难,选择了减少设计结果的标准差ๆ。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利ำ润๰的可能ม性排除在外。这对大公司来说不是问题,因为ฦ生产特别ี优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能赢。

所以,如果你的竞争优势是在软件设计方แ面,并且你的对手是一家大公司,它大到เ由一群产品经理来设计软件,那ว么你的对手将永远无法赶上你。不过说实话,这样的机会不容易找到。你很难单单依靠软件设计就与大公司展开竞争。这就好比你很难攻入城堡与对手面对面地徒手搏斗ç。比如,就算写一个比微软的9ord更好的文字处理软件不是难事,但是微软公司有自己的城堡,它的操作系统是垄断的,你根本无法对它构成威胁,它甚至都不会注意到你的存在。

真正竞争软件设计的战场是新า兴领域的市场,这里还没有人建立过防御工ื事。只要你能做出大胆的设计,由á一个ฐ人或一批人同时负责设计和实现产品,你就能ม在这里战胜大公司。微软公司自己一开始就是这样走向成功的,苹果公司和惠普公司也是如此。我觉得几乎ๆ所有的创น业公司都是这样取得成功的。

所以,开优秀软件的方แ法之ใ一就是自己้创业。但是,这样做会遇到两ä个问题。一个是自己开公司的话,必须ี处理许许多多与开软件完全无关的事情。我创立viaທ9eb的时候,如果有四分之一时间可以用于开,就感到很幸运了。我在其他四分之ใ三时间所做的事情,从单调乏็味到惊悚恐怖,无所不包。我来说一个比较,有一次董事会开到เ一半,我不得不离开去补牙。我记得坐在牙医诊所的椅子上,等着医生开动牙钻๵的那段时间,与刚才待在公司的时间相比,简直感觉像是在度假一样。

创业的另一个ฐ问题是赚钱的软件往往不是好玩的软件,两者的重叠度不高。设计编程语言是很好玩的事情,事实上,微软的第一个ฐ产品就是一种编程语言

。但是,如今没有人会出钱买຀编程语言。如果你想赚钱,你可能不得不去干那ว些很麻烦很讨厌的事情,因为这些事情没人愿意义务来干。

‘1้97๕5年,mits公司布了altaທir8๖800型计算机,比尔·盖茨意识到为它开软件是有利可图的,他写了一个bຘasic语言解释器,卖给了mits。这就是微软公司的第一个产品,当时比尔·盖茨还是哈佛大学二年级在校生。——译者注’

所有创作者都面临ภ这个问题。价格是由á供给和需求共同决定的。好玩的软件的需求量,比不上解决客户麻烦问题的软件的需求量。在小剧ຕ场里演出的酬劳,比不上穿着卡通大猩猩服装ณ、在展览会上为ฦ厂商站台的酬劳。写的回报比不上写广告文案的回报。开编程语言的收入,比不上把某些公司老掉牙的数据库连上服务器的收入。

黑客如何才能ม做自己喜欢的事情?我认为这个ฐ问题的解决方แ法是一个ฐ几乎所有创作者都知道的方法:找一份养家糊口的“白天工作”daທyjob。这个词是从音乐่家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工ื作,还有一份为了爱好的工ื作。

几乎所有的创น作者在职业生涯๹的早期都有一份“白天工ื作”。画家和作家尤其显着。如果幸运的话,你能ม找到เ一份与你的“真正工ื作”非常相关的“白天工ื作”。音乐家似乎常常是在唱片行工ื作。同样地,钻研某种编程语言或操作系统的黑客,很可能会得到เ一份使用这些工ื具的“白天工ื作”。

‘摄影技术对绘画ฑ造成的最大伤害,也许就是消เ灭了画ฑ家最好的“白天工ื作”。历史上,大多数伟大画家都靠画肖像谋生。摄影术明不久,画肖像的工ื作机会就大大减少,从事摄影的黑客抢走了这些机会。对于被画的人来说,坐在镜头前๩也更轻松一些。肖像画ฑ家一这种要求高度技巧的工作——就这样或多或少地消เ失了。画家为了得到收入,就将肖像技巧ู用在为ฦ商业公司画品牌商品的广告图片。可是,这样的工作也๣是极大地依赖于摄影术,或者更准确地说,极大地依赖于复制在书籍和杂志上的照片。’

当我说,黑客解决生计问题的方法是找一份“白天工作”,然后在其余时间开优美的软件,我并没有说这是一个新า方แ法。开源软件界ศ的黑客早就这样做了。我想说的其实是,幵源软件的这种工作模式可能就是正确的模式,因为ฦ它已经被其他领ๆ域的创น作者都验证过了。

令我惊讶的是,雇主都很犹豫,不愿意手下的黑客为ฦ开源软件项目工作。但是,在via9๗eb,要是你不愿意这样干,我们会很犹豫要不要雇用你。我们面试程序员的时候,主要关注的事情就是业余时间他们写了什么เ软件。因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开你自己้的项ำ目。

‘微软不鼓励雇员为开源项目做贡献,甚至业余时间也不行。但是,如此之多的一流黑客都在从事开源项目,所以这个ฐ政策主要的效果,可能ม就是使得微软公司很难雇到เ一流的程序员。’

因为ฦ黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示ิ,而是应该观察其他类型的创作者。那么เ,从画家身上,我们还能借鉴到什么对黑客的启示ิ呢?

有一件事情是可以借鉴的至少可以确认,那ว就是应该如何学习编程。画家学习๤绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,他们从实践中学习๤,13๑岁时就自己动手写程序了。即使上了大学,黑客学习๤编程依然主ว要通过自己้写程序。

‘大学里学习๤编程,就像读书๰和挑选衣服一样,你会现自己高中时的品味是多么糟糕。’

画家的作品都会保留下来,你观察这些作品,就能看出他们是怎么เ一步步通过实践学习绘画的。如果你把一个画家的作品按照时间顺序排列ต,就会现每幅画所用的技巧,都是建立在上一幅作品学到เ的东西之上。某幅作品如果有特别出色之处,你往往能够在更早ຉ的作品上现一个小规模的初期版本。

我想大多数创作者都是这样学习和工ื作的,作家和建筑师๲似乎都是如此。也许对于黑客来说,采取像画家这样的做法很有好处:应该定期地从头开始,而不要长年累็月地在一个ฐ项目上不断ษ工作,并且试图把所有的最新想法都以修订版的形式包括进去。

黑客通过实践学习๤编程,这又是一个ฐ标志,说明黑客与科学家的区别有多大。科学家就不会通过干活来学习科学,而是通过做实验和解题๤来学习。科学家研究的基础都是现有的很完美的成果,在这个意义上,他们的第一步只是在复制别人已๐经做过的工作。最后,他们才会从某一个点开始,进行自己的原创性工ื作。但是,黑客就不一样,从一幵始做的就是原创น性工作,根本没有他人完美的成果可以依靠。所以,黑客的出点是原创น,最终得到เ一个优美的结果;而科学家的出点是别ี人优美的结果,最终得到原创น性。

创作者另一个ฐ学习的途径是通过范例。对画家来说,博物馆就是美术技巧的图书馆。几百年来,临荜大师的作品一直是传统美术教育的一部ຖ分,因为临摹迫使你仔细观察一幅画是如何完成的。

作家也是这样学习๤写作的。富兰克林bຘenjaminfranklin通过总结和模仿艾迪生和斯梯尔的文章

,学会了写作。雷蒙·钱德勒raທy摸nd9๗dler

也是如此学会了写作侦探。

‘此处的艾迪生指jo色phaddison1้6๔7๕2—17๕1้9,斯梯尔指richardsteele16๔72๐—1729,两人都是18世纪初的英国作家,于17๕1้1年共同创办了政论讽刺๐杂志《旁观者》》thespecນtator,产生了巨เ大的影响。——译者注’

‘雷蒙·钱德勒1้8๖88—19๗59,美国推理作家,他的私人侦探菲力普·马罗philipmaທrlo9e系列ต有很大的读者群。——译者注’

同样地,黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。开源运动最鲜ຒ为ฦ人知的优点之一,就是使得学习编程变得更容易了。我学编程的时候,不得不主ว要依靠教材上的范例。那时可以搞到的源码,主ว要来自于unix,但是就连unix也๣不是开源的。大部分阅读unix源码的人都是通过约翰·莱昂斯ั

那ว本书๰的非法影印本。该书虽然是1้977年写的,但是在1996年之前都不被允许公开出版。

‘johnlions1้937—19๗9๗8,澳大利亚计算机科学家。1976๔~1977年为了授课需要,他写了《unix第6版源码注释》lions'mentaryonunix6๔thedition,9ithsourcນecode一书。很长一段时间中ณ,该书๰是贝尔实验室之外唯一的unix内核源码文档。由于unix第6版源码只允许用于教学,所以该书直到1้9๗96年才公开出版,此前一直都是私下传播。人们普遍相信它是计算机科学领ๆ域被复印次数最多的书。——译者注’

还有一个ฐ可以借鉴绘画ฑ的地方:一幅画ฑ是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须ี动手修改。无数古代油画放在x光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部ຖ的表情经过了调整。

绘画的这个ฐ创作过程就值得学习๤。我认为黑客也应该这样工ื作。你不能ม盼望先有一个ฐ完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。

大公司的内部结构,使得它们很难这样做。这是又一个创น业公司占优之处。

眼下想必每个ฐ人都知道,过早优化prematureoptimizaທtion是一件危险的事情。我认为ฦ,我们应该对“过早设计”prematuredesign也๣抱有同样的担忧,不要太早决定一个程序应该怎么เ做。

合适的工具能够帮助我们避免这种危险。一种好的编程语言,应该像油画ฑ颜๨料一样,能够使得我们很从容地改变想法。动态类型语言在这一点上就是蠃家,因为你不必提前就设置好各种变量的数据类型。不过我认为ฦ,编程语言灵活性的关键还不在这里,而在于这种语言应该非常抽象。最容易修改的语言就是简短的语言。

我接下来要说的是,一幅优秀的绘画作品必须比它应该有的样子更好,这可能听起来有点矛盾。举ะ例来说,图2๐-1้所示ิ达·芬奇的作品《女性肖像》ginevraທde'bຘenci现在保存在美国国家美术馆。你可以看到เ,达·芬奇在少女的头后面摆了一片树枝。他很仔细地画ฑ出了树枝上的每一片叶子。许多画ฑ家也๣许会觉得,那ว不过是放在背景里的衬托物,没有人会仔细看的,不妨简单处理一下就可以了。

图2-1达·芬奇的《女性肖像》ginevraທde'ูbencນi,14๒74๒年

但是达·芬奇不这样想。他对作品每一部分的认真程度完全不取决于预料中会不会有人仔细看这个ฐ部分。他就像篮球巨เ星迈克尔·乔丹ลmi9,每一球都一丝不苟,绝不降低对自己的要求。

坚持一丝不苟,就能ม取得优秀的成果。因为那些看不见的细节累加起来,就变得可见了。当人们从达·芬奇的《女性肖像》前面走过的时候,他们的注意力往往立刻就被它吸引住了,那时他们甚至还没有看到说明的标签牌,没有意识到这是达·芬奇的作品。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个细微的声音都以同一个音调在歌唱。

同样地,优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部ຖ,就会现那些预ไ料中没有人会看见的部分也๣是优美的。我对待代码的认真程度远远过我对待其他事情,如果我以这种态度对待日常生活的每件事,那么我就够资格找心理医生开处方แ药了。看到代码前๩面的缩进乱七八糟,或者看到丑陋的变量名,都会把我逼疯的。

如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书๰写出代码,那ว么เ他其实与一个挖水沟的工ื人是一样的,从这头挖到那头,仅此而已๐。但是,如果黑客是一个创น作者,他从事的就不是机械性的工作,他必须ี具备灵感。

黑客就像画ฑ家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新า项目,你会愿意为它一天工ื作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。

为ฦ了做出优秀的工作,你必须把这种心理周期考虑在内。只有这样,你才能ม根据不同的事情找出不同的应对方法。你有一辆手动变的汽车,你把它开上山,有时不得不松开离合器,防止汽车熄火。同样,暂时放手有时也能ม防止热情熄火。对于画家和黑客这样的创作者,有些工ื作需要投入巨大的热情,另一些工作则ท是不需要很操心的日຅常琐事。在你厌倦的时候再去做那些比较容易的工ื作,这是个ฐ不错的主意。

对于编程,这实际上意味着你可以把bug留到以后解决。消เ灭bug对我来说属于轻松的工作,只有在这个ฐ时候,编程才变得直接和机械,接近社ุ会大众想象中的编程的样子。消灭bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方แ程求解就可以了。你的程序应该能产生x结果,但是却产生了y结果。哪里出错了?你知道自己最后肯定能ม解决这个问题๤,所以做起来就很轻松,就好像刷墙一样,接近于休闲了。

用绘画的例子作为ฦ参考,不仅能ม教会我们如何管理自己้的工ื作,还能ม教会我们如何与他人一起工作。历史上许多伟大的艺术品都是多人一起合作的结果,尽管最后在博物馆展出的时候,墙上可能只会写出一个人的名字。达·芬奇曾经在韦罗基奥verrohio的画ฑ室当学徒,后者当时正在画《基督的洗礼》baptismofcນhrist,达·芬奇的工ื作是完成整幅画之ใ中的一个ฐ天使。多人一起完成一幅作品是当时的普遍做法,并不罕见。后来,米开朗基罗坚持要一个人画完罗马的西斯廷大教堂sistinecນhapel天顶壁画ฑ中的所有人物,他还因此被认为特别ี死心眼。

就我所知,当多个画家共同创作一幅作品时,每个人画ฑ的部分都是不一样的。通常来说,大师๲负责画主要人物,助手们负责画ฑ次要人物和背景。但是,你肯定找不到某个部分是两个ฐ人一起画ฑ的。

我认为,这也是多人共同开一个ฐ软件的正确模式。需要合作,但是不要“合”得过头。如果一个ฐ代码块由á三四个人共同开,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏ู又乱,到处堆满了冗余代码。正确的合作方法是将项ำ目分割成严格定义แ的模块,每一个ฐ模块由á一个ฐ人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那ว样清晰。

书签 上一章 目录 下一章 书架s
推荐阅读: 机械战警电视剧 铁心郎君郑媛 太古傲剑诀 未来天王txt百度云 洋果子rose 异星崛起电影 贵妻重生娱乐大亨 极品小老板小说 诡面天后男主与谁在一起了 花羡人间四目丁无防盗