如何成为黑客 r1.44
作者:
Eric Steven Raymond
Thyrsus Enterprises
<esr@thyrsus.com >
Copyright © 2001 Eric S. Raymond
http://www.catb.org/~esr/faqs/hacker-howto.html
翻译:
杜天微
<duzc2dtw (at) gmail.com>
2012.6.5
修订历史 修订 1.44 20 May 2012 esr 更新对于Java的评论。 修订 1.43 07 Feb 2011 esr 2010年Python的流行度超过Perl。 修订 1.42 22 Oct 2010 esr 增加备忘录。 修订 1.40 3 Nov 2008 esr 修复链接。 修订 1.39 14 Aug Jan 2008 esr 修复链接。 修订 1.38 8 Jan 2008 esr 反对Java作为早期学习语言。 修订 1.37 4 Oct 2007 esr 推荐Ubuntu作为面向新手的Unix发行版。
为什么撰写这篇文档?
什么是黑客
黑客精神
1.世界上充满了迷人的问题等待我 们去解决
2.没有什么问题是需要解决两次的
3.无聊和乏味是邪恶的
4.崇尚自由
5.精神无法替代才能
基本黑客技能
1.学习怎样编程
2.获得一个开源的Unix并学习使 用和运行
3.学习使用万维网并写HTML
4.学习英语
黑客社区的身份
1.写开源软件
2.帮助测试和调试开源软件
3.发布有用的信息
4.帮助维持基础工作
5.贡献黑客精神本身
黑客与怪人的联系
风格指引
备忘录:黑客、开源和自由软件
其他资源
常见问题
作为 《术语大全》 和 很多其他类似的广为人知的文件的编者或作者,我经常收到来自 网络新手的问题(大意)“如何成为神奇的黑客”的Email。到1996年,我注意到好像没有哪个FAQ或者网页文档讲述这个重要的问题,所以我开始撰 写这份文档。现在很多黑客认为这是权威,那么我认为意味着它确实是。当然,在这个话题上我不主张排他的权威,如果你不喜欢,你可以写一篇你自己的。
如果你正在读一版离线快照,那么当前版本位于 http://catb.org/~esr/faqs/hacker-howto.html 。
注意:在给我发邮件询问任何关于此文档的问题以前,请先阅读两次文档最后的常见问 题 。
有很多的翻译版本: Arabic , Belorussian , Chinese (Simplified) , Danish , Dutch , Estonian , German ,Greek , Italian , Hebrew , Norwegian , Portuguese (Brazilian) , Romanian Spanish , Turkish , Ukrainian , 和 Swedish 。 由于本文偶尔发生变化,所以他们可能已经过时。
这个文档由五个点和九个格子组成的图形装饰,他叫做glider**。他是一个不可思议的叫做生命 的 数学模型的简单样本,多年以来,黑客们都为此着迷。我认为他是一个黑客们非常喜欢的、非常好的、直观的标志——抽象,首先他看起来有点神秘,但却是通向他 拥有复杂逻辑的世界的大门。到这里 阅 读更多关于glider标志。
**杜天微注:没有找到合适的中文词汇来解释这个词,直译为“滑翔机”,但我感觉非常不合适。
《术语大全》 包 括一组对于“黑客”组织的解释,精通技术、喜好解决问题、突破限制等。但如果你想知道怎样变成一个黑客,真正重要的只有两条。
有一个分享文化的社区,包括专家程序员和网络奇才,起源于数十年前,第一个分时微机甚至更早的ARPA网络实验的时候。这个文化的成员创办了“黑客”组 织。黑客们建立因特网。黑客们制造了今天的Unix操作系统。黑客们使用Usenet。黑客们创造了万维网。如果你是这个文化的一部分,如果你对它有所贡 献, 而且里面其他的人认识你是谁并称你为黑客,那么你就是一个黑客。
黑客精神并不是仅限于软件黑客文化。很多人用黑客精神对待其他的事情,比如电子或音乐——实际上,你可以在任何更高级别的科学和艺术上找到它的踪影。软件 黑客称赞这些其他领域中类似的精神,也称他们“黑客”——并且很多人称黑客本性是与黑客所从事的领域无关的。但是在本文后面的部分中,我们将焦点放在软件 黑 客的技能和精神上,还有建立黑客组织的分享文化传统。
还有另外一群人,总是高呼他们自己是黑客,但实际上他们不是。这些人(主要是青年人)入侵电脑,并盗用电话系统。真的黑客称这些人为“骇客 (crackers)” 并不与之为伍。真的黑客认为骇客懒惰、不负责任、不光明磊落。 在hotwire网站上出租汽车不会让你成为汽车工程师,同样 的,破坏系统安全也不会让你变成黑客。 不幸的是,很多记者和作家错把骇客当成“黑客”,这让真正的黑客很恼火。
最基本的区别是:黑客创造,而crackers破坏。
如果你想当一个黑客,继续往下阅读。如果你想当一个cracker,去阅读 alt.2600 新 闻组,在你发现你不是你想象的那么聪明以后,在牢房里住上 5到10年。这是我对于骇客想说的全部内容。
1.世界上充满了迷人的问题等待我们去解决
2.没有什么问题是需要解决两次的
3.无聊和乏味是邪恶的
4.崇尚自由
5.精神无法替代才能
黑客解决问题并创建事物,他们相信自由并且自愿地互相帮助。要被认为是黑客,你需要秉承以下精神去做事,就像你原有的精神一样,而且你必须真的相信这种精 神。
但如果你认为培养黑客精神只是用来获得赞同的方式,那么你将错过很多东西。变成那种相信这些事情的人对你非常重要——帮助你学习并推动你前行。像创造性艺 术一样,最有效的成为大师的方式就是模仿大师的思想——包括知识和心态。
或者,就像下面的禅理:
所以,如果你想当一个黑客,重复下面的内容,直到你相信他们:
作为一个黑客有很多的乐趣,但是这种乐趣需要很多努力。成功的运动员通过突破他们的身体极限来满足身体的愉悦,进而获得动力。类似的, 作为一名黑客,你必须从解决问题、磨砺技能和运用信息来获得基本的快感。
如果你不是这类人,你有必要改变自己才能成为一名黑客。否则你会发现你的黑客能力正在为性欲、金钱和社会认同感而分散,腐蚀殆尽。
(你也需要对自己的学习能力有信念——相信即使你没有解决某个问题的能力,如果你解决某一部分并从中学习,你将有足够的能力解决下一部分——然后继续,直 到解决整个问题)
创新头脑是很昂贵和稀缺的资源。当很多迷人的问题等待解决的时候,它们不应该被浪费在重复创造轮子上。
像黑客一样做事,你必须认为其他黑客的思考时间是宝贵的——以至于分享信息是一种道德责任,解决问题并将其解决方法公布出去,这样其他的黑客就可以解决新 的难题,而不是永远重复解决旧的问题。
提示:无论如何,“没有什么问题是需要解决两次的”并不意味着你必须认为所有现有解决方案都是神圣的,或者任何问题只有一种解决方式。通常,我们深入研究 一个方案后,我们会学到很多之前对这个问题不了解的方面。这样很好,并且对判断我们是否可以做的更好是有必要的。不好的是人为的法律或制度障碍(比如闭源 代码),阻碍好的解决方式被重用,并迫使人们重复发明轮子。
(你不必认为谁强迫你让出你的创新成果,虽然黑客这样做将获得其他黑客的最大尊重。为了充足的食物、房租和计算机而贩卖你的创作,与黑客价值观相符。用你 的黑客技能来维持一个家庭甚至致富都是可以的,只要你不要忘记对于艺术和黑客同伴的忠诚。)
黑客(和其他创造性工作的人们)永远不应该从事或被迫从事无聊乏味的重复性劳动,因为当这些发生时,意味着他们没有干只有他们才能做的事情——解决新的问 题。 这种浪费会对每个人造成伤害。所以说无聊和乏味不仅是不愉快,而且是完全的邪恶。
像黑客一样做事,你应该尽可能地自动化处理无聊的部分,越多越好,不仅是为你自己,也为其他人(尤其是其他的黑客)。
(一个明显的例外。对于旁观者来说黑客有时会做一些看似重复和无聊的事情,例如整理思维的练习、学习某种技能或是获得某种特别的体验。但这是自主选择的 ——一个独立思考的人不应该被迫处于令人厌烦的环境。)
黑客天生反对霸权。如果有能够给你一个让你停止解决任何你痴迷的问题——并且,以集权思想控制你的人,通常会寻找一些傻到惊人的理由来这样做。为了不让极 权主义抑制你和其他黑客,无论你在哪发现,都应该与它抗争。
(这并不是向所有权利挑战。儿童需要引导,罪犯需要约束。如果能够获得比执行命令所花费的时间更有价值的东西,黑客们也可以接受某种权威。但仅限于有意识 的 商议;那些屈服于霸权的 要求绝不可能被黑客接受。)
极权主义喜好审查和保密。他们不信任自由合作和信息共享——他们只喜欢他们控制下的“合作”。像黑客一样做事,你必须对审查制度、保密制度和利用暴力或欺 骗压迫的手段拥有本能的抵抗。你应该自觉地依照这个信仰行动。
要当黑客,你需要拥有这些精神。但是仅仅拥有精神,并不能让你成为一名黑客,正如仅有精神并不能让你成为体育冠军或摇滚明星一样。成为一名黑客需要智力、 实践、贡献和努力。
因此,你需要学习怀疑精神,并且尊重各种能力。黑客不会让装模作样的人浪费他们的时间,但是他们尊重能力——尤其是黑客才能,但是任何能力都是值得尊重 的。如果你能掌握稀缺的才能就太好了,如果你掌握的技能又需要敏锐的精神、实践技能和专注的能力那就再好不过了。
如果你尊重才能,你将享受学习的过程——努力和奉献将变成乐趣,而不是无趣。为了成为黑客,这种精神是非常重要的。
1.学习怎样编程
2.获得一个开源的Unix并学习使用和运行
3.学习使用万维网并写HTML
4.学习英语
黑客精神是必要的,但技能更重要。精神无法替代才能,在被其他黑客称为黑客之前,有些基本技能需要你掌握。
随着科技发展,新旧技能交替,这些基本知识也会慢慢改变。例如,这里曾经包括机器语言编程,而直到最近才加入HTML。但现在,非常明确地包括:
这是当然的,这是最基本的黑客技能。如果你不懂得任何计算机语言,我推荐你从Python开始。他设计清晰,文档有好,并且对于初学者较有好。尽管是一个 很好的入门语言,但他不是玩具;它强大且灵活,并且适合大项目。我写过一篇更详细的《evaluation of Python》 。Python的网站 ** 上也有一些很好的指南 。
**杜天微注:Python官方下载链接好像被墙了。
我曾经推荐Java为很好的学习语言,但这则评论 改 变了我的想法(在文章中搜索“The Pitfalls of Java as a First Programming Language” )。黑客不能像五金店里的水管工一样处理问题;你必须知道这些组件到底干了什么。现在我认为,也许做好还是先学习C和Lisp,然后才是Java。
也许还有更普遍的观点。如果一种语言为你做了太多,它也许同时是很好的生产工具和很差劲的学习工具。不仅是语言有这个问题;web应用框架,比如 RubyOnRails, CakePHP, Django , 很容易给你一个表面化的理解,当必须处理难题或想把问题分解时,你将不知所措。
如果你热爱严肃地编程,你有必要学习C——Unix的核心语言。C++和C有非常近的关系;如果你懂得其中一个,另一个也将很容易学会。但这两种语言都不 适合作为第一次学习的语言。事实上,你离C越远,你的生产力越高。
C非常高效,并且节省系统资源。
不幸的是,C获得效率是通过要求你人工做更多低级资源管理(如内存)。所有的低级代码都是复杂和易错的,并且Debug会占有你大量的时间。当计算机发展 到如今的计算能力时,这通常得不偿失——最好使用一种能让机器更低效率但是让你的时间更高效率的语言。比如Python。
其他对于黑客有特殊重要性的语言还有Perl和LISP。很重要的原因使得Perl值得一学;它广泛用于动态网页和系统管理中,所以即使你从不写Perl 代码,至少也应该能够读懂。为了在不要求C的计算效率的地方避免C编程,很多人使用Perl,但和我向你推荐Python的理由一样。你应该能理解他们的 代码。
LISP值得学习的不同原因是——当你学会LISP时,它将给你意义深远的启迪。即使你并没有太多使用LISP,这种体验也会让你成为更好的程序员。(你 可以很容易从Emacs编辑器或GIMP的Script-Fu插件获得一些LISP的初期体验。)
最好的,还是学习全部Python,C/C++,Java,Perl,和LISP这五种语言。除了是最终要的黑客语言外,他们还代表了不同的编程方法,并 且都将给你宝贵的经验。
但要注意,简单的积累语言并不能让你达到黑客的技能水平,甚至难以达到是一个普通的程序员水平——你需要学习怎样以独立于任何语言的方式思考编程问题。作 为 一个真正的黑客,你需要知道怎样通过手册,对比你已学过的知识,在几天内学习一种新的语言。这意味着你需要学习几种完全不同的语言。
我无法在这里给你完整的怎样学习编程的指南——这是一个复杂的技能。但是我可以告诉你书籍和课程也做不到——一些,也许几乎所有最好的黑客都是靠自学的。 你 可以从书籍中学习语言的特性——仅仅是一些皮毛,但把知识变成生存技能的思想只能通过实践和向他人学习得到。最好的方法是:1 读代码 2 写代码。
Google的顶级黑客、最广泛使用的AI教程的合著者——Peter Norvig,曾经写过一篇优秀的短文《在10年内学会编程》 。 他的“编程的成功之道(recipe for programming success)”值得一读。
学习编程就像学习一门自然语言写作。最好的方式就是读一些大师的模范作品,自己写一些东西,再读更多,再写多一点,再读更多,再多写一点……重复如此,直 到你的代码像你的参考模范一样强大且有条理。
曾经,找好的代码来阅读是很难的事情,因为那时候几乎没有大型程序源码给初出茅庐的黑客阅读和练手。这种境况戏剧性的改变了;开源软件,编程工具和操作 系 统(黑客创造的)已经很容易取得。这正好带领我们进入下一个话题……
假如你有或可以使用一台私人计算机。(花点时间来感谢“可以使用”的重大意义。黑客文化创立初期,计算机非常昂贵,个人无法拥有。)任何新手能够学习黑客 技能的最重要的一步就是获得一个Linux、BSD-Unix或OpenSolaris,在私人计算机上安装并运行它。
是的,世界上还有有很多其他的操作系统。但是他们通过二进制发布——你不能读到或者修改源代码。在Microsoft Windows或者其他闭源系统上从事黑客活动,就像穿着盔甲跳舞一样。
在Mac OS X系统上是可能的,但只是一部分系统开源——好像有很多面墙,而且你一定要小心,不要开发依赖于Apple的专利代码的程序。如果你把视线聚焦在Unix 的底层,你将学到很多有用的东西。
Unix是网络操作系统。你可以不懂Unix而使用因特网,但如果你无法成为一名网络黑客。由于这个原因,今天的黑客文化非常以Unix为中心。(并不是 一直都这样,有些旧时的黑客对于它仍然很不高兴,但是Unix和因特网有足够强的共存性,连微软的力量也不能改变。)
所以,启动一个Unix——我个人更喜欢Linux,但是还有其他的种类(当然,你可以在一台机器上运行Linux和Windows)。学习,运行,修 补,上网,读源代码,修改源代码。你会获得比微软的操作系统梦想中更好的编程工具(包括C, LISP, Python以及Perl),你会非常愉快,你将沉浸于无尽的知识之中,直到你以黑客大师的视角重新审视它。
阅读《The Loginataka》 学习更多Unix 知识。你也许还想看看《Unix编程 艺术》 。
要接触Linux,请看看 Linux在 线! 网站 ;你可以从那里下载并从本地Linux用户组寻求安装帮助。
在这份HOWTO完成后的第一个十年中,我听说,对于新手来说所有的Linux发行版都几乎相同。但在2006-2007年间,一个最好的选择出现了:Ubuntu 。 当其他发行版有各自长处的同时,Ubuntu对Linux新手有特别的亲和力。
你可以从www.bsd.org 获 得BSD方面的帮助和资源。
启动一个被Linux爱好者称为live CD 的 东西,是涉足Linux很好的途径。在不修改你硬盘数据的 情况下,从一张CD启动一个发行版。它运行缓慢,因为光盘读取很慢,但它是损耗最小的方式。
我写过一篇《Unix和Internet基础》 的入门教程。
以前,如果你是一个新手,我不建议你只安装唯一的Linux或BSD系统。但现在,即使是对于新手来说,安装程序也已经好到足够能让你自己完整地操作了。 尽管如此,我仍然建议你联系你周围的Linux用户群体来寻求帮助。它不会妨碍谁,但会让你顺利地继续下去。
对于非黑客来说,用以帮助工厂、办公室以及大学运营的黑客产物,并不会造成什么影响。网络是一个很大的特例,就连政治家都不得不承认这个庞大、闪亮的黑客 玩具确实改变了整个世界。仅仅为了这个原因(当然还有其他非常多的因素),你必须学习怎样使用网络。
这并不仅仅意味着怎样使用浏览器(任何人都知道的),而且要学习写HTML代码——网络的标记语言。如果你不懂如何编程,写HTML将培养你的思维方式, 帮助你学习。所以去建立一个主页吧。尝试使用比传统的HTML更严格的XHTML语法。(网上有很多入门指南,比如这里 。)
但是仅有一个主页并不足以让你成为一名黑客。网上到处都是主页,大多数都是没有重点的、没有内涵的垃圾——看上去很美的垃圾,但基本一样。(你可以到HTML地狱 看 看。)
作为有价值的表现,你的页面必须有内容——一定要有意思并且/或者对于其他黑客有帮助。那么这正好引出下一个话题……
我自己作为一个以英语为母语的美国人,我很不愿意提出这一点,免得被当作帝国主义文化侵略。但是有些以其他语言为母语的人们劝我指出英语是黑客文化和因特 网的语言,而你必须使用英语在黑客社区中活动。
1991年前后,我听说很多黑客用英语讨论技术问题,即使他们使用同一种母语;同时人们认为英语比其他语言更富有技术词汇,也因此成为工作中 更好的工具。类似的原因也导致很多英文书籍的译本不能令人满意。(如果有翻译的话。)
Linus Torvalds**,一个芬兰人,用英语注释他的代码(显然他没有考虑过其他可能。)。他流畅的英文表达能力使他有能力召集来自全球的Linux开发人 员。这是一个值得借鉴的例子。
**杜天微注:林 纳斯·本纳第克特·托瓦兹 (Linus Benedict Torvalds, 1969年~ ),著名的电脑程序员(程式师)、黑客。 Linux内 核的发明人及该计划的合作者。托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统(作业系统)内核之一。
以英语为母语并不能保证你拥有能够作为黑客的语言能力。如果你写作能力属于半文盲,不合文法,还有拼写错误,很多黑客(包括我)将忽略你。蹩脚的文字并不 代表混乱的思维,我们普遍发现这样强烈的关系——思维混乱的人毫无价值。如果你没有足够的英文写作能力,那就去学吧。
1.写开源软件
2.帮助测试和调试开源软件
3.发布有用的信息
4.帮助维持基础工作
5.贡献黑客精神本身
像很多其他非营利性文化一样,黑客社区依靠声望发展。你尝试解决有趣的问题,但是它们有多有趣,以及你的解决办法是不是出色,只有其他具有技能的黑客可以 评价。
所以,当你玩黑客游戏的时候,你学习怎样通过别人对自己能力的认可来得分(这就是为什么在别人称呼你为黑客之前你还不是)。人们总是误解黑客是孤独工作 的;黑客文化误区(从以后的1990年代开始消退,但仍然拥有庞大的势力)反对将个人或外部认可包括在个人行为动力中。
值得一提的是,人类学家称黑客文化为“贡献文化”。你通过贡献获得身份和地位,而不是通过统治他人、美丽的外表,或者拥有别人想要得到的东西。尤其是贡献 你的时间、创造力和创造成果。
你可以通过以下五种最基本的行为获得其他黑客的尊重:
首先(最中心的和最传统的)就是写其他黑客认为有趣或有用的程序,并且将源码贡献给整个黑客社区使用。
(我们曾经称这成果为“自由软件(free software)”,但是使很多不了解我们所说的“free”的意义的人感到困惑。所以我们现在更倾向于称之为“开源 ”软件。)
黑客们最崇拜的就是那些贡献了庞大、强大、被大众需求并最终被广泛应用的程序的作者。
但是有一些历史要点。在1990年代中期,很多黑客还占用大量的时间开发闭源软件的时候,也是社区最困难的时候,黑客们总是观望着周围的开源软件开发者。 当我1996年撰写这个HOWTO的第一版的时候,这仍然如此;1997年以后,主流的开源软件开始改变世界。今天,“黑客社区”和“开源开发者”都 是用来描述同一种文化和人群——但是有必要记住这并不重视相同的。(了解更多,请阅读《备忘录:黑客,开源和自由 软件》 部分。)
忍受和调试开源软件的人也可以提供帮助。在这个并不是十分完美的世界上,我们不可避免地耗费开发时间在调试阶段。这也是为什么很多开源软件作者都对好的测 试员有很高的评价(他们知道如何清楚地描述症状,准确定位问题,可以忍受快速发布版本的bug,并乐于提交诊断程序)。一个好的测试员会将漫长、疲惫的调 试的夜晚变得不那么苦恼。
如果你是个新手,去找一个你感兴趣的、正在开发中的程序,并尝试做一个好的测试员。通过帮助调试和修改程序,你自然可以进步。你能够通过这样的方式学到很 多,而且你帮助过的人将来也会回报给你。
另外一个很好的事情就是收集和过滤有用的和有趣的信息,发布到FAQ之类的网页或文档中,并维持这些内容可用。
很多技术FAQ的维护者获得了与开源软件作者一样的尊重。
黑客精神(以及因特网的发展)依靠志愿者维持。有很多必要而乏味的工作保证他们运行——管理邮件列表,维护新闻组,维护数量庞大的软件存档,撰写RFC和 其他技术标准。
做这类工作的人获得了非常大的尊重,因为谁都知道这些工作耗费了大量的时间,而且不像写代码那样有趣。这样也可以作出贡献。
最后,你能够宣传黑客精神或者为其提供服务(例如撰写一份怎样成为黑客的教程 -:) )。通常,在通过以上四种事情达到被多数人认识以前,你并不会这么做。
确切的说黑客精神没有领袖,但它确实有英雄、长老、历史学家和公众代言人。当你在这个圈子里混了足够长的时间,有可能成长为他们其中的一员。注意:黑客们 并不认同以自我为中心的人,所以拥有这样声望也是很危险的。
与其奋力追求,倒不如找到合适自己的位置,融入你的圈子,然后谦虚、有礼地维护你的身份。
与大众的传说相反,你不必成为一个怪人(Nerd)才能成为黑客。虽然它确实有益,并且很多黑客都是怪人。作为一个“被社会遗忘”的人,能够将你的精力放 在真正重要的事情上,比如思考和黑客行为。
正是由于这个原因,很多黑客骄傲地接受“怪人”的称呼——这证明他们与社会期望相独立(科幻小说和策略游戏也通常是黑客们所喜爱的)。在1990年代, “怪人(Nerd)”包含轻微遍地的意思,而“畸形人(geek)”则是蔑称;在2000年以后的某个时间,至少在美国公众文化中,他们交换了地位,而到 现 在,在不爱生气的人周围,甚至有一种有特殊意义的“自豪的畸形人”文化团体。
如果你能够集中精力从事黑客工作并能维持生计,那是非常好的。这比1970年代我是一个新手的时候要容易得多;现在的大众文化更容易接受技术怪人。认为黑 客是高质量爱人和伴的人数越来越多。
如果你因为生活苦闷而做黑客,也没问题——至少你不会难以集中精力。也许你还能获得更好的人生。
再说一次,作为一个黑客,你必须拥有完全的黑客思维。当你不在电脑旁边时,还有些有益的事情可以做。他们不能代替黑客行为(没有什么可以),但很多黑客这 样 做,并且感觉它们和黑客本质存在基本联系。
这些事情中,你做到的越多,很有可能你越是当黑客的材料。有些技能看起来并不是很清晰,但他们都将锻炼左右脑混合思考的能力;黑客需要逻辑推理以及在一瞬 间以非逻辑的方式处理事物的能力。
认真地工作,同样认真地娱乐。对于真正的黑客,工作与娱乐、科学与艺术之间的界限没有那么明显,或者归结为更高等级的创新玩法。而且,不要满足于狭小领域 的技能。尽管多数黑客都自称为程序员,但他们其他的技能很可能也超越常人,比如系统管理、网页设计和硬件维修都是很普遍的技能。如果一个黑客是系统管理员 的话,那么他在脚本编程和网页设计方面都有足够的能力。黑客从不浅尝辄止;如果他们投身一项技能,就一定会掌握。
最后,有些事情不要做:
以上这些事情只会被别人嘲笑。黑客记性都很好——让他们忘记你之前犯下的错误需要很多年的时间。
昵称和头衔的问题值得深思。利用头衔隐藏身份是crackers的无知和愚蠢的行为,warez d00dz,或者其他的低姿态。黑客不干这种事;黑客以其所作所为自豪,并以真实姓名与他人分享。所以,如果你有假名,丢了它。在黑客文化中,假名只让别 人会把你看作失败者。
1996年,当我最早撰写这篇HOWTO文档的时候,情况和现在大不一样。关于变化的描述可以帮助不清楚开源和自由软件关系的人理清黑客社区的开源、自由 软件和Linux。如果你对这些不感兴趣,你可以跳过这一部分,直接阅读后面的FAQ。
正如我之前所说的,黑客风气和社区在1990年以后Linux诞生以前很久就存在了;1976年我就参与其中,并且它的起源很容易追溯到1960年代。但 是 在Linux以前,很多黑客工作都是在私有系统或研发中的系统,比如麻省理工大学的ITS系统从来没有走出实验室。尽管有一些早期的(Linux之前)人 试图改变这种状况,但它们也只能对黑客社区中很少数真正有奉献精神的人有影响,更不用说整个世界了。
现在被称作“开源”的东西也要追溯到黑客社区所做的工作,但直到1985年它仍然是一个未命名的民间传统,而不是有理论和声明的意识行为。这样的历史直到 1985年才被改写,长老级黑客Richard Stallman(“RMS”)尝试为它命名——“自由软件(free software)”。但他的命名行为也是一种主张;他为“自由软件”标签附加了当时黑客们无法接受的思想包袱。结果,“自由软件”标签被黑客社区中大量 的少数派高声否决(特别是与BSD Unix有关的人),并被大量的其他的人(包括我自己)谨慎地使用。
尽管有这种禁锢,RMS提出解释并在“自由软件”的旗帜下带领广大黑客,直到1990年代中期。Linux的崛起对它形成了严重地挑战。Linux给开源 开发提供了自然的温床。很多我们现在称为“开源”的项目从私有的Unix迁移到Linux。Linux社区爆炸性增长,形成了空前庞大、同时也 更异类的黑客文化。RMS企图将所有这些归结为他的“自由软件”运动,但被Linux社区的多样性和Linux的发明人——Linus Torvalds——的怀疑论所挫败。由于没有其他选择,Torvalds继续使用“自由软件”的说法,而不是被大众否决的RMS的思想包袱。许多年轻的 黑客紧随其后。
1996年,当我第一次发布这个黑客HOWTO的时候,黑客社区正在急速地向Linux和一些其他 的开源操作系统(特别是BSD Unix的衍生系统)聚集。我们很多人花费数十年时间在闭源系统上开发闭源软件的记忆还没有被遗忘,但事实似乎已经证明它早就死了。黑客们渐渐地用对 Linux或Apache之类的开源项目的忠诚来表明他们自己是黑客。
虽然如此,但直到1998年初,“开源”仍没有出现。当他出现以后,大多数黑客社区都在半年内采用了它;“自由软件”附带的某些思想附属品是例外。从 1998年开始,特别是大约2003年以后,“黑客”和“开源(自由软件)开发”已经非常接近。现在这些分类已经几乎没有什么分别,而且将来似乎也不会改 变。
无论如何,他值得人们记住,他们并不总是相同的。
Paul Graham写了一篇叫做《伟大的黑客》 的教 程,还有在《大 学生》 中他 富有智慧的言论。
还有篇文档叫做《如何成为程序 员》 对本文做了极好的补充。除了很多关于编码和技能的有价值的劝告以外,里面还有关于如何在程序员团队中效力。
我也写了一篇《黑 客简史》 。
我写过一部《大教堂与集市》 ,详细地解释了Linux和开源文化。我也在后来的《开 拓智域》(Homesteading the Noosphere) 中讨论了这个话题。
Rick Moen关于如何 运营Linux用户组 写了一篇优秀的文档。
我和Rick Moen合作撰写了另外一篇《提 问的智慧》 。它可以帮助你更有效地寻求帮助。
如果你需要了解个人电脑、Unix和因特网是怎样工作的,参考《Unix和因特网基本知识》 。
当你需要发布软件或为软件写补丁,尝试遵守《实践软件发布基本知识》 中的准则。
如果你喜欢禅宗,你可能也会喜欢《无根的 根:无名大师的Unix真传》 。
问:怎样才能说自己已经是一个黑客?
问:你能教我做黑客吗?
问:那么,我要如何开始?
问:我得什么时候开始学?现在会不会太迟了?
问:要学多久才能学会黑客技能?
问:Visual Basic 是好的入门语言吗?
问:你能帮我“黑”一个系统吗?或者教我怎么黑它?
问:我怎么样才能得到别人帐号的密码?
问:我如何入侵/查看/监视别人的 Email?
问:我如何才能在IRC聊天室里偷到频道 op 的特权?
问:我被黑了。你能帮我避免以后再被攻击吗?
问:我的 Windows 软件出现问题了。你能帮我吗?
问:我 在哪里能找到可以与之交流的真正的黑客?
问:你能推荐一些有关黑客的好书吗?
问:成为一名黑客我需要擅长数学吗?
问:我该从那种语言学起?
问:我需要什么样的机器配置?
问:我想贡献社区。你可以帮我选一个问题让我下手吗?
问:我得因此憎恨和反对 Microsoft 吗?
问:开放源代码软件不会使程序员丢饭碗吗?
问:哪里有免费的Unix?
答:问你自己以下问题:
如果你的所有答案都是肯定的,你就是一个黑客,任何两条都不是充分的。
第一个是关于技能的测试。也许你掌握前文描述的很少的技能就能够通过。如果你有大量的代码被一个开源项目接受,你可以轻而易举的通过。
第二个测试是关于态度的。如果黑客思维的五条原则,大约是描述你的生活,而不是小说,那么你就通过一半了。这是内部的一半;另外,外部的一半是你对黑客社 区长期项目的认同程度。
这里有一个不完整,但是有指导性的列表:Linux的改进和传播对你是否很重要?你是否对软件自由充满热情?仇恨垄断?你是否相信电脑可以让世界更富有且 更人道?
但有一点告诫。黑客社区有一些特殊的、根本的政治倾向——其中两点是保卫言论自由和保护开源不被知识产侵害。 实 践这两条的是一些民间组织,例如电子前沿基金会 (Electronic Frontier Foundation) 就是其中之一。不过虽然如此,黑客们对于有任何明确政治目的的团体都是心怀戒备的,因为我们已经从各种经验教训中学到一点:这些活动只会分裂黑客社团,并 让黑客们分心。如果有人以黑客精神为名组织一场首都大游|行,那他就完全没有弄明白这点。真正的应对方式也许应该是“闭上嘴巴,给他们看代码”。
第 三个问题有点循环递归的味道。在“什么是黑客”一节我已经讲过,作为一名黑客的意义在于参与某个黑客社群,也就是社交网络的一个亚文化团体,作为内部的贡 献成员以及外部的宣传者积极活动。和很久以前相比,黑客群体现在的团结意识和自我意识已经增强了很多。过去三十年来,随着互联网的发展,社交网络逐渐开始 发挥举足轻重的作用,而黑客的亚文化团体也更加容易发展和维护了。这种变革的一个有表性的现象就是:黑客群体现在都有自己的T恤了。
研究网络的社会学家把黑客文化归为“看不见的大学”,而且注意到这些网络还有所谓的“看门人”——其中的一些核心成员,他们有一定的权威,可以准 新成员的进入。所谓的“看不见的大学”本来就是一个松散的非正式组织,所以这些“看门人”也只是这门称呼而已。但不是每个黑客都是“看门人”,这是每个黑 客都深刻明白的一点。“看门人”需要有一定的资历和成就,究竟要到什么程度很难讲,但一旦有这样的人出现,每一个黑客都能辨识出来。
答:自 从第一次发布这份文档,我每周都会收到一些请求,(经常一天几封)要我“教会我做黑客”。遗憾的是,我 没有时间和精力来干这个;我自己的黑客项目,及作为一个开放源代码倡导者,已经占用了我110%的时间。
即便我教你,黑客也依然是一项自行修炼的基本态度和技术。你会发现, 当真正的黑客想帮助你的时候,如果你乞求他们用汤匙把他们知道的全部“喂”给你的话,他们不会尊重你。
先去学一些东西。证明你在尝试,你能靠自己去学习。然后再去向你遇到的黑客请教特殊的问题。
如果你发E-mail给一位黑客寻求他的帮助,有两件事一定要记住。 第一,我们发现写出来的文字显得懒或粗心的人也通常因懒于思考且粗心大意,不能成为好的黑客 ——因此注意正确地拼写,使用正确的语法和标点,否则你可能会无人理睬。 第二,不要试图要求回复到一个与 你 的发信地址不同的ISP帐号;这样做的人一般是盗用帐号,我们对于奖赏或者帮助窃贼不感兴趣。
答:对你而言最佳的入门方式也许是去参加 LUG(Linux用户组)的聚会。 你可以找到在LDP 的综合 Linux 信息页面 上找到类似的组织;也许有一个在你附近,可能与一所大学或学校挂钩。如果你提出要求,LUG 成员也许会给你一套 Linux,当然此后会帮你安装并带你入门。
答:你有动力学习的时候就是好时候。大多数人看来都是在15-20岁之间开始感兴趣的,但我也知道一些例外。
答:这取决于你的基础能力和努力程度。大多数人,只要他们专心学习 就能在 18 个月到 2 年之间学会一套令人尊敬的技能。但不要以为就此结束了;在黑客领域(如同很多其他领域一样)需要花费十年时间才能做到精通。 如果你是一个真正的黑客,你要用你的全部余生来学习和完善你的技术。
答:既然你问了这个问题,那你肯定是想在 Microsoft Windows 操作系统下学习黑客技能。这本身就不是一个好主意。我前面讲过在 Windows 下 hack 就跟穿着骑士铠甲跳舞一样,我不是在开玩笑。别试图做这个,Windows 是一个很恶劣的 hack 环境,而且一直如此。
Visual Basic 有一个特征性问题,就是它不可移植。虽然也有些 Visual Basic 开源实现的雏形,但实现的只是 ECMA 标准的一个很小的子集。在 Windows 下大部分类库的知识产权都是 Microsoft 独家所有,如果你不是及其小心的话——比别人更小心是真正的生存能力——你的代码将只能在 Microsoft 支持的平台上使用。如果你从 Unix 起步,那你也有更好的语言可选,而且类库质量还更高,例如 Python 就是其中之一。
和其他的 Basic 类语言一样,Visual Basic 这门编程语言的设计也很糟糕,它会教你一些坏的编程习惯。不,不要让我详细描述这些细节,这可是罄竹难书。还是去学一门设计优良的语言吧。
其中一个坏习惯是让你依赖于单一厂商的函数库、控件及开发工具。一般而言,任何不能够完整支持至少 Linux 或者某一种 BSD,或其不能支持至少三种以上操作系统的语言,都是糟糕的黑客语言。
答:No。任何读完这份 FAQ 后还问这个问题的人,都是无可救药的蠢材,我有时间也不会理睬。任何发给我的此类电子邮件都会被忽略或被痛骂一顿。
答:这是cracker行为。滚开,白痴。
答:这是cracker行为。在我面前消失,智障。
答:这是cracker行为。滚蛋吧,笨蛋。
答:不行。目前为止,每次问我这个问题的,都是一些运行 Microsoft Windows 的菜鸟。不可能有效的保护 Windows 系统免受骇客攻击;太多代码和架构的缺陷使保护 Windows 的努力有如隔靴搔痒。唯一可靠的预防就是转移到 Linux 或其他设计得至少足够安全的系统。
答:当然。打开 DOS命令行输入“format c:”。你遇到的任何问题将会在几分钟之内消失。
答:最佳办法是在你附近找一个Unix或Linux的用户组,参加他们的聚会。(你可以在 ibiblio 的LDP 站 点 找到一些用户组的链接。)
(我过去曾说过不能在IRC上找到真正的黑客,但我发觉现在情况有所改变。显然一些真正的黑客的社区像 GIMP 及 Perl,也有IRC频道了。)
答:我维护着一份《Linux基础知识阅读列表》 ,也许你会觉得有 用。 Loginataka 也 值得一读。
关于Python的介绍,请访问在Python站点上的 入门指南 。
答:不用。黑客道很少使用常规的数学或算术。尤其是你不会经常使用三角关系、微积分或数学分析(这些例外应用在 三维图像等特殊应用领域)。了解一些数学逻 辑和布尔代数是有益的。一些有限数学的功底(集合理论,组合数学,图论)会有帮助。
更重要的一点:你要有逻辑思维能力,能够以数学家的方式推理。虽然大部分的数学知识对你可能没什么用处,但数学思维的能力对你来说是极其重要的。如果 你 缺乏这方面的智慧,要做一名黑客恐怕是无望了。如果你缺乏这方面的训练,还是尽早开始吧。
我认为找一本Raymond Smullyan的《这本书叫什么名字?(What Is The Name Of This Book? )》是判断你是否合适的绝佳途径。 Smullyan的有趣的逻辑谜团非常适合黑客精神。能够解决这些问题是一个很好的标志;乐于解决这些问题是一个更好的开始。
答:XHTML(HTML最新支系)如果你还没学过的话。市面上有一大堆的封面精美,宣传得天花乱坠的 HTML 书籍,不幸的是质量优秀的几近于无。我最喜欢的是《HTML: 权威指南》 。
但HTML 不是一种完整的编程语言。当你准备开始编程时,我推荐从Python 起步。 你会听到一大群人推荐 Perl,但是 Perl 要难学得多,而且(以我之见)设计得不是很好。
C确实重要,但它也比 Python 或 Perl 难多了。不要尝试先学 C。
Windows 用户注意:不要满足于 Visual Basic。它会教给你坏习惯,而且它离不开Windows。敬而远之。
答:过去个人电脑能力相当不足并且内存很小,这给黑客的学习过程设置了人为的障碍。不过 1990 中期以后就不是这样了;任何一台 Intel 486DX50 以上配置的机器都有足够的能力进行开发工作、运行 X 系统、以及进行 Internet 通讯。而且你买到的市面上最小的硬盘都大得足够你使用了。
选择用来学习的机器时重要的一点是注意配件是否是Linux兼容的(或BSD兼容,如果你选择 BSD 的话)。同样,大多数现在的机器都是符合的;唯一值得注意的在于 modem 和无线网卡;有些具备为Windows设计的配件的机器不会在Linux下工作。
这里有一份硬件兼容性的FAQ;最新版在这里 。
答:不行,因为我不知道你的兴趣和擅长领域在哪里。如果你没有内在动力,你就很难坚持下去,所以说,别人只给你的路是 行不通的。
试试这个。在 Freshmeat 网站 的项目滚动公告上观察 几天。当你看见有个项目让你觉得“酷!我想为他工作!”,那就 加入他。
答:不,你不必如此。不是因为Microsoft不讨厌,而是因为黑客文化早在 Microsoft 出现之前就存在了,且将在Microsoft成为历史后依然存在。 与其耗费力气在憎恨 Microsoft 上,不如花在爱你的技术上。写好的代码——那会相当有效地打击 Microsoft 又不会让你得到恶报。
答:目前看起来不太可能——开放源代码软件产业似乎创造了更多的就业机会而不是减少就业机会。如果写一个程序比起不 写来是纯经济收益的话,那么在写完后,程序员应该得到报酬而无论程序是否是开放源代码。并且,无论写出多么“免费自由”的软件,都存在更多新的、定制化的软件的需求。我在Open Source 网站上有更多 的论述。
答:如果你还没有在你的机器上安装Unix,在本份文档的某个地方我已经提到过何处可以得到最常用的免费 Unix。要做一名黑客,你需要动力和积极性,还要有自学能力。现在就开始吧……
79736 篇文章