【程序员·随身听】《黑客与画家》内容2

大家好,感谢收听【程序员·随身听】。

这一期我们继续说《黑客与画家》。

第二章 黑客与画家

作者试图通过这个话题,来解释黑客更像画家,而不是所谓的计算机科学的工作者。作者首先解释他这么说的原因,然后讲如果黑客把自己当做计算机科学家,会引起什么误会,走什么样的弯路,接着讲了,如果向画家这一职业类比,会得到什么灵感,最后讲了自己的一些感想。

下面我就讲讲作者在这篇文章中的主要内容。

读完计算机系的研究生,作者去了艺术学校,学习绘画。许多人很吃惊,一个喜欢计算机的人,居然还喜欢画画!他们似乎觉得,摆弄计算机和画画是两件截然不同的事情--计算机是冰冷的、精确的、井然有序的,而画画是某种原始欲望热烈狂放的表达方式。

这种看法是错的。计算机和画画有许多共同之处。事实上,在我知道的所有行业中,黑客与画家最像。

黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客与画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术。

我一直不喜欢“计算机科学”(computer science)这个词。主要原因是根本不存在这种东西。计算机科学就像一个大杂烩,由于某些历史意外,很多不相干的领域被强行拼装在一起。这个学科的一端是纯粹的数学家,他们自称是“计算机科学家”,只是为了得到国防部研究局(DARPA)的项目资助。中间是计算机博物学家,研究各种专门性的题目,比如网络数据的路由算法。另一端则是黑客,只想写出有趣的软件,对于他们来说,计算机只是一种表达的媒介,就像建筑师手里的混凝土,或者画家手里的颜料。所以,在“计算机科学”的名下,数学家,物理学家和建筑师不得不待在同一个系里。

(有时,黑客做的事情被称为“软件工程”(software engineering,但是这个词也是误导的。与其说优秀的软件设计师是工程师,还不如说是建筑师(建筑师和架构师是同一个词,architect,建筑学和架构学也是,architecture)。建筑学和工程学之间的区别并不是很严格,但就是存在区别,建筑师决定做什么,工程师想出怎么做。

当然,做什么和怎么做不应该分得太开。如果你决定做一件事,却不知道怎么做,你就是在自找麻烦。但是,只是单纯地决定如何实现某种规格,那肯定不是黑客。黑客的最高境界是创造规格。虽然看起来,做到这一点的最好方法就是先做出一个样品把规格实现了。)

把不同类型的工作捆绑在一起,可能是为了行政管理的方便,但是却容易引起混淆。数学家看来并不在乎自己搞的是计算机还是数学,他们很高兴来到这个新地方,然后就开始埋头证明新的定理,与数学系的数学家干的事情完全一样。但对于黑客,“计算机科学”这个标签是一个麻烦。如果黑客的工作被称为科学,这会让他们感到自己应该做的像搞科学一样。所以,大学和实验室里的黑客,就不去做那些真正想做的事情(设计优美的软件),而是觉得自己应该写一些研究性的论文。

要是黑客写论文,最好的情况下,写出来的也只是一些补充性的描述,不会具有太大的实际价值。黑客先开发了一个很酷的软件,然后就写一篇论文,介绍这个软件,论文变成了软件成果的展示。优美的软件并不总是论文的合适题材。首先,科学研究必须具有原创性。其次,科学研究必须是能够产生大量成果的,而那些不成熟的、障碍重重的领域最容易写出许多篇论文。

但是,创造优美事物的方式往往不是从头做起,而是在现有成果的基础上做一些小小的调整,或者将已有的观点用比较新的方式组合起来。这种类型的工作很难用研究性的论文表达。

那么,为什么大学和实验室还把论文数量作为考核黑客工作的指标呢?这种事情其实在日常生活中普遍存在,比如,我们使用简单的标准化测试考核学生的学术能力倾向,再比如,我们使用代码行数考核程序员的工作效率。这样的考核容易实施,而容易实施的考核总是首先被采用。

唯一有效的外部考核是时间。经过岁月的洗礼,优美的东西生存发展的机会更大。不幸的是,这种考核需要的时间可能比一个人的生命还要长。

人们无法考核你的工作,甚至误解你的工作,都不是最糟的事。更大的危险是你自己也会误解自己的工作。如果你发现自己读的是计算机科学,你就会以为计算机科学和其他理论科学并无不同,你的工作属于理论计算机科学所涉及的那种理论的应用研究。读研究生期间,我潜意识里一直有一种很不舒服的感觉,觉得自己应该多学一点理论,不应该期末考试结束还不到三个星期,就把所有东西忘得一干二净。现在,我意识到自己错了。黑客搞懂计算理论的必要性,与画家搞懂颜料化学成分的必要性差不多大。一般来说,理论上,你需要知道如何计算“时间复杂度”和“空间复杂度”;如果你写一个解析器,可能还需要知道状态机的概念;除此以外,并不需要知道特别多的理论。

我发现,黑客新想法的最佳来源,并非那些名字里有计算机三个字的领域,而是来自于其他创作领域。与其到计算理论领域寻找创意,还不如在绘画中寻找创意。

举例来说,我在大学受到的教育是,在上机编程之前,应该先在纸上把程序搞清楚。可我一直不是这样编程,我喜欢直接坐在计算机前编程,而不是在纸上编程。更糟的是,我不是耐心地一步步写成整个程序,而是一股脑不管对错,先把代码堆上去,再慢慢修改。书上说,debugging是最后的步骤,可我的工作方法却像编程就是在调试。

很长一段时间,我都为此沮丧。就像小学老师教我怎么拿铅笔,我却总是学不会那种感觉。如果我那时看到其他创作领域,如绘画和建筑,我会想到自己的学习方法有一个正式名称:打草稿。

明白这一点对软件设计有重大影响。它意味着,编程语言首要的特性应该是允许动态扩展。编程语言是用来帮助你思考程序的,而不是用来表达你已经想好的程序。这也是我认识的黑客,没有一个喜欢用静态类型语言编程的原因。

创作者不同于科学家,明白这一点有很多好处。除了不用为静态类型烦恼外,还可以免去另一个折磨科学家的难题--对数学家的妒忌。科学界的每一个人,暗地里都相信数学家比自己聪明,我觉得,数学家也相信这一点。这会引诱你用数学的方式解决问题。如果黑客认识到自己与其他创作者是一类人,这种诱惑就不起作用。

如果大学和实验室不允许黑客做他们想做的事情,那么适合黑客的地方可能就是企业。不幸的是,大多数企业也不允许黑客做他们想做的事情。大学和实验室强迫黑客成为科学家,企业强迫黑客成为工程师。在企业,“黑客”的工作就是用软件实现某个功能,而不是设计软件。在那里,程序员被当做技工,职责就是将产品经理的构想翻译成代码。

这似乎是普遍情况。大公司这样安排的原因是减少标准差。因为实际上只有很少一部分黑客懂得如何正确设计软件,管理层很难识别应该把设计软件的任务交给谁,因此,只能交给一个负责产品的委员会。不过,这是创业公司的优势所在。如果你的竞争优势在软件设计方面,并且你的对手是一家大公司,它大到由一群产品经理来设计软件,那么你的对手将无法赶上你。不过,说实话,这样的机会不容易找到,你很难单单依靠软件设计就与大公司展开竞争。真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。

所以,开发优秀软件的方法之一就是自己创业,但是,这样做会遇到两个问题。一个是自己开公司的话,必须处理许许多多与开发软件完全无关的事情。作者创业的时候,如果能有四分之一的时间做开发就感到幸运。另一个问题是,赚钱的软件往往不是好玩的软件,两者的重叠度不高。好比写小说的回报比不上写广告文案的回报。

那黑客如何才能做自己喜欢的事情?那就是找一份儿白天工作,一份为了赚钱的工作,然后还有一份儿爱好的工作。几乎所有创作者在职业生涯早期都有一份儿白天工作。

因为黑客更像创作者,而不是科学家,所以要了解黑客,不应该在科学家身上寻找启示,而是应该观察其他类型的创作者。那么,从画家身上,我们还能借鉴到什么对黑客的启示呢?

有一件事情是可以借鉴的,那就是应该如何学习编程。画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,他们从实践中学习,13岁时就自己动手写程序了。即使上了大学,黑客学习编程依然主要通过自己写程序。还有一个可以借鉴绘画的地方:一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。无数古代油画放在X光下检视,就能看出修改的痕迹。黑客也应该这样工作。你不能期盼先有一个完美的规格设计,然后再动手编程。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当场修改规格,最终会有一个更好的结果。因而,过早优化和过早设计都是件危险的事情。

接下来作者说,

1、优秀的软件应该对美有狂热的追求。如果你查看优秀软件的内部,你会发现那些预料中没有人会看见的部分也是优美的。

2、普通黑客与优秀黑客一个重要区别是,会不会换位思考。不会换位思考,很难设计出优秀的软件。判断一个人是否具备换位思考的能力有一个好方法,就是看他怎样向没有技术背景的人解释技术问题。

3、眼下看来艺术家比黑客更酷,但是我们不应该忘记,古时候绘画蓬勃发展的黄金年代,画家也不是像今天这样酷的。现在正是编程的黄金年代,编程能有多酷,要看我们能够用编程做出怎样的工作,就像达·芬奇推动绘画成为一种伟大的表达方式。

这一期就讲到这里,感谢您的收听。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,088评论 6 244
  • 黑客与画家 0. 译者序 《黑客:计算机革命的英雄》中提出的6条黑客价值观 使用计算机以及所有有助于了解这个世界本...
    雁宇阅读 505评论 0 2
  • 《黑客与画家》读书笔记作者:【美】格雷厄姆 保罗·格雷厄姆其人其事 Y Combinator (Y运算子,简称YC...
    Cytosine阅读 1,113评论 0 3
  • 推荐理由 本书是硅谷创业之父Paul Graham 的文集,主要介绍黑客即优秀程序员的爱好和动机,讨论黑客成长、黑...
    lsfire阅读 437评论 0 1
  • 3 没有记忆的人生证明你只是在虚度 忽然发现发现我人生前十几年的人生几乎没有什么记忆,就算有也只是偶然之间弹出...
    Deer麓阅读 242评论 0 0