如何成为一名黑客
date
Aug 13, 2022
slug
how-to-become-a-hacker
status
Published
tags
Review
summary
How To Become A Hacker
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
Status
为何会有这篇文档
身为新黑客词典(The Jargon File)和许多其他广为人知的同类文章的作者,我常收到热心的网络新人的电子邮件,问及(大意上是)“如何成为一名魔法师似的黑客?”。1996年的时候我注意到这个重要的问题并没有相关的问题解答或文档页面,所以我写了一份。许多黑客认为这篇文章是权威的,因此我认为它应该有一定的价值。此外,我不会寻求在这个话题上的独立著作权,如果你不喜欢在这里读到的内容,就自己写一篇吧。
注意:本文的末尾有一些常见问题集,请在向我发邮件询问问题前仔细阅读问题集中的内容。
目前本文有许多语言的翻译版:阿拉伯语,白俄罗斯语,中文,捷克语,丹麦语,荷兰语,爱沙尼亚语,德语,希腊语,意大利语,希伯来语,挪威语,波斯语,巴西葡萄牙语,罗马尼亚语,西班牙语
,土耳其语,瑞典语。请注意,由于本文不定期更新,这些翻译版可能失效。
本文里九宫格中的5个黑点的装饰图被称作 glider。这是一个使很多黑客多年痴迷的被称作康威生命游戏(LIFE)中,具有令人惊奇特性的简单图案。我认为它是很好的黑客精神徽章 —— 抽象,初见的时候感觉有点神秘,通过它复杂的逻辑可以通向整个世界。如果你想了解更多关于 glider 的信息,请看这里。
如果你觉得这篇文章有价值,请努力践行此道,你也可以通过赞助其他为你提供了有价值代码的黑客表达立场,涓涓细流汇成大海,你所花的每一分钱,都是在为你想要的世界投票。倘若你的赞助能够使为你提供帮助的人从繁重的劳动中解放出来,创造更多的价值,此乃大善。
什么是黑客
新黑客词典 中有不同版本的“黑客”的定义,主要形容"技术专才"或"有志解决问题及超越极限之人"。要成为黑客,有两个要点。
这可以追溯到几十年前,第一台分时小型电脑刚刚诞生,阿帕网实验也刚展开的年代,那时有一个由程序设计专家和网络名人所组成的,具有分享特点的文化社群。 这种文化的成员创造了 “hacker” 这个词。他们建立了互联网,他们发明了现在使用的 Unix 操作系统。他们管理 Usenet 讨论组。他们令 WWW 运作。因此,若你有上述的特性及参与同类的社区,亦有对以上种种作出贡献,同时社区的人知你是谁又称你为“hacker”,你便是黑客。
然而,黑客的理念并非只局限于软件社区。有很多人将黑客的态度应用于其他事物,如电子或音乐上——实际上,黑客的理念存在于任何科学及文学。由于了解黑客的理念及精神,软件社区的黑客亦会称后者为黑客。有些人亦认为黑客的理念是独立于黑客所从事的媒体。然而,我们将在这篇文章专注讨论软件黑客的技巧,态度及传统。
另外,还有一群人亦称自已为“黑客”,他们(多数是年青人)用电脑侵入其他电脑的系统作出破坏。黑客们称这群人为“Cracker(破坏者)”,亦不认同他们为黑客。多数黑客会认为 Cracker 是懒惰,不负责任,不杰出的人。有能力侵入安全系统并不能使你成为黑客,正如可以用铁丝来偷车并不能使你成为汽车工程师一样。不幸的是很多作家和报道均称这群人为“黑客”。这一直使黑客们非常恼火。
黑客与 Cracker 的主要区别在于,前者搞建设,后者搞破坏。
如果你想成为一个黑客,请继续读下去。如果你只想做一个 Cracker,请直接跳转到 alt.2600 讨论组,你会发现自己其实没有想象中的那么聪明,于此同时,我建议你随时做好进监狱的准备。关于 Cracker 我就说这么多。
黑客的精神
黑客们解决问题,构建事物,他们崇尚自由和无私的互助。想要成为一名真正的黑客,你必须也具备这样的精神,这并非一朝一夕就能达成的,你必须始终如一的坚持。
如果你认为培养黑客精神只是为了在这个文化圈中得到认同,那就大错特错了。如果你想要成为一名真正的黑客,很重要的一点,就是具备这种精神 —— 它可以使你保持学习和成为黑客的内驱力。和所有艺术创作一样,成为大师,最有效的途径就是效仿大师——不仅从理念上,还要从精神上效仿。
下面的这首现代禅诗很好的阐述了这个意思:
如果你想成为一名黑客,请反复阅读以下内容,直到你真的认同。
1. 世上仍有大量有趣的事情等待解决
作为一名黑客可以享受很多乐趣,同时需要付出相当多的努力。努力的动力来源是什么呢?成功的运动员从锻炼身体、超越身体的极限中获得愉悦感。类似的,作为一名黑客,你可以从解决问题、磨练技术和锻炼智力中获得乐趣。
如果你天生不是这样的人,那你需要设法变成这样的人,从而成为一名真正的黑客,否则,你将会发现,你有限的精力会被会被诸如性、金钱、权利消耗殆尽。
(与此同时,你需要对自己的学习能力树立信心 —— 相信自己尽管对一些问题知之甚微,也能够通过学习和努力,一步一步的将问题解决。)
2. 不应该重复造轮子
创造性的智慧是稀缺的高价值资源。它们不应当被浪费在重复造轮子上,世上仍有大量迷人的新问题等着解决。
作为一名黑客,你应该明白,其他黑客的时间非常宝贵——所以你有义务,在解决问题之后,将信息共享,这样其他人就可以去解决新的问题,而不是重复解决旧问题。
注意,“不应该重复造轮子“并不是说所有已有的解决方案都是最优的,或每个问题只有唯一的解决方案。通常我们能够从”第一个吃螃蟹的人身上“学习到很多东西,这对于我们思考如何能做得更好来说,通常是十分必要的。我们反对的是人为的、法律上的,或者机构性的设置障碍(例如闭源软件),使得一个好的方案不能被重复使用,逼得人们重造轮子。
(并不是你必须将 所有 的创造发明都分享出去,虽然这样做的黑客将会赢得大家极度尊重。适当卖一些钱来换取足够的食物、租金和硬件设备并不违反黑客的价值观。用你的技能来养家糊口甚至致富都可以,只要你在做这些的时候别忘记你是一名黑客。)
3. 拒绝重复和沉闷的事情
黑客(以及富有创造力的所有人)不应当被愚蠢的重复性劳动所困扰,因为这意味着他们没有时间做只有他们才能做的事情——解决新问题。这种浪费对所有人都是有害的。因此,无聊和乏味的工作不仅仅是令人不悦,更是罪恶。
作为一名黑客,你应该坚信这一点并尽可能的将枯燥的工作自动化,这不仅仅是为了你自己,也为了所有人(尤其是其他黑客)。
(这里有一个例外。黑客有时会做一些看起来重复或枯燥的事情以进行脑力休息,或以此来锻炼一种技能,或以此获得某种特别的经验,这是他们主动选择的,但 —— 有脑子的人不该被强迫做枯燥的事。)
4. 自由万岁
黑客是天生的反独裁主义者。 任何向你发号施令的人都有可能迫使你停止解决令你着迷的问题。与此同时,独裁者给出的理由通常都相当愚昧。因此,不论何处,只要独裁主义的作法压迫了你或者其他黑客,你就应该和它“对抗”。
(这句话并非引导你向所有权威挑战。儿童需要监护,罪犯要被看管起来。如果服从命令得到某种东西比起用其他方式得到它更节约资源,黑客会接受某种形式的权威。但仅仅有限度的,有益的交易;那种权威想要的绝对服从,你不应该认同。)
权威喜欢审查和保密。他们不喜欢无私的互助和信息共享——他们只喜欢由他们控制的所谓的“合作”。因此,作为一个黑客,你得对审查、保密,以及使用武力或欺骗去压迫人们的行为有一种本能的敌意,与此同时,你还需要有为此信念斗争的意愿。
5. 精神不能代替能力
作为一个黑客,你必须培养起这些精神。但是仅仅有精神并不能使你成为黑客,也不能使你成为运动健将或摇滚明星。成为一名黑客还需要智力,实践,奉献精神和辛勤工作。
因此,你需要学会有怀疑态度和尊重能力。黑客不会为装模作样的人浪费时间,但他们尊重能力——尤其是从事黑客相关的能力,不过任何能力都是好的。只有极少的人能够具备高超的能力,无论是脑力、技巧还是专注力。
尊重能力,你就能够享受到提高自己的能力所带来的乐趣——辛苦的工作和奉献将不再是苦差事,而是一种娱乐活动。想要成为一名黑客,这一点尤其重要。
黑客的基本技能
黑客精神很重要,但技能更重要。精神不能替代能力,在被别的黑客认同之前,你需有掌握一些基本技能。
这些基本技能随着时间的推移和技术的革新也在缓慢的变化着。例如以前的内容中包括了使用机器语言编程,近期则是包含进了HTML。总的来说当前包括以下内容:
1. 学习编程
编程毫无疑问是最基本的黑客技能。如果你没有任何编程经验,我建议你从学习 Python 开始,它设计良好,文档详尽,对新人十分友好。它不仅是一门很好的入门语言,并且强大灵活,适用于很多大型项目(不要把它当成是一个玩具)。我曾写过一篇文章,详尽的记录了对Python的评价。最后,在 Python的网站可以找到很好的教程,在Computer Science Circles也有一篇不错的第三方教程。
我曾经建议使用 Java 作为入门语言,但这篇文章改变了我的看法(如果网页丢失,请在浏览器中搜索“The Pitfalls of Java as a First Programming Language”)。就像文中所指出的一样,一个黑客不能“像五金店中的管道工一样处理问题”,你需要知道每个组件事实上都 干了什么。现在,我认为最好先学 C 和 Lisp,然后再学 Java。
另外有一点需要注意。如果一门语言帮你做了太多工作(比如很多的语法糖),它会是一个好的生产工具,但同时也是一个不好的初学对象。不仅语言有这个问题,Web 框架比如 RubyOnRails、CakePHP、Django 也有这个问题,它会让你习惯性的流于表面的现象而不去思考背后的机制,当面对困难问题的时候,就会束手无策,甚至无法对一个简单问题进行追查,调查,并给出正确的解决方案。
如果你需要做一些重要的编程工作,学习 C 语言就是非常有必要的,它是Unix的核心语言。C 跟 C++ 关系密切,如果你了解其中一种,学习另外一种应该也不难。但是这两种语言都不适合作为入门学习。此外,你会发现,工作中大量使用 C 进行编程会降低你的工作效率。
C 语言的执行效率非常高,并且非常节省机器资源。不幸的是,C 语言的高效需要你进行手动底层资源(例如内存)管理来实现。要知道,底层代码非常复杂,为了使程序按照预期执行,需要大量的调试工作。鉴于现在机器的性能很高,这样的做法通常是很不划算的,更好的做法是使用一种稍微慢一些,不如 C 语言高效,但是能够 大幅 节省你编程和调试时间的语言,Python 就是很好的选择。
Perl 和 LISP 也是对黑客而言比较重要的语言。Perl 很实用,它广泛应用于动态网页和系统管理方面,因此即使你从不写 Perl 代码,至少也得能看懂。许多人使用 Perl 的理由和我建议你使用 Python 的理由一样,都是为了避免用 C 完成那些执行效率需求不那么高的工作。你不需要熟练掌握 Perl 和 LISP 等编程语言,但是,你需要能够看懂这些语言的编程逻辑。
LISP 之所以值得一学,还有一个理由——当你最终掌握了它的使用技巧之后,将会获得巨大的启迪。即使在未来的工作场景中很少使用 LISP 本身,它也能帮助你成为一个更好的程序员。(你可以通过为 Emacs 文本编辑器或者 GIMP 的 Script-Fu 编写插件,或修改现有插件,更有效的学习 LISP。)
当然,你最好能够学会五种语言(Python,C/C++,Java,Perl和LISP)。除了是重要的黑客语言之外,它们也代表了截然不同的编程思路和方法,每一种都能让你受益匪浅。
但是单纯的学习尽可能多的编程语言是不可能成为一个黑客,甚至程序员的。你需要学会如何独立于编程语言之外来思考编程问题。作为一名真正的黑客,你需要通过手册和你已有的知识,在几天内,掌握任意一门语言的要点,否则,你就需要花费大量的精力,学习许许多多不同的语言。
我无法手把手的指导你如何编程——这是一个复杂的技能。我同时告诉你,书本和课程也不能做到(最好的黑客中,有许多,也许 几乎 都是自学成才的)。 你可以从书本上学到语言的特点——但这只是皮毛,要使书面知识成为自身技能,只能通过实践和虚心向他人学习。因此要做到(1)读 代码及(2)写 代码。
Peter Norvig 是 Google 最顶级的黑客之一,也是世界上最受欢迎的 AI 教材(译注:指“人工智能:一种现代方法”和“人工智能程序设计范例:通用Lisp语言的案例研究”等)的作者之一。他写了一篇名为《十年学会编程》的短文,提到的“编程成功的诀窍(recipe for programming success)”,特别值得留意。
学习编程就像学习用优美的自然语言写文章一样。最好的办法就是阅读大师的名著,试着自己写点东西,再读一些,再写一点,再读一些,再写一点……如此往复,直到你的作品和你阅读到的范文一样简洁和健壮。
我必须再提一下《如何像黑客一样学习》,这篇文章有一些简单的指导方法,但是学起来并不容易。
以前很难找到适合阅读的好代码,因为几乎没有大型程序的代码能够供新人阅读和练手。这种情况已经发生戏剧性的变化。开源软件,编程工具和操作系统(都是由黑客创造的)现在随处可见。这刚好带我们到下一个话题……
2. 学习和使用 Unix
我假定你拥有或者能使用一台个人电脑(现在的孩子真幸福!黑客文化建立之初电脑贵得要死,没人买得起)。新手们向黑客技能迈出的最重要一步就是获取一份 Linux 或 BSD-Unix 的拷贝,将其安装在个人电脑上,并运行它。
没错,世上除了 Unix 还有其他操作系统,但它们都是以二进制形式发布的——你读不到源码,因此也无法修改代码。在类似 Microsoft Windows 那样的闭源操作系统上学习黑客技术就像戴着脚镣学跳舞。
在 Mac OS X 上学习倒是比 Microsoft Windows 好一些,不过它只有一部分是开源的——你可能会撞墙,同时,必须很小心的,避免养成依赖 Apple 专有代码的坏习惯。如果你能够专注于底层的 Unix,你就可以学到一些长期有用的东西。
Unix 是互联网上开源的操作系统。虽然你不懂 Unix 仍然可以学会使用互联网,但若你不懂 Unix,你将不能在互联网上从事黑客活动。因此,现今的黑客文化是严重以 Unix 为核心的。(曾经不是这样,并且有一些老派的黑客对此感到沮丧,但是现今 Unix 和互联网的羁绊如此之强,强如 Microsoft 也无法撼动分毫。)
所以,无论如何,请安装一套 Unix 或 类 Unix 的操作系统(我个人更加偏爱 Linux,但还有其他的选择,比如 CentOS,你甚至 可以 在同一台电脑上运行 Linux 和 Windows),学习它,使用它,调试它。用它在互联网上冲浪,阅读它的代码,修改它的代码,你将获得比在 Windows 操作系统进行编程更好的体验(包括C、LISP、Python 和 Perl),你会觉得其乐无穷,学到比你想像中更多更好的知识。
想要获取更多和学习Unix相关的信息,请参考 The Loginataka。你或许还想看看《Unix编程艺术》。
我认为博客 Let's Go Larval! 对于学习 Linux 是非常易懂和有用的。 这篇文章 How I Learned Linux 就是一个很好的起点。
在开始 Linux 之旅之前,请参考 Linux Online!。你可以从那里下载 Linux 或者(更好的主意是)找到一个当地的 Linux 用户群为你的安装过程提供帮助。
在 2005 年之前,我认为对于一个初学者来说,所有 Linux 发行版都差不多。不过在2006~2007年间,一个最好的选择出现了:Ubuntu 。其它发行版各有所长,而 Ubuntu 对初学者最友好。注意,如果你觉得 Ubuntu 默认的 “Unity” 桌面太丑陋,你还可以选择 Xubuntu 或者 Kubuntu 。
你可以在 这里 找到BSD相关的帮助和资源。
一个最好的试水办法被 Linux 爱好者称为 “Live CD” 的东西,它是一个在光盘或 U 盘上运行,而不修改你硬盘的发行版。它的运行速度比较慢,因为光盘的读写速度很慢,但这是一个安全稳妥的方法,你可以在不做出任何改变的前提下,尝试可行性的办法。
我写过一篇关于 Unix和互联网基础 的入门文章。
我不建议新手独自安装 Linux 或者 BSD。现在它们的安装程序已经做得足够好,即使是新人也完全搞得定,但尽管如此,我仍然建议和你当地的 Linux 用户群取得联系并寻求帮助。这没任何坏处,并且可以让整个过程更顺利。
3. 学习使用万维网(World Wide Web,WWW)和HTML(超文本标记语言)
很多黑客的创造物在你所不知的地方发挥着作用,帮助工厂、办公室和学校运转,看上去跟普通人没有太大的关系。但 Web 是一个例外,即便 政客 也承认这个巨大耀眼的黑客玩具正在改变着世界。因为这个原因(当然还有其他理由),你需要学习和掌握 Web。
这并不仅仅意味着你懂得如何使用浏览器就足够了(谁都会),而是要学会如何写 HTML。如果你不会编程,写 HTML 的过程会使你学会一些有助于编程的好习惯。因此,先完成一个主页。尝试坚持使用 XHTML,一种比标准 HTML 更清晰的语言。(Web 上有很多很好的初学者指南,例如 这个
)。
但仅仅拥有一个主页并不能使你成为一名黑客。Web 里充满了各种各样的网页。大多数是毫无意义、没有价值的垃圾——即使它们的界面时髦,夺人眼球,但垃圾终归是垃圾(更多信息访问 The HTML Hell Page)。
所以,你的页面必须有内容——有趣,并且/或者对其他黑客来说有用的内容。这是我们下一个议题要说的……
4. 学习使用英语
作为一个美国人和一个以英语为母语的人,我以前很不情愿提到这点,免得成为一种文化上的帝国主义。但相当多以其他语言为母语的人一直劝我指出这一点,那就是英语是黑客文化和 Internet 相关工作的主流语言,你需要懂得,以便在黑客社区顺利工作。
大概在 1991 年的时候,我了解到许多黑客在技术讨论中使用英语,即使他们的母语都并非英语。据我所知,就目前的情况而言,英语有着比其他语言丰富得多的技术词汇,因此对 Internet 工作者来说,英语相当好的工具。基于同样的理由,英文技术书籍的翻译(如果有的话)通常都不能令读者满意。(无论是基于时间、还是准确度的考虑)
芬兰人 Linus Torvalds 用英语在他的代码中写注释(很明显这不是凑巧)。他能够管理全球范围的 Linux 开发人员社区,一个重要因素是他的英语很流利。这是一个值得学习的例子。
即使是一个以英语为母语的人,也不代表你就具备了成为黑客所需的语言技能。总的来说,如果你写得文章像个半文盲似的,充斥着各种语法、拼写错误,多半得不到理睬。虽然不严谨的文笔并不总是意味着不严谨的思维,但我们发现,这两者之间的关联还是挺紧密的,而我们不需要这种思维不严谨的人。如果你现在还没有具备这样的书写能力,抓紧时间培养。
在黑客社区中立足
像大部分非盈利社区一样,黑客社区靠声誉运转。你设法解决有趣的问题,问题是否有趣及解决方法是否有效,需要由那些和你具有同样甚至更高技术水平的人去评判。
因此,要玩黑客这个游戏,你需要以其他黑客对你技能的评判作为对自己的评价(所以我说,在其他黑客称你为黑客之前,你不是一个真正的黑客)。这件事常被人误解(从1990年代后有所好转,但还是很严重),人们认为黑客都是不在乎别人的评价,孤僻的人,但这实际上是一个黑客文化的禁忌。
特别地,黑客被人类学家们称为 奉献社区。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或其他资源,而是靠你的奉献。尤其是奉献你的时间,你的创造力和你的技术成果。
要想获得黑客的尊重,大体来说,你有5件事情可以干:
1. 编写开源软件
首先(同时也是最传统和最重要的)是写一些其他黑客觉得有趣或有用的程序,并开放源代码。
(我们曾经把这些程序称为“自由软件(free software)”,但很多人不能准确理解这里的“free”是什么意思,因此,现在我们通常使用“开源”软件这个词。
最受黑客尊敬的人,是那些编写了功能强大、满足大众需求的大型软件,且把软件开源供他人免费试用的人。
这里有段有趣的历史。虽然黑客一直敬重开源软件开发者,并且以他们为社区的核心,但是直到 1990 年代中期,大部分黑客的绝大多数时间是在闭源软件上工作的。在我 1996 年写本文的第一版的时候仍然如此。到 1997 年之后,开源软件逐渐成为主流并改变了这一点。现在,“黑客社区”和“开源软件开发者”本质上是对同一文化及同一人群的两种表述——值得记住的是,曾经不是如此。(更多内容,在 “历史记录:黑客活动,开源,和自由软件”。)
2. 帮助测试和调试开源软件
黑客也尊敬那些为开源软件进行测试和 Debug 的人。当今世界的开发环境并非完美,我们不可避免地要花大量的时间在调试阶段。 这也是为什么许多开源软件作者都会高度评价那些好的 beta 测试员 (知道如何清楚描述出问题的现象,精确地定位错误,能够忍受快速发布中的 bug,并且愿意用一些简单的诊断工具进行诊断),认为他们像红宝石一样珍贵。一个好的测试员能够让测试和 Debug 不再是噩梦,而是一件值得经历的,不那么烦人的小事。
如果你是一名新手,找一个你感兴趣的正在开发的程序,尝试做一个好的 beta 测试员。你会自然而然地从帮着测试,到帮着抓 bug,最后成长到帮着改程序。你会从中学到很多,并且能够认识到很多同好。
3. 发布有效的信息
另一件有意义的事,是收集整理有用且有趣的信息,把它做成网页或文档,如 FAQ(常见问题)列表,让需要的人能够轻松的获得这些信息。
技术性 FAQ 的维护者,如同开源软件的作者一样,受人尊重。
4. 帮助维护基础设施运转
黑客社区(互联网的发展)是由志愿者组成和发展的。有大量重要且平淡的事情需要处理——管理邮件列表、新闻列表、维护大型软件的归档库、开发 RFC 和其他技术标准等。做这些事情的人,也同样会得到很多人的尊敬,因为大家都知道,这些事情需要大量的时间,并且不如编写软件那么有趣。这类工作,更多是使命感驱动的。
5. 为黑客社区服务
最后,你还可以为黑客社区做服务和宣传工作(比如写一篇“如何成为黑客”的文章 :-))。一般来说,如果你没有做过我上面所说的四种工作,你在黑客社区也不会有一定的声望,也就不可能(没有机会)为黑客社区做服务和宣传工作。
黑客社区没有指定的领导者,但是有被人们尊重的英雄、长老级人物、史学家和发言人。你有机会成为他们中的一位,只要你在这个圈子里待的足够久。但无论如何,请你谨记,黑客对于骄傲自满的长老是嗤之以鼻的,因此,不要过分追求这种名誉。“你若盛开,清风自来。心若浮沉,浅笑安然”。
黑客与书呆子(Nerd)的关系
与流行的说法不同,黑客并不是书呆子。虽然很多黑客确实是书呆子,但只是因为,这样的行为对成为一名黑客大有裨益。一个深居简出的人,有更多的时间和精力做一些重要的事,例如思考和从事黑客活动。
因此,许多黑客甚至以“极客(geek)”(译注:这个词原本在美国俚语中指“反常的人”)为名——这是他们在对外宣布——“我独立于普罗大众”(此外,黑客通常也会沉迷于其他事情,例如科幻和战略游戏)。在 1990 年代,“书呆子”这个词略含贬义,而“极客”贬义更重。2000 年以后,这两个词的关系发生了转变,至少在美国流行文化上是如此,现在甚至在非技术专家中,也会标榜自己为极客。
如果你能在做好黑客工作的同时,还能有正常的生活,这当然是很好的。而且我认为,现在做到这一点,比我在 1970 年代的时候,要容易的多;如今的主流文化,对技术怪人也要友善的多。而且,有越来越多的人意识到,黑客是很好的恋人和配偶侯选。
如果,你因为生活上的不如意而成为黑客,那也是相当不错的——至少,你可以集中精力做一些有趣且有用的事情。或许,今后你也能有一个不错的生活。
风格
重申一下,作为一名黑客,你必须进入黑客式思维模式。当你不在电脑边的时候,你也有很多有益的事情可做。它们不能替代真正的黑客活动(没有什么事情是可以替代的),但是很多黑客都认同,这些事情与黑客精神,存在某些根本的联系。
- 学会使用母语流畅的写作。虽然,现在仍有很多人认为,程序员写不出好的文章,但是这个误解正逐渐被打破,已经有数量惊人的黑客(包括我所知道的,那些造诣最高的黑客)成为了不错的写手。
- 阅读科幻小说。参加科幻聚会(一个可以接触到黑客,可能成为黑客的好方法)。
- 加入黑客空间(hackerspace)并做出一些成果(另外一个可以接触到黑客,可能成为黑客的好方法)。
- 习武。武术的精神修炼与黑客之道有着惊人的相似。黑客中比较常见的,当然是亚洲的空手格斗技巧,例如跆拳道、空手道及其变种、中国功夫、合气道、柔术(译注:这里指的是日本传统武术,而不是柔身术或缩骨功)。西方击剑和亚洲剑术也有着相当多的追随者。自 1990 年代起,在持枪合法的地区,射击也越来越受欢迎。与黑客之道最契合的武术,是那些强调精神修炼、放松意识、强调控制,而不是单纯的蛮力的类型。
- 学习一种冥想修炼。一直以来,黑客中最受欢迎的修炼方式是禅(最重要的是,学禅并不要求你有特定的宗教信仰)(译注:这里指的是日本禅宗,而不是汉地佛教禅宗)。其他方式也可以,但请注意,一定要选择那些正派的禅宗(不会要求你做出疯狂的举动和行为)。
- 修习音乐。学会鉴赏特别的音乐。学会玩某种乐器,或者唱歌。
- 提高对双关语、文字游戏的鉴赏能力。
这些事情,你做的越多,你越有可能成为一名真正的黑客。至于为什么偏偏是这些事情,答案并不确定,但它们都涉及左右脑混合使用,这似乎是关键所在。黑客们既需要清晰的逻辑思维,有时又需要偏离逻辑,跳出问题的表象。
娱乐就是工作,工作也是娱乐。对于真正的黑客来说,“玩”、“工作”、“科学”和“艺术”之间没有明确的界线,或者说,它们都能融合在一个更高层面的创造性趣味里。另外,不要对一点点成就就感到满足。虽然大多数黑客自称是程序员,但实际上,他们在其他相关的领域也相当有成就——常见的,有系统管理、页面设计和 PC 硬件故障处理。一个黑客,如果他是一名系统管理员,很有可能,他对编写脚本程序和页面设计也相当在行。黑客很少半途而废,一旦他们要学习一门技能,他们就会持之以恒。
最后,一些你 不应该 做的事。
- 不要使用愚蠢、哗众取宠的 ID 或昵称。
- 不要卷入Usenet(或其他任何地方)的骂战。
- 不要自称为“赛博朋克(cyberpunk)”,也不要浪费时间跟他们打交道。
- 不要发送含有大量拼写和语法错误的 email 和帖子。
做出以上这些事情,只会招来嘲笑。黑客的记性都很好——你犯下的错误会“遗臭万年”,或者需要很长时间来弥补。
网名的问题值得深思。将身份隐藏在虚假的名字后是骇客、warez d00dz 及其他低等生物,幼稚愚蠢的行为。黑客不会这么做;他们对自己的行为引以为荣,而且乐于人们将作品与他们的 真名 相联系。 因此,若你现在用假名,放弃它。黑客社区里只会将用假名的人视为失败者。
历史记录:黑客活动,开源,和自由软件
当我在 1996 年末,刚开始写这篇文档的时候,很多情况跟现在是不大不相同的。简单的介绍一下这个变化,对于开放源代码、自由软件和 Linux 跟黑客社区的关系感到困惑的人们,可能会有所帮助。如果你对这些不感兴趣,可以直接跳过这里,前往 FAQ 和参考资料部分。
我描述的黑客精神和黑客社区,远早于 1990 年出现的 Linux。我最初进入这个圈子大概是在 1976年,其原因可以追溯到 1960 年代早期。但是在 Linux 出现前,多数黑客行为是在专有操作系统,或一些自主研发的实验性系统上(例如 MIT 的 ITS,这个系统从未在实验室以外的地方使用过)。虽然早期(Linux 出现之前)有过一些试图改变这种状况的努力,但是它们的影响力都非常有限,仅限于真正怀抱这样理想的人群,即使在当时的黑客社区,也是极少一部分人,更不用说对世界范围内通用软件的影响了。
现在被称为“开放源代码”的行为,其历史与黑客社区一样久远,但是直到 1985 年这都只是一个不知名的民间行为,没有相关的理论和宣言。这段史前时代在 1985 年结束,大黑客 Richard Stallman(“RMS”)尝试给了它一个名字——“自由软件(Free Software)”。但是这个命名行为本身,其实也是一个强制行为,他为“自由软件”标签加上了大多数已有的黑客社区从不接受的,意识形态的包袱。“自由软件”的标签被黑客社区中的一部分重要人物(尤其是与 BSD Unix 有关联的社区)明确拒绝,并且其余的大部分人,也在严谨地、持保留意见的情况下使用它(包括我本人)。
除此之外,大约在 1990 年代中期以前,RMS 想要在“自由软件”口号下定义和引领黑客社区。在Linux 崛起之后,这受到了极大挑战。Linux 为开放源代码开发活动提供了一个天然的环境。许多在今天被称为“开放源代码”的条款下发布的项目,纷纷从专有 Unix 向 Linux 迁移。围绕 Linux 的社区呈现爆炸式的增长,相比在 Linux 出现前的黑客文化规模,更大且更多样化。RMS 想要将这些活动与他的“自由软件”运动关联起来,但是由于 Linux 社区爆炸式的多样性,以及该社区的创始人 Linus Torvalds 的公开怀疑,障碍重重。Torvalds 虽仍然使用“自由软件”这一词汇,因为找不到更好的替代品,但他公开拒绝了 RMS 的意识形态观念。许多年轻黑客纷纷效仿。
在 1996 年,当我第一次发布本文的时候,黑客社区正在围绕 Linux 和一些其他开源代码的操作系统(尤其是 BSD Unix 的继承者)进行重组。我们中的许多人曾经在闭源代码的操作系统上花费大量时间,开发闭源代码软件的集体记忆并没有因此褪色,但是看起来,这已经成为过去。黑客们将自己作为黑客的定义,与开源代码项目,例如 Linux 和 Apache,越来越紧密的结合在一起。
然而“开放源代码”这个词直到 1998 年初才出现。当它出现之后,很多黑客社区在 6 个月之内采用了它,除了与“自由软件”在意识形态层面绑定的极少数例外。自 1998 年起,尤其是 2003 年之后,“黑客”和“开放源代码(和自由软件)开发”越来越紧密相连。今天,几乎已经无法也没必要将它们区分开,并且这一点看起来在将来也不会改变。
然而,曾经并不是这样,这一点值得我们记住。
其他资源
- Paul Graham 写了一篇名为 “伟大的黑客(Great Hackers)” 和一篇名为 “大学(Undergraduation)” 的文章,有很多精妙的见解。
- 年轻的黑客可能会发现 “每一位黑客都应该知道的事情(Things Every Hacker Once Knew)”有趣并且有用。
- 有一篇名为 “如何成为一名真正的程序员(How To Be A Programmer)”(译者注:这篇文章已经找不到了,感兴趣的可以看看这篇文章)的文章,对如何成为程序员做了详尽的说明。它的价值不仅限于代码及其相关能力上,对于如何在一个程序员团队中工作也有建设性价值。
- 我写过一篇文章“ 黑客简史(A Brief History Of Hackerdom)”。
- 我写过一篇名为 “大教堂与市集(The Cathedral and the Bazaar)”的文章,在文中解释了 Linux和开源社区是如何运作的。在它的续集 “开拓智域(Homesteading the Noosphere)”中,我进一步深入探讨了这个问题。
- Rick Moen写了一篇很棒的关于“如何运营一个Linux用户组(how to run a Linux user group)”的文章。
- Rick Moen 和我共著了一篇关于“提问的智慧(How To Ask Smart Questions)”的文章。它将使你更容易获取到帮助。
- 如果需要个人电脑、Unix 和互联网如何工作的基础知识,参阅“Unix 和互联网工作的基本原理(The Unix and Internet Fundamentals HOWTO)”。
- 当你发布软件或补丁时,试着按 软件发布实践”(Software Release Practice HOWTO)“操作。
- 如果你对禅诗感兴趣,你可能会喜欢“ 无根的根(Rootless Root: The Unix Koans of Master Foo)”。
常见问题
如何证明我已经是一名黑客了?
你可以,问自己以下三个问题:
- 你能够流畅的编写代码吗?
- 你是否与黑客社区的目标和价值观产生共鸣?
- 是否有知名黑客称你为黑客?
如果你对三个问题的回答都是肯定的,你就已经是一名黑客。哪怕只有一个回答是否定的也不行。
第一个问题是关于技能的。如果你具备了前文提到的基本技能,就应该没问题。如果你已经有相当数量的代码被开源项目所接受,可以跳过这个问题。
第二个问题是关于精神的。如果你已经在生活中践行了前面的“五条黑客的精神”,你就已经通过了一半了——内在的一半,外在的一半是你对黑客社区长期项目的贡献程度。
这有一个不完全,但具有指示性的项目列表:
- Linux 的改进和发展是否有你的贡献?
- 你是否对软件自由充满激情?
- 你是否反对垄断?
- 你是否为了让计算机成为这个世界更丰富多彩、更人性化的工具而努力?
黑客社区有一些特定的、防御性的政治倾向——其中有两条,是维护言论自由和抵御可能使开放源代码非法的“知识产权”。有一些长期项目是公民自由组织,例如电子前哨基金会(EFF),外在的精神包括支持他们。除此之外,所有企图将黑客精神系统化为一个具体的政治程序的黑客都值得怀疑。我们曾经为此付出过代价,并了解到这些想法通常会导致分裂并令人心烦意乱。如果有人想要以黑客精神的名义来招揽你,那是他们搞错了重点。最好的回应恐怕是“闭嘴,给我看代码(Shut up and show them the code)。”
第三个问题是重复强调的。我在“什么是黑客”中提到过,成为一名黑客,就是成为一个具有分享精神的文化社群的一员。很久之前,黑客相比现在是一个松散的,不知名的群体。但是近 30 年来,由于互联网,使得黑客文化的核心精神更易发展和维护,人际网络方面取得了长足进步。这种改变,最具代表就是,在这个世纪,我们有了自己的T恤。
社会学家在研究类似黑客社区这样的被统称为“无形学院(invisible colleges)”的人际网络时注意到,这类网络通常都有门卫——具有社区授权的核心成员会审核新人的进入申请。由于黑客社区是“无形学院”中比较松散和非正式的一种,门卫的身份也是非正式的。但是所有黑客天生就知道并非每个黑客都是门卫。在取得门卫头衔前,需要具备特定的资历和成就。这很难度量,但是每个黑客在看到它的时候就能知道。
你能教我做黑客吗?
自从第一次发布这份文档,我每周都会收到一些请求,(通常一天几封)要我“教他们做黑客”。遗憾的是,我没有时间和精力来做这个;我自己的黑客项目,及我作为一个开放源代码倡导者的四处奔波,已经占用了我 110% 的时间。
即便我想教你,也无能为力,因为成为黑客,基本上是一项自我精神和技术修炼的过程。当真正的黑客想帮助你的时候,如果你乞求他们一汤匙一汤匙“喂”你,他们便不会再尊重你。
首先,自己去学一些东西,展示出你努力的成果,然后再去向你遇到的黑客请教。
如果你发 E-mail 给一位黑客寻求他的帮助,切记两件非常重要的事情。第一,注意拼写正确,使用正确的语法及发音,否则你可能会无人理睬。 第二,不要试图要求,回复到与你的发信地址不同的,另一个帐号。这样做的人,一般是盗用帐号,不会有人有兴趣为虎作伥,帮助窃贼的。
我该如何开始
对你而言最佳的入门方式也许是去参加 LUG(Linux用户组)的聚会。 你可以在 LDP的综合Linux信息页面上找到类似的组织;或许有一个就在你的附近,而且非常有可能与一所大学或学校挂钩。如果你提出要求,LUG 成员也许会给你一套 Linux,也有可能会帮你安装并带你入门。
(如果你在附近找不到 LUG 的话)找一个你感兴趣的开放源代码项目。读它的代码,并且检查它的bug。学着做贡献,并以此入门。
入门的唯一方式是提升你的技能。如果你还想问我关于如何开始的私人建议,我还是会给你相同的答案,因为没有捷径。与此同时,我还会在心里认为,你可能是个失败者——因为你没有耐性读完这个 FAQ,并且也没有足够的智商从文中理解到,入门的唯一途径就是提升你的技能。你没救了。
我该什么时候开始学?现在会不会太迟了?
你有动力学的时候就可以。很多人是在 15 到 20 岁之间开始感兴趣的,但据我所知,也有在这个年龄区间之外的。
学会黑客之道要多长时间?
这取决于你的聪明程度和努力程度。多数人如果足够专注的话,能在 18 个月到 2 年之间,学会一套令人尊敬的技能。但是,不要以为这就结束了。在黑客领域(在其他很多领域也一样),需要 10 年时间深耕技艺。如果你是一个真正的黑客,你要用你的余生来学习和完善你的技术。
Visual Basic是一门好的入门语言吗?
你问这个问题,那通常意味着你想在 Microsoft Windows下从事黑客活动。这本身就不是个好主意。我将在 Windows 下学习黑客技巧比喻为戴着脚镣学跳舞,这不是开玩笑。别这么做。Windows 很糟糕,而且它从来没有变好一点。
Visual Basic 有一个很重要的问题,主要是源于它不可移植。虽然已经有 Visual Basic 的开源实现,但 ECMA 的可执行标准只覆盖了其编程接口的很小一部分。在 Windows 中,大多数函数库是由单一供应商(Microsoft)专有的。如果你不能非常小心的选择你所使用的特性(比任何新手所能做到的都更小心),你最终很可能被束缚在 Microsoft 决定支持的那些平台上。如果你从 Unix 系统开始,有更好的编程语言和更好的函数库可用,例如 Python。
此外,如同其他 Basic 语言一样,Visual Basic 是一种设计糟糕的语言,它会教给你坏的编程习惯。别让我详细列举和解释它们,这够写一本书了。你完全可以找一门设计优良的编程语言来学。
坏习惯之一,就是依赖单一厂商提供的函数库、控件和开发工具。通常,一门不能支持至少 Linux 或一种 BSD,或其他第三方操作系统的语言,都不适合黑客。
你能帮我“黑”掉一个网站,或者教我怎么黑它吗?
不行!任何读完这份 FAQ 后,还问这个问题的人都是无药可救的蠢材,即使有时间我也不会理睬。任何发给我的此类 E-mail 都会被忽略掉,或被我痛骂一顿。
我怎么样才能得到别人帐号的密码?
这是破坏行为。滚开,白痴。
我如何入侵/查看/监视别人的 E-mail?
这是破坏行为。从我面前消失,混蛋。
我如何才能盗取 IRC 的频道管理员权限?
这是破坏行为。去死,蠢货。
我被人入侵了。你能帮我避免以后再被攻击吗?
不能。每次问我这个问题的都是些运行 Microsoft Windows 的菜鸟。不可能有效保护 Windows 系统免受破坏行为攻击。代码和架构上的大量缺陷,使保护 Windows 的努力犹如隔靴搔痒。唯一可靠的预防是换到 Linux 或者其他设计得至少足够安全的系统上。
我的 Windows 软件出现问题了。你能帮我吗?
是的。进入DOS模式,然后输入“format c:”。你遇到的问题将在几分钟内消失。
我在哪里可以找到能与之交流的真正的黑客?
最佳办法是在你附近找一个 Unix 或 Linux 的用户组,参加他们的聚会(你可以在 ibiblio 的 LDP 站点找到一些指向用户组的链接)。
我过去曾说过在 IRC 上找不到真正的黑客,但我发觉现在情况有所改变。显然一些真正的黑客的社区像 GIMP 及 Perl,也有 IRC 频道了。)
你能推荐一些有关黑客的好书吗?
我维护着一份 Linux Reading List HOWTO,也许会对你有用。Loginataka 也很有意思。
关于 Python 的介绍,请访问 Python 官方站点上的 入门资料。
想要成为一名黑客,我需要擅长数学吗?
不需要。黑客很少使用常规的数学或算术。 尤其是你不会用到三角学、微积分或数学分析(在特定领域,这些学科很有用,例如 3D 电脑图像)。一些有限的数学(包括布尔代数,集合论,组合数学,图论)的背景知识会有帮助。了解一些系统的逻辑和布尔代数是有好处的。一些基础的离散数学(包括有限集合论、组合数学和图论)会有帮助。
更重要的是:你需要能够像数学家一样进行逻辑性地思考和进行缜密的推理。在这一点上绝大部分数学理论帮不了你,你需要有能够应付数学的修养和智力。如果你不够聪明,你成为黑客的希望很渺茫。如果你的修养不够,最好培养起来。
我认为一个好的,了解你当前状况的办法是,找一本 Rymond Smullyan 的书《What Is The Name Of This Book?》。Smullyan那些有趣的逻辑题很符合黑客精神。如果你能解答它们,这是个很好的信号。如果你能享受解题的过程那就更好了。
我该从哪种语言开始学?
XHTML(最新的 HTML 语言)——如果你还不懂的话。市面上有一大堆的封面精美,宣传得天花乱坠的、糟糕的 HTML 书籍,其中鲜有值的学习的。我最喜欢的是 HTML: The Definitive Guide。
但 HTML 不完全是一种编程语言。当你准备开始编程时,我推荐从 Python 起步。 你会听到一大群人推荐 Perl,并且 Perl 比 Python 流行得多(至少在我写这篇文章时是这样的),但是难学得多,且(以我之见)设计得不是很好。
C 确实重要,但它要比 Python 或 Perl 难学多了。不要尝试一上来就学 C。
Windows 用户不要满足于 Visual Basic。它会教给你坏习惯,而且它不可以移植,只能在 Windows下运行。尽量避免这种不可移植的语言。
我需要什么样的机器配置?
过去个人电脑计算能力相当不够,且内存小,给黑客的学习过程设置了人为的障碍。不过从 1990 年代以后就不是这样了,任何一台比 Intel 486DX50 好的机器,都有足够的能力进行开发工作,跑 Xorg,及进行 Internet 通讯,同时,现在能买到的最小的磁盘都已经绰绰有余。
选择用来学习的机器时,重要的一点是,注意配件是否是 Linux 兼容的(或 BSD 兼容,如果你选择学 BSD)。同刚才提到的一样,大多数现在的机器都是符合的;唯一的值得注意的地方在于,调制解调器和打印机——有些具备为 Windows 设计的配件的机器不会在 Linux 下工作。
关于硬件兼容性有一个 FAQ;最新版本在这里。
我想做贡献。你能帮我挑选一个问题来处理吗?
不行。因为我不知道你擅长什么,也不知道你对什么感兴趣。你需要做到自我驱动,否则无法进步。这也是为什么让别人帮你挑选的方向几乎都不会有用。
我得因此憎恨和反对Microsoft吗?
不,你不必如此。不是因为 Microsoft 不令人讨厌,而是因为黑客文化早在 Microsoft 出现之前就存在了,且将在 Microsoft 成为历史后依然存在。你耗费在憎恨 Microsoft 的任何力气,不如花在热爱你的技术上。写好的代码——那会相当有效地打击 Microsoft,且不会让你受到惩罚。
开放源代码软件不会使程序员丢饭碗吗?
不太可能——目前为止,开放源代码软件产业似乎创造了更多的就业机会,而不是减少就业机会。如果一个程序,有比没有能获得更高的经济收益,那么在写完后,程序员就应该得到报酬,不管程序是否是开放源代码。并且,无论写出多么“免费自由”的软件,都存在更多,对新的、定制软件的需求。我将这方便更多的论述,放在 Open Source 网站资料中。
哪里有免费的 Unix?
如果你的机器上还没有安装 Unix,我在本文的其他地方已经指出了从哪里可以获取到常用的免费 Unix。作为一名黑客,你需要自立自强,以及自学能力。现在,开始吧!