《码农:世界上现存最大的手工艺人群体?.docx》由会员分享,可在线阅读,更多相关《码农:世界上现存最大的手工艺人群体?.docx(12页珍藏版)》请在第一文库网上搜索。
1、读完计算机系的研究生课程,我就去了艺术学校,学习绘画。许多人很吃惊:一个喜欢计算机的人,居然还喜欢画画!他们似乎觉得,摆弄计算机和画画是两件截然不同的事情一一计算机是冰冷的、精确的、井然有序的,而画画是某种原始欲望热烈狂放的表达方式。这种看法是错的。计算机和画画有许多共同之处。事实上,在我知道的所有行业中,黑客与画家最相像。黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师和作家一样,黑客和画家都试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。我发现,黑客新想法的最佳来源,并非那些名字里有“计算机”三个字的理论领域,而是其他创
2、作领域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。举例来说,我在大学受到的教育是,在上机编程之前,应该先在纸上把程序搞清楚。可我自己一直不是这样编程的,我喜欢直接坐在计算机前编程,而不是在纸上编程。更糟的是,我不是耐心地一步步写出整个程序,确保大体上是正确的,而是一股脑地不管对错,先把代码堆上去,再慢慢修改。书上说,调试是最后的步骤,用来纠正打字错误和疏忽。可是我的工作方法看上去却像编程就是在调试。很长一段时间内我都为此事沮丧,就像小学里老师教我怎么拿铅笔,我却总是学不会的那种感觉。如果我那时看到其他创作领域,比如绘画或者建筑,我就会想到,自己的方法其实有一个正式的名称:打草稿
3、。我现在认为,大学里教给我的编程方法都是错的。你把整个程序想清楚的时间点,应该是在编写代码时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。明白这一点对软件设计有重大影响。它意味着,编程语言首要的特性应该是允许动态扩展。编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。它应该是一支铅笔,而不是一支钢笔。如果大家都像学校教的那样编程,那么静态类型是一个不错的概念。但是,我认识的黑客,没有一个人喜欢用静态类型语言编程。我们需要的是一种可以随意涂抹、擦擦改改的语言,我们不想正襟危坐,把一个盛满各种变量类型的茶杯,小心翼翼放在自己的膝盖上,为了与一丝不苟的编译器大婶交谈,努力
4、地挑选词语,确保变量类型匹配,好让自己显得礼貌又周到。创作者不同于科学家,明白这一点有很多好处。除了不用为静态类型烦恼以外,还可以免去另一个折磨科学家的难题,那就是“对数学家的妒忌”。科学界的每一个人,暗地里都相信数学家比自己聪明。我觉得,数学家自己也相信这一点。最后的结果就是科学家往往会把自己的工作尽可能弄得看上去像数学。对于物理学这样的领域,这可能不会有太大不良影响。但是,你越往自然科学的方向发展,它就越成为一个严重的问题。一页写满了数学公式的纸真是令人印象深刻啊。(小窍门:用希腊字母表示变量名会令人印象更深刻。)因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真
5、正重要的问题。如果黑客认识到自己与其他创作者一一比如作家和画家一一是类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的妒忌”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。保罗格雷厄姆(PaUIGraham),美国知名程序员、1iSP专家,风险投资家、作家。首个互联网应用程序Viaweb的发明人之一,该程序后被雅虎以5000万美元收购,成了大名鼎鼎的YahOO!Store。2005年创办了YCombinator,成功孵化数千个初创项目和近万名创始人,总估值近万亿美元。著有黑客与画家。黑客如何才能做自己喜欢的事情?我认为这个问题的解决方法是一个几乎所有创作者都知道的方法:
6、找一份养家糊口的“白天工作”(dayjob)o这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你有一份为了赚钱的工作,还有一份为了爱好的工作。几乎所有的创作者在职业生涯的早期都有一份“白天工作”。画家和作家尤其显著。如果幸运的话,你能找到一份与你的“真正工作”非常相关的“白天工作”。音乐家似乎常常是在唱片行工作。同样,钻研某种编程语言或操作系统的黑客,很可能会得到一份使用这些工具的“白天工作”。我说黑客解决生计问题的方法是找一份“白天工作”,然后在其余时间开发优美的软件,不过我并没有说这是一个新方法。开源软件界的黑客早就这样做了。我想说
7、的其实是,开源软件的这种工作模式可能就是正确的模式,因为它已经被其他领域的创作者验证过了。令我惊讶的是,雇主都很犹豫,不愿意手下的黑客为开源软件项目工作。但是,在ViaWeb,要是你不愿意这样干,我们会很犹豫要不要雇用你。我们在面试程序员时,主要关注的事情就是业余时间他们写了什么软件,因为如果你不爱一件事,你不可能把它做得真正优秀,耍是你很热爱编程,你就不可避免地会开发你自己的项目。因为黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示,而是应该观察其他类型的创作者。那么,从画家身上,我们还能借鉴到什么对黑客的启示呢?有一件事情是可以借鉴的(至少可以确认),那就是应该如何
8、学习编程。画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,而是从实践中学习,有的13岁时就自己动手写程序了。即使上了大学,黑客学习编程依然主要通过自己写程序。画家的作品都会保留下来,你观察这些作品,就能看出他们是怎么一步步通过实践学习绘画的。如果你把一个画家的作品按照时间顺序排列,就会发现每幅画所用的技巧,都是建立在上一幅作品学到的东西之上。某幅作品如果有特别出色之处,你往往能够在更早的作品中发现一个小规模的初期版本。我想大多数创作者是这样学习和工作的,作家和建筑师似乎都是如此。也许对于黑客来说,采取像画家这样的做法很有好处:应该定期地从头
9、开始,而不要长年累月地在一个项目上不断工作,并且试图把所有的最新想法都以修订版的形式包括进去。黑客通过实践学习编程,这又是一个标志,说明黑客与科学家的区别有多大。科学家就不会通过干活来学习科学,而是通过做实验和解题来学习。科学家研究的基础都是现有的很完美的成果,在这个意义上,他们的第一步只是在复制别人已经做过的工作。最后,他们才会从某一个点开始,进行自己的原创性工作。但是,黑客就不一样,从一开始做的就是原创性工作,根本没有他人完美的成果可以依靠。所以,黑客的出发点是原创,最终得到一个优美的结果;而科学家的出发点是别人优美的结果,最终得到原创性。社交网络剧照。创作者如何模仿杰作创作者的另一个学习
10、途径是通过范例。对画家来说,博物馆就是美术技巧的图书馆。几百年来,临摹大师的作品一直是传统美术教育的一部分,因为临摹迫使你仔细观察一幅画是如何完成的。作家也是这样学习写作的。本杰明富兰克林(BenjaminFrank1in)通过总结和模仿艾迪生和斯梯尔的文章,学会了写作。雷蒙德钱德勒(RaymondChand1er)也是如此学会了写作侦探小说。同样,黑客可以通过观看优秀的程序学会编程,不是看它们的执行结果,而是看它们的源代码。开源运动最鲜为人知的优点之一,就是使得学习编程变得更容易了。我学编程的时候,不得不主要依靠教材上的范例。那时可以搞到的源码,主要来自UniX,但是就连UniX也不是开源的
11、。大部分阅读UniX源码的人是通过约翰莱昂氏那本书的非法影印本。该书虽然是1977年写的,但是在1996年之前都不被允许公开出版。绘画还有一个值得借鉴的地方:一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在X光下检视,就能看出修改痕迹,四肢的位置被移动过,或者脸部的表情经过了调整。绘画的这个创作过程就值得学习。我认为黑客也应该这样工作。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终
12、会有一个更好的结果。(大公司的内部结构,使得它们很难这样做。这是创业公司的又一个优势。)眼下想必每个人都知道,过早优化是一件危险的事情。我认为,我们应该对“过早设计”也抱有同样的担忧,不要太早决定一个程序应该怎么做。合适的工具能够帮助我们避免这种危险。一种好的编程语言,应该像油画颜料一样,能够使得我们很从容地改变想法。动态类型语言在这一点上就是赢家,因为你不必提前就设置好各种变量的数据类型。不过我认为,编程语言灵活性的关键还不在这里,而在于这种语言应该非常抽象。最容易修改的语言就是简短的语言。我接下来要说的是,一幅优秀的绘画作品必须比它应该有的样子更好,这可能听起来有点矛盾。举例来说,达芬奇的
13、作品吉内薇拉班琪(Ginevrade,Benci)现在保存在美国国家美术馆。你可以看到,达芬奇在少女的头后面摆了一片树枝。他很仔细地画出了树枝上的每一片叶子。许多画家也许会觉得,那不过是放在背景里的衬托物,没有人会仔细看,不妨简单处理一下就可以了。达芬奇的吉内薇拉班琪(Ginevrade,Benci),1474年,图片来自于黑客与画家但是达芬奇不这样想。他对作品每一部分的认真程度完全不取决于预料中会不会有人仔细看这个部分。他就像篮球巨星迈克尔乔丹,每一球都一丝不苟,绝不降低对自己的要求。坚持一丝不苟,就能取得优秀的成果,因为那些看不见的细节累加起来,就变得可见了。当人们从达芬奇的女性肖像画吉内
14、薇拉班琪前面走过的时候,他们的注意力往往立刻就被它吸引住了,那时他们甚至还没有看到说明的标签牌,没有意识到这是达芬奇的作品。所有那些看不见的细节合并在一起,就使得这样东西产生了惊人的效果,仿佛上千个细微的声音都以同一个音调在歌唱。同样,优秀的软件也要求对美的狂热追求。如果你查看优秀软件的内部,就会发现那些预料中没有人会看见的部分也是优美的。我对待代码的认真程度远远超过我对待其他事情,如果我以这种态度对待日常生活的每件事,那么我就够资格找心理医生开处方药了。看到代码前面的缩进乱七八糟,或者看到丑陋的变量名,都会把我逼疯的。如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写出代码
15、,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。黑客就像画家,工作起来是有心理周期的。有时候,你有了一个令人兴奋的新项目,你会愿意为它一天工作16个小时。等过了这一阵,你又会觉得百无聊赖,对所有事情都提不起兴趣。为了做出优秀的工作,你必须把这种心理周期考虑在内。只有这样,你才能根据不同的事情找出不同的应对方法。你有一辆手动变速的汽车,你把它开上山,有时不得不松开离合器,防止汽车熄火。同样,暂时放手有时也能防止热情熄火。对于画家和黑客这样的创作者,有些工作需要投入巨大的热情,另一些工作则是不需要很操心的日常
16、琐事。在你厌倦的时候再去做那些比较容易的工作,这是一个不错的主意。模仿游戏剧照。通过“换位思考”获得灵感就像绘画作品一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需要,这样才能做出伟大的产品。你必须能够站在用户的角度思考问题,也就是说,你必须学会“换位思考”。很小的时候,我就被不断告知,要设身处地为他人着想。现实中,这必然意味着你要做其他人需要的事情,而不是你自己想做的事情。这样看上去好像对我很不利,所以我暗下决心不让自己变成这样的人。但是,我完全错了。事实表明,从他人的角度思考问题正是成功的奥秘所在。“换位思考”并不就意味着你要做自我牺牲。实际上,这是完全不同的两回事。了解别人对于事情的看法,并不代表你为他的利益服务。在某些情况下,比如在打仗的时候,了解对手正是为了打击对手。大