分享一篇深度好文(转载):《黑客与画家》
作者与文章介绍
本文《黑客与画家(Hackers and Painters)》的作者是 Paul Graham,美国程序员、创业者和思想者,也是知名创业加速器 Y Combinator 的联合Y Combinator创始人之一。
在创办 Y Combinator 之前,Paul Graham 曾从事软件开发并参与创业实践,其创办的 Viaweb 于 1998 年被 Yahoo 收购。此后,他以随笔写作的方式,持续探讨编程、设计、创业、教育以及“创造者如何工作”等主题,对一代硅谷工程师和创业者产生了深远影响。
在 Paul Graham 之后,Y Combinator 的主要负责人是 Sam Altman。Sam Altman 在更大规模和更现实的商业环境中,延续并实践了 Paul Graham 所强调的核心理念:尊重创造者、小团队优先、长期主义以及对技术本质的关注。这些理念逐渐演变为 Y Combinator 乃至整个硅谷创业文化的重要组成部分。
《黑客与画家》发表于 2003 年,是 Paul Graham 最具代表性的文章之一。文章通过将“黑客”与“画家”进行类比,讨论了编程作为一种创造性活动的本质,以及软件设计、工作方式、组织结构与创造力之间的关系。尽管写作背景距今已久,但其中关于创造、设计和程序员角色定位的思考,至今仍具有现实意义。
原文链接
英文原文(作者官网): https://www.paulgraham.com/hp.html
本文中文内容由 AI 辅助翻译,在翻译过程中尽量保持原文语义和结构,不做观点增删,仅供学习与交流之用。
黑客与画家
Paul Graham,2003 年 5 月
(本文源自作者在哈佛的一次客座演讲,其中融合了他此前在东北大学的一次演讲。)
当我完成计算机科学的研究生学习后,我去艺术学院学了绘画。很多人对此感到惊讶:一个对计算机感兴趣的人,怎么会同时对绘画感兴趣?在他们看来,黑客和画家是两种完全不同的工作:黑客是冷静、精确、循规蹈矩的;而画家则是在释放某种原始冲动的狂热表达。
这两种看法都是错的。黑客和画家其实有很多相似之处。事实上,在我认识的各种人中,黑客和画家是最相像的一类。
黑客和画家的共同点在于:他们都是 创造者(makers)。和作曲家、建筑师、作家一样,黑客和画家努力的目标是 做出好东西。他们并不是在做“研究”,虽然在创造好东西的过程中,偶尔发现新的技术,那当然更好。
“计算机科学”这个名字的问题
我一直不喜欢“计算机科学(computer science)”这个词,原因很简单:根本不存在这样一门统一的学科。计算机科学更像是历史偶然拼凑出来的一堆关联松散的领域,就像南斯拉夫。
在一端,是本质上做数学的人,只是为了拿 DARPA 经费而把自己称为计算机科学家;中间,是研究算法行为的人,比如研究网络路由算法;而在另一端,是黑客——他们想写出有趣的软件,对他们来说,计算机只是表达媒介,就像混凝土之于建筑师、颜料之于画家。
这就好像把数学家、物理学家和建筑师强行塞进同一个系。
有时,人们把黑客做的事叫作“软件工程”,但这个词同样具有误导性。优秀的软件设计师并不比建筑师更像工程师。建筑与工程的分界并不模糊:建筑师决定做什么,工程师决定怎么做。
当然,“做什么”和“怎么做”不能完全割裂。如果你不了解如何实现,就去决定做什么,肯定会出问题。但黑客的工作绝不仅仅是“实现规格说明”。在最好的情况下,黑客是在创造规格本身——而创造规格的最好方式,往往就是直接去实现它。
也许有一天,“计算机科学”会像南斯拉夫一样解体成若干独立部分。这未必是坏事,尤其如果这意味着我的“祖国”——黑客文化——能够独立出来。
把这些完全不同的工作塞进一个系,在行政上也许方便,但在思想上却非常混乱。这也是我不喜欢“计算机科学”这个名字的另一个原因。或许中间那一部分确实在做类似实验科学的事情,但两端的人——数学家和黑客——并不是在做科学。
数学家对此并不介意。他们照样证明定理,和数学系的同行没什么不同,可能很快就忘了大楼外面写着“计算机科学”。但对黑客来说,这个标签是个问题。如果他们的工作被称为“科学”,就会觉得自己应该表现得“科学化”。于是,大学和研究机构里的黑客,会觉得自己应该写论文,而不是做真正想做的事:设计漂亮的软件。
最好的情况下,论文只是形式:黑客先写出很酷的软件,再写一篇论文作为成果的代理。但很多时候,这种错配会导致问题。人们会逐渐偏离“创造美好事物”,转而去做那些更适合写论文、但本身很丑的东西。
为什么漂亮的东西不适合写论文
漂亮的东西往往不是好论文的题材。
第一,研究必须是原创的。任何写过博士论文的人都知道,最安全的原创方式,就是选择一块没人想要的荒地。
第二,研究必须“足够复杂”。而笨拙的系统更容易产出“厚实”的论文,因为你可以写很多关于“克服困难”的内容。没有什么比从错误假设出发更容易制造问题了。人工智能领域的大部分研究就是如此:如果你假设知识可以表示为谓词逻辑列表,那你就有写不完的论文,去解释为什么这事这么难。就像 Ricky Ricardo 说的:“Lucy,你有很多需要解释的地方。”
但创造美的东西,往往只是对已有事物进行细微调整,或用一种新方式组合已有思想。这种工作很难用论文表达。
评价体系的问题
那为什么大学和研究机构仍然用论文来评价黑客?原因和用标准化考试衡量“学习能力”、用代码行数衡量程序员生产力一样:这些指标容易操作,而且看起来还挺管用。
真正衡量黑客想做的事——设计漂亮的软件——要困难得多。你必须具备设计感,才能判断设计好坏。而在“识别好设计的能力”和“自信自己能识别”之间,几乎没有正相关,甚至可能是负相关。
唯一真正可靠的外部评判标准是 时间。随着时间推移,漂亮的东西会存活下来,丑陋的东西会被淘汰。但这个时间尺度往往超过人的一生。塞缪尔·约翰逊说,作家的声誉需要一百年才能稳定下来——要等他的朋友死去,再等朋友的追随者死去。
因此,黑客只能接受:自己的声誉中必然包含很大的随机性。这一点和其他创造者没什么不同。相比之下,黑客甚至算幸运的,因为时尚对黑客的影响,远小于对绘画的影响。
黑客不是“应用版的理论家”
比被误解更糟糕的,是你自己误解了自己的工作。相关领域往往是灵感的来源,但如果你身处计算机科学系,就很容易误以为:黑客是理论计算机科学的“应用版本”。
我读研时,总有一种不安的感觉:觉得自己应该懂更多理论,而在期末考试后三周就把这些忘掉,是一种严重失职。现在我明白,这是错的。
黑客需要懂的计算理论,就像画家需要懂的颜料化学一样。你需要知道时间和空间复杂度,知道什么是图灵完备;可能还需要理解状态机的概念,以防你要写解析器或正则库。事实上,画家需要记住的颜料化学知识比这还多。
我发现,最好的灵感来源,不是那些名字里带“计算机”的领域,而是其他创造者的领域。绘画给我的启发,远比计算理论多得多。
编程其实是在“素描”
大学里教我的是:在接触计算机之前,应该把程序在纸上完全想清楚。但我发现自己并不是这样编程的。我喜欢坐在电脑前写代码,而不是对着纸。更糟的是,我不是耐心地写出一个正确程序,而是先写出一堆完全错误的代码,再慢慢把它修好。调试并不是“最后一步”,而是编程本身。
我曾为此感到内疚,就像小时候因为没按老师教的方式握铅笔而自责一样。如果我当时看看其他创造者——画家或建筑师——就会知道:这种方式有个名字,叫 素描(sketching)。
大学里教的编程方式是错的。你应该像作家、画家、建筑师那样,在写的过程中想清楚程序。
这对语言设计有重要启示:编程语言首先应该是 可塑的。语言是用来思考程序的,而不是用来表达你已经完全想好的程序。它应该像铅笔,而不是钢笔。
如果人真的像大学里教的那样写程序,静态类型或许很好。但现实中,黑客需要的是一种能涂改、涂抹、重画的语言,而不是要端着一杯类型系统,小心翼翼和编译器这位严厉的老姑妈寒暄。
数学嫉妒与形式主义
认同“创造者”身份还能帮我们避免科学领域的另一个问题:数学嫉妒。几乎所有科学家都暗暗觉得数学家更聪明,而数学家自己可能也这么想。结果就是,大家都试图把工作包装得尽可能“数学化”。
在物理学中问题不大,但离自然科学越远,这种倾向危害越大。一页公式看起来就很厉害(想更厉害?用希腊字母)。
于是,人们倾向于研究那些能形式化的问题,而不是那些真正重要的问题。
如果黑客把自己看作和作家、画家一样的创造者,就不会被这种诱惑左右。作家和画家不会有数学嫉妒。黑客也是。
大公司、初创公司与设计战争
如果大学和研究机构不让黑客做他们想做的事,也许公司才是归宿。但不幸的是,大多数公司同样不让黑客设计软件。大学强迫黑客当科学家,而公司强迫他们当工程师。
我是在 Yahoo 收购 Viaweb 后才意识到这一点的。我说我只想“hack”,结果发现,在 Yahoo,“hack”指的是实现软件,而不是设计软件。程序员被视为把产品经理愿景翻译成代码的技术工人。
这是大公司的默认模式,因为这样可以降低结果的标准差。真正会设计软件的黑客是少数,而管理者很难识别他们。于是,软件由委员会设计,黑客只是实现。
这正是初创公司能赢的原因之一。大公司为了避免灾难,会抑制波动,但抑制波动也会抑制高峰。大公司不是靠卓越取胜,而是靠“没那么差”。
设计战争应该发生在新市场中——还没有城堡和护城河的地方。那时,由同一批人设计和实现产品,才能赢得巨大优势。微软、苹果、惠普在早期都是这样。
日常工作与热爱
打造优秀软件的一种方式是创办公司。但这有两个问题:第一,在创业公司,你要做太多与写代码无关的事;第二,能赚钱的软件,往往不是最有趣的软件。
几乎所有创造者都面临这个问题。市场需求决定收入,而市场更需要解决琐碎问题,而不是你觉得有趣的事。
解决方案是:白天的工作(day job)。为钱工作一部分时间,为热爱工作另一部分时间。这正是开源软件的本质。
Viaweb 面试程序员时,我们最关心的是:他们业余时间写什么软件。你不可能把一件事做好,除非你真的热爱它。
学习、协作与同理心
黑客和画家一样,主要通过“做”来学习。画家留下作品轨迹,你可以看到他们如何一步步进步。黑客也是如此。
协作时,也应像画室那样:模块清晰、责任明确,避免多人反复覆盖同一部分代码。
软件是给人用的,因此黑客必须具备同理心。你必须理解用户如何看待你的软件。真正伟大的软件,总能“自我解释”。
程序应该写给人读,只是顺便给机器执行。
结语
黑客是否像绘画一样酷?现在也许不。但这很可能正是 黑客的黄金时代。新媒介出现时,最伟大的作品往往诞生得很早。
绘画在达·芬奇时代并不“酷”,但后来成了。黑客是否会如此,取决于我们能用这种媒介创造出什么。
