真的黑客是什么样的(到底什么是黑客)(1)

关于“hacker”这个词的定义,大部分是关于“技术高超”、“热衷解决问题”、以及“超越极限”的内容。但如果你只想知道如何成为一名黑客的话,真正重要的只有两条。

这可以追溯到几十年前,那时候第一代分时微型计算机才刚刚诞生, 而 ARPAnet 的实验也才刚展开。那时的编程专家和组网高手建立了一个具有共享性质的文化社群, “hacker” 这个名词就是其中的成员创造的。黑客们建立了互联网,黑客们让 Unix 操作系统演化到现在的模样,黑客们经营着 Usenet,黑客们让万维网运转起来。如果你是这个文化的一部分,如果你对这种文化有所贡献,而且这个社群的其它成员也认识你并称你为 hacker,那么你就是一名黑客。

黑客的思维方式并不仅仅局限在软件黑客的文化圈内。也有人用黑客态度对待其它事情,如电子和音乐方面——其实你可以在任何最高级别的科学和艺术活动中发现它的身影。软件黑客对这些领域的践行者尊重有加,并把他们也称作黑客——有人宣称黑客天性是绝对独立于他们工作的特定领域的。但在这份文档中,我们将集中书写在软件黑客的技术和态度,以及发明了“黑客”一词的、以共享为特征的文化传统。

有另外一群人大声嚷嚷着自己是黑客,但他们根本不是。他们主要由青少年男性构成,是一些蓄意破坏计算机和电话系统的人。真正的黑客把这些人叫做“骇客”(cracker),并不屑与之为伍。黑客们通常认为他们是一群懒散、没有责任心、而且不是很聪明的人。会通过热接线发动汽车并不意味着你是一个汽车工程师。一样的道理,会破坏安全也不意味着你是一名黑客,不幸的是,很多记者和作家往往错把“骇客”当成黑客;这种做法一直使真正的黑客感到恼火。

根本的区别是:黑客搞建设,骇客搞破坏。

如果你想成为一名黑客,请接着读下去。如果你想做一个骇客,就去读 alt.2600 新闻组吧,顺便准备好去蹲个五到十年的监狱,而且最终你会意识到你并不像自己想象的那么聪明。

关于骇客,我能说的只有这些。

黑客的态度

黑客们解决问题,建设事物,同时他们信仰自由和无私的双向帮助。要想作为一名黑客被社群认同,你需要体现出自己已经具备了这种态度。而要体现出这种态度,你就得真正相信和赞同这种态度。

但是,如果你认为培养黑客态度只是进入黑客文化圈的敲门砖,那就大错特错了。这种态度将有助于有助于你的学习,并且能为你提供源源不断的动力,所以它对你而言是至关重要的。和所有创造性的艺术一样,成为大师的最有效方法,就是模仿大师的精神——智力上的模仿还不够,还要从感情上进行模仿。

或者正如下面这首现代的禅诗讲的:

修行之道:

关注大师的言行,

跟随大师的举动,

和大师一并修行,

领会大师的意境,

成为真正的大师。

所以,如果你想成为一名黑客,反复读下面的事情直至你相信它们为止:

这个世界充满了令人着迷的问题等着我们解决

做一名黑客会有很多乐趣,但是这些乐趣需要付出很多努力才能获得。这些努力需要动力。成功的运动员在表演和超越自我极限的时候获得身体上的愉悦,并把这种愉悦作为自己的动力。同样,为了成为一名黑客,你要从解决问题、磨练技术,以及锻炼智力中得到基本的享受。

如果你不是天性如此,而你又想成为一名黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他分心的事物吞噬掉——如金钱、性、以及社交圈的认同。

(你必须建立对于自己学习能力的信念——就算你掌握的知识不足以解决当前的问题,如果你从问题的一小部分下手并从中学习,你将学到足够的知识用来解决下一部分——以此类推,直到整个问题都被你解决为止。)

一个问题不应该被解决两次

有创新能力的大脑是一种宝贵的有限资源。当世界还充满非常多有待解决的有趣的新问题时,它们不应该被浪费在重新发明轮子的事情上。

作为一名黑客,你必须相信其他黑客的思考时间是宝贵的——因此共享信息、解决问题、并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题,而不用在旧问题上面浪费精力了。

(这并不是在说你有义务把自己所有的作品都免费发布出来,但这样做的黑客能获得大家最大的尊敬。使用黑客技能养家糊口甚至发财致富都没关系,只要你别忘记自己作为一个黑客的责任,不背离黑客群体即可。)

无聊和乏味的工作是罪恶

黑客(以及所有创造力的人们)都不应该被愚蠢的重复性劳动所困扰。重复性劳动浪费了他们解决新问题的时间,而解决新问题正是黑客最大的价值所在。这种浪费会伤害到每一个人。无聊和乏味的工作不仅仅是令人不舒服而已,而且本身就是一种罪恶。

作为一个黑客,你必须坚信这点并尽可能多地将乏味的工作自动化,这不仅是为了你自己,也是为了其他人(尤其是其他黑客们)。

(对此有一个明显的例外。黑客有时为了休息大脑、学习技能、或者别的特别的原因,也会做一些在他人看来是重复性或枯燥的事情。但这是自愿的——只要是有思维能力的人,就不应该被迫做无聊的活儿。)

崇尚自由

黑客们是天生的反权威主义者。任何能向你发号施令的人都可以让你停止解决令你着迷的问题,同时,按照权威主义者的一般思路,他通常会给出一些极端愚昧的理由。因此,不论何处,任何权威主义的做法,只要它影响到了你和其他的黑客,你就要和它斗到底。

(这并非向所有权威挑战。儿童需要监护,罪犯要被看管起来。如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客可以同意接受某种形式的权威。但这是一个有限度的,斟酌过的的交易;那种权威主义者想要的个人服从是不在考虑范围内的。)

权威主义者喜欢审查和保密。他们不信任自愿的合作和信息的共享——他们只喜欢由他们控制的所谓“合作”。因此,作为一个黑客,你应该对审查、保密,以及使用武力或欺骗去压迫有行为能力的人们的做法有一种本能的敌意。同时你要有为此信念付出的意愿。

态度不能替代能力

作为一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,也不能使你成为一个运动健将和摇滚明星。成为一名黑客需要智力、实践、奉献精神、以及辛苦的工作。

因此,你必须学着忽略态度问题,并尊重各种各样的能力。黑客们不会为那些装模做样的人浪费时间,但他们却非常尊重能力——尤其是从事黑客工作的能力(虽然有能力总归是好事)。如果能具备少有人能掌握的技能就更好了,当然如果你具备一些急需的技能,而这些技能又需要敏锐的思维、高超的技巧、和专注的精神,那就是再好不过了。

如果你尊重能力,你就会享受到提高自己能力的乐趣——辛苦的工作和奉献将不会是一件苦差事,而是一种紧张的娱乐,这是成为黑客至关重要重要的一点。

黑客的基本技能

黑客态度重要,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,你必须掌握一些基本的技术作为你随身携带的工具。

随着新技术的出现和老技术的过时,这个工具包的内容也在不断改变。比如以前机器语言编程也被列在里边,而 HTML 是直到最近才包括进去的。不过现在可以清楚地告诉你包含以下内容:

学习如何编程

这一条无须多说,当然是最基本的黑客技能。如果你还不会任何编程语言,我建议你从 Python 开始学起。它设计清晰,文档齐全,而且对初学者比较友好。虽然它很适合作为一种入门语言,但它不仅仅只是个玩具;它非常强大、灵活,也适合做大型项目。

我曾经推荐过将 Java 作为初学的语言,但这则批评改变了我的想法(在里边搜索”The Pitfalls of Java as a First Programming Language” 就知道我的意思了)。作为一名黑客,你不能像人们挖苦的一样,“像水管工人一样装电脑”,你必须知道各个部件的工作原理。现在我觉得可能还是学过 C 和 LISP 后再学 Java 比较好。

有一个大体的规律,就是如果你过于偏重使用一种语言,这种语言一方面会成为你得心应手的工具,另一方面也会阻碍你的学习。有这个问题的不只是编程语言,类似 RubyOnRails、CakePHP、以及 Django 的 web 应用框架也有这个问题,它们只会让你肤浅地懂得一些东西,当你碰到难以解决的问题或者需要调试时,你就可能不知所措了。

如果你想进入正式的编程领域,你将不得不学习 C 语言,它是 Unix 的核心语言。C 与 C 非常其他类似;如果你了解其中一种,学习另一种应该不难。但这两种都不适合编程入门者学习。而且事实上,你越避免用C编程,你的工作效率会越高。

C 语言效率极高,而且占用很少的系统资源。不幸的是,C 的高效是通过你手动做很多底层的管理(如内存管理)来达到的。底层代码都很复杂,而且极易出现 bug,你要花很多的时间调试。而现今的计算机速度如此之快,花时间调试程序通常是得不偿失——比较明智的做法是使用一种运行较慢、效率较低,但能大幅节省你的开发时间的语言。因此,还是选择 Python 吧。

其他对黑客而言比较重要的语言包括 Perl 和 LISP。从实用的角度来说,Perl 是值得一学的;它被广泛用于动态网页和系统管理中,因此,即便你从不用Perl 写程序,至少也应该学会读懂 Perl。许多人使用 Perl 的理由和 我建议你使用 Python 的理由一样,都是为了避免用 C 完成那些不需要 C 高效率的工作。你会需要理解那些工作的代码的。

LISP 值得学习的理由不同——最终掌握了它时你会得到丰富的启迪和经验。虽然你实际上很少会用到 LISP,但这些经验会使你在以后的日子里成为一个更好的程序员。

当然,实际上你最好五种都会(Python,Java,C/C ,Perl 和 LISP)。除了是最重要的黑客语言外,它们还代表了截然不同的编程思路和方法,每种都会让你受益匪浅。(你可以通过修改 Emacs 编辑器的模式)

单单学习编程语言并不会让你达到黑客的程度,甚至连程序员的程度都难企及——你需要脱离某种编程语言的素服,学习通过编程解决问题的思路。要成为一个真正的黑客,你需要达到几天就能学会一门编程语言的水平,你可以将文档里的信息和你已经掌握的知识结合起来,很快就学会一门编程语言。这意味着你需要先学会机种思路截然不同的语言才行。

编程是一个复杂的技能,我无法给你完整的指南来教会你如何编程,不过我可以告诉你,书本和课程也无法教会你如何编程——很多黑客,或者也许几乎所有的黑客,都是靠自学的。你从书本上学到语言的特点——只是一些皮毛,但要使书面知识成为自身技能,你只能通过实践和虚心向他人学习。因此你要做的就是 (a) 读代码,(b) 写代码。

Peter Novig 是 Google 公司的顶尖黑客之一,而且是最受欢迎的 AI 课本的一名作者。他写了一篇好文章名叫Teach Yourself Programming in Ten Years(译注:十年教会自己编程),其中的“recipe for programming success”(译注:编程的成功之道)尤其值得一读。

学习编程就象学习自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,再读些,再写点……如此往复,直到你的文章具备范文的力量和感觉为止。

以前要找适合阅读的好代码并不容易,因为几乎没有大型程序的源代码能让新手练手。这种状况已经戏剧性地发生变化;开源软件、编程工具、和操作系统(全都由黑客写成)现在已经随处可见。

学习使用开源的 Unix 系统

我将假设你已经有一台个人计算机供自己使用了(你可以体会一下这意味着多少东西。早些时候,计算机是如此的昂贵,没有人能买得起。而黑客文化就是在那样的环境下演化来的)。新手们能够朝学习黑客技能迈出的最基本的一步,就是找一版 Linux 或 BSD-Unix,安装在个人电脑上,并且把它跑起来。

没错,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发布的——你无法读到它的源代码,也不可能修改它。尝试在运行 DOS、Windows、或 MacOS 的机器上学习黑客技术,就象是穿着骑士铠甲学跳舞。

除此之外,Unix 还是 Internet 的操作系统。你可以学会上网却不知道 Unix,但你不了解 Unix 就无法成为一名 Internet 黑客。因此,今天的黑客文化在很大程度上是以 Unix 为核心的。(这点并不总是真的,一些很早的黑客对此一直很不满,但 Unix 和 Internet 之间的联系已是如此之强,就连 Microsoft 这样强力的公司也对此也无可奈何。)

所以, 安装一套 Unix 吧——我个人偏爱 Linux,但还有其他种类共你选择(是的,你可以在同一电脑上同时安装 Linux 和 DOS/Windows)。学习它,运行它,鼓捣它。用它上 Internet。阅读它的源代码。修改它的源代码。你会用到很多优秀的编程工具(包括 C, LISP,Python 及 Perl),这些工具在 Windows 下是做梦都没法得到的。你会觉得乐趣无穷。当你有一天成为大师再回顾初学的日子,你会觉得那时学到的东西可真多。

如果你想了解更多关于学习 Unix 的信息,读一下 The Loginataka(译注:ESR 的另一著作,可以称为黑客大藏经)吧。也许你还想看看 The Art of Unix Programming (译注:Unix 编程艺术,经典著作)。

你可以访问 Linux Online! 网站,这个网站可以帮你起步。你可以从那里下载到Linux,或者更好的办法是找一个本地的 Linux 用户组,让他们帮你安装 Linux。

在这份 HOWTO 文档发布后的前十年里,关于 Linux 我写的是,从新人的观点来看,所有的Linux 发行版都差不多,但在 2006-2007 之间,我们终于有了一个最佳选择: Ubuntu。我们可以说各种Linux 发行版各有千秋,但 Ubuntu 是新人最容易上手的一个发行版。

你可以在 www.bsd.org 找到 BSD Unix 的求助及其他资源。

Linux 有一种被称为 Live CD 的发行方式,这种发行版会从CD 运行起来,而且不会动到你硬盘里的东西,Live CD 是尝试 Linux 的一个不错的方法。由于光驱读写本来就比较慢,Live CD 的速度一般也会比较慢,不过 Live CD 总归是一个能尝试各种可能性而又不过激的方法。对于新手,我以前不鼓励你自己独立安装Linux 或者 BSD,现在这些系统的安装工具已经足够好了,就算对新手来说,独立安装操作系统也不是不可能的事。无论如何,我还是推荐你联系本地的 Linux 用户组,向他们寻求帮助,这会进程更加顺利。

学会使用万维网以及编写 HTML

黑客文化建造的大多东西都在你看不见的地方发挥着作用。浙西东西可以帮助工厂、办公室、以及大学正常运转起来,但从表面上很难看到它们对非黑客的普通人的生活的影响。而 Web 是一个大大的例外。就连政客也同意,这个庞大耀眼的黑客玩具正在改变整个世界。就算只是因为这个(还有许多其它的原因),Web 也值得你一学。

这并不是仅仅意味着如何使用浏览器(谁都会),而是要学会如何写 HTML,也就是 Web 的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先完成一个主页。(网上有很多不错的资源,比如 这个 HTML 入门教程。)

但仅仅拥有一个主页不能使你成为一名黑客。 Web里充满了各种网页。大多数是毫无意义的、毫无信息量的垃圾——界面时髦的垃圾,不过还是垃圾。

要想有价值,你的网页必须有内容——它必须有趣或对其它黑客有帮助。

学习英语,如果你的水平不够用的话

作为一个以英语为母语的美国人,我以前很不情愿提到这点,免得被当做一种文化上的帝国主义。但相当多以其他语言为母语的人一直劝我指出这一点,那就是:英语是黑客文化和 Internet 的工作语言,只有懂英语,你才能在黑客社区顺利做事。

大概1991年的时候,我就了解到许多黑客在技术讨论中使用英语,甚至有时他们来自同一种母语也在用英文讨论。在现阶段,英语有着比其他语言丰富得多的技术词汇,因此是一个对于工作来说相当好的工具。基于类似的原因,英文技术书籍的翻译通常都不怎么令人满意。(如果有翻译的话)。

Linus Torvalds 是芬兰人,但他的代码注解是用英语写的(很明显他从没想过其他的可能性)。他流利的英语。是他能够管理全球范围的 Linux 开发人员社区的重要因素。 这是一个值得学习的例子。

就算你的母语是英语,这也无法保证你的语言技能足够达到黑客的标准。如果你的写作文字不通、语法混乱、错字连篇,包括我在内的大部分的黑客都会忽略你的存在。虽然写作马虎不一定意味着思考也马虎,但我们发现两者的关联性还是挺强的——马虎的头脑对我们来说毫无价值,如果你写作能力不够,就好好学习写作吧。

提高自己在黑客圈中的地位

和大部分不涉及金钱的文化一样,黑客王国靠声誉运转。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要由那些和你具有同样技术水平,或比你更厉害的人去评判的。

相应地你需要认识到,当你在玩黑客游戏时,你的分数主要是靠其他黑客对你的技术的评价得到的(这就是为什么只有在其它黑客称你为黑客时,你才算得上是一名黑客)。常人的印象里,黑客是一项独来独往的工作,所以上述评价方式并不为众人所知。另一个黑客文化误区是拒绝承认自我或外部评价是一个人的动力,这种想法在 1990 年代末以后就逐渐衰退了,但现在还有人这么认为。这也是让上述评价方式鲜为人知的原因之一。

明确地讲,黑客行为就是人类学家所称的“奉献文化”。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的贡献。尤其是贡献你的时间、你的创造、以及你的技术成果。

要获得其他黑客的尊敬,你可以从下面五种事情着手:

撰写开源软件

第一个方法(也是最重要,最传统的方法)是写些被其他黑客认为有趣或有用的程序,并把程序源代码提供给整个黑客文化圈使用。

(过去我们称之为“free software (自由软件)”, 但这却使很多不知 free 的精确含义的人感到困惑。现在我们很多人,根据搜索引擎网页内容分析,至少三分之二的人在使用”open-source software,即“开源软件”这个词)。

黑客领域里最受尊敬的偶像,是那些写了大型的、好用的、用途广泛的软件,并把它们发布出来,使得每人都在使用他软件的人。

但是从历史方面来讲有一点值得一提。虽然黑客们一直认为开源软件的开发者是真正的黑客,但在 1990 年代中期以前,大部分黑客会把自己的主要时间用来撰写闭源软件,直到我 1996 年开始写这篇 HOWTO 时也是如此。但从 1997 年后开源软件进入了主流,而且改变了这一切。以现在的观点来看,“黑客社群”和“开源开发者”是对这一个社群的两种称呼,但值得记住的是,以前这两者的概念并不完全一样。要了解更多信息,你可以看看 关于黑客、开源、以及自由软件的历史这一节的内容。

帮助测试并调试开源软件

黑客也尊敬那些使用和测试开源软件的人。这个世界并不完美,我们不可避免地要把大多数的开发时间放在调试阶段。这就是为什么任何有头脑的开源代码的作者都会告诉你好的 beta 测试员象红宝石一样珍贵。好的测试者知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布中的 bug,并且乐意配合做一些例行的诊断性工作。一个优秀的测试者可以让一场旷日持久辛苦不堪的调试大战变成一场有益身心的小打小闹。

如果你是个新手,试着找一个你感兴趣的正在开发中的程序,做一个好的 beta 测试员。你会自然地从帮着测试,进步到帮着抓 bug,到最后帮着改程序。你会从中学到很多,而且善因种善果,以后别人也会很乐意帮助你。

发布有用的信息

另一件好事是收集整理有用有趣的信息,做成网页或类似 FAQ 的文档,并且让大家都能看到。

技术性 FAQ 的维护者会受到和开源代码的作者一样多的尊敬。

帮助维护基础设施的运转

黑客文化(还有互联网工程方面的发展)是靠志愿者推动的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成——管理邮件列表和新闻组,维护大型软件库,开发 RFC 和其它技术标准等等。

做这类事情的人会得到很多尊敬,因为每人都知道这些事情费时颇多,而又不象编程那样有趣。做这些事情需要奉献精神。

为黑客文化本身服务

最后,你可以为这个文化本身做宣传(例如像我这样,写一个“如何成为黑客”的教程 :-) )这并不要求在你已经在这个圈子呆了很久,因以上四点中的某点而出名,有一定声誉后才能去做。

黑客文化没有领袖,这点是确认无疑的。但黑客圈里确实有些文化英雄、部落长者、史学家、还有发言人。如果你在这圈里呆足够长时间,你也许也能成为其中之一。 记住:黑客们不相信他们的部落长者的自夸,因此过分追求这种名誉是危险的。与其奋力追求,不如先摆正自己的位置,等它自己落到你的手中——那时则要做到谦虚和优雅。

黑客和书呆子(nerd)的联系

和大家普遍认为的相反,并不是只有书呆子才能成为一名黑客。但它确实有帮助,而且许多黑客事实上是书呆子。做一个深居简出的人有助于你集中精力进行十分重要的事情,如思考和编程。

因此,很多黑客都接受了“geek(奇客)”这个标签,并把它作为骄傲的奖章——这是宣布他们独立于主流社会期望的一种方式(这个标签也是他们喜欢科幻小说和策略型游戏的标记,而这些也是很多黑客喜欢的东西)。1990 年代更多用的称呼是“nerd(书呆子)”,那时“nerd”只带点轻微的贬义,而“geek”则是地地道道的蔑称,而在 2000 年以后,这两者逐渐调转过来了,至少再美国的大众文化中是这样。而到了现在,甚至在非技术人群里,也有不少以 geek 精神为傲的文化团体。

如果你能集中足够的精力做好黑客工作同时还能有正常的生活,这是件好事。现在要做到这一点比我在 1970 年代还是新手的时候要容易的多;如今主流文化对技术怪人要友善得多。甚至有越来越多的人意识到黑客通常是很好的恋人和配偶的材料。

如果你因为生活上不如意而迷上做黑客,那也没什么——至少你不会分神了。也许你以后还能找到自己的生活。

,