《大集市与大教堂》节选
这里节选中文版的 附录: 如何成为一名黑客
本文是由著名的开源旗手 Eric S.Raymondond 所著。本书英文版写成于 2001 年,中文版出版于 2014 年。文中的部分链接已经不可访问了,但为了维护原文的完整性,还是将它们放了进来。以下是原文
A.1 为什么写下此文
作为“黑客行话”(Jargon File,http://www.tuxedo.org/jargon/)及其他几篇流传较广的类似文章的作者,我经常收到热情的网络新手的邮件,他们会问:“我怎样才能成为黑客高手?”相当奇怪的是,我没有看到任何 FAQ 或者网络文章谈及这个重要问题,
所以我来写一篇。
如果你读的是离线版本,你可以在这个网址找到它的最新在线版本:http://www.tuxedo.org/~esr/faqs/hacker-howto.html
注意:本文最后有一个 FAQ(常见问题解答),在向我发邮件提问之前请先读它两遍。
A.2 什么是黑客
在“黑客行话”这篇文章里,有一堆关于“黑客”这个术语的定义,大多数都涉及“技术高超”、“热衷于解决问题”和“突破极限”这样的特点,如果你想知道如何成为一名黑客,其实真正重要的只有两点。
长期以来,存在一个崇尚共享文化且成员都是编程专家和网络高手的社区,其历史可以追溯到数十年前第一台分时小型机诞生和 ARPAnet 还处于最早实验期的年代。这个社区的成员创造了“黑客”一词,黑客构建了互联网,黑客造就了现如今的 UNIX 操作系统,黑客运转起了 Usenet,黑客让 WWW 发挥作用。
如果你是这个文化的一部分,如果你对这个社区有贡献,社区中其他人知道你并称你为黑客,那你就是一名黑客。
黑客精神并不局限在软件文化中。人们会把黑客态度用在其他事情上,比如电子或音乐。事实上,对任何科学和艺术,在其最高水平的活动中都可以发现黑客精神。软件黑客若是识别出其他领域的同道中人,也会称他们为“黑客”。所以有人说黑客的天性其实是独立于他们所从事工作的。
在本文余下部分中,我将着重讨论软件黑客的技术、态度及其文化传统,正是这一文化产生了“黑客”一词。
有一群人高调声称自己是黑客,但他们并不是。这些人(大多是些毛头小子)的主要目的是攻入他人计算机或者破解电话系统。真正的黑客称他们为“骇客”(cracker),而且完全不想搭理他们。
多数真正的黑客认为,骇客懒惰,缺乏责任感,而且不是很聪明,如果你的目标是能够攻破安全系统,那不会让你成为黑客,就好比学会热线(hotwire)发动汽车并不会让你成为汽车工程师一样。
遗憾的是,很多记者和作者错误地使用“黑客”一词来描述骇客,这使得真正的黑客极为不满。
两者最根本的区别是:黑客搞建设,骇客搞破坏。
如果你想成为一名黑客,请接着读下去。如果你想成为一名骇客,去读 alt.2600 新闻组(news:alt.2600),如果你发现自己并没有想象中那么聪明,做好准备去蹲上 5 到 10 次监狱吧。这就是我想对骇客说的。
A.3 黑客的态度
黑客解决问题并做出东西,他们相信自由,并自愿地互相帮助。要想被别人认可是一名黑客,你的行为必须要表现出你拥有这种态度。当然,如果要做到这点,你必须要真的信奉这种态度。
如果你把培养黑客态度当做是获取黑客文化接受的途径,那可就差远了。你要打心眼里认为这些态度对你至关重要——这会帮助你学习并保持热情。
就像所有其他创造性活动一样,要想成为大师,最有效的方法是模仿大师的思维模式——不仅在理智上,还要在情感上。
所以,如果你想成为黑客,重复下面这些事,直到你信奉它们。
1.这个世界充满了迷人的问题等待人们去解决。
做一名黑客有很多乐趣,但这是一种需要努力才能获得的乐趣。而努力需要动力,成功运动员的动力来自于控制自己身体和超越自己过往生理极限的愉悦。
类似地,成为一名黑客,你必须要对解决问题、磨砺技能和智力挑战有着基本的兴奋感。
如果你不是那种天生对此就很有感觉的人,你需要把自己变成这种人,否则你会发现你做黑客的能量会被性、金钱以及社会认可这类让你分心的东西慢慢耗尽。
你还必须要培养出一种对自己学习能力的信心——你要相信,即便你没有掌握解决某个问题所需的全部知识,如果你成功处理了其中一小部分而且从中学到东西,你将会学到足够多的知识去解决下一小部分——如此往复,最终你会解决整个问题。
2.不要解决一个问题两次。
创造性头脑是无比珍贵的有限资源,它们不应浪费在重新发明轮子这种事上,尤其是还有这么多迷人的新问题在那里等着的时候。
想要像一名黑客,你必须要相信:其他黑客的思考时间是很宝贵的——它是如此宝贵,以至于共享信息、解决问题并将解决办法馈赠给其他黑客几乎就是你的道德义务,这样,其他黑客就可以去解决新问题,而不是永无休止地去重复解决老问题。
你不必觉得你有义务把所有创造性产品都贡献出来,尽管这样做的黑客能获得其他黑客最大的尊重。出售软件以换取食物、房租和计算机并不违反黑客价值观,运用你的黑客技能来养家甚至发大财也都没什么,只要你在做这些的时候,不要忘记你对理想的忠诚以及你的黑客朋友就行。
3.无聊和乏味是有害的。
黑客(以及有创造性的人们)应该从来不会觉得无聊,也不会去做那些乏味而愚蠢的重复性工作,如果这种事情发生,意味着他们没有做只有他们才能做的事——解决新问题。这种浪费会伤害到每个人,无聊和乏味不仅仅是不好,而且是有害的。
要当一名黑客,你必须得非常相信这点,并希望尽可能将那些无趣的事情自动化,这不仅是为自己,也是为其他人(尤其是其他黑客)。
关于这点,有一个明显的例外:黑客有时会做一些外人看上去重复或无趣的事,其实他们这样做只是为了清空大脑,或是为了获得某种技能,或是为了获取某些在其他情况下无法获取的经验。注意这是他们自愿的——任何有想法的人都不该被强迫去做那些他们觉得无聊的事。
4.自由是好事。
黑客天生是反权威的。如果有人能命令你,他就能让你做不成你特别想做的事——而且,如果探究权威者的思维,你会发现其理由往往愚蠢得令人发指。所以无论什么地方出现权威主义倾向,你都要与之抗争,以免他们压迫你和其他黑客。
这并不是说要和所有权力抗争。儿童需要成人的指导,罪犯需要强制关押。黑客应该接受某种类型的权力,虽然他在服从命令上要花些时间,但换来了更多他想要的东西。这是一种有节制的、理性的谈判,而绝不是当权者所想要的那种个人顺从。
滥用权威者靠审查和保密而强大,他们不信任自愿合作和信息共享——他们只喜欢他们控制之下的“合作”。若要做得像一名黑客,对审查、保密以及使用武力或欺骗这类行为,你必须要有一种直觉上的反感,而且你必须愿意与之抗争。
5.态度不能代替能力。
要想成为黑客,你必须养成这些态度。但只凭态度并不会让你成为黑客,就像只凭态度不会让你成为冠军运动员或摇滚明星一样。要成为一名黑客,你需要智慧、实践、投入和努力。
所以,你必须学会持怀疑态度并尊敬每种能力。黑客不会让装腔作势者浪费他们的时间,黑客崇拜能力——特别是黑客能力,但并不限于此,在任何事情上的能力都是好的。那种只有极少数人才能驾驭的技术能力尤其好,而那种需要思维敏锐、动手能力强和全神贯注的技术能力最好。
如果你崇尚能力,你会从动手开发中获得乐趣——辛苦的工作和投入将成为紧张的比赛而不是苦工。要想成长为黑客,这至关重要。
A.4 黑客的基本技能
对黑客来说,态度固然重要,但技能更重要。态度并不是能力的替代品,有一些特定的基本技能是你必须要掌握的,否则没有黑客愿意称你为“黑客”。
这些基本技能会随时间缓慢变化,因为技术进展会产生新技能并淘汰旧技能。例如,以前它会包括机器语言编程,而不会有现在的 HTML。不过目前看来,很明显基本技能包括以下几个方面。
1.学习如何编程。
这当然是一项基本的黑客技能。如果你不懂任何计算机语言,我建议从 Python 入门。它设计整洁,文档良好,对初学者很友好。作为一个好的入门语言的同时,它并不是一个玩具,它非常强大、灵活,完全适用于大型项目,对此我曾写过一个较为详细的评估 http://noframes.linuxjournal.com/lj-issues/issue73/3882.html。其教程则可在 Python 网站上找到 http://www.python.org。Java 也是一个不错的学习编程的语言。它比 Python 要难,但可以产生比 Python 更快的代码,我想它可以作为一个优秀的第二语言。
但是要注意,如果你只懂一两种语言,那你不会达到黑客的技能水平,甚至连程序员都称不上——你需要学会以一种独立于任何语言的一般方式来思考编程问题。要成为一名真正的黑客,你需要到达这样的程度:你能把手册上的东西和你已经知道的东西联系起来,从而可以在几天之内学会一门新语言。
这意味着你需要学习几种非常不同的语言。
如果你想进入真正的编程领域,则必须学习 C,这是 UNIX 的核心语言。C++ 和 C 的关系很密切;如果你懂其中一个,学另一个并不会太难。不过,这两种语言都不是好的入门语言。
其他对黑客而言比较重要的语言有 Perl(http://www.perl.com)和 LISP(http://snaefell.tamu.edu/~colin/lp/)。Perl 由于其实用性而值得一学,它广泛应用于动态网页和系统管理,因此即便你永远不写 Perl,你也应该学习如何读它。
LISP 也很值得学习,当你最终掌握它时,你会得到深刻而彻悟的体验,这会让你在未来的日子里成为更好的程序员,即便在实际上你不怎么用它。
其实,最好把这五种语言(Python、Java、C/C++、Perl 和 LISP)都学了。它们不只是最重要的黑客语言,还代表了截然不同的编程方法,每一种都会让你受益匪浅。
这里我没法给出如何学习编程的完整指导——这是个复杂的技能。但我可以告诉你,书本和课程也无法做到(很多黑客,也许是大多数黑客,都是自学成才的)。你可以从书本上学到语言特征,但那只是皮毛,想要获得将知识转化为技能的思维模式,只能通过实践和跟随大师。做法就是读代码和写代码。
学习编程就像学习如何写好自然语言。最好的方式是阅读大师们写的东西,然后写你自己的东西,多读一些,多写一些,再多读些,再多写些……如此循环往复,直到你写的东西开始发展出你在经典中所体会到的力量和简洁。
以前想要找些好代码来读挺不容易,因为几乎没有大型项目会以源码形式提供给成长中的黑客阅读和练手。现在这种情况已经发生了戏剧性的变化。开源软件、开源编程工具、开源操作系统(这些都是黑客写的)已经随处可见。这就带来了下一个话题……
2.找一个开源 UNIX,学习使用和运行它。
假设你有台 PC 或者说有台 PC 可以让你用(现在的孩子们真幸福:-))。对任何新手来说,获取黑客技能最重要的一步是搞一份 Linux 或是 BSD-UNIX,把它装到个人机器上,然后运行它。
是的,除了 UNIX,这个世上还有其他操作系统,但都是以二进制发布的——你没有代码可读,没有代码可改。尝试在 DOS 或 Windows 或 MacOS 之下学习黑客技能就像全身打着石膏学跳舞。
而且,UNIX 是互联网的操作系统。不懂 UNIX,你也可以学习使用互联网,但你不会成为互联网上的黑客。
因此,相当大程度上,今天的黑客文化是以 UNIX 为中心的。(并不是历来如此,一些老资格黑客仍然对此不满,但 UNIX 和互联网之间的共生关系已经如此紧密,即便以微软的能量,也不可能真正撼动它。)
所以,找一个 UNIX——我个人喜欢 Linux,但还可以有别的(是的,你可以在同一台机器上既运行 Linux 又运行 DOS/Windows)。学习它、运行它、捣鼓它、用它和互联网对话、读它的代码、改它的代码。你会得到比微软操作系统下不知好多少倍的编程工具(包括 C、LISP、Python 和 Perl),你会乐在其中,你吸收的知识会比你当时意识到的更多,当你成为一名黑客高手后,你就明白了。
关于如何学习 UNIX 的更多知识,参见 Loginataka(http://www.tuxedo.org/~esr/faqs/loginataka.html),
关于如何着手实践 Linux,参见 ”Where can I get Linux”(http://linuxresources.com/apps/ftp.html)。
在 http://www.bsd.org 可以找到 BSD UNIX 的帮助和资源。
注意:如果你是个新手,我真的不建议你一个人玩 Linux 或 BSD。对于 Linux,找一个当地的 Linux 用户组并寻求帮助,或者可以找 LISC(Linux Internet Support Co-Operative,http://www.linpeople.org),LISC 维护着 IRC 频道 http://openprojects.nu/services/irc.html,你可以从那儿获得帮助。
3.学习如何使用 WWW 和写 HTML。
黑 客文化制造的大多数东西都是看不见的,这些东西帮助工厂、办公室和大学运转,但对非黑客人群的生活没有明显影响。
Web 是个很大的例外,连政治家们都承认,这个庞大而闪闪发光的黑客玩具正在改变着世界。单单是这个原因(当然还有很多其他好处)你也要学习怎么掌握 Web。
这并不只是说让你去学习如何使用浏览器(谁都会做这个),而是去学习怎样使用 HTML 这一 Web 标记语言。如果你不懂怎样编程,写 HTML 能教会你一些思维习惯,而这会有利于你学习编程。所以,先写个主页吧。
但有一个主页,和让你成为一名黑客相去甚远。网上到处都是主页,但大多数是毫无意义和毫无内容的泥巴——它们华丽而俗气,试图吸引你的注意力,但泥巴终归是泥巴(更多内容可见 HTML Hell Page:http://www.tuxedo.org/~esr/ht…)。
要想有价值,你的网页必须要有内容——必须有趣并且 / 或者对其他黑客有用,这给我们带来了下一个话题……
A.5 地位之于黑客文化
像大多数不涉及金钱的文化一样,黑客文化靠声誉运转。
你在尝试解决一些有趣的问题,但问题到底多有趣,你的方案有多好,是由你的技术同行或上司来判断的。
相应地,在黑客游戏中,你要知道你的得分主要来自于其他黑客对你技术的评价(这就是为什么只有当其他黑客都称你为黑客时你才是黑客)。
这一事实之所以比较隐蔽,是因为黑客总给人以独立工作的形象,另外则缘于黑客文化的一个禁忌(虽然慢慢有所减弱但仍然很强大):黑客认为一个人的做事动机中,不该掺杂“自我”或“外部评价”因素。
具体而言,黑客文化是人类学家所称的礼物文化。你之所以获得地位和荣誉,不是通过支配别人,不是通过美貌,也不是通过拥有别人想要的东西,而更多是通过给出。特别是给出你的时间、给出你的创造力、给出体现你技能的成果。
基本上讲,做以下五件事,会让你得到其他黑客的尊敬:
1.写开源软件。
第一件事(最核心的和最传统的)是写出其他黑客认为有趣或有用的程序,然后将程序源码发布给整个黑客文化。(以前我们称这些作品为“free software”,但这困惑了太多的人,人们不能确定“free”究竟是想说什么。现在,我们之中很多人更愿意称之为“开源软件”,http://www.opensource.org/。)
在黑客圈中,最受尊敬的偶像是这样一类人:他们写出了大型的、能满足广泛需求的程序,并将程序贡献了出来,使得任何人都可以使用这些程序。
2.协助测试和调试开源软件。
黑客还尊敬那些调试开源软件的人,在这个不完美的世界里,我们在软件开发过程中,不可避免地要将大量时间花费在调试阶段。
这就是为什么任何开源作者稍加思考后都会告诉你,好的 beta 测试员无比珍贵(他们会清楚地描述症状,很好地定位问题,忍受早期版本中的 bug,并愿意使用一些简单的诊断例程)。对有的人来说,调试过程可能是一场旷日持久、辛苦不堪的噩梦,而对于好的测试人员来说,可能只是一个有益于程序的清理过程罢了。
如果你是一个新手,试着去找一个正处于开发状态并且你感兴趣的程序,并试着去做一个好的 beta 测试员。从帮助测试到帮助排错,再到帮助修改,这是一个很自然的过程,你会从中学到很多,而且,善有善报,以后也会有人乐意帮助你。
3.发布有用的信息。
另一件好事是收集、过滤那些有用并且有趣的信息,将他们放到网页或者类似 FAQ(常见问题)列表的文档中,并让人们容易看到。
技术性 FAQ 的维护人员甚至会得到和开源作者一样的尊敬。
4.帮助做一些基础工作。
黑客文化(以及互联网的发展)是靠志愿者推动的。有很多必要但并不吸引人的工作要有人来做——管理邮件列表,主持新闻组,维护大型软件库,提出 RFC 和其他技术标准等等。
把这类工作做好的人会得到很多尊敬,因为每个人都知道这些工作会耗费大量时间,并且不像玩代码那样有趣,做这些事体现了奉献精神。
5.服务黑客文化自身。
最后,你可以服务和宣传黑客文化自身,比如,写一本关于“如何成为黑客”的精准的入门教程:-)。这并不需要你在这个圈子里呆很久并且因为以上四件事中某件而成名后才能做。
毋庸置疑,黑客文化没有领导人。但它的确有文化英雄、部落长老、史学家和发言人。如果你在这个战壕里时间足够长,你可能也会成为其中之一。
记住:黑客并不信任部落老人们的自我炫耀,公然追求这种名声是危险的。与其为此奋争,倒不如摆正位置,静待名声降临,然后对你的地位保持谦逊和优雅。