黑客与画家的共同之处,在于他们都是创作者。与作曲家、建筑师、作家一样,黑客与画家都是试图创作出优秀的作品。他们本质上都不是在做研究,虽然在创作过程中,他们可能会发现一些新技术(那样当然更好)。
最近拜读了被誉为硅谷创业之父Paul Graham的文集《黑客与画家》,不得不说,这是我看到的最好的关于程序员自我修养的一本书,让我愈发看清未来我自己令我喜欢的模样。
以下整理了黑客与画家的5点相通之处,让我们看到黑客的创造者之心是如何悄然作响,开始在这个信息时代蠢蠢跃动的。
创造者之心
黑客搞懂“计算理论”的必要性,与画家搞懂颜料化学成分的必要性差不多大。一般来说,在理论上,您需要知道如何计算“时间复杂度”和“空间复杂度”;如果你要写一个解析器,可能还需要知道状态机的概念;除此以外,并不需要知道特别多的理论。这些可比画家必须记住的颜料成分少很多。
黑客新想法的最佳来源,并非那些名字里有“计算机”三个字的理论领域,而是来自于其他创作领域。与其到“计算理论”领域寻找创意,你还不如在绘画中寻找创意。
你把整个程序想清楚的时间点,应该是在编写代码的同时,而不是在编写代码之前,这与作家、画家和建筑师的做法完全一样。它意味着,编程语言首要的程序应该是允许动态扩展,编程语言是用来帮助思考程序的,而不是用来表达你已经想好的程序。
一份不以此为生的工作
黑客如何才能做自己喜欢的事情?找一份养家糊口的“白天工作”。这个词是从音乐家身上来的,他们晚上表演音乐,所以白天可以找一份其他工作。更一般地说,“白天工作”的意思是,你又一份未来赚钱的工作,还有一份为了爱好的工作。
几乎所有的创作者在职业生涯的早期都有一份“白天工作”。画家和作家尤其显著。如果幸运的话,你能找到一份与你的“真正工作”非常相关的“白天工作”。音乐家似乎常常是在唱片行工作。同样地,钻研某种编程语言或操作系统的黑客,很可能会得到一份使用这些工具的“白天工作”。黑客解决生计问题的方法是找一份“白天工作”,然后在其余时间开发优美的软件,开源软件届的黑客早就这样做了。
实践出真知
画家学习绘画的方法主要是动手去画,黑客学习编程的方法也理应如此。大多数黑客不是通过大学课程学会编程的,他们从实践中学习,13岁时就自己动手写程序了。画家的作品都会保留出来,你观察这些作品,就能看出他们是怎样一步步通过实践学习绘画的,没孵化所用的技巧,都是建立在上一幅作品学到的东西之上。某幅作品如果有特别出色之处,你往往能在更早的作品上发现一个小规模的初期版本。
创作者另一个学习的途径是通过范例,对画家来说,博物馆就是美术技巧的图书馆。几百年来,临摹大师的作品一直是传统美术教育的一部分,因为临摹迫使你仔细观察一幅画是如何完成的。同样地,黑客可以通过观看优秀的程序学习编程,不是看它们的执行结果,而是看他们的源代码。开源运动最鲜为人知的优点之一,就是使得学习编程变得更容易了。
工作模式
一幅画是逐步完成的。通常一开始是一张草图,然后再逐步填入细节。但是,它又不单纯是一个填入细节的过程。有时,原先的构想看来是错的,你就必须动手修改。黑客也应该这样的工作。你不能盼望先有一个完美的规格设计,然后再动手编程,这样想是不现实的。如果你预先承认规格设计是不完美的,在编程的时候,就可以根据需要当初修改规格,最终会有一个更好的结果。
一种好的编程语言,应该像油画颜料一样,能够使得我们很从容地改变想法。动态类型语言在这一点上就是赢家,编程语言灵活性的关键还不在这里,而在于这种语言应该非常抽象。
当多个画家共同创作一幅作品时,每个人画的部分都是不一样的。通常来说,大师负责画主要人物,助手们负责画次要人物和背景。但是,你肯定找不到某个部分是两个人一起画的。这也是多人共同开发一个软件的正确模式。需要合作,但是不要“合”地过头。
就像绘画一样,大多数软件是为人类用户准备的。所以,黑客必须像画家一样,时刻考虑到用户的人性需要,这样才能做出伟大的产品。你必须能够站在用户的角度思考问题,也就是说你必须学会“换位思考”。
黄金年代
现在正是编程的黄金年代。大多数领域的伟大作品都诞生于很早以前。1430年到1500年之间的绘画杰作,至今仍然是不可超越的。莎士比亚出现的时候,戏剧这种文艺体裁才刚发展起来,专门表演戏剧的场所“戏院”才开始诞生。他把戏剧这种艺术形式提升到一个难以触及的高度,让后世的每一个剧作家都不得不生活在他的阴影之中。
我们看到这种模式一再反复出现。一种新的媒介刚刚诞生的时候,人们热情高涨、兴奋不已,短短几代人就探索清楚了这种媒介的大部分可能性,把它的能量发挥到极致。编程目前好像就处在这个阶段。
在达芬奇的年代,绘画并不是一件很酷的事情,达芬奇用自己的工作推动绘画成为一种伟大的表达方式。同样,编程到底能够有多酷,取决于我们能够用这种新媒介做出怎样的工作。