如何成为一名黑客

来源:互联网 发布:手机即时通讯软件 编辑:程序博客网 时间:2024/05/11 15:11

如何成为一名黑客

埃里克·史蒂文·雷蒙德(EricSteven Raymond)

Thyrsus Enterprises



修订历史修订版本 1.462013年9月25日埃里克·史蒂文·雷蒙德(esr)增加了对小额赞助的解释和 gittip 链接. 为什么你不应该就如何开始征询我的建议.修订版本 1.452013年5月12日埃里克·史蒂文·雷蒙德(esr)Open Solaris不开源, Unity 把一切弄的一团糟.修订版本 1.442012年5月20日埃里克·史蒂文·雷蒙德(esr)更新了针对Java 的评判.修订版本 1.432011年2月7日埃里克·史蒂文·雷蒙德(esr)Python的普及程度在2010年超过了 Perl.修订版本 1.422010年10月22日埃里克·史蒂文·雷蒙德(esr)增加了 "历史注释".修订版本 1.402008年11月3日埃里克·史蒂文·雷蒙德(esr)修复相关链接.修订版本 1.392008年8月14日埃里克·史蒂文·雷蒙德(esr)修复相关链接.修订版本 1.382008年1月8日埃里克·史蒂文·雷蒙德(esr)将 Java 从适合早期学习的语言中剔除.修订版本 1.372007年10月4日埃里克·史蒂文·雷蒙德(esr)将 Ubuntu 作为适合新手的 Unix 发行版进行推荐.

目录

为什么编写该文档?
什么是黑客?
黑客的态度
1. 世界充满了迷人的问题等待着我们去解决.
2. 任何相同的问题都不应该再次去求解.
3. 无聊和单调乏味是邪恶的.
4. 崇尚自由.
5. 态度替代不了能力.
基本的黑客技能
1. 学习如何编程.
2. 获取一种开源的 Unix 系统并学习使用和维护它.
3. 学习如何使用万维网以及编写 HTML.
4. 如果不能自如的使用英语,请继续学习.
如何获得黑客文化圈子的认可
1. 编写开源软件
2. 帮助测试和调试开源软件
3. 发布有用的信息
4. 帮助维持基础设施的运作
5. 为黑客文化本身做贡献
黑客/书呆子之间的关系
风格的要点
历史注释:黑客,开源和自由软件
其他资源
常问问题(FAQ)

为什么编写该文档?

作为 黑客行话大全(JargonFile) 的编辑以及其他几篇类似的知名文档的作者,我经常收到热心的网络新手通过email(不依不饶的)请教"如何成为一名神奇的黑客?" 早在1996年我就注意到似乎没有任何相关的 FAQ 或者 web 文档解答这个重要的问题,所以我开始编写该文档.现在很多黑客认为该文档就是权威的答案,我想可以算是吧.同时,我并没有声明自己是该主题上的绝对权威;如果你并不喜欢该文档的内容,可以自己写一篇.

如果你阅读的是该文档的脱机快照,可以访问如下网址获取最新版本 http://catb.org/~esr/faqs/hacker-howto.html.

注意:在该文档的末尾有一份 常问问题(FAQ) 列表. 在就该文档给我发任何email 之前请先将该列表读两遍.

该文档有多个翻译版本:ArabicBelorussian简体中文,Czech,Danish,Dutch,Estonian,German,GreekItalianHebrew,Norwegian,PersianPortuguese(Brazilian),RomanianSpanish,Turkish,以及Swedish.注意,因为该文档不定期更新,这些翻译版本可能有不同程度的延迟.

装饰本文档的五点九方格图称为 滑翔机(glider). 这是一款多年来令黑客们着迷的数学仿真程序生命游戏(Life)的一种简单模式,拥有一些惊人的特性.我认为它就像一个能形象刻画黑客是什么的徽章 — 抽象,初看很神秘,但是却是一扇用自己的复杂内在逻辑通往整个世界的门.可以访问http://catb.org/~esr/hacker-emblem/ 了解更多关于滑翔机徽章的内容.

如果你认为该文章有用,请 在Gittip上提供点赞助. 也请同时考虑给使用了他们的代码创造价值的其他黑客赞助.大量持续的小额捐助增长很快,这样就可以为用他们的劳动给你提供帮助的人释放更多的资源创造更多的价值.

什么是黑客?

黑客行话大全(JargonFile) 中关于‘黑客’这条术语有一堆的定义,大部分与娴熟的技术以及从解决问题和突破限制的过程中获取快乐相关.然而如果你想知道如何成为 一名黑客,只有两条是真正相关的 .

这是一个由专业程序员和网络奇才构成的社区,也是一种分享文化,其历史可以追溯到几十年前的第一代时分微型计算机以及最早的 ARPAnet 计划.该文化的成员发明了术语'hacker'.黑客构建了 Internet.黑客造就了今天看到的 Unix 操作系统.黑客完成了万维网.如果你是该文化的一部分,如果你对此有所贡献并且圈子内的其他人知道你并称你为黑客,你就是一名黑客了.

黑客的思维方式不局限于这种软件黑客文化.有些人将黑客态度用在了其他事情上,如电子学或者音乐 — 实际上,你可以在任何最高水平的科学或者艺术上发现这种情形.软件黑客认可任何领域中的这种类似的精神并且也可以称呼他们'黑客' — 并且一些人认同黑客本质上实际是和黑客从事的具体媒介是独立无关的.但是在该文档的剩余部分我们会聚焦于软件黑客的技巧及态度,以及产生了 'hacker' 这个名词的这种分享文化传统.

还有另外一拨人高调宣称自己为黑客,但他们不是.这些人(主要是青少年男性)从入侵计算机,盗用移动电话系统中找乐子.真正的黑客称呼这些人为 '骇客',不想与其扯上任何关系.在很多真正的黑客看来,骇客懒惰,无责任心,不是非常聪明.致力于安全入侵并不能让你成为一名黑客,就像用短路方式发动汽车并不能让你成为汽车工程师一样.不幸的是,很多记者和作家经常愚蠢的用 '黑客' 这个词描述骇客;这一直让真正的黑客大为光火.

根本的区别在于:黑客创建东西,骇客搞破坏.

如果你想成为一名黑客,请继续阅读.如果你想成为一名骇客,去阅读 alt.2600 新闻组吧,在意识到你没你想象的那么聪明前要准备好做五到十次大狱.关于骇客我就说这么多.

黑客的态度

1. 世界充满了迷人的问题等待着我们去解决.
2. 任何相同的问题都不应该再次去求解.
3. 无聊和单调乏味是邪恶的.
4. 崇尚自由.
5. 态度替代不了能力.

黑客解决问题,创造事物,崇尚自由以及自愿的互助.要被别人接纳为一名黑客,你自己的行为必须体现出这样的态度.而要表现出持有如此的态度,你必须真正坚信它.

但是如果你只是将培养黑客态度作为获取该圈子承认的需要,那就太浅薄了.因为相信这些事情的这类人对于你自己非常重要 — 这有助于你的学习,并能持续不断的激励你.和所有需要创造性的艺术一样,成为大师最有效的方式是模仿大师们的思维方式 —不只是智力上的,精神面貌上也一样.

或许,下面的这首现代的禅诗能更好的描述这一点:


走这样的路子:
观察大师,
跟随大师,
与大师同行,
洞悉大师,
成为大师.

因此,如果你想成为一名黑客,请反复思考如下的内容直到你坚信它们:

1. 世界充满了迷人的问题等待着我们去解决.

做一名黑客充满乐趣,但这些乐趣是需要花费很多努力才能得到的.这些努力的付出需要有动力.成功的运动员从锻炼身体超越他们自己的生理极限的这种生理愉悦中获取动力.同样要成为一名黑客,你需要从解决问题,磨砺你的技术,锻炼你的智力中获取基本的兴奋感.

如果你不是骨子里就是渴望这种感觉的人,你需要变成这样才能成为一名黑客.否则你会发现自己的黑客精神会被诸如性,金钱,以及社会认可之类的分心的东西消磨掉.

(你还必须对自己的学习能力建立信心 — 相信即使自己可能对需要解决的某个问题知之甚少,只要对此有了一点点进展并就此继续学习研究,会继续学到更多并进入下一阶段 — 如此最终解决它.)

2. 任何相同的问题都不应该再次去求解.

创造性的脑袋是宝贵的有限的资源, 不应该在依然有如此多的迷人的新问题等待解决时将他们浪费在重新发明轮子这类事情上.

作为一名黑客,你必须相信其他黑客的思考时间是宝贵的 — 以至于分享信息,解决问题并公布解决方案对于你来讲几乎是一种道德责任, 这样其他黑客可以解决 新的问题而不是不断的重新解决老问题.

然而要注意 "任何相同的问题都不应该再次去求解"并非是说你要以神圣的眼光去看待所有已经存在的解决方案,或者认为给定的任何问题只有一种正确的解决方案.通常,我们会通过对一个方案最初的研究从我们没接触过的问题中学到很多.让我们自己确信可以做的更好没啥问题,通常也是必要的,而那些阻碍好的解决方案重用的仿真技术,法律或者体制(如封闭源代码)或者强迫 人们重新发明轮子的做法是不可取的.

(你不必认为你必须将自己的所有 创造公布出来,即使这样做的黑客是赢得其他黑客尊敬最多的人.卖钱支付食物房租以及购买计算机的费用和黑客价值观是相容的.使用自己的黑客技能支撑家庭甚至致富都无可厚非,只要在这样做时不要忘记自己对这种艺术以及和你相连的黑客同胞们的忠诚.)

3. 无聊和单调乏味是邪恶的.

黑客(以及泛指的有创造性的人们)应该永远不会感到无聊或者被逼去做愚蠢的重复性的工作,因为出现这种情况时意味着他们没有做只有他们才能做的事情 — 解决新问题.这种浪费会伤害每个人.因此无聊和单调乏味不只是不愉快的事情,实际上是邪恶的.

要成为一名黑客,你必须坚信该点而尽力将这些恼人的工作自动化,不只是为了你自己,也是为了其他任何人(尤其是其他黑客).

(这点上有一类明显的例外.黑客有时候会做一些也许在他人看来重复性的或者乏味的事情作为一种清脑练习,或者是为了获取某种技巧或某类其他方式无法获取的特殊经验.但这是自愿的 — 任何一个能独立思考的人都不会强迫自己做无聊的事情.)

4. 崇尚自由.

黑客天生是反独裁的.任何可以命令你的人都可以迫使你停止解决任何令你着迷的问题 — 并为你提供独裁者的思维方式,但给出的为何这样做的理由通常很明显的非常愚蠢.因此不论在任何地方,只要你发现了独裁的做派,都要和其作斗争,为了自己也是为了其他黑客.

(这并非就是挑战所有的权威.儿童需要引导,罪犯需要看管.黑客可以接受某种程度的权威,只要他获取的东西多过他遵守命令所花费的时间.但是这有一个限度,必须是有意识的讨价还价;那种独裁者们所要的个人屈从是不可能的.)

独裁对审查和保密的要求永无止境.并且他们不信任自愿的合作和信息分享 — 他们只喜欢他们能控制的‘合作’.所以要成为一名黑客,你必须培养一种对审查,保密以及使用武力或者欺骗逼迫有担责能力成年人这类做法的本能敌意.同时你必须自愿为此信念而斗争.

5. 态度替代不了能力.

要成为一名黑客,你必须培养这些态度.但是单独的模仿态度并不能让自己成为一名黑客,也不能让你成为一个冠军运动员或者摇滚巨星.需要耗费你的智力,实践,奉献以及辛苦的努力才能成为一名黑客.

因此,你需要学会怀疑的态度并尊重每一种能力.黑客们不会装腔作势浪费他们的时间,但是他们对能力是尊重的—尤其是黑客相关的能力,但是任何事情上面的能力都是有价值的.具备很少人能够掌控的有高要求的能力尤其好,包含了对智力,技巧以及专注等苛刻技能要求的能力是最好的.

如果你对能力尊重,你将会很享受的提高这些能力 — 辛苦的工作以及付出将会成为一种激烈的玩耍而非苦差事.这一点对成为一名黑客非常重要.

基本的黑客技能

1. 学习如何编程.
2. 获取一种开源的 Unix 系统并学习使用和维护它.
3. 学习如何使用万维网以及编写 HTML.
4. 如果不能自如的使用英语,请继续学习.

黑客的态度很关键,但是技能甚至更关键.态度替代不了能力,并且在任何黑客称呼你为黑客前有一些基本的技能工具箱你必须先掌握..

这个工具箱随着技术创造出了新的技能淘汰了老的技能而随时间在缓慢的变化.例如过去需要掌握机器语言变成,而直到现在才包含HTML.但是就现在而言,很清晰的可以明确会包含如下的内容:

1. 学习如何编程.

这当然是最基本的黑客技能.如果你不知道任何计算机语言,我推荐从Python开始.它设计清晰,文档支持良好,对于初学者相对友好.即使是一种适合作为第一种学习的语言,它却不是一个玩具;它相当强大灵活非常适合大型的项目.我在对Python 的评价中有更详细的描述.可以在Python web 网站 上获取好的教程.

我过去将Java作为一种适合早期学习的好语言进行推荐,但是该批评 改变了我的看法(在这里搜索The Pitfalls ofJava 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写程序也应该学会阅读它.很多人像我建议你使用Python那样使用Perl来避免不需要C语言的高效率时用C语言变成.你需要能够理解这种语言的代码.

LISP 因为其他原因值得学习 — 当你最终掌握它时,你会经历深刻的启迪.该经验会让你今后成为更好的程序员,即使你实际上很少使用LISP写程序.(你可以通过编写好修改Emacs文本编辑器的编辑模式或GIMP的Script-Fu插件相当容易的获取一些关于LISP的初始体验.)

实际上最好能学习所有 Python, C/C++, Java, Perl, and LISP 这五种语言.除了因为它们是最重要的黑客语言外,它们代表了截然不同的编程方式,每种都会教导你学到不同的有价值的东西.

但是要注意你不能简单的通过不断学习不同的语言达到一个黑客甚至仅仅是一名程序员所应该有的编程技巧的水平 — 你需要学会在更一般的意义上独立于任何一种语言思考编程问题.要成为一名真正的黑客,你要做到能够在几天内通过将手册的内容和你已经掌握的内容关联起来学会一门新语言.这意味着你应该学习很多非常不同的语言.

这里我不能就如何学习编程提供完全的指导 — 这是一项复杂的技能.但是我可以告诉你靠书本和上课是搞不定的— 很多,也许 绝大部分 o最好的黑客都是自学的.你可以从书本学习语言的功能— 这只是应学知识的一角,但是将知识转化为谋生技能的思维模式只能通过实践和学徒期才能学到.做到这点需要 (a)阅读代码 和 (b)编写.

Peter Norvig, Google的顶级黑客之一, 使用最广的AI教科书的合著者,写了一篇非常精彩的文章 十年自学编程 . 他的”成功编程的秘诀”值得仔细品味.

学习编程就像学习如何书写优美的自然语言.最好的方式就是阅读一些大师的作品,然后自己写点东西,然后再阅读,再写作,再阅读,再写作 … 一直重复,直到你写东西的模式可以体现出应有的力量和简约.

过去找到合适的代码来阅读非常困难,因为很少有大的程序源代码供菜鸟黑客阅读捣鼓.这种情况已经发生了戏剧性的变化;开源软件,编程工具以及操作系统(都是由黑客构建的)现在可以随处获取.让我们接着讨论下一个主题 …

2. 获取一种开源的Unix系统并学习使用和维护它.

我这里假定你有一台或者可以使用一台个人计算机.(这里要花一点时间领会这有多么的重要.黑客文化就是源于最初计算机非常昂贵,个人不可能拥有.)任何新手迈向学习黑客技能的最重要的第一步就是获取一份 Linux 或者 BSD-Unix 的衍生版本,安装在个人计算机上并运行它.

是的,这个世界上除了 Unix 以外还有其他操作系统.但是他们是以二进制形式发布的 — 你无法阅读到源代码也不能修改它.尝试在微软的Windows 机器或者任何其他闭源系统下学习黑客技术就像穿着石膏罩学跳舞.

在 Mac OS X 下也许可行,但该系统只有一部分是开源的 — 你会处处碰壁,并且要小心避免养成依赖苹果专利代码的坏习惯.如果专注于Unix 底层,你会学到一些有用的东西.

Unix 是Internet 的操作系统.虽然你可以学会使用 Internet 而不必知道 Unix,但是如果你不了解 Unix 就不能成为一名 Internet 黑客.因此今天的黑客文化很大程度上是以 Unix 为中心的.(并不总是这样,一些早期的黑客仍对此耿耿于怀,但是Unix 和 Internet的共生关系变的如此之强甚至连强势的微软也不可能撼动.)

所以,上一套 Unix吧 — 我自己喜欢Linux,但你还有其他选择(是的,你 可以 在同一台机器上同时安装Linux 和微软的Windows. 学习它,运行它,捣鼓它,用它在Internet上冲浪,阅读它的代码,修改这些代码.你可以得到比任何微软操作系统上梦寐以求的编程工具更好的编程工具(包括 C, LISP, Python, 和 Perl),你将获取很多乐趣,并且学到比你意识到你正在学的更多的知识,直到你成为一名大师级黑客回顾时才能看到这点.

有关学习Unix 更多的内容,可以参考 The Loginataka. 你也可以浏览一下 TheArt Of Unix Programming.

要上手 Linux,可以访问 Linux Online! 网站;你也可以从这里下载或者(更好的主意是)寻求本地的Linux用户组的帮助来协助你安装.

在本 HOWTO的前十年里,我曾从一个新用户的视角讲所有的Linux发行版几乎都差不多.但是在2006-2007,一个真正的最佳选择出现了: Ubuntu. 同时其他发行版有他们自己领域的强项, Ubuntu 对于Linux新手来讲相当友好.然而要注意几年后 Ubuntu引入作为默认桌面的"Unity"即丑陋可用性也差;其变体Xubuntu 或 Kubuntu更好用.

可以从 www.bsd.org 获取BSD Unix相关的的帮助和资源.

一种好的尝试Linux 的方法是用 Linux爱好者称为 liveCD的光盘启动计算机,这种发行版完全从CD运行而不用修改你的硬盘.这种方式比较慢,因为CD比较慢,但这是一种小窥Linux 而不会导致任何灾难后果的方式.

我已经写了下面这份入门资料 basicsof Unix and the Internet.

我过去反对新手将Linux或者BSD作为独立的项目安装.现如今安装程序已经足够好,即使对新手也完全可以自己完成安装.即使如此,我还是推荐联系本地的Linux用户组寻求帮助.这有益无害,也会让安装过程更顺利.

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

黑客文化创建的大部分东西都在无形中运作着,帮助工厂,办公室以及大学正常运转,对非黑客的普通人生活没有任何明显的影响.Web是一个巨大的例外,即便是政客 也承认这个巨大耀眼的黑客玩具已经改变了整个世界.单是因为该原因(当然还有很多其他好的理由)你就需要去学习 Web是如何运作的.

这不仅仅是说你要学习如何使用浏览器(任何人都会),而是要你学习如何编写HTML这门Web标记语言.如果你不知道如何编程,编写HTML将教会你一些有助于学习的思维习惯.所以创建一个主页吧.尝试坚持用XHTML,这是一门比传统的HTML更整洁的语言.(Web上有很多好的入门教程;这里就是一个.)

但是仅仅拥有一个主页并不能让你成为一名黑客.网上满是主页,绝大部分是毫无意义,言之无物的垃圾—看起来很时髦的垃圾,需要提醒你,但是垃圾就是垃圾(关于此话题的更多信息可以访问The HTML HellPage).

T要体现出某些价值,你的网页必须言之有物 — 对其他黑客来讲必须有趣和/或有用.这将我们引入了下一个主题…

4. 如果不能自如的使用英语,请继续学习.

作为一名以英语作为母语的美国人,我以前很不情愿提此建议,以免被看做某种文化帝国主义.但是很多以其他语言为母语的人一直力劝我指出英语是黑客文化和互联网的工作语言,必须掌握以便在黑客社区能正常工作.

大概在1991年左右我了解到很多英语并非母语的黑客使用英语进行技术讨论,即使他们的母语相同的时候也这样;据我那时了解的报道,英语拥有的技术词汇比其他任何语言都丰富,因此单纯的讲英语是工作中一个更好的工具.基于类似的原因,对于用英语编写的技术书籍的翻译经常不能让人满意(只能说是完成了翻译).

Linus Torvalds,一位芬兰人,用英语注释他的代码(视乎他一直都是这样做的).他能够招募组织起一个世界范围内的Linux开发者社区, 流利的英语是其中一个重要的因素.这是一个值得学习的榜样.

作为一名以英语作为母语的人并不能保证你的语言技巧好到足以达到黑客需要的水平.如果你的写作水平是半文盲的,语法不通,充满了拼写错误,很多黑客(包括我)往往会忽略你.虽然马虎的行文并不一定意味着思维也是这样,我们通常发现二者还是强相关的 — 草率的思想家可不是大家需要的.如果你还不能胜任写作,学习吧.

如何获得黑客文化圈子的认可

1. 编写开源软件
2. 帮助测试和调试开源软件
3. 发布有用的信息
4. 帮助维持基础设施的运作
5. 为黑客文化本身做贡献

像大多数不涉及金钱经济的文化一样,黑客王国依靠荣誉运转.你努力去解决有趣的问题,但是到底有多有趣,你的解决是否真的优秀,只有和你技术相当或者水平更高的人才有能力评判.

相应地,当你玩黑客这个游戏的时候,你主要从其他黑客对你技能的评判了解你的水平(这就是为什么直到其他黑客经常称呼你为黑客的时候你才真正是).黑客经常单独工作这一形象,以及拒绝承认自己的动力源于自我认可或外界认可这个黑客文化禁忌(从上个世纪90年代在逐渐减弱但依然很强大)掩盖了这个事实.

具体点讲,黑客王国被人类学家称为 献礼文化(giftculture). 你在其中赢得的地位和荣誉不是通过统治其他人,或者自己的美貌,或者拥有其他人想要的东西得到到,而是依靠自己的风险.具体来讲,就是风险你的时间,你的创造力,以及运用你的技能创造的成果.

要获取其他黑客的尊重,基本上有五种事情可以做:

1. 编写开源软件

第一(最集中也是最传统的)是编写其他黑客认为有趣或者有用的程序,提供程序源代码给整个黑客文化使用.

(过去我们称这些为”自由软件”,但是这使得很多不能确切理解”自由”这个词含义的人很困惑.我们很多人现在使用 “开源(open-source)”软件这个词).

黑客王国里最受崇敬的神话了的人是那些编写了大型好用迎合大众需求的程序并公布出来,现在每个人都在使用这些程序的人.

但是这里有一个历史分界点.虽然现在黑客们总将他们中的开源软件开发者视作我们社区的最坚强的核心,但在上个世纪90年代中期以前大部分黑客的大部分时间是在从事闭源相关的工作.当我在1996年编写该HOWTO第一个版本的时候还是这样;开源软件成为主流还是1997年以后的事情.今天,"黑客社区"和"开源开发者"实际上是对同一文化和同一类人的两种描述 —但值得记住以前不是如此.(关于此主题的更信息,可以阅读“历史注释:黑客,开源和自由软件"这一章节.)

2. 帮助测试和调试开源软件

那些力挺和测试开源软件的人也会受到黑客的尊敬.在这个并不完美的世界里,我们不可避免的花费我们绝大部分软件开发时间在调试阶段上.这就是为什么有头脑的开源软件作者会告诉你优秀的beta测试员(知道如何清洗的描述错误,准确的定位错误,能够忍受快速发布版本中的bug,并且愿意使用一些简单的诊断程序)的如红宝石一样价值不菲.甚至这些人员中的一位可以判断出测试阶段间的差异,哪些拖延了的,哪些是让人筋疲力尽的噩梦,哪些只是一点有意思的小麻烦.

如果你是一位新手,尝试找到一个你感兴趣的开发中的程序,成为一名优秀的beta测试员.从帮助测试程序到帮助调试程序到帮助修改程序是一个自然的过程.通过这种方式你可以学到很多,并且会和未来会帮助你的人种下因缘.

3. 发布有用的信息

另一个好事是去收集整理有用有趣的信息做成网页或者像FAQ列表这样的文档,并且让大家可以方便的访问.

主要技术FAQ的维护者受到的尊重几乎和开源作者一样多.

4. 帮助维持基础设施的运作

黑客文化(以及涉及的Internet 工程的开发工作)是由志愿者维系的.要保证这一切继续向前就有很多必要但乏味的工作需要做—管理邮件列表,调和新闻组,维护大型软件归档站点,开发RFC和其他技术标准等.

将这类事情做好的人会得到很多的尊敬,因为每个人都知道这些工作十分耗时也不像编程那么好玩.做这些事情表现出了可贵的牺牲精神.

5. 为黑客文化本身做贡献

最后,你可以为这个文化本身服务和宣传布道(例如,就如何成为一名黑客编写一份更精细的入门读物:-))这些并不需要你已经在这个圈子混了一段时间并且在上面四点中的一点变的有名后才有资格做的.

准确来说黑客文化没有领袖,但确实有自己的文化英雄,部落长老,历史学家和发言人.如果你已经在这个圈里呆了够久,你可能成长为其中之一.黑客并不信任部落长老赤裸裸的自夸,所以直接追求这类名誉是很危险的.与其奋力追求,不如自己理清自己的位置让其水到渠成属于你,关于自己的地位需要保持应有的谦逊和优雅.

黑客/书呆子之间的关系

与流行的说法相反,作为一名黑客你不必做一名书呆子.然而这确实有效果,并且很多黑客实际上就是书呆子. 某种程度上的不合群有助于你将精力集中于重要的事情上,如思考和破解难题.

因此,很多黑客已经接受’geek’这个标签作为一种值得骄傲的徽章— 这是一种声明他们独立于主流社会期望的方式(就像黑客们喜欢的其他东西如科幻小说和战略游戏一样).术语’书呆子’在上个世纪90年代的用法也是这样,那时候’书呆子’是一个温和的词而’geek’却是一个刺耳的词;2000后他们交换了位置,至少在美国的流行文化中,现在甚至在非技术人员间流行着让他们自豪的极客文化.

如果你可以集中足够的精力做到擅长黑客工作的同时还能拥有自在的生活,那是非常好的.现在做到这点比我在上个世纪70年代还是个新手的时候容易的多;现在的主流文化对技术怪人要友善的多.甚至现在越来越多的人意识到黑客通常是高素质的恋人和可能的配偶.

如果你因为生活不爽而迷上黑客,那也OK — 至少你不会分神了.也许晚点你就会找到自己想要的生活.

风格的要点

再重复提一下,要成为一名黑客,你必须进入黑客的思维模式.当你不在计算机旁时有其他一些也许有益的事情可做.这些不能代替破解难题本身(没有其他的事情可以),但是很多黑客都做这些事情,并且感到这些事情在某些基本方式方法上和黑客的本质是相连的.

  • 学好用母语写作.虽然认为程序员的写作能力欠佳是一种普遍的成见,相当多数量的黑客(包括我知道的所有最有成就的黑客)是非常棒的作家.

  • 阅读科幻小说.参加科幻小说讨论会(一种探访黑客和菜鸟黑客的好方式).

  • 以学习武术的形式进行训练.智力训练对修炼武术的重要性和对黑客的重要性类似.黑客中最流行的无疑是诸如空手道,功夫,合气道,或柔术这样的亚洲徒手运动,也有西方的击剑和亚洲的剑术的追随者.从上个世纪90年代晚期在一些手枪射击合法的地方,这项运动也越来越流行.最黑客式的武术是那些强调智力训练,放松意识和控制而非纯粹的体力,对运动的热衷或者身体的韧性.

  • 实践学习一种冥想训练.长期以来最受黑客推崇的是禅(重要的是,在从禅获益的同时不需要信仰新的或者放弃你已经信仰的宗教).其他的也许也可行,但要小心选择那些不需要你信仰疯狂的事情的形式.

  • 开发对音乐的分析能力.学习欣赏各种奇特的音乐.学习演奏一些乐器或者学习唱歌.

  • 提高双关语和文字游戏的领悟能力.

这些事情你做的越多,你越像一位天生的黑客. 至于为什么要做这些事情原因并不完全清楚,但他们都和左右脑能力的综合相关,这一点似乎非常重要;黑客既要能够进行合理的逻辑推理又要随时可以跳出问题的逻辑表象.

像玩一样紧张激烈的工作,像工作一样紧张激烈的玩.对于真正的黑客,"游戏","工作","科研"和"艺术"之间的界限趋于消失了,或者归并为一种高阶的创新游戏.同时,不要满足于比较窄的技巧面.虽然大多数黑客自我形容为程序员,他们对像下面这些相关技能—系统管理,web设计,PC硬件排障—游刃有余是很常见的.作为系统管理员的黑客另一方面对于脚本编程和web设计一般也会相当精通.黑客做事情不会半途而废;一旦他们投入学习某项技能,最终会相当擅长.

最后,有一些事情 不要 去做.

  • 不要使用愚蠢的,华而不实的用户名或者昵称.

  • 不要参加Usenet(或任何其他地方)的口水战.

  • 不要自称’计算机朋克’(‘cyberpunk’),也不要浪费时间在任何这样的人身上.

  • 不要让自己的帖子或者发出的Email充满了拼写错误或者语法糟糕.

做这些事情唯一的结果就是被看做一个笨蛋.黑客们记忆力超群 — 可能需要多年后你早期犯下的错误才会被淡忘.

对网名或者化名问题的处理值得多花些精力.将自己的身份用化名隐藏起来的是骇客,软件破解者以及其他低等生物的幼稚愚蠢的行为特征.黑客不会这么做;他们为自己的所作所为而骄傲并希望能将这些和自己的真实的 名字联系起来.因此如果你有化名,丢了吧.在黑客文化中这只会把你标记为一个失败者.

历史注释:黑客,开源和自由软件

当我最初在1996年年底写这份how-to的时候,围绕这个主题相关的一些环境和今天看到的差异很大.关于这些变化的一些词汇也许可以帮助那些为开源,自由软件和Linux黑客社区所困扰的人澄清他们之间的关系.如果你对此并不好奇,可以直接略就此过去阅读 FAQ 和参考书目.

我这里描述的黑客精神和社区要远早于1990年之后出现的Linux;我最初参与其中是在1976年左右,而其发源至少要追溯到上个世纪60年代早期.但是在Linux之前,多数的黑客工作内容是基于专用操作系统或者像MIT的ITS这样的一堆实验性质的自行开发的系统进行的,这些系统从没有部署到最初的学术环境之外.虽然有一些先行者(早于Linux)尝试改变这种情况,其影响充其量仅是非常边缘化的并且仅限于他们真正忠实的信徒的小圈子内,这些人即使在黑客社区内的占比也是极小的,更不用说和一般意义上更大的软件世界相比了.

现在所谓的"开源"可以追溯的历史和黑客社区一样早,但是直到1985年,其仍然是一种无名的民间实践而不是一种有自己的理论和宣言的有意识的运动.在1985年著名黑客 Richard Stallman ("RMS")尝试用"自由软件"为其命名,史前时期告终.但是他的这个命名的举动同时也是一种宣言行动;他为"自由软件"这个标签增加了思想包袱,大多数现有的黑客社区从未接受.由此产生的结果是大量黑客社区的少数派(尤其是那些和BSD Unix相关的团体)旗帜鲜明的拒绝”自由软件”标签,剩下的严肃而保持沉默的大多数(包括我自己)才使用.

尽管有这些争议,RMS在"自由软件"旗帜下定义和引导黑客社区的呼吁在上个世纪90年代中期以前一直得到广泛响应,直到Linux的崛起才受到挑战.Linux为开源开发提供了理想的家园.以我们现在称为开源条款发行的很多项目是从专有Unix系统迁移到Linux的.围绕Linux的社区有了爆发式的增长,远大于先于Linux的黑客文化,并且更多样化.RMS决定尝试将所有这些活动都聚拢到他的"自由软件"运动中,但被Linux社区的爆炸性增长的多样性以及该社区的创始者Linus Torvalds 的公开质疑挫败了.因为没有替代方案, Torvalds 继续使用了术语"自由软件",但是拒绝 RMS 的思想包袱.很多年轻的黑客纷纷效仿.

在1996年,当我第一次发布该黑客HOWTO时,黑客社区正围绕Linux及其他开源操作系统(尤其是那些BSD Unix的衍生系统)迅速重组.社区关于我们中的大多数都花费了几十年在闭源操作系统上开发闭源软件这一事实的记忆还没有开始褪色,但是这一事实已经开始看起来像死去的过去的一部分了;越来越多的黑客们将自已定义为诸如Linux或者Apache这样的开源项目的一分子.

那时候术语"开源"还没有出现,直到1998年初才有.刚出现的6个月内就得到了大多数黑客社区的采用;只有少数意识形态上仍坚持用术语"自由软件".从1998年开始,特别是大概在2003之后,'黑客'和'开源(以及自由软件)开发'之间已经极为密切.现如今仍有一些尝试区分这些类别的苗头,但未来改变的可能性不大.

然而值得始终记住的是,过去并非一直一成不变.

其他资源

Paul Graham写过一篇名为 伟大的黑客们 的文章, 另一篇名为 本科生(Undergraduation),短文的内容有很有智慧.

有一篇名为 如果做一名程序员 的文档对本文是很好的补充.其中除了针对编码和技能集合提供了很有价值的建议外,还为如何在一个编程团队中工作提供了宝贵的意见.

我还写过 黑客王国简史.

我写的文章, 大教堂和市集(The Cathedraland the Bazaar), 就Linux和开源文化如何运作的做了很多解释.在其续篇开拓智域(Homesteadingthe Noosphere) 中我更直接的强调了这一主题.

Rick Moen 写过一篇优秀的文档,是关于 如何运行一个Linux用户组 的.

我和Rick Moen合作编写了另外一份文档How如何问聪明的问题. 该文档将帮助你以一种更可能实际得到帮助的形式寻求帮助.

如果你需要关于个人计算机,Unix和互联网如何工作的基础知识方面的指导,可以参考Unix 和 Internet 基础知识 HOWTO.

当你要发布软件或者为软件编写补丁时,请尽量遵循 软件发布实践 HOWTO 中的准则.

如果你喜欢前面的禅诗,也许你也会喜欢 无根的根:无名师的Unix心印.

常问问题(FAQ)

Q: 我如何确信自己已经是一名黑客了?
Q: 你能教我做黑客吗?
Q: 然后我应该如何开始呢?
Q: 应该什么时候开始?对我来说学习是不是太晚了?
Q: 我需要花费多长时间学习黑客?
Q: Visual Basic 语言适合入门吗?
Q: 你能帮助我骇一个系统,或者教我如何骇系统吗?
Q: 我如何才能得到其他人的密码?
Q: 我如何才能骇进/阅读/监视别人的email?
Q: 我如何才能窃取IRC频道的op特权?
Q: 我被黑了.你能帮助我抵御进一步的攻击吗?
Q: 我在使用Windows软件时遇到一些问题,你能帮助我吗?
Q: 到哪里可以找到一些真正的黑客聊聊?
Q: 能推荐一些涉及黑客相关主题的有用的书吗?
Q: 要成为黑客,数学需要很好吗?
Q: 我应该先学哪门语言?
Q: 我需要什么样的硬件?
Q: 我想做贡献.你能帮助我挑选一个问题让我来解决吗?
Q: 我需要憎恨并抵制微软吗?
Q: 但是难道开源软件不会让程序员无法谋生吗?
Q: 我从哪里可以免费获取一份Unix?

Q:

我如何确信自己已经是一名黑客了?

A:

问你自己如下三个问题:

  • 你能流利的说代码吗?

  • 你认同黑客社区的目标和价值观吗?

  • 曾经有成熟的黑客社区的成员称你为黑客吗?

如果针对上述三个问题你的回答 都是 yes,你已经是一名黑客了.两个yes是不够的.

第一个问题是关于技能的.如果你已经拥有该文档前面描述的最低限度的技术技能,你可能会通过.如果你有大量的代码已经为某个开源开发项目所用,则该条直接通过.

第二个问题是关于态度的.如果 关于黑客心态的五条原则 对你来讲不言自明,就像在描述你过去的生活方式那样没啥新奇,你已经通过了一半.这是内在的一半;另外的外在的一半是你对黑客社区的长远项目的认同程度.

如下关于该类项目的这份不完整的列表比较典型:Linux的进步和推广对你重要吗?你热爱自由软件吗?你敌视垄断吗?你坚信可以依靠计算机工具将世界变得更丰富多彩和更人性化吗?

但是这里需要注意相关的秩序.黑客社区有一些具体的主要是防御性的政治诉求—其中两条是捍卫言论自由和对"知识产权"权利争夺的抵御,这些将使得开源陷于非法.一些长期项目如电子前沿基金会(the Electronic Frontier Foundation)是民权组织,外在的另一半的态度包括对此类项目的适度支持.但除此之外,大多数黑客倾向于尝试系统化黑客的态度为带怀疑眼光的明确的政治纲领.我们已经以艰难的方式领教过了这些尝试都是分裂和分散的.如果有些人尝试招募你以黑客姿态的名义到首都去游行,他们找错人了.正确的反映可以是闭嘴,让他们看代码去吧.

第三个问题中有一个微妙的递归因素.我在 “什么是黑客?” 这一部分中提到作为一名黑客某种意义上在内在和外在上是部分属于某个有分享传统的特定亚文化或社交网络的.在遥远的过去,黑客的凝聚力和自我意识比今天要少的多.但是因为互联网让核心黑客亚文化间联系的建立和维持更容易,使得在过去的30多年里社交网络的影响力在增加.一个衡量这种改变的简易的行为指标是,在本世纪里,我们有了自己的体恤衫.

在大标题"无形的大学"下研究像黑客文化这样的网络的社会学家发现这样的网络的特征之一是都有看门人 — 拥有认可新成员进入网络这样的社区权威的核心成员.因为黑客文化是一种松散的非正式的"无形的大学",看门人的角色也是非正式的.看门人必须有一定程度的资历和成就才能授予该称号.到哪种程度很难量化,但当达到时每个黑客都看得到.

Q:

你能教我做黑客吗?

A:

自从第一次发布该页面起,我一星期会收到很多(通常一天也有多个)的诸如”教我关于黑客的一切”这样的请求.不幸的是,我并没有时间或者精力做这事;我自己的黑客项目以及为开源摇旗呐喊的事情已经占据了我110%的时间.

即使我这样做,黑客也是一件基本上主要靠你自学的态度和技巧.你会发现即使真正的黑客像你请求的那样填鸭式的教你他们知道的所有来帮助你,他们不会尊重你.

先学习一些东西,证明你在努力,你有能力自学,然后向你遇到的黑客请教具体的问题.

如果你确实要给某个黑客email寻求建议,请先了解下面两点.第一,我们发现写作上懒惰或者马虎的人通常在成为好的黑客所需要的思维上也非常懒惰和粗心—因此,注意单词一定要拼写正确,使用良好的语法和标点符号,否则你的email可能会被忽略.第二, 不要胆敢 要求回复到不同于你发送Email的ISP账号;我们发现这样的人通常是使用盗窃账号的贼,我们没有兴趣奖励或者帮助一个贼.

Q:

然后我应该如何开始呢?

A:

最好的方法可能是参加一个LUG(Linux用户组)会议.你可以在 LDP General LinuxInformation Page 上查找这样的用户组;你附近也许会有一个,可能和某个大学或者学院相关联.如果你需要的话LUG的成员可能会给你一份Linux,还可能帮你装上然后开始上手.

下一步(如果附近没有LUG的话这是第一步)是找一个你感兴趣的开源项目.开始阅读代码,检查错误.学习尝试去贡献,将自己加入其中.

上手的唯一方式是通过努力提高你的技能. 如果你问我个人就如何上手有何建议,我告诉你的同样是这些事情,我确实没有任何神奇的捷径给你.我也会在头脑里将你定位为一个可能的失败者-因为如果你缺乏读完该FAQ的毅力和从中理解上手的唯一方式是通过努力提高你的技能 的智慧,你就毫无希望无可救药.

Q:

应该什么时候开始?对我来说学习是不是太晚了?

A:

只要你有动力想学,任何年龄都可以.很多人对此感兴趣的年龄介于15到20岁,但比这小或者大的都有.

Q:

我需要花费多长时间学习黑客?

A:

这要看你有多聪明,多努力.如果专心致志,大多数人在8个月到2年内可以学会一个拿得出手的技能集.然而不要认为这就完了;在黑客这行(和其他很多行业一样)需要大概10年的时间才能做到融会贯通.如果你是一位真正的黑客,你会用你的余生学习和完善你的技艺.

Q:

Visual Basic 语言适合入门吗?

A:

因为你问的是这个问题,几乎可以确认你打算在微软的Windows下做黑客.这个想法本身就很糟糕.当我将尝试在Windows下学习黑客和穿着石膏罩学跳舞做类比时,我并没开玩笑.不要陷入其中.那些东西相当丑陋,他们的丑陋从没停止.

Visual Basic 有其自身的问题,主要是其可移植性.虽然Visual Basic有一个开源实现的原型,但其编程接口只覆盖了一小部分ECMA标准.在Windows上其大多数的库支持仅适用于专有的单一提供商(微软);如果你对使用了哪些功能不是相当小心 — 比任何新手能够做到的都小心 — 最终都会被锁定到仅微软选择支持的那些平台上.如果你是用 Unix开始学习的了,有很多带有更好的库的好的语言可以选择.比如,Python.

同时,像其他的Basic语言一样,Visual Basic 是一门设计糟糕的语言,会教你一些坏的编程习惯.请 不要 让我详细阐述;相应的解释可以写本书.学门设计良好的语言吧.

这些坏习惯之一就是变得依赖于单一提供商的库,部件和开发工具.通常来讲,任何一门语言,如果不能在至少Linux或者 BSD的衍生版本之一,以及/或者至少三个不同提供商的操作系统下获取完全的支持,就是一门支持不良不值得花大力气重点学的语言.

Q:

你能帮助我骇一个系统,或者教我如何骇系统吗?

A:

不能.任何阅读完该FAQ后依然能问出这样问题人都蠢的无可救药,我即使有时间也懒得说教.任何向我提该类需求的email,我都将忽略掉或者极端无礼的回敬.

Q:

我如何才能得到其他人的密码?

A:

这是骇客做的事情.滚一边去,白痴.

Q:

我如何才能骇进/阅读/监视别人的email?

A:

这是骇客做的事情.马上给我消失,脑残.

Q:

我如何才能窃取IRC频道的op特权?

A:

这是骇客做的事情.滚远远的,笨蛋.

Q:

我被黑了.你能帮助我抵御进一步的攻击吗?

A:

不能.到目前为止每次收到到这样的请求,都是某个运行微软Windows的可怜的家伙发来的.有效的保障Windows系统的安全免于骇客攻击是不可能的;代码和架构本身有太多的瑕疵,为Windows防御就像拯救一条筛子一样的船.唯一可靠的预防措施就是开始切换到Linux或者其他设计安全的操作系统上去.

Q:

我在使用Windows软件时遇到一些问题,你能帮助我吗?

A:

可以.回到DOS提示符并输入"format c:".你遇到的任何问题都将在几分钟内消失.

Q:

到哪里可以找到一些真正的黑客聊聊?

A:

最好的方法是找一个靠近你的 Unix 或者 Linux 用户组并参加他们的会议(你可以在 ibiblio 上的 LDP 网站上找到多个关于用户组的列表的链接).

(我过去在这里讲你不会在IRC上找到任何真正的黑客,但我意识到这点已经在改变了.显然一些和GIMP以及Perl相关的真正的黑客社区现在有 IRC频道了.)

Q:

能推荐一些涉及黑客相关主题的有用的书吗?

A:

我维护的Linux Reading List HOWTO 可能对你有用.Loginataka 也很有意思.

如果需要Python的入门材料, 可以参考Python网站上的 教程 .

Q:

要成为黑客,数学需要很好吗?

A:

不需要.黑客很少需要正式的数学或者算术知识.特别地,你不会经常用到三角,微积分或分析(有少数的应用领域例外,如 3-D 计算机图形学).掌握一些形式逻辑和布尔代数是有必要的.一些有限数学(包括有限集理论,组合和图论)基础比较有用.

更重要的是:你需要能够像数学家那样进行逻辑思考和准确推理.虽然大多数数学内容对你没帮助,但你需要有掌控数学的训练和智慧.如果你缺少这种智慧,你成为黑客的希望就渺茫了;如果你缺少的是这方面的训练,最好尽快掌握.

我想要确认你是否已经具备这些的一种好的方法是看一下Raymond Smullyan的书 What Is The Name OfThis Book?. Smullyan 搞笑的逻辑难题非常契合黑客精神.能够解决这些问题是个好兆头;如果能够享受 解决他们的过程就更棒了.

Q:

我应该先学哪门语言?

A:

如果你还不知道XHTML(HTML的最新方言)可以学习它.有很多虚有其表被密集炒作的 糟糕的 HTML书籍,很不幸好书没有几本.我最喜欢的一本是HTML: TheDefinitive Guide.

但是HTML并不是一种全功能的编程语言.当你准备开始编程时,我会推荐你从 Python 开始. 很多人会向你推荐Perl,但这门语言更难学并且(在我看来)设计还不够好.

C实际上非常重要,但是要比Python 和Perl 都难学的多.不要尝试先学这门语言.

对于Windows用户,一定 不要 将就学习 Visual Basic.它会教会你很多坏习惯,并且不能从Windows移植到其他系统.避免选它.

Q:

我需要什么样的硬件?

A:

过去的个人计算机运算能力很差内存很小,为黑客的学习过程人为设置了障碍.在上个世纪90年代中期这种情况不存在了, Intel 486DX50 起步的任何机器的能力都足以胜任开发工作,运行X窗口系统,以及互联网通讯,今天你能买到的最小的硬盘也已经足够大了.

为学习选择机器时比较重要的是硬件是否和Linux兼容(或者是否和BSD兼容的,如果你选择的学习路径是这个方向的话).同样,对于大部分的现代机器来讲也是没问题的.唯一可能存在问题的是上网猫和无线网卡;有些机器有一些Windows专用的硬件不会在Linux下工作.

有一个和硬件兼容性相关的FAQ,最新版本在 这里.

Q:

我想做贡献.你能帮助我挑选一个问题让我来解决吗?

A:

不能,因为我不知道你的专长和兴趣.你必须自我激励否则不能坚持,这就是为啥别人为你选择方向总不能凑效的原因.

这样试试.看一段时间 Freshmeat 上滚动发布的项目公告.当看到某个项目让你感觉”Cool!我希望能为此工作”时,加入该项目.

Q:

我需要憎恨并抵制微软吗?

A:

不,不需要.并非微软不令人厌恶,而是因为在微软之前黑客文化已经长期存在,并且在微软成为历史后黑客文化的路依然很长.将你花在憎恨微软上的精力花在热爱你的技能上会更好.编写优秀的代码—这将更有力的抨击微软的同时而不损害你的因缘.

Q:

但是难道开源软件不会让程序员无法谋生吗?

A:

看来不会—到目前为止,开源软件产业貌似在创造而不是夺走工作机会. 如果编写了某程序的净经济收益高于不编写该程序,程序员就会得到报酬,这个该程序写出来后是否开源无关.另外,无论编写的软件多"自由",似乎总有更多的新的定制化应用程序的需求.关于这点我已经在开源 相关的网页上写了很多了.

Q:

我从哪里可以免费获取一份Unix?

A:

如果你的机器上还没有安装 Unix,该网页的其他地方包含了获取最常用的免费 Unix 的链接.要做一名黑客你需要有积极主动性和自我学习的能力.开始干吧…

翻译: PeterYang , V0.21, 2013/12/17.最新中文版本 http://zhitoubang.com/article/hacker-howto.html.

中文版本修订历史:[V0.1, 2013/11/19][v0.2, 2013/11/26][v0.21,2013/12/17]

智投邦( 蜀ICP备12023367号-11 )