财新传媒 财新传媒

阅读:0
听报道

 

几乎所有的创作者在他们的职业生涯早期都有day jobs,画家和作家更是如此。如果你比较幸运,你能得到一份与你的实际工作很相关的day jobs。音乐家通常在音像店工作,hackers的day jobs就是从事一些编程语言或操作系统开发。

 

对于hackers来说就是有一份day jobs,业余时间做出色的软件。我并不是说这是一个新主意。其实这就是开源hacking的一切。开源很可能是正确的模式,因为已经被所有创作程序员独立地证明过。

 

我会很惊讶,如果哪个老板不愿程序员搞开源项目。在Viaweb时,我们不愿意雇用那些没做过开源的人。我们面试程序员时,主要关心的是他们在业余时间写什么样软件。你如果没有兴趣,就没法把一件事情做得很好,而如果你热爱编程,就不可避免地会有自己的项目。

 

因为hackers是创作者,而不是科学家。绘画能教hacking什么?

 

hackers跟画画类似的一件事情就是如何hack。学画画主要靠动手画,hacking也是这样。多数hackers不是通过学习大学课程来写程序,他们一般在13岁时就开始写程序。

 

因为画家留下可供学习的痕迹,你可以观察他们靠动手来学习的过程。如果把他们作品以时间顺序排列,你会发现每幅作品建立在前面已学到的基础上。如果你在一副作品上看到一些很好的部分,你通常能在早先作品中找到它的版本。我相信,多数创作者都是这样工作。作家和建筑师也一样。对hackers来说,像画家那样,经常素描,而不是数年从一个项目到另一个项目。

 

hackers学习hack靠动手这个事实,是hacking有别于科学又一个标志。科学家不靠动手来学习科学,而是通过做实验和习题集实现。就科学家们只是重现别人已做好的工作而言,他们始于完美,逐渐到达某个程度后,可以做一些原创性工作。hackers始于原创,逐渐完美;科学家始于完美,逐渐原创。

 

创作者的另外一个学习方法是模仿。对画家来说,展览馆是一个技术参考库。数百年来,临摹大师的作品就是画家传统教育方法一部分,因为临摹促使你仔细地观察作品是如何创作的。

 

作家也是这样。本杰明·富兰克林的学习写作的方式是:先总结出阿狄森和斯蒂尔作品的中心思想,然后试着去以自己的方式写内容。雷蒙德·钱德勒也是通过这样写侦探小说。

 

hackers同样地可以通过浏览优秀的程序代码学习编程。开源运动不大为人提及的一个好处是,它使得学习编程更加容易。我开始学习编程时,就非常依赖书中例子。当时可以看到的大块的源代码是Unix,但它不是开源。大多数读过这些代码的人,也是通过非法影印John Lion的书学习。这本书虽然是在1977年写的,但直到1996年才被允许出版。

 

另一个相似之处是,画画总是逐渐完美。一开始是草图,慢慢把细节添进去。但也不总是一个补充过程,有时会发现原来构图有问题。无数绘画作品,放在X射线底下,都能看到很多改动痕迹。

 

hacking也是一个逐步达到优秀的过程。期望软件设计说明书很完美是不现实。最好允许这个说明书随时可以修正。(由于大公司结构上原因,他们很难做到这一点,这也是创业者的优势。)

 

现在每个人大概都知道过早优化的危险。但我认为,我们同样要关注过早设计--太早决定一个程序应该做什么。

 

好的工具可以帮助避免这个问题。好的编程语言应该像油画颜料,很容易改。动态类型就很好,因为你无需一开始就确定具体数据类型。灵活性的关键在于语言的抽象。最好改的程序是很短的程序。

 

这听起来像悖论。伟大的绘画作品总是比你看到的更伟大。莱昂纳多·达芬奇保存在国家美术馆的肖像画名作:Ginevra de’Benci(译者注:如图二),他会仔细画出灌木丛每一片叶子,尽管没有很多人会很仔细地去看这些。

 

图二:Ginevra de’Benci

 

莱昂纳多在创作作品某一部分的用功之深,并不取决于有多少观众会关注。他就像绝情的迈克尔·乔丹(译者注:被称为最伟大的NBA球员,曾6夺总冠军)。

 

决定是否能赢,看不见的细节实际上也成为可见的。当观众经过《Ginevra de’Benci》时,他们的视线马上被吸引。正是那些出色的细节,使观众忘记关注画作的名称、作者是谁。就像独唱背后的千百个合声一样。(未完待续)

话题:



0

推荐

鲍有斌

鲍有斌

433篇文章 2年前更新

科技财经专栏作者

文章