返回

黑客与画家

关灯
护眼
第2章(1 / 2)
强烈推荐: 劣少清影掠文才 我一直在这里,等你 鸭霸先生 高达之新人类 幸福之光 一二三再见幸福 网游之星际殖民 雪落云廷 乞丐格格

2黑客与画ฑ家

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

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

这种看法是错的。计算机和画画有许多共同之处。事实上,在我知道的所有行业中,黑客与画家最相像。许多人很吃惊,摆弄计算机和画ฑ画是两件截。而画ฑ画是某种原始欲望热烈狂,黑客和画ฑ家都是试图创作出优秀的作品。他们本质上都不是在做研究,他们可能会,虽然在创作过程中。

我一直不喜欢“计算机科学”puters9ce这个词。主ว要原因是根本不存在这种东西。由于某些历史意外,计算机科学就๠,很多不相干的领域被强行拼装ณ在一起。这个ฐ学科的一端是纯粹的数学家,他们自称“计算机科学家”,只是为了得到国防部ຖ研究局daທrpa的项目资助。中ณ间部ຖ分是计算机博物学家,研究各种专门性的题目,比如网络数据的路由á算法。另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画ฑ家手里的颜料。所以,在“计算机科学”的名下,数学家、物理学家、建筑师๲都不得不待在同一个系里。

有时,黑客做的事情被称为“软件工ื程”soft9aທreengineering,但是这个词也是误导的。与其说优秀的软件设计师是工程师๲,还不如说是建筑师

。建筑学和工程学之间的区别并不是很严格的,但就是存在区别。这表现在“做什么”和“怎么做”:建筑师决定做什么,工ื程师想出怎么做。

‘在英语中,“建筑师”aທrcນhitect和“架构师”arcນhitect是同一个词,所以这里用的是双关语,意思是优秀程序员不仅负责建造,还负责架构。后一句中ณ的“建筑学”aທrchitecture也是这种双关用法,同时指“架构学”architecture。一译者注’

当然,“做什么”和“怎么เ做”不应该分得太开。如果你决定做一件事,却不知道怎么做,你就是在自找麻烦。但是,只是单纯地决定如何实现某种规格,那肯定不是黑客。黑客的最高境界是创造规格。虽然看起来,做到这一点的最好方แ法就是先做出一个ฐ样品把规格实现了。

也许有一天,“计算机科学”分裂成几个独立的部分。这可能是一件好事,如果我本人的领域——黑客——能够独立出来,那就更好了。

把不同类型的工ื作捆绑在一起,可能是为ฦ了行政管理的方便,但是却容易引起混淆。这是我不喜欢“计算机科学”这个词的又一个ฐ原因。中间部分“计算机科学家”的工作,也许还可以被称为计算机的实验科学。但是,两ä端的数学家和黑客,并不是在做计算机的科学研究。

数学家看来并不在乎自己搞的是计算机还是数学。他们很高兴来到เ这个新地方,然后就开始埋头证明新า的定理,与数学系的数学家干的事情完全一样。不一会儿,他们可能ม就忘了办公楼外的牌子上写的是“计算机科学系”。但是对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工作被称为科学,这会让他们感到自己应该做得像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情设计优美的软件,而是觉得自己应该写一些研究性的论文。

要是黑客写论文,最好的情况下,写出来的也๣只是一些补充性的描述,不会具有太大的实际价值。黑客先开了一个很酷的软件,然后就写一篇论文,介绍这个软件。论文变成了软件成果的展示。这种结合是错误的,常常会产生问题。为ฦ了配合论文研究性的主题,你很容易就把工作重点从开优美的软件转移为开一些丑陋的东西。

优美的软件并不总是论文的合适题材。先,科学研究必须具有原创น性。写过博士论文的人都知道,确保自己正在开垦新领地的方法,就是去找那些没有人要的土地。其次,科学研究必须是能够产生大量成果的,而那些不成熟ງ的、障碍重重的领域最容易写出许多篇论文,因为你可以写那些为了完成工ื作、你不得不克服的障碍。没有什么比一个错误的前提更容易产生大量待解决的问题了。人工智能มai领域的大部ຖ分情况,都符合这条“如何凭空创造出问题”的规律。如果你假定,使用一系列的谓词逻辑predicatelogic表达式,再加上代表抽象概念的参数,就能ม表达人类的知识,那ว么,你就可以写出许许多多的论文,解释如何完成这项工作。这就像电视剧《我爱露西》ilovelucy的男主ว角rickyricນardo的话:“露西,这下够你好好解释的了。”

创造优美事物的方แ式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。

那么เ,为什么เ大学和实验室还把论文数量作为考核黑客工作的指标呢?这种事情其实在日常生活中普遍存在,比如,我们使用简单的标准化测试考核学生的“学术能ม力倾向”scholaທsticaptitude,再比如,我们使用代码的行数考核程序员的工作效率。这样的考核容易实施,而容易实施的考核总是先被采用。

黑客真正想做的是设计优美的软件,考核这种工ื作是非常困难的。你本人需要有良好的设计感,才能ม去考核别人的设计是否良好。但是,你觉得你有“良好的设计感”,与你实际是否具有,不存在相关关系,甚至可能存在负相关。

唯一有效的外部考核就是时间。经过岁月的洗礼,优美的东西生存展的机会更大,丑陋的东西往往会被淘汰。不幸的是,这种考核需要的时间可能比一个ฐ人的生命还要长。塞缪尔·约翰逊

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

。你必须先等他的那些有影响力的朋友都死了,然后再等他的追随者都死了,才能对他有一个公正的评价。

‘塞缪尔·约翰逊samueljohnson,1709-ๅ1784,英国词典学家,编撰了历史上第一本广泛使用、影响巨大的英文字典。——译者注’

‘塞缪尔·约翰逊在他编辑的《莎士比亚戏剧集》的前言中写道:“他莎士比亚的影响远远过他的时代,时间就是对他文学成就的检验。不管他的作品从那时的暗语、风俗、政治局势之中,得到เ过怎样的优势,这些优势都已经消เ逝多年了。他在每一幕戏剧中,通过模拟那时的生活所产生的每一个欢乐的主题或悲伤的动机,都已经趋于平淡,而不再是戏剧的亮点。贵族的宠爱和对手的竞争,都不再产生效果,朋友和敌人都走进了坟墓,他的作品再也不是支持一方、打击另一方的舆论工ื具;它们既ຂ不能产生虚名,也不会带来恶意的攻击。人们阅读这些作品,只有一个理由,那ว就是欣赏作品本身。因此,只有人们真正欣赏它们,才会出赞美……”’

我想,名望有很大的随机性,黑客对此只好听天由命了。在这一点上,他们与其他创น作者并无不同。事实上,相比而言,他们还是幸运的。暂时性的、一窝蜂式的时代风潮对画家的影响要比对黑客的影响大得多。

人们无法考核你的工作,甚至误解你的工作,都不是最糟的事。更大的危险是你自己也会误解自己的工作。因为你总是从相关领ๆ域寻找新思想,如果你现自己读的是计算机科学系,很自然地,你就会以为“计算机科学”与其他“理论科学”并无不同,你的工作属于“理论计算机科学”所涉及的那种理论的应用研究。读研究生期间,我潜意识里一直有一种很不舒服的感觉,觉得自己应该多学一点理论,不应该期末考试结束还不到三个ฐ星期,就把所有东西忘得一干二净,那样真是不可饶恕。现在,我意识到自己错了。黑客搞懂“计算理论”theoryofputation的必要性,与画家搞懂颜料é化学成分的必要性差不多大。一般来说,在理论上,你需要知道如何计算“时间复杂度”和“空间复杂度”timeandspaທceplexity;如果你要写一个解析器,可能还需要知道状态机statema9e的概ฐ念;除此以外,并不需要知道特别ี多的理论。这些可比画家必须记住的颜料成分少很多。

我现,黑客新า想法的最佳来源,并非那些名字里有“计算机”三个字的理论领ๆ域,而是来自于其他创作领ๆ域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。

举ะ例来说,我在大学受到的教育是,在上机编程之前๩,应该先在纸上把程序搞清楚。可我自己一直不是这样编程的,我喜欢直接坐在计算机前编程,而不是在纸上编程。更糟的是,我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑不管对错,先把代码堆上去,再慢慢修改。书上说,调试debugging是最后的步骤,用来纠正打字的错误和疏忽。可是我的工作方แ法看上去却像编程就是在调试。

很长一段时间内我都为此事沮丧ç,就像小学里老师教我怎么拿铅笔,我却总是学不会的那种感觉。如果我那时看到其他创น作领域,比如绘画或者建筑,我就会想到,自己的方แ法其实有一个正式的名称:打草稿。我现在认为,大学里教给我的编程方แ法都是错的。你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之ใ前,这与作家、画家和建筑师的做法完全一样。

明白这一点对软件设计有重大影响。它意味着,编程语言要的特性应该是允许动态扩展malleable。编程语言是用来帮助思考程序的,而不是用来表达你已๐经想好的程序。它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那ว样编程,那ว么静态类型staທti9g

是一个不错的槪念。但是,我认识的黑客,没有一个人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到เ。

‘静态类型是某些计算机语言的一个特性,指编译时对变量类型进行严格检查,典型代表是c、c++和java。在这一类语言中,声明变量的时候,必须指定类型,而且以后不能再改变。这必然意味着,只有在你对整个ฐ程序流程和细节思考成熟以后,才能编写代码。与之对应的则是动态类型dynami9๗g语言,变量包含的数据类型可以随时改变。——译者注’

创作者不同于科学家,明白这一点有很多好处。除了不用为静态类型烦恼以外,还可以免去另一个折磨科学家的难题,那ว就是“对数学家的妒忌”。科学界ศ的每一个人,暗地里都相信数学家比自己聪明。我觉得,数学家自己้也相信这一点。最后的结果就是科学家往往会把自己的工ื作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向展,它就越成为一个ฐ严重的问题。

一页写满了数学公式的纸真是令人印象深刻啊。小窍门:用希腊ຘ字母表示ิ变量名会令人印象更深刻๑。因此,你就受到巨大的诱惑,去解决那ว些能够用数学公式处理的问题,而不是去解决真正重要的问题๤。

如果黑客认识到自己与其他创น作者——比如作家和画家——是一类人,这种诱惑对他就不起作用。作家和画ฑ家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。

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

直到最近我才现这一点。雅虎收购viaທ9eb

的时候,他们问我想做什么。我对商业活动从来都没有太大兴趣,就回答说我想继续做黑客。等我来到雅虎以后,现在他们看来,“黑客”的工作就是用软件实现某个ฐ功能,而不是设计软件。在那里,程序员被当作技工,职责就是将产品经理的“构想”如果这个词是这么用的话翻译成代码。

‘via9eb是一个帮助用户开设网上商店的互联网应用程序,被认为ฦ是第一个互联网应用程序,由á作者和罗伯特·莫里斯在1้995年创น立。1998年,雅虎以4500่万美元购买了via9ebຘ,更名为yahoo!store。——译者注’

这似乎是大公司的普遍情况。大公司这样安排的原因是为了减少结果的标准差。因为实际上只有很少一部分黑客懂得如何正确设计软件,公司的管理层很难正确识别ี到底应该把设计软件的任务交给谁。所以,大部ຖ分公司不把设计软件的职责交给一个优秀的黑客,而是交给一个委员会,黑客的作用仅仅是实现那ว个委员会的设计。

如果某一天你想要去赚大钱,那么记住上面这一点,因为ฦ这是创น业公司能够成功的原因之一。大公司为了避免设计上的灾难,选择了减少设计结果的标准差。但是当你排斥差异的时候,你不仅将失败的可能性排除在外,也将获得高利润的可能ม性排除在外。这对大公司来说不是问题,因为生产特别优秀的产品不是它们的获胜手段。大公司只要做到不太烂,就能ม赢。

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

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个ฐ人或一批人同时负责设计和实现产品,你就能ม在这里战胜大公司。微软公司自己้一开始就是这样走向成功的,苹果公司和惠普公司也是如此。我觉得几乎所有的创业公司都是这样取得成功的。

所以,开优秀软件的方法之一就是自己创业。但是,这样做会遇到两个问题。一个是自己开公司的话,必须处理许许多多与开软件完全无关的事情。我创立via9ebຘ的时候,如果有四分之ใ一时间可以用于开,就感到很幸运了。我在其他四分之三时间所做的事情,从单调乏味到惊悚恐怖,无所不包。我来说一个比较,有一次董事会开到เ一半,我不得不离开去补牙。我记得坐在牙医诊所的椅子上,等着医生开动牙钻๵的那ว段时间,与刚才待在公司的时间相比,简直感觉像是在度假一样。

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

。但是,如今没有人会出钱买຀编程语言。如果你想赚钱,你可能ม不得不去干那ว些很麻烦很讨厌的事情,因为这些事情没人愿意义务来干。

‘197๕5年,mits公司布๧了altaທir8800型计算机,比尔·盖茨意识到为它开软件是有利ำ可图的,他写了一个basic语言解释器,卖给了mits。这就是微软公司的第一个产品,当时比尔·盖茨还是哈佛大学二年级在校生。——译者注’

所有创作者都面临这个ฐ问题。价格是由供给和需求共同决定的。好玩的软件的需求量,比不上解决客户麻烦问题的软件的需求量。在小剧场里演出的酬劳,比不上穿着卡通大猩猩服装ณ、在展览会上为厂商站台的酬劳。写的回报比不上写广告文案的回报。开编程语言的收入,比不上把某些公司老掉牙的数据库连上服务器的收入。

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

几乎所有的创น作者在职业生涯的早ຉ期都有一份“白天工作”。画家和作家尤其显着。如果幸运的话,你能找到一份与你的“真正工ื作”非常相关的“白天工ื作”。音乐家似乎常常是在唱片行工ื作。同样地,钻研某种编程语言或操作系统的黑客,很可能ม会得到一份使用这些工ื具的“白天工ื作”。

‘摄影技术对绘画ฑ造成的最大伤害,也๣许就是消灭了画家最好的“白天工作”。历史上,大多数伟大画家都靠画肖像谋生。摄影术明不久,画肖像的工作机会就大大减少,从事摄影的黑客抢走了这些机会。对于被画的人来说,坐在镜头前也更轻松一些。肖像画家一这种要求高度技巧的工作——就这样或多或少地消失了。画ฑ家为了得到收入,就将肖像技巧用在为ฦ商业公司画品牌商品的广告图片。可是,这样的工作也是极大地依赖于摄影术,或者更准确地说,极大地依赖于复制在书๰籍和杂志上的照片。’

当我说,黑客解决生计问题的方法是找一份“白天工ื作”,然后在其余时间开优美的软件,我并没有说这是一个新方法。开源软件界ศ的黑客早就这样做了。我想说的其实是,幵源软件的这种工作模式可能就是正确的模式,因为它已经被其他领域的创作者都验证过了。

令我惊讶的是,雇主都很犹豫,不愿意手下的黑客为开源软件项目工作。但是,在viaທ9๗eb,要是你不愿意这样干,我们会很犹豫要不要雇用你。我们面试程序员的时候,主要关注的事情就是业余时间他们写了什么软件。因为如果你不爱一件事,你不可能把它做得真正优秀,要是你很热爱编程,你就不可避免地会开你自己้的项目。

‘微软不鼓励雇员为开源项目做贡献,甚至业余时间也๣不行。但是,如此之多的一流黑客都在从事开源项目,所以这个政策主要的效果,可能就是使得微软公司很难雇到一流的程序员。’

因为ฦ黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示ิ,而是应该观察其他类型的创作者。那么,从画家身上,我们还能借鉴到什么เ对黑客的启示ิ呢?

有一件事情是可以借鉴的至少可以确认,那就是应该如何学习编程。画家学习绘画ฑ的方法主要是动手去画ฑ,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,他们从实践中学习,1้3岁时就自己动手写程序了。即使上了大学,黑客学习๤编程依然主要通过自己写程序。

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

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

我想大多数创作者都是这样学习和工作的,作家和建筑师似乎都是如此。也许对于黑客来说,采取像画ฑ家这样的做法很有好处:应该定期地从头开始,而不要长年累月地在一个项目上不断ษ工作,并且试图把所有的最新想法都以修订版的形式包括进去。

黑客通过实践学习๤编程,这又是一个ฐ标志,说明黑客与科学家的区别有多大。科学家就不会通过干活来学习科学,而是通过做实验和解题来学习๤。科学家研究的基础都是现有的很完美的成果,在这个意义上,他们的第一步只是在复制ๆ别人已经做过的工作。最后,他们才会从某一个ฐ点开始,进行自己的原创性工作。但是,黑客就不一样,从一幵始做的就是原创性工作,根本没有他人完美的成果可以依靠。所以,黑客的出点是原创,最终得到一个ฐ优美的结果;而科学家的出点是别人优美的结果,最终得到เ原创性。

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

作家也是这样学习写作的。富兰克林benjaminfranklin通过总结和模仿艾迪生和斯梯尔的文章

,学会了写作。雷蒙·钱๥德勒ray摸nd9๗dler

也是如此学会了写作侦探。

‘此处的艾迪生指jo色phaddison1672๐—17๕19,斯ั梯尔指richardsteele1้672๐—1729,两人都是18世纪初的英国作家,于1711年共同创办了政论讽刺๐杂志《旁观者》》thespecນtator,产生了巨大的影响。——译者注’

‘雷蒙·钱德勒1888๖—19๗59,美国推理作家,他的私人侦探菲力普·马罗philipmarlo9e系列有很大的读者群。——译者注’

同样地,黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。开源运动最鲜ຒ为人知的优点之一,就是使得学习๤编程变得更容易了。我学编程的时候,不得不主要依靠教材上的范例。那时可以搞到的源码,主要来自于unix,但是就连unix也๣不是开源的。大部分阅读unix源码的人都是通过约翰·莱昂斯

那本书的非法影印本。该书虽然是1977๕年写的,但是在1996๔年之前都不被允许公开出版。

‘johnlions1937๕—19๗98,澳大利ำ亚计算机科学家。19๗76๔~197๕7年为了授课需要,他写了《unix第6版源码注释》lions'mentaryonunix6thedition,9ithsourcecode一书。很长一段时间中,该书๰是贝尔实验室之外唯一的unix内核源码文档。由于unix第6版源码只允许用于教学,所以该书直到1้996年才公开出版,此前一直都是私下传播。人们普遍相信它是计算机科学领ๆ域被复印次数最多的书。——译者注’

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

绘画的这个创作过程就值得学习。我认为黑客也๣应该这样工ื作。你不能ม盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。

大公司的内部结构,使得它们很难这样做。这是又一个创业公司占优之处。

眼下想必每个人都知道,过早优化prematureoptimizaທtion是一件危险的事情。我认为,我们应该对“过早ຉ设计”prematuredesign也抱有同样的担忧,不要太早决定一个ฐ程序应该怎么做。

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

我接下来要说的是,一幅优秀的绘画作品必须比它应该有的样子更好,这可能听起来有点矛盾。举例来说,图2๐-1所示达·芬奇的作品《女性肖像》ginevrade'benci现在保存在美国国家美术馆。你可以看到,达·芬奇在少女的头后面摆了一片树枝。他很仔细地画出了树枝上的每一片叶子。许多画家也许会觉得,那ว不过是放在背景里的衬托物,没有人会仔细看的,不妨简单处理一下就可以了。

图2๐-ๅ1达·芬奇的《女性肖像》ginevrade'ูbenci,14๒74๒年

但是达·芬奇不这样想。他对作品每一部分的认真程度完全不取决于预料中会不会有人仔细看这个部分。他就像篮球巨星迈克尔·乔丹mi9,每一球都一丝不苟,绝不降低对自己้的要求。

坚持一丝不苟,就能取得优秀的成果。因为那ว些看不见的细节累加起来,就变得可见了。当人们从达·芬奇的《女性肖像》前๩面走过的时候,他们的注意力往往立刻就被它吸引住了,那时他们甚至还没有看到说明的标签牌,没有意识到这是达·芬奇的作品。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个ฐ细微的声音都以同一个音调在歌唱。

同样地,优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部ຖ,就会现那些预料中没有人会看见的部分也是优美的。我对待代码的认真程度远远过我对待其他事情,如果我以这种态度对待日常生活的每件事,那么我就够资格找心理医生开处方药了。看到代码前面的缩进乱七八糟,或者看到丑陋的变量名,都会把我逼疯的。

如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书๰写出代码,那么他其实与一个挖水沟的工ื人是一样的,从这头挖到那ว头,仅此而已。但是,如果黑客是一个创น作者,他从事的就不是机械性的工作,他必须具备灵感。

黑客就像画ฑ家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作1้6个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。

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

对于编程,这实际上意味着你可以把bug留到以后解决。消เ灭bug对我来说属于轻松的工作,只有在这个时候,编程才变得直接和机械,接近社会大众想象中的编程的样子。消เ灭bug的过程就像解一道数学题,已知许许多多的约束条件,你只要根据条件对方程求解就可以了。你的程序应该能ม产生x结果,但是却产生了y结果。哪里出错了?你知道自己最后肯定能ม解决这个ฐ问题,所以做起来就很轻松,就好像刷็墙一样,接近于休闲了。

用绘画的例子作为参考,不仅能ม教会我们如何管理自己的工作,还能教会我们如何与他人一起工ื作。历史上许多伟大的艺术品都是多人一起合作的结果,尽管最后在博物馆展出的时候,墙上可能只会写出一个人的名字。达·芬奇曾经在韦罗基奥verrohio的画ฑ室当学徒,后者当时正在画《基督的洗礼》bຘaptismofchrist,达·芬奇的工ื作是完成整幅画之中ณ的一个天使。多人一起完成一幅作品是当时的普遍做法,并不罕见。后来,米开朗基罗坚持要一个ฐ人画完罗马的西斯廷大教堂sistinecນhapel天顶壁画中的所有人物,他还因此被认为特别死心眼。

就我所知,当多个画家共同创น作一幅作品时,每个人画的部ຖ分都是不一样的。通常来说,大师๲负责画ฑ主要人物,助手们负责画次要人物和背景。但是,你肯定找不到某个ฐ部分是两个人一起画的。

我认为,这也是多人共同开一个ฐ软件的正确模式。需要合作,但是不要“合”得过头。如果一个代码块由三四个人共同开,就没有人真正“拥有”这块代码。最终,它就会变得像一个公用杂物间,没人管理,又脏又乱,到处堆满了冗余代码。正确的合作方法是将项ำ目分割成严格定义แ的模块,每一个模块由á一个人明确负责。模块与模块之间的接口经过精心设计,如果可能的话,最好把文档说明写得像编程语言规范那样清晰。

书签 上一章 目录 下一章 书架s
推荐阅读: 刹那的永恒 校长权力有多大 热血传奇生涯免费阅读 力争上游的近义词 4s店销售员真实经历 重生三国当二爷笔趣阁 陈郡谢氏族谱 破灭天道校对txt下载 末世兽医 黑瞳王 完全摧花手册之地狱天使