《黑客与画家》中的只言片语

来源:互联网 发布:网络上门服务电话 编辑:程序博客网 时间:2024/05/21 17:01

0.译者序

我们的时代是程序员主导的时代,而伟大的程序员就是黑客。

自由软件基金会的创始人理查德·斯托尔曼说:“出于兴趣而解决某个难题,不管它有没有用,这就是黑客。”

根据理查德·斯托尔曼的说法,黑客行为必须包含三个特点:好玩、高智商、探索精神。只有其行为同时满足这三个标准,才能被称为“黑客”。另一方面,它们也构成了黑客的价值观,黑客追求的就是这三种价值,而不是实用性或金钱。


1.为什么书呆子不受欢迎--他们的心思在别的地方

我后来认识很多人,读书的时候都被称为书呆子。从他们身上我发现,“书呆子”与“高智商”有强烈的正相关关系。而这些人在中学里都是不受欢迎的学生,你越喜欢读书,就越不受别人欢迎,因此“书呆子”和“受欢迎”之间,有一种更强烈的负相关关系。这样看来,“高智商”似乎导致了你不受欢迎。


2.黑客与画家--黑客也是创造者,与画家、建筑师、作家一样

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

黑客搞懂“计算理论”的必要性,与画家搞懂颜料化学成分的必要性差不多大。

一页写满了数学公式的纸真是令人印象深刻啊。因此,你就受到巨大的诱惑,去解决那些能够用数学公式处理的问题,而不是去解决真正重要的问题。

如果黑客认识到自己与其他创造者--比如作家和画家--是一类人,这种诱惑对他就不起作用。作家和画家没有“对数学家的嫉妒”,他们认为自己在从事与数学完全不相关的事情。我认为,黑客也是如此。

真正竞争软件设计的战场是新兴领域的市场,这里还没有人建立过防御工事。只要你能够做出大胆的设计,由一个人或一批人同时负责设计和实现产品,你就能在这里战胜大公司。

创作者另一个学习的途径是通过范例。对画家来说,博物馆就是美术技巧的图书馆。几百年来,临摹大师的作品一直是传统美术教育的一部分,因为临摹迫使你仔细观察一幅画是如何完成的。

如果黑客只是一个负责实现领导意志的技术工人,职责就是根据规格说明书写代码,那么他其实与一个挖水沟的工人是一样的,从这头挖到那头,仅此而已。但是,如果黑客是一个创作者,他从事的就不是机械性的工作,他必须具备灵感。

程序写出来是给人看的,附带能在机器上运行。


3.不能说的话--如果你的想法是社会无法容忍的,你怎么办?

但真正令人惊恐的是,流行一时的不仅有衣服,还有道德观念。明明是专横武断、毫无依据的错误观点,但是大多数人却深信不疑,受到影响而不自知。这是非常危险的。流行的衣服,其实是很难看的衣服,流行的道德观念,其实不是善而是恶。但是,如果别人都穿流行的衣服,而你不穿,你就会遭到嘲讽;如果别人都遵守流行的道德观念,而你却不遵守,结果则要严重得多,你会被解雇、流放、监禁,甚至被杀。


4.良好的坏习惯--与其他美国人一样,黑客的成功秘诀就是打破常规

总体来看,黑客是不服从管教的,这往往会激怒管理当局。但是,不服从管教,其实是黑客之所以成为优秀程序员的原因之一。


5.另一条路--互联网软件是微机诞生后的最大机会

使用那些纯粹的互联网软件,你只需要一个能够上网的浏览器即可。所以,它不受地域限制,在任何地方都可以使用。但是,如果你使用安装在计算机上的桌面软件,那么就只能在这台计算机上使用。更糟糕的是,你的文件也存在这台计算机上。随着互联网越来越深入人心,桌面模式的弊端也就越来越明显。

对于互联网软件,没人规定只能使用某些语言开发,因为所有的硬件都控制在你手里,你想要用什么语言,就能用什么语言。不同的语言适合不同的任务,你应该根据不同的场合,挑选最合适的工具。尤其是在竞争者存在的情况下,“可以这样做”就变成了“必须这样做”,因为如果你不利用语言的优势,那就会听任对手超过你。

不要被微软吓到。你能做到它做不到的事情,正如它能做到你做不到的事情一样。开发互联网软件不需要得到任何人的许可,没有人能够阻止你。你不需要去申请许可证,不需要在零售店的货架上谋得一席之地,也不需要卑躬屈膝地求人家,将你的软件与操作系统捆绑在一起。你能够通过浏览器发布软件,没有人能在你和浏览网站的用户之间插上一脚。


6.如何创造财富--致富的最好方法就是为社会创造财富。创造财富的最好方法就是创业

创业公司往往与技术有关,所以“高科技创业公司”这个短语几乎就是同义重复。创业公司其实就是解决了某个技术难题的小公司。

从经济学的观点看,你可以把创业想象成一个压缩过程,你的所有工作年份被压缩成了短短几年。你不再是低强度地工作四十年,而是以极限强度工作四年。在高技术领域,这种压缩的回报尤其丰厚,工作效率越高,额外报酬就越高。

创造有价值的东西就是创造财富。财富与金钱并不是同义词。

财富才是你的目标,金钱不是。

程序员坐在电脑前就能创造财富。优秀的软件本身就是一件有价值的东西。这里不存在大规模的流水线制造业,所以不用担心问题被混淆。

另一件程序员看来显而易见的事情就是创造财富的速率存在巨大的差异。一个优秀的程序员连续工作几个星期可能可以创造价值100万美元的财富。同样的时间内,一个平庸的程序员不仅无法创造财富,甚至可能减少财富(比如引入bug)。

这就是为什么如此之多的优秀程序员都是自由主义者的原因。我们这个世界,你向下沉沦或者向上奋进都取决于你自己,不要把原因推给外界。

最顶尖的5%的程序员写出了全世界99%的优秀软件。

一个大学毕业生总是想“我需要一份工作”,别人也是这么对他说的,好像变成某个组织的成员是一件多么重要的事情。更直接的表达方式应该是“你需要去做一些人们需要的东西”。即使不加入公司,你也能做到。公司不过是一群人在一起工作,共同做出某种人们需要的东西。真正重要的是做出人们需要的东西,而不是加入某个公司。

大公司就像巨型的罗马战舰,一千个船手共同划桨,推动它前进。但是,两个因素使它快不起来。一个因素是,每个船手看不到自己更努力划桨有何不同;另一个因素是,一千个人的团队使得任何个人的努力都被大大地平均化了。

7.关注贫富分化--“收入分配不平等”的危害,会不会没有我们想的那样严重?

“不公平”这三个字就是“老爹模式”的独门标志。问什么别的情况下人们不会想到这三个字?因为要是你现在还处于“老爹模式”,认为财富就是从某个口子流出来,被大家分享的东西,而不是来源于满足他人的需求的创造活动,那么当你注意到有些人赚钱比其他人多得多时,你就会不偏不倚地得出“不公平”这个结论。

技术应该会引起收入差距的扩大,但是似乎能缩小其他差距。

技术无法使其变得便宜的唯一东西,就是品牌。这正是为什么我们现在越来越多地听到品牌的原因。富人与穷人之间生活差异的鸿沟正在缩小,品牌是这种差距的遗留物。

8.防止垃圾邮件的一种方法--不久前,许多专家还认为无法有效地过滤垃圾邮件。本文改变了它们的想法

在所有对抗垃圾邮件的方法中(从软件方法到法律方法),我认为单独来看,“贝叶斯过滤”是最有效的工具。

9.设计者的品味--如何做出优秀的东西?

好设计是简单的设计。

好设计是永不过时的设计。

好设计是解决主要问题的设计。

好设计是启发性的设计。

好设计通常是有点趣味性的设计。

好设计是艰苦的设计。

好设计是看似容易的设计。

好设计是对称的设计。

好设计是模仿大自然的设计。

好设计是一种再设计。

好设计是能够复制的设计。

好设计常常是奇特的设计。

好设计是成批出现的。

好设计常常是大胆的设计。

10.编程语言解析--什么是编程语言?为什么它们现在很热门?

一些黑客只喜欢自己用的语言,反感其他所有的语言。另一些黑客则说所有的语言都一样。事实介于这两个极端之间。语言之间确实有差别,但是很难确定地说哪一种语言是最好的。这个领域依然还在快速发展。

语言设计者之间的最大分歧也许就在于,有些人认为编程语言应该防止程序员干蠢事,另一些人则认为程序员应该可以用编程语言干一切他们想干的事。Java语言是前一个阵营的代表,Perl语言则是后一个阵营的代表。

11.一百年后的编程语言--一百年后,人类怎样编程?为什么不从现在开始就这样编程呢?

我认为,编程语言就像生物物种一样,存在一个进化的脉络,许许多多分支最终都会成为进化的死胡同。这种现象已经发生了。Cobol语言曾经流行一时,但是现在看来没有任何后续语言继承它的思想。

我语言Java也会如此。有人写信说:“你怎么能说Java不会成功呢?它已经成功了。”我觉得这要看你的成功标准是什么。如果标准是相关书籍的出版量,或者是相信学会Java能找到工作的大学生数量,那么Java确实已经成功了。当我说Java不会成功时,我的意思是它和Cobol一样,进化之路已经走到了尽头。

编程语言进化缓慢的原因在于它们并不是真正的技术。语言只是一种书写方法,而程序则是一种严格符合规则的描述,以书面形式记录计算机应该如何解决你的问题。所以,编程语言的进化速度更像数学符号的进化速度,而不像真正的技术(比如交通或通信技术)的进化速度。数学符号的进化速度是缓慢的渐变式变化,而不是真正技术的那种跳跃式发展。

现在,我们的两个观点就是:(1)一百年后的编程语言在理论上今天就可以设计出来;(2)如果今天真能设计出来这样一种语言,很可能现在就适合编程,并且能够产生更好的结果。

12.拒绝平庸--别忘了你的对手与你一样,能用任何想用的语言编写互联网软件

埃里克·雷德蒙写过一篇文章《如何成为一个黑客》。文中有一部分专门谈到,在他看来,如果你想当一个黑客,应该学习哪些语言。他建议从Python和Java入手,因为他们比较容易学。想当高级一点的黑客,还应该学习C和Perl。前者用来对付Unix系统,后者用来系统管理和开发CGI脚本。最后,真正非常严肃地把黑客作为人生目标的人,应该考虑学习一下List:

Lisp很值得学习。你掌握它以后,会感到它给你带来的极大启发。这会大大提高你的编程水平,使你成为一个更好的程序员。尽管在实际工作中极少会用到Lisp。

13.书呆子的复仇--在高科技行业,只有失败者采用“业界最佳实践”

技术本来就应该是尖端的。正如伊拉恩·加内特所说,编程语言的所谓“业界最佳实践”,实际上不会让你变成最佳,只会让你变得平常。如果你选择的编程语言使得你开发软件的速度只有(选择更激进技术)对手的几分之一,那么“最佳实践”真的起错了名字。

所以,我们就有了两点结论,我认为他们非常有价值。事实上,这是我用自己的经历换来的。第一,不同语言的编程能力不一样。第二,大多数经理故意忽视第一点。

14.梦寐以求的编程语言--一种好的编程语言,是让黑客可以随心所欲使用的语言

没错,大多数人选择某一种编程语言,不是因为这种语言有什么独特的特点,而是因为听说其他人使用这种语言。

对黑客来说,选择编程语言的时候,还有一个因素比简洁更重要,那就是这种语言必须能够帮助自己做到想做的事。

一种真正优秀的编程语言应该既整洁又混乱。“整洁”的意思是设计得很清楚,内核由数量不多的运算符构成,这些运算符易于理解,每一个都有很完整的独立用途。“混乱”的意思是它允许黑客以自己的方式使用。C语言就是这样的例子,早期的Lisp语言也是如此。真正的黑客语言总是稍微带一点放荡不羁、不服管教的个性。

一次性程序,就是指为了完成某些很简单的临时性任务而在很短时间内写出来的程序。

一次性程序的另一个特点就是简洁。对黑客来说,这一点永远有吸引力。

我认为,未来50年中,编程语言的进步很大一部分与函数库有关。

众所周知,好的编程语言生成的代码有较快的运行速度。

一种编程语言要想变得流行,最后一关就是要经受住时间的考验。

让我们试着描述黑客心目中梦寐以求的语言来为以上内容做个小结。这种语言干净简练,具有最高层次的抽象和互动性,而且很容易装备,可以只用很少的代码就解决常见的问题。不管是什么程序,你真正要写的代码几乎都与你自己的特定设置有关,其他具有普遍性的问题都有现成的函数库可以调用。

15.设计与研究--研究必须是“新”的,设计必须是“好”的

设计与研究的区别看来就在于,前者追求“好”,后者追求“新”。优秀的设计不一定很“新”,但必须是“好”的;优秀的研究不一定“好”,但必须是“新”的。我认为这两条道路最后会发生交叉:只有应用“新”的创意和理论,才会诞生超越前人的最佳设计;只有解决那些值得解决的难题(也就是“好”的难题),才会诞生最佳研究。所以最终来说,设计与研究都通向同一个地方,只是前进的路线不同罢了。
原创粉丝点击