如何成为一名黑客
作者:Eric Steven Raymond
译者:Ionwing
怎么样才算是一名Hacker?
在 Jargon File 中有一堆关于“hacker”这个名词的定义,大部份意见认同黑客必须是技术上的行家及热衷于解决难题、突破限制的人,如果你想知道如何成为一名 hacker,这是真正重要的两个方面。(技能和态度)
历史可以追溯到数十年前第一台分时小型机诞生及ARPAnet实验刚刚开展的那个年代,那时有一个由程序专家和网络天才所组成的具有共享特质的文化体,这一体的成员是 “hacker”一词的起源。这些Hacker 构建了Internet,创作出我们现今广泛使用的 UNIX 操作系统, 他们使 Usenet 运转,而且还使 World Wide Web 工作起来,如果你是这个文化的一份子,如果你对其有所贡献,并且他人对此表示认同并称你为黑客,那么你就是一位黑客。
从精神的角度上来讲,“hacker”并不单单局限于软件黑客的范畴。人们也将黑客的处事态度应用于其它领域,如电子学领域或音乐领域 -- 事实上,你会发现在任何一种科学或艺术的最高境界都有这种精神的存在;
软件黑客们也认为这些其他领域的类似精神可以称之为“hacker” -- 有些人还主张黑客的通性是独立于其所从事的工作的。但是,在这篇文章中,我们将集中注意力于软件黑客们所需的技能和态度,以及创造了“hacker”一词的共享文化传统。
还有另外的一个团体的成员,他们大声地吵嚷着称自己为黑客,但其实他们并不是。这些人(主要是男性青少年)专门破坏计算机和盗用电话系统, 真正的hacker们称这类人为 “cracker”(骇客),并且不屑与他们为伍。黑客们认为骇客都是些懒惰、不负责任并且不太光彩的家伙,破解安全系统并不能使你成为一位黑客,就像能翘开车锁并不意味着你是汽车工程师一样。但是很不幸的,很多记者和作家愚蠢地使用黑客这个词来形容骇客;这让真正的黑客们愤怒异常。
两者的根本差别在于:黑客创造新东西,而骇客破坏它们。
如果你想要成为一位黑客,请继续读下去。如果你只是想要成为一位骇客,那么就请去读 alt.2600新闻组,并做好准备在进了十次五次监狱之后才发现自己并不是那么的棒。那就是我想说的关于骇客的全部。
黑客的态度
黑客们解决问题并创造出新的东西,他们信奉自由并乐于互相帮助。想被承认为一名黑客,你必须表现出你具有这种态度,并且必须是发自内心地相信它。
但是,如果你想通过表现黑客的态度来获取这个文化的认同,你可能忽略了事情的关键。成为相信这种精神的人对你来说非常的重要 -- 因为
这有助于你更好的学习并且维持你的动力。象所有的创造性艺术一样,成为一位大师的最好途径是学习大师的精神 -- 并不只从理性,更从感性。
或者就象下面这些现代禅教一样:
追求之路:
注意大师,
追随大师,
与大师同行,
彻底了解大师,
成为大师。
所以,如果你想要成为一位黑客,请重复下面的事情,直至坚信不疑:
1. 这个世界充满等待解决的迷人问题
做一个黑客可以得到很多乐趣,但那需要你付出与之相当的努力。努力需要动力,成功运动员的动力来自于不断突破自己身体上的极限所带来的快乐,同样地,作为一名黑客,你也必须能从解决难题、磨练技能和训练你的智力的过程中感受到那种悸动。
如果你不是天生就能感受到这种悸动的人,为了达成目标你必须设法使自己如此。否则,你会发现你的黑客精神很快会被诸如性、金钱和社交活动之类的事所消磨。
(你也必须对自己的学习能力建立信心 -- 相信你尽管对所要解决的问题所知不多,但只要针对它不断的学习,最终一定可以做到)。
2.不应该重复解决同一问题
富有创造力的头脑是珍贵而有限的资源。在还有那么多迷人的新问题等待解决的时候,他们不应该被浪费于重新发明轮子。
身为一名黑客,你必须意识到时间对于其他黑客是非常宝贵的 -- 所以,共享信息、解决问题并且始终提供解决方法给其他黑客几乎可以说是一种道德上的责任,这样其他的黑客就可以抽身解决新的问题了。
(你无须认为奉献你的全部创造是一种必须的义务,尽管那样做是得到其他黑客尊重的主要途径。黑客的价值观允许你出售足够的产品以满足食物和设备租金的需要。你可以运用你杰出的黑客技能支撑你的家庭或正当地获取财富,只要你在做这一切的时候没有背弃忠诚于你的技艺和黑客同道们)。
3. 无聊而单调的工作是有害的
黑客们(以及其他从事创造的人们)绝对不该从事那些无聊或者单调的乏味的重复性工作,因为那意味着他们没有做那些只有他们才能做的事 -- 解决新的问题。这种浪费对于任何人而言都是一种伤害。所以乏味而无聊的工作不仅使人生厌而且非常有害。
作为一位黑客应该自觉地远离那些可能使人厌烦的比特,不只为你自己, 也为其他所有的人(特别是其他黑客)。
(这里还存在一些例外,有时黑客们会做一些看起来似乎是重复性或者无聊的工作以作为一种脑力的训练,或是为了学到某种特殊的技能以及某种无法使用其他方法获得的特殊经验。这仅是一种选择 --
社交软件源码没有人应该被强迫面对那些无聊的工作)。
4. 自由才好
黑客们天生反对权威。任何一个可以命令你的人都可能妨害你解决令自己着迷的问题 -- 并且权威的工作方法通常会给你一个愚蠢的可以的理由。所以应该对遇到的任何权威主义报挑战态度,以免它危害到你和其它的黑客。
(这并非意味着应该反对所有的权威,正如小孩子需要被指导以阻止他们犯错,黑客也可能会服从某些权威,如果这样做可以更快更好地完成想做的工作,不过那是一种受限并且理性的协定,并非绝对的个人服从)。
权威擅长监察和保密,并且不信任自觉式的合作和信息共享 -- 他们只相信在他们控制之下的“合作”。所以,身为一名黑客,必须对监察制度、保密和使用强制或欺骗的手段强加责任的行为具有本能的反抗态度,你必须以信任作为你行为的基础。
5. 态度不能替代能力
要成为一名黑客,你必须发展这些态度。但单纯地模仿某种态度并不能使你成为一位真正的黑客,也不能使你成为一位冠军选手或摇滚明星。成为一名黑客需要智慧、实践、奉献和努力工作。
因此,你必须学会怀疑态度并且尊敬每一种能力。黑客们不会为装腔作势的人浪费时间,但是他们尊敬能力 -- 尤其是黑客能力,当然所有的能力都很好。拥有很少有人精通的特殊技能是特别棒的,最棒的能力包括敏锐的洞察、特别的技艺和专注的精神。
如果你尊敬能力,你将享受到发展自己能力的乐趣 -- 这会使努力工作和奉献成为一种充满激情的游戏而非一件苦差事。这对于想要成为黑客的人而言,是非常重要的。
基本的黑客技能
黑客的态度是非常重要的,而技术则更为重要。黑客的态度固然无可取代,但是在梦想着得到其他黑客承认之前,至少应该掌握一些基本的技能。
随著新技术不断地取代旧技术,这些工具也随着时间的变化慢慢地改变。例如,以前我们用机器码编写程序,直到现在广泛使用的HTML。明显需要的技能包括如下所列:
1. 学习如何编写程序
当然,这是黑客的基本技能。如果你不了解任何计算机语言,我推荐从Python开始。这种语言设计简洁,文档完整,非常适合初学者。作为优秀的第一语言,它不止是一件玩具;它强大的力量和可扩展性使其同样适用于大型项目。我在evaluation of Python一文中描述了更多的细节,在Python的Web站点有可用的指南。
Java也是很好的入门语言,虽然要比Python难,但是可以生成更加快速的代码,我想它是极好的第二语言。
但是要知道,如果你只懂得一两种语言,是无
法达到黑客所应具有的技术水平的,而充其量只是一名程序员而已 -- 你需要学习如何以通用的方法考虑程序设计问题,而不依赖于任何一种程序语言。要成为一名黑客,你必须做到能结合手册和你已经知道的知识快速地学会一门编程语言。就是说,你应该学习几种完全不同的语言。
如果你想进行真正的程序设计,必须要学习C,UNIX系统的核心程序语言。C++与C非常的类似,如果你已经熟悉了其中之一,学会另一个将十分容易。然而,这两者都不适合作为你最初学习的语言。
其它对黑客来说特别重要的语言还包括Perl和LISP。Perl非常有学习的价值;因为它在动态Web页和系统管理方面有非常广泛的应用,所以即使你不编写Perl程序也应该去学习阅读它。LISP值得学习是因为一旦你最终掌握了它,它将带给你深刻的经验和启迪,这种经验可以使你成为更加优秀的程序员,即使你从没有单独用LISP去实现程序。
实际上,最好去学习所有这五种语言(Pytho、Java、C/C++、Perl、和LISP)。除了作为最重要的黑客语言之外,它们还代表了完全不同的程序设计途径,将各自教授你极具价值的方法。
我无法在这里全面地指导如何进行程序设计 -- 那是非常复杂的技能。但是我可以告诉你的是这些无法从书本和课程中学到(大多数最好的黑客都是自修而成的)。你可以从书本学到语言的特征,但要使大脑把知识转化为实际的技能,只能通过实践和历练。做法是(a)读代码和(b)写代码。
学习编程就好象学习书写优美的自然语言。最好的方法就是阅读一些专家的作品,然后写一点自己的东西,读一点,写一点,再读一点,再写一些……不断地重复这个过程直到发展出自己的一套经济有效的模式。
好的代码读是很困难的,因为可供菜鸟级黑客阅读和更改的大型程序源码是非常少的。这种情况正在改变;Open-Source的软件、编程工具和操作系统(全部都是黑客创作的)正广泛地使用。这引出了我们的下一个主题……
2. 取得一份Open-Source的UNIX并学习去使用和运行它
我首先假定你拥有一部个人电脑或是能够获得一部(现在的小孩可以如此容易的拥有:-))。对于任何一个渴望增长黑客技能的网络新手来说,一个最重要的步骤就是取得一份Linux或者一种BSD-Unix,将它安装在自己的机器上,并运行起来。
不错,UNIX并不是这个世界上唯一的操作系统,但是其它操作系统只以二进制形式提供,你无法阅读它的代码,也无法修改它们。想要在DOS或Windows亦或MacOS下开始 学习黑客技能无异于绑著枷锁学习跳舞。
另外,UNIX是Internet
上的操作系统。你可以在不懂UNIX的情况下学习使用Internet,但你无法在不懂UNIX的情况下成为一个Internet黑客。基于这个原因,UNIX仍然是今天黑客文化的坚强核心。(这并不是绝对正确的,并且有一些旧时代的黑客并不以这种情况为乐,但是UNIX和Internet之间的共生关系是如此的牢固以至Microsoft的强壮肌肉也没能给其造成伤痕)。
因些,让你的UNIX运行起来吧! -- 我自己则比较喜欢Linux(你可以在一台机器上同时运行Linux和DOS/Windows操作系统)。学习它,让它运行起来,给它做修补。通过它与Internet交谈。阅读和修改程序代码,你将获得更多比Microsoft操作系统下所梦想的还要好的编程工具(包括C,LISP,Python,和Perl),当有一天你作为一位专家级的黑客回忆时,你会发现这是如此的有趣,并且让你学到了比想像的还要多的知识。
关于更多学习UNIX的信息,请看The Loginataka。
可以在Where can I get Linux获得Linux支持。
可以在搜寻BSD UNIX的帮助和资源。
我写了一个初级读本 -- basics of Unix and the Internet。
3. 学习使用WWW和书写HTML
大多数由黑客文化创造出来的东西都在我们看不见的地方发挥着作用,维持着工厂、办公室和大学的运转,很难发现其对非黑客人的生活造成了什么显著的影响。但Web是一个很大的例外,即使政客们也不得不承认这个巨大耀目的黑客玩具正在改变着世界。仅此一个理由(当然还有许多很好的理由),你需要学习如何使Web工作。
这并不意味着学习如何驾御浏览器(任何人都可以做得到),而是学习如何书写HTML,Web的标记语言。如果你还不知道如何设计程序,书写HTML可以帮助你养成一些习惯。建立起你的主页吧(这里是一个在Web上的初学者指南; here's one)。
不过拥有一个主页并不能帮助你成为黑客,Web上到处都是主页,大多数没有意义,内容空洞,象泥巴一样 -- 很时髦的泥巴,看起来千篇一律(可以在The HTML Hell Page中得到更多信息)。
为了让你的主页有价值,它必须富含内容 -- 必须有趣而且(或者)对其它黑客有用。让我们进入下一个主题……
黑客文化的状况
像大多数不涉及货币经济的文化一样,黑客文化通过名誉运作。当你尝试去解决一个有趣的问题时,它有多么有趣,你的解决方法好不好,正常情况下只有通过与你具有相同或更高技术的人作出评价。
因此,当你开始玩黑客游戏时,你应该认识到你的分数的保持主要来自于其他黑客对你技术的看法(这就是为什么只有得到了其他黑客的一致承认,你才真正算是一名黑客)。这个事实为黑客单独工作这一印
象所蒙蔽;也被黑客文化的禁忌(现在逐渐衰退但依然有效)即利己主义和被外部承认所不容。
确切地说,黑客文化就是人类学家所说的“天才文化”。你的地位和名誉的增长并不来自于对他人的支配,不因为你长得漂亮,不因为你有一些别人想要的东西,而是因为你的奉献。明确的说,你奉献出了你的时间,你的创造和你的技能。
这里是你为了获得其他黑客的尊敬可以做的五类事情:
1. 写Open-Source软件
首先(最重要的也是大多数情况下)是写其他黑客认为有趣或有用的程序,并把源代码公开给所有黑客文化中的人使用。
(我们称这项工作为“free software”,但关于free一词的真正含义带给人们许多的困扰,现在我们通常更愿意使用术语“open-source”软件)。
黑客最尊崇的是那些写出功能强大,为大家所需要,并且大家都在使用的程序的人。
2. 帮助Open-Source软件做测试和除错
黑客们也尊敬为Open-Source软件除错的人。在这个并不完善的世界里,我们将不可避免的花费大部分的软件开发时间在除错阶段。这就是为什么所有Open-Source的作者都会告诉你好的beta测试者(他们能够清楚的描述状况,准确的使问题局部化,可以容忍测试版本的 bug,并且能使用一些简单的诊断程序)和红宝石一样贵重。甚至他们之中有些人还可以分辨出哪些除错过程会造成拖延,哪些是令人疲惫的噩梦,哪些不过是些有益的麻烦。
如果你是一个网络新手,试着去一个你有兴趣的正在发展中的程序,并且成为一个好的beta测试者。从帮忙测试到帮忙除错进而到开始帮忙修改程序,就象自然级数一样,你将学到一些方法,并且和今后可以帮助你的人产生有益的联系。
3. 发布有用的信息
另一件好事是收集和过滤有用且有趣的信息,整理成Web页或FAQ列表之类的文档,并使其可以使用。
维护主要技术的FAQ通常可以获得和Open-Source软件作者几乎一样多的尊敬。
4. 帮忙维护基础设施
黑客文化(和Internet的发展)由一志愿者运作。这种运转需要做一些非常乏味但又必须的工作 -- 管理邮件列表,维护新闻组,维护大型的软件存档站点,开发RFC和其它技术的标准。
做这类事的人将得到很多的尊敬,因为人人都知道这些工作需要耗费很多的时间,又不像摆弄代码那样有趣。这样做显示了奉献精神。
5. 服务于黑客文化本身
最后一项,你可以为黑客文化本身服务和做宣传(例如,写一份正确的关于如何成为一名黑客的初级读本 :-))。这不是在你因做上面的四件事情而变得众所周知之前所应