http://blog.csdn.net/jarodlau/article/details/337891 How To Become A Hacker
如何成为一位黑客(转载)
这真是一个好问题,不止是原作者说他被问过很多次,包括我和许多网络上的朋友们也常有这个困扰。不过和作者不同的是,我经常没有一个固定的答案:p事实上我所能提供也只是自己的经验,却没有足够的能力来肯定自己的看法是不是正确的。这份文章应该可以减去大家不少的麻烦 :)
嗯!!这次自告奋勇当起翻译,虽然是起于晚上回到住的地方之后很无聊,可以用来打发时间。不过我翻了百行之后,越翻越后悔。主要是因为面有一些句子实在很难翻译,这大概是因为我的英文底子不太好的关系吧!!好不容易,终于是翻完了。为让句子更通顺或者是个人误解,翻译后和原文有些出入,这方面还请各位大大见谅 :-)
Thinker
--------------------------------------------------------------------------
如何成为一位 hacker
为何有这份文件?
身为Jargon File的编辑,常有一些网络新手发mail问我"如何成为一个厉害的hacker?"。 但,很奇怪的,似乎没有任何的FAQs或Web documents说明这么重要的问题,所以我写了一份我自己的看法。
如果你是以offline的方式在看这一份文件的某一个版本,那么你可以在
"http://www.ccil.org/~esr/faqs/hacker-howto.html" 找到这份文件的目前最新版本。
怎么样才算是一位Hacker ?
在Jargon File有一堆关于`hacker'这个名词的定义,大部份必须是技术上的行家或热衷于解决问题,克服限制的人。然而,如果你想知道如何成为一位hacker,有两件事是很有关连的。
这可以追溯到几十年前第一台minicomputer刚诞生,ARPAnet实验也刚展开的时代。 那时有一个由程序设计专家和网络名人所组成的,具有分享特质的文化族群。这种文化的成员创造了`hacker'这个名词。这些Hacker建立了Internet,创造出我们现在使用的UNIX操作系统,他们也使Usenet运作起来,并且让World Wide Web动起来。如果你是这个文化的一部分,如果你对这些种种有所供献,而且这个文化的其它成员也认识你,并称你为 hacker,那么你就是一位hacker。
在精神上,hacker并不单指(限制于)这种软件hacker的文化。有人也把hacker的特质发挥在其它领域,例如:电子或者音乐方面。事实上你会发现,在任何一种科学或艺术的最高境界,你都可以发现hacker的特质。软件hacker们认为,那些类似的精神也都可以称为"hacker"。有些人还主张hacker的通性是独立于任何媒介之上的,不特别属于任何一种hacker所在的环境。但是,在这份文件,我们将把重点放在软件hacker们所需的技能、态度和发明`hacker'这个词的分享文化的传统。
在另一个团体,他们的成员也很大声的称自己为hacker,但是他们不是真的hacker。这些人(大部分是男性青年)专门闯入电脑和入侵电话系统,真正的hacker们称他们为 `cracker',并且不愿意和他们在一些做任何事。hacker们认为这些人都是懒惰,不负责,并且不够光明正大的,并且认为能破解安全系统并不能使你成为一位hacker。但是很不幸的, 很多记者和作家不明究理的使用`hacker'这个字来描述cracker们;这让真的hacker们很忿怒。
基本上,hacker和cracker之间最主要的不同是:hacker们创造新东西,cracker们破坏东西。
如果你想要成为一位hacker,继续读下去吧。如果你是想要成为一位cracker,那么就去读alt.2600 newsgroup并准备在你发现自己并不如想像中那么行时,给自己一点评价。所有关于cracker的事情就只有这些了。
Hacker 态度
Hacker们解决了问题并创造新东西,他们相信自由并自愿的互相帮助。想要被别人接受成为一位hacker,你必须发自内心的表现出这种态度。为了要很自发的表现出这种态度,你就必须先完全认同这些态度。
如果你只是把学习hacker态度这件事当作一种能在这个文化赢得认同的途径,那么你己经乎略了真正的重点。由衷的接受这些态度是很这要的,这能帮助你学习并维持你的动机。就像那些具创造性的艺术一样,成为一位大师的最有效方法是学习大师们的精神;并不只是学习知识和情绪而己。
所以,如果你想要成为一位hacker,请反复的做下面的事情,直到你完全领会它们:
1.这世上充满著等著被解决的迷人问题
作为一个hacker是充满快乐的,但这是一种因为努力得到成果所带来的快乐。努力的成果则带来动机。成功的运动家的动机则来自于,使他们的身体不断进化,并把自己推向物理上的极限所带来的快乐。类似的情形,要成为hacker,你必须要能从解决问题,精进技术,和运用知识的过程中感受到一种悸动。
如果你不是天生就能感受到这种悸动的人,那么,为了要成为hacker,你必须使自己变成这样的人。否则,你会发现你的hacking energy就会像性,金钱,和社交活动一样,因为分心而被消磨掉。
(你也必须为你的学习能力建立一种信念直到你完成你的工作――即使你只处理一小部份,而你也不知道你到底还要学些什么东西才有辨法解决你的问题,但是你会努力学习,准备充足,以应付下一个问题。)
2.没有任何人必须一再的解决同一个问题
富创造力的头脑是贵重而有限的资源。有这么多迷人的新问题在那等著被解决。因此富创造力的头脑不该被浪费的用来重复发明轮子。
身为一位hacker,你必须了解到其它hacker们的时间也是很宝贵的――所以,分享资讯,解决问题和提供解决方案给其它hacker以解决新的问题,这些几乎算是道义上的责任。
( 即使hacker们所拥有的大多是从其它hacker的身上得来的,但这并不意谓你必需把你创造的作品全部交出来,你可以卖出足够数量的产品,以求得温饱,给付房租和买电脑设备,这和hacker的价值观并不相违背。使用你的hacking技能以供给一个家庭的生活,甚至是致富,只要你仍不忘记你是一位hacker,那么这些行为并不会产生予盾。)
3.无聊而单调的工作是有害的
Hacker们(有创造力的人也是一样)永远不该做一些无聊而单调并且愚蠢的反复性工作。因为,如果这样的事情发生的话,这表示他们正在做一些不是他们该做的事――解决新的问题。这样的浪费对任何人而言都是一种伤害。无聊单调的工作不只是无趣而己,而且是一种有害的物质。
要做为一位hacker要能尽可能的自动避免无聊,对此你必须有相当的认知。这不只是为了你自己而已,也是为了所有的人(尤其是其它的hacker)。
(这有一些例外。有时侯hacker们会去做一些被认为无聊或重复性的工作,当做脑力的训练,或是为了要学习得某种技能或某种你所没有的特殊经验。不过这是一种选择,任何人都不该被强迫面对无聊事。)
4.自由才好
hacker们天性上是反对独裁的。任何一个给你命令的人就能给你一个独裁式的工作,并且可以给你一些笨的可以的理由,停止你解决任何吸引著你的问题。所以任何独裁式的行为都会被挑战,以免会危害到你和其它的hacker们。
(这和为反对而反对是不同的,小孩子是需要被指导和阻止他们犯错。hacker也会同意接受某些权威,照著指示做以较短的时间得到他想要的。不过那是一种有限且理性的协定;......)
专制在监察和保密这些事上是很有效的方法。这些行使专制的人并不相信自愿性质的合作和资讯分享――他们只相信在他们控制之下的合作关系。所以,身为一位hacker,你必具有一种敌对的天性,以对抗监察,秘密和使用外力强迫或迷惑可以信任的人等行为。你必须以互信做为你行为的基础。
5.态度并非不等效于能力
要成为一位hacker,你必须开始培养这些态度。但,如果你只是单独的模仿某一种态度,这并不能使你成为一位真正的hacker,也不会使你成为一位运动冠军或摇滚明星。
因此,你必须学会猜疑态度和尊敬各种能力。Hacker们不会想浪费时间在虚华的人的身上,他们尊敬的是能力――特别是身为hacker的能力,但对于其它方面的能力也是充满敬意。如果有能力追求一些很少人能弄懂的技术,追求精神上的技巧,并能集中精神,那就再好不过了。
如果你尊敬各种的能力,那么你就会乐于自己发展这些能力――这会使的努力工作和奉献成为一种剌激性的消遣而非一份苦差事。这对于想要成为hacker的人而言,是很重要的。
一位Hacker所需的基本技能
hacker的精神态度是很重要的,但技术则更是重要。hacker的态度虽然是无可取代,但在梦想别的hacker开始也叫你hacker前,有些基本的工具和技术是必备的。
随著新科技的发明和旧技术的取代,这些工具随时间在慢慢的改变。例如:以往总是会学会用机器码写程序,直到最近我们开始使用HTML。不过,在1996年末,下面所举的工具是很明显的被需要的:
1.学习程序设计
当然,这是基础的hacking技能。在1997年,理所当然的,你必须学会C。但,如果你只是学一种语言,那么你不能算是一位hacker,了不起只能算是一个programmer。除此,你还必须学会学会以独立于任何程序语言之上的概括性观念来思考一件程序设计上的问题。要成为一位真正的hacker,你必须要能在几天之内将manual内容和你目前己经知道的关连起学会一种新的语言。也就是说,你必会学会数个不同的语言。
除了C之外,你至少还要会LISP或Perl(Java也正在努力的挤上这个名单;译者注:我很怀疑这份名单说:p)。除了几重要的hacking常用语言之外,这些语言提供你一些不同的程序设计途径,并且让你在好的方法中学习。
程序设计是一种复杂的技术,我没辨法在这提供完整的学习步骤。但是我能告诉你一些在书本上和课堂上所没有的东西(有很多,几乎全部最好的hacker们都是自习而来的)。(a)读别人的程序码 和(b)写程序,这两项是不错的方法。
学习写程序就像在学习写一种良好的自然语言,最好的方法是去看一些专家们所写的东西,然后写一些你自己的东西,然后读更多,再写更多...然后一直持续,一直到你发展出一种属于自己的风格和特色。
要找到好的程序码来看是很一件很困难的事,因为,对菜鸟hacker们而言,适于供他们阅读和努力的大型程序的source数量很少。但这事己有了戏剧性的变化了;现在免费的供应的软件、程序设计工具和操作系统(大都公开提供source,而且全都是由hacker们写成的)到处可看。进入下一个主题...
2.取得一个免费的UNIX,并学习使用和维护
我先假设你己经有一部个人电脑或者是可以使用任何一部(现在的小孩子真幸福,可如此轻易的拥有 :-)。取得hacker技巧的第一个步骤是取得一份Linux或者一份免费的 BSD-Unix,并将它安装在自己的机器,并使之顺利的运作。
没错,在这个世界上除了Unix之外,还有其它的操作系统。但是他们只提供bianry,你不能看到他们的程序码,你也不能修改他们。想要在DOS或Windows或MacOS开始 hacking,无疑就是要你绑著枷锁跳舞一样。
除此之外,Unix是Internet上的操作系统。当你在不懂Unix的情况下学习使用Internet时,你没辨法在不懂Unix的情况下成为Internet的hacker。因为这个原故,现在的hacker文化还是很牢固的以Unix为中心绕著。(这并不完全是正确的,而且有些活在旧时代的hacker甚至也不喜欢这种情形,但是Unix和Internet之间的共生共成己经到了牢不可破的地步,即使是Microsoft的大块肌肉也没能在上面留下明显的伤痕。)
因此,把Unix装起来吧!(我自己是喜欢Linux,但是还有其它的东东可用。)学习它,让它运作起来,让它陪你努力精进。用他向整个Internet喊话。看程序码,改程序。有一天你成为一位高竿的hacker,你回头往后看时会发现,你得到比Microsoft操作系统所能提供的还要好的程序设计工具(包括C,Lisp和Perl)。而且得到快乐,并学到比你想像中的还要多的知识。
关于学习Unix,在Loginataka有更多的资料。
(http://www.ccil.org/~esr/faqs/loginataka.html)
看一下Linux distribution的目录或Linux CD,并把自己交付给它。
3.学习使用World Wide Web并学会写HTML
在hacker文化创造出来的东西,大多在他们的活动范围外被使用著。如,在工厂和辨公室或大学被漠漠的使用著。但Web是一个很大的例外,这个hacker眼中的大玩具甚至还被政客们接受,并巧巧的在改变这个世界。因此(还有很多好的理由),你必须学习Web。
并不只是学习使用browser(这太容易了)而己,还要学会写HTML这个Web的标签语言。如果你不知道如何设计程序,写HTML也可以给一些习惯上的帮助。嗯!!建立home page吧!
不过,有一个home page并没任何特别之处能让你成为一位hacker。Web上到处都是home page,而且大部份都没什么重点,没什么内容的烂泥――很好看的烂泥巴,但是看起来都一样,差不多。
(http://www.ccil.org/~esr/html-hell.html)
为了让你的page有其价值,它必须是有内容的东西――它必须是有趣并且(或者)对其它hacker有用处的。
Hacker 文化的状况
就像大多数没有经济活动的文化一样,hackerdom的运作是建立在名望之上。当你尝试去解决一个有趣的问题时,你所做事是否有趣,你的解决方案是不是真的好用,这些只有你的技术上的同好或前辈准备好为你做评价。
因此,当你开始玩起hacker的游戏时,你的主要分数是来自其它hacker们对你的技术的看法(这就是为什么只当其它的hacker都认为你是hacker时,你才算是一位真正的 hacker)。这个事实被人们认为hacking是一种孤独的工作的印象所朦敝了;也被hacker文化的禁忌(现在己渐渐的朽坏了,但依然存在)和存在人们内心动机的自大或特权之间的冲突所朦敝。
具体的说,hackerdom就是人类学家所说的「天才文化」。你在其中所得到的地位和名望并不来自于支配其它人,或是因为长的漂亮,或因为你有一些别人想要的东西,而是因为你送出东西。特别是,你给送出你的时间,你的创造力和你的技术成果。
下面有五种事,你会因为做了这些事而爱到hacker们尊敬:
1.写免费的软件
第一种是写那些其它hacker们觉的有趣或好用的程序,并把source公开开放给整个hacker文化中的人使用。
hackerdom最爱尊敬的是写出大而功能强的程序的人,而且这程序是广为大家需要的,所以大家都在做用这些程序。
2.帮忙test和debug免费的软件
hacker们也尊敬帮忙debug免费软件的人。在这个不是很完美的世界,你不可避免的必须花掉大部分的软件发展周期在debug阶段上。这就是为什么在任何免费软件发展者的脑子都会告诉你一件事,好的beta测试者(能很很清楚的描述发生的状况,正确的发现问题出处,可以容忍测试版本的bug,并且能进行一些简单的诊断程序)和红宝石一样贵重。
如果你是一只菜鸟,试著开始去找一个你有兴趣的正在发展中的程序,并且成为一位好的beta测试者。从帮忙测试开始,很自然的你开始帮忙debug,进而开始帮忙修改程序。你将在这过程中学习到很多东西,并且和以后可以帮助你的人结下因果。
3.公布有用的资讯
另一项好事是收集和过滤有用和有趣的资讯,整理成Web page或FAQ之类的文件,让大家能很容易的收得。
几种主要技术FAQ的维护者都能得和免费软件的作者几乎一样多的尊敬。
4.帮忙维持一些简单的工作
hacker文化是由一群自愿者维持运作著。有一些工作很无趣但却必须维持正常运作的,如:管理mailing list,维护newsgroup,维持大的软件供应站台,推动RFC和其它技术标准。
做这类的事将会得到很多的尊敬,因为大家都知道这些工作是很花时间,但又不像玩弄程序码般有趣。
5.为hacker文化而努力
最后一项,你可以为这个文化效劳,并推广这个文化(例如,写一份正确的入门手册,教别人如何成为一位hacker :-)。在你因为做了前面四件事之一而出名之前,这不是你该做的事。
正确的说,hacker文化并没有任何的领导者,但在这文化有所谓的文化英雄,族群历史学家。当你在其中混的够久之后,你也许会成为这之中的一员。注意:hacker们并不相信族群,喧骚自大的长者,所以成为这样的长者是非常的危险。与其去和别人竞争,你宁可为自己定位,给自己一个亲切谱虚的身份。
Hacker和Nerd(怪胎)的关系
成为一位hacker,你不需要成为令人讨厌的人(Nerd),反于社会常态。然而,这对你而言却是非常有帮助的,而且有很多hacker也是让人讨厌的人。当一个社会的浪人有益于让你专心在真正重要的事情上面,例如:思考和hacking。
因此,有很多hacker们接受了`nerd'这种称呼,甚至是使用`geek'(杂耍演员)这个字眼,并引以为傲――这是一种说明他们独主于世俗习惯之外的方法。在The Geek Page可找到更多相关的讨论。
(http://samsara.circus.com/~omni/geek.html)
如果你能够适当的专注于hacking这事上面,并且还保有你的生活,那很好。而且现在要做到这样,比起以前我还是个菜鸟时容易。主流文化现在也较为techno-nerd(技术怪胎)所接受。甚至有越来越多的人认为hacker们可以是很好的男朋友,女朋友,老公和老婆。在Girl's Guide to Geek Guys可找到更多相关的讯息。
(http://www.bunnyhop.com/BH5/geekguys.html)
如果你是因为没有生活而想开始hacking,那也没关系,至少你就没有不能专心的问题了。也许不久之后你就是一位hacker了。
风范要点
再一次的强调,要成为hacker就要了解hacker的精神。如果你并不玩电脑,那么还是有一些事情可以帮助你。这些不能成为hacker的代替品,不过有不少的hacker经常做这些事,并认为这些事和hacking的本质有某种基本的关连。
* 阅读科学小说,并参加小说的聚会(这是一个遇到hacker和原始hacker们的好方法)。
* 学禅,并且(或者)接触战争的艺术。(钢铁般的纪律似乎很重要)
* 训练你的耳朵对音乐的分析能力,试著欣赏某种特殊的音乐,并好好的玩一些乐器或者唱歌。
* 增加对于俏皮话和文字游戏的认识。
* 加强你的母语写作能力。(有很惊人数量的hacker,都是不错的作家。这包括一位我所知道的最好的hacker)。
你做越多这些事,那么你就愈是天生hacker的料。
最后,有一些事千万不要做
* 不要使用愚蠢而夸张的代号(user ID)或化名。
* 不要加入Usenet 的战火(或者任何地方的)。
* 不要自称为`cyberpunk'(电脑捣蛋玩家),也不要浪费任何时间在这么做的人身上。
* 不要post或email一些充满错字或文法错误的文章。
做了这些事的结果只是为你招来大家的责难和批评。Hacker们的记忆力都很好,他们会一直记住你的所做所为,你可能要花数年的时间才有辨法让他们重新接受你。
其它的资源
Loginataka有提到一些关于Unix hacker的训练和态度。
(http://www.ccil.org/~esr/faqs/loginataka.html)
我也写了关于Hackerdom历史的简介。
(http://www.ccil.org/~esr/faqs/hacker-hist.html)
Peter Seebach也维护了一份很不错的Hacker FAQ,这份文件是专门给不知道如何和hacker们相处的经理人们看的。
(http://www.solon.com/~seebs/faqs/hacker.html)
我也写了一份paper「Cathedral and the Bazaar」,上面解释Linux文化的运作方式。你可以在我写的page上找的到。
(http://www.ccil.org/~esr/writings/index.html)
常被提出的问题(FAQ)
Q:你能教我如何hack吗?
自从公开这个page以来,我每周都收到很多人来信问"请告诉我所有关于hacking的事"。但很不幸的,我没有这个时间或者是精力去做这件事;我的hacking project已经用掉我110%的时间了。
就算我愿意,但是基本上,hacking是一种必须自习而成的生活态度和技术。你会发现,当真正hackers愿意帮助你的同时,你将得不到他们的尊敬,若你求他们把会的东西都直接给你的话。
先学一点东西吧!表现出你正在努力尝试,你有能力独立学习的。然后再带著你所遇到的难题去和hacker见面。
Q:我要在那才能找的到一位真的hacker并和他们交谈?
很好,不过很确定的,不会在IRC。就我所能看到的,那除了骗子和cracker之外什么也没有。最好的方法是找到一个在你附近的Unix或Linux的使用群,并加入他们,参加他们的聚会(在Linux Users' Group page on Sunite有一份目录)。
(http://unc.sunsite.edu/linux/ldp/lugs.html)
Q:我应该从那一种语言开始学呢?
如果你真的不懂HTML的话,那就从它开始吧。市面上有很多外表光鲜亮丽的HTML烂书。 我最喜欢的一本是HTML:The Definitive Guide。
(http://www.ora.com/catalog/html2/)
如果你已经准备好开始学programming了,我会建议你从Perl(http://www.perl.com/)或Python(http://www.python.org/)开始。而C是真的很重要,不过它也真的很难。
Q:我要如何开始呢?在那能拿到免费的Unix呢?
我在这page内到处都有指向取得Linux的地方。要成为一位hacker,你必须要有动机并且主动进取还要独立学习。就从现在开始吧....