回英文首页 | 到英文主页网页地图 | Date: 1999/12/27 |
如何成为骇客
为何有这文章?
身为Jargon File的作者, 我常收到热心的网络新秀的电子邮件, 问及"如何可以成为骇客?" 奇怪地, 在互联网上像没有文件或FAQ介绍这个重要问题, 所以, 我写了这篇文章. 若你只是离线地阅读本文, 你可到这里阅读本文的最新中文版本.什麽是骇客
在Jargon File里有数个'骇客'的定义, 主要形容"技术专才"或"有志解决问题及超越极限之人士".其实要成为骇客, 只有两个要点 最初骇客是形容一班最初使用早期微电脑及ARPAnet实验的专业程式员及网络专才. 他们崇尚共享主义,他们建立互联网,他们建立及发展成现今的Unix作业系统.他们管理Usenet讨论组. 亦是他们令互联网运作.因此, 若你有上述的特性及参与同类的社群,亦有对以上种种作出贡献,同时社群的人知你是谁又称你为骇客, 你便是骇客.然而,骇客的理念并非只局限於这"软件"的社群. 有很多人应用骇客的态度於其他事物,如电子或音乐上-- 实际上,骇客的理念存在於任何科学及文学. 由於了解骇客的理念及精神,软件社群的骇客亦会称后者为骇客. 有些人亦认为骇客的理念是独立於骇客所从事的媒体. 然而, 我们将在这篇文章专注讨论软件骇客的技巧, 态度及传统.
另外, 有一群人亦称自已为"骇客", 他们(多数是年青人)用电脑侵入其他电脑的系统作出破坏.骇客们称这群人为"破坏者(Cracker)", 亦不认同他们为骇客. 多数 骇客会认为破坏者是懒惰, 不负责任, 不杰出的人. 有能力侵入保安系统并不能使你成为骇客, 正如可以用铁线来偷车并不能使你成为工程司一样. 不幸的是很多作家及报导员均称这群人为"骇客".
CRACKER 与 HACKER的主要分别是前者破坏, 后者建立.
若你想成为骇客, 请看下去, 若你只想成为CRACKER, 请到alt.2600讨论小组, 准备作出系统破坏. 我相信你不会感到自己是想像中的聪颖. 我对CRACKER便说到这里为止.
骇客的态度
骇客解决问题, 建立事物, 相信自由及共享主义. 要成为骇客及被接受为骇客, 你的行为须"表现"出上述的态度. 要"表现"上述的态度, 你须"真正相信"上述的态度是正确 相信上述的态度并非只认为要被接受为骇客, 而是要使你能学习及保持成为骇客的自发性. 正如其他的创作艺术一样. 学习必须同时著重理念与态度.所以, 要成为骇客, 仔细了解下列各点, 直至你相信为止:
1. 世界是有大量有趣的问题是等待解决的
成为骇客是一件满有趣的事情, 但背后同时要付出努力. 努力却须要自发性. 成功的运动家有强烈的欲望去使自己发挥至极限, 正如骇客必须有欲望去解决问题, 不断加强技术及 运用智慧. 若你并非此类人, 要成为骇客你便需要作出改变. 否则你的骇客生涯及能量只会被性欲, 金钱及社会的既定价值观所消耗, 一点一滴地消耗.(你亦需有强烈信念, 相信纵使你暂停不能解决整个问题, 只是你能解决其中一部份, 及能从中学习, 你会可以解决另外的一部份 --- 直至解决整个问题)
2. 没有人应该有需要解决同样问题两次
你的智慧是一个很有价值, 但同时很"有限"的资源. 请不要将这有价值的资源用来"重新发明车轮". 因为有很多其他尚未解决的问题是等待著你的. 要成为骇客, 你必须相信其他骇客的思想时间非常宝贵, 所以你有道德上的责任去分享资讯, 解决问题及将其解决方法分享, 使其他骇客不须再花时间解决同样问题, 而可以用时间解决新的难题.(你不须相信你必须将所有你的创作分享, 纵使愿意如此做的骇客是最从人专重的.售卖足够的创作以购买食物, 支付租金及使用电脑的费用并不违反骇客的价值观. 运用你的骇客技能养活家庭, 甚至致富亦可以, 只要你做这些事时不要忘记你是一名骇客)
3. 拒绝沉闷及乏味的事情
正如一般的创作者, 骇客不应做沉闷及乏味, 愚蠢及反反覆覆的事情. 因为这表示他们不是做著只有他们才可以做的事 -- 解决新问题. 这样实在太浪费了. 因此, 沉闷及乏味的事情对骇客而言不仅只是不良, 而是邪恶的. 要成为骇客, 你必须相信此观念以令你将所有沉闷及乏味的事情尽量自动化, 不止为自己而是为其他人(其他骇客).(但有时为了锻练, 或获得某种技术及经验, 骇客亦要做那些重复又乏味的事情, 但这是个人选择, 没有一个善於思想的人应被逼做沉闷的事)
4. 自由
骇客天生反霸权主义. 若有人可以向你下达命令, 他便足以停止你 -- 停止你去解决一些你认为有意义的问题. 极权主义的人, 由於思想特殊, 会给你一个 极愚蠢的理由去停止你解决这些有意义的问题. 为了不令你和其他骇客窒息, 必须打击霸权主义. (这并不是向所有权力挑战, 正如小孩需要成人指导, 罪犯须被压抑. 骇客可同意接受某些权力. 但只是有限及有意识地同意接受. 那种极权主义的人所要求的 绝非骇客所能认同)极权主义者很喜欢"禁制"及"保密", 他们不相信自由合作及资讯交流 -- 他们由 接受可以由他们操控的"合作"形式. 因此, 骇客必须对抗不合理的禁制, 保密及以暴力或欺瞒压逼人民的手段.
5. 信念不能替代能力
作为骇客, 你必须发展上述的态度及拥有其信念, 但有信念不能使你成为骇客, 正如有信念不能使你成为出色的 运动家或摇滚乐手一样. 要成为骇客, 你须付出智慧, 锻炼及勤奋. 因此, 骇客须要相信能力. 任何方面的能力都是好的, 一些只有少数人可领略的才能"更好", 而"最好"是一些需 要高度智慧, 技巧及高度集中力的才能.若你尊敬才能,亦渴望得到 - - 你所付出的努力将成为乐趣而非沉闷的事情, 这亦是骇客必须拥有的.
基本骇客技能
骇客态度固然重要,但骇客技能更重要.态度绝不能替代才能, 因此, 你必须学习一些基本知识才会被称为骇客. 由於科技不断演进,这些基本知识会不断改变.(例如,以前须要机械码才能编写电脑程式,但近来人们却爱用HTML.) 在现在,你需要下列知识:1.学如何写电脑程式
这,当然是最基本的骇客技能.如果你不懂任何电脑程式语言,我便建议你学Python. 这是一个清楚地设计的,有清析记录语法的,适合初学者的电脑程式语言.虽然它可能是你的第一种学习的电脑程式语言, 但它 绝非一件玩具.它是非常强力,有弹性而又适用於大型项目的电脑程式语言. 但紧记,若你只懂一种电脑程式语言,你不能成为电脑程式员,更遑论成为骇客 - - 你需要了解程式编写方法, 而且不受任何一种电脑程式语言限制. 因此, 你要学习如何只参看使用者指引, 将其中内容与你所学关联, 便能於数天内学懂一种新的电脑程式语言. 即是你要学习多种不同的电脑程式语言.如果你对电脑程式要求严格, 你必须学习unix的核心语言-- C (虽然 C 并不应是你第一种学习的电脑程式语言). 其他骇客需要学习的包括Perl及LISP. 由於实用性, Perl是值得学的,Perl是广泛地用於Active Web Pages及系统管理上的, 因此就算你不会用Perl来编写程式你亦需学习如何阅读及了解Perl. 至於学习LISP能 给你一个意想不到的宝贵经验, 有助你於日后的日子里写便好的电脑程式, 纵使你可能不会时常用LISP来编写程式.
因此, 你最好完成以上四种电脑程式语言的学习(Python, C, Perl 及 LISP). 除了是最重要的骇客语言, 它们亦代表不同的程式编写方法. 每种语言都从不同方向 使你获得宝贵经验.
我不可能在此教导你如何编写电脑程式, 因为这是一门复杂的技能. 我只可对你说的就是 -- 书本与课程并不有效 (很多,甚或是大多数的骇客 都是自学的). 最有效学习电脑程式是(一)阅读程式码 (二)编写程式码
学习编写电脑程式就如学习普通语言一样, 最佳方法是阅读一些别人的大作, 然后写一些程式, 再阅读多些, 再写多些 ... 直至你发展出你独有的一套编写电脑程式方法.
寻找好的程式用以阅读和学习是非常困难的, 以往是很缺乏一些比较大型的程式供初学的骇客练习. 但现在情 况已经有所改变;开放程式码的软件, 电脑程式编写工具, 及作业系统(都是由骇客创造)现时是很容易便可以取 得. 正好带领我们到下一个题目 ...
2.取得一份开放程式码的unix作业系统, 然后学习它.
我假设你拥有/或者可以使用一台个人电脑(现今的小孩随时都可以很容易地得到 :-)). 成为骇客的第一步 是在你的电脑上安装一套LINUX或BSD-Unix的作业系统, 及使用它. 当然, 世界上除了UNIX外还有很多其他作业系统, 但它们都是以二进制形式分发的 - - 你不但不能阅读 那些程式码, 你亦不能改动它们. 在DOS,WINDOWS或MAC 或等作业系统上从事骇客活动, 便像穿著盔甲 学跳舞一样.另外, UNIX是互联网上的作业系统、 虽然你可以不懂UNIX但仍能使用互联网, 但若你不懂UNIX, 你不能在 互联网上从事骇客活动. 因此, 现今骇客们大多是精於及偏爱UNIX的. (以前的骇客可能不同意, 但互联网 及UNIX的相互关系已令其他 -- 包括微软的作业系统难於取代.
所以, 请安装一套UNIX -- 我个人喜爱LINUX但其实有其他种类的(你可以同时安装LINUX及DOS/WINDOWS在 同一电脑上). 学习它, 使用它, 把玩它. 用它来上互联网. 阅读及改动它的程式码. 它比微软等的作业 系统提供更好的程式工具(包括C, LISP, Python及Perl). 你会得到趣味及学到比你想像更多更佳的知识.
要知多点关於学习UNIX的资料请到Loginataka
要得到LINUX, 请到此
要知多点关於BSD UNIX 的资料及协助请到www.bsd.org.
(注:若你是初学者,我不建议你独自安装LINUX或BSD. 若你欲安装LINUX,到一些LINUX的使用者团体寻 求协助; 或到Linux Internet Support Co-operative (LISC)的IRC 频道看看.)
3. 学习如何用互联网及用HTML来写网页
大部份骇客所做的事情, 如在工厂及办公室或大学里的工作, 是不会对非骇客做成影响的. 但互联网却是一个例外, 就算政治家都承认互联网是一个足以影响世界的东西.亦由於这原因(及其他种种原因)你要学如何在互联网上工作. 这不是说你要学如何使用浏览器(人人都懂使用..), 我是说你首先要学用HTML来写网页. 若你根本不懂写程式,用HTML来写网页可帮助你得到一些程式编写的基本概念.可是写网页仍不足够, 在互联网上有很多网页, 但大部份是没有方向, 明显地没有内涵的网页. (你大可到The HTML Hell Page看看)
所以, 你的网页一定要有内容□必须是有趣的及/或有用的(对其他骇客), 这便是我在下一个题目要说的..
骇客社群的身份
像大部份非谋利的社群, 骇客以名誉为重. 你会尝试解决有趣的问题, 但问题是否有趣及你的解决方法是否有效, 却只有其他具有技能的骇客们可以去品评. 因此, 要玩骇客这个游戏, 你要以其他骇客对你的观感作为自己的评价. (正如我说你不是骇客,除非其他骇客亦称你为骇客).不过这事实却有时被人误解, 因为他们多以为骇客是孤独地工作的人.人类学家称骇客为贡献社群. 骇客得到地位及名誉并非来自强於他人的权力, 亦非由於外表美丽, 或有异於常人的能力,而是源於施与.清晰地说,是将你的时间, 创意及创意的结果贡献他人.
基本上, 你可以贡献5方面的东西以获得其他骇客的尊重:
1. 编写公开程式码的软件
首先(最传统及基本的方法), 是编写一些其他骇客认为有趣又有用的程式, 而且将程式码公开. (人们以前会称此类程式为”免费软件”, 但由於太多人将”免费软件”的意义误解. 现时大部份人称此类程式为公开程式码的软件) 骇客界最受人尊重的圣者是一些编写大型, 功能强劲而又很有用的公开程式码软件, 供其他人使用.2. 帮助他人测试及除错公开程式码的软件
在这不完美的世界, 人们无法避免花很长的时间用於测试及为软件除错. 因此, 很多公开程式码软件的作者都会高度评价那些好的程式测试员 (可以清楚表达程式错误表徵,程式错误位置,能接受软件在开发期间的暂时性错误及继续测试). 一个好的程式测试员可以使如恶梦的测试及除错工作变为一件值得经历的小烦恼. 若你是初学者, 你可以找一些正在开发阶段而你又感兴趣的程式来做测试及除错. 当你懂得测试及除错, 你自然会学习更改程式.这样,你不单可以学习, 亦可以与其他专家建立良好的关系,而他们亦很可能会於未来给予你帮助.3. 发行有用的资讯
另外一点是你可以收集及挑选有用的资讯并制成网页或FAQ(常问问题), 以供诸同好. 技术性FAQ的经营者往往很多人的专重, 如同编写公开程式码的软件的专家一样.4. 帮助系统运作
骇客社群(特别是互联网的发展者)是由自愿者组成的. 当中有大量必须但平淡的工作须要有人去处理 -- 例如管理电子邮件,监察讨论小组,经营大型程式的储存网站,及发展技术性标准等. 做以上工作的人得到很多人的专重, 因为人人都知道此种工作是很花费时间但又不如编写程式般有趣.此等工作须要使命感.5. 为骇客社群服务
最后,你可以为骇客社群服务及传扬(例如你可以写一篇如何成为骇客的文章 :-)). 通常你不会做这些工作,直至你已做了以上四种的工作的其中一样. 骇客社群没有一个既定的领导者, 但却有为人尊重的英雄及长老级人物等发言人. 当你在此有一段时间的经验,你可能会成为其中的英雄或长老.但记著,骇客社群对傲慢的自我中心者并不认同, 所以不要成为如斯的领导人物.你不应追求成为领导人物, 你应了解自己的方向及以谦虚的心来看自己的地位及身份.骇客与怪客的关系
与传说不同,骇客并不一定是怪客, 但有很多骇客却实在是怪客. 通常社会不甚认同的怪客会有更多时间习中思考及从事骇客活动. 因此,很多骇客都以怪客为名, 并以此表示自己独立於社会一般的观念. 你可看这里得到更多此等讨论.若你可以集中精神从事骇客活动, 做得又好而又可以维持生命, 实在是很难得的事. 比起70年代来说现在做骇客是比较容易的了.人们亦开始了解骇客其实是高质素的人才.
但若你是由於太苦闷而做骇客的话, 我亦欢迎你, 最少你可以比较专心地从事骇客活动, 可能有一天你会得到人生的乐趣.
其他事项
我想再说一次,若你要成为骇客,你必需要有骇客的理念. 就算你不是在电脑前面你亦可以做以下与此理念有关的事情.当然,没有事情可以取代骇客的电脑活动.- 阅读科技故事,参与科技会议(在场内很可能遇到其他骇客)
- 学习禅及工夫武术 (理念与骇客的理念在很多方面相近)
- 发展分析音乐的听觉.学习欣赏特定的音乐,学习以一种或以上的学器, 学习唱歌.
- 学习欣赏文字及双关语
- 学好你本土的语言(有很多骇客都是有能的作家)
- 不要用愚蠢,浮夸的User ID或假名
- 不要卷入Usenet及其他讨论的骂战
- 不要自称为’电脑流氓’,亦不要与此类人交往
- 不要发放有大量错字或错文法的电子邮件及电子讨论
其他的资源
Peter Seebach维护著一个很好的骇客 FAQ供不懂处理骇客的人士阅览. 若上述超连结没有反应你可到Excite 搜寻器来寻找 Loginataka有一些关於Unix骇客的训练和应有态度的资料本人亦写了一个 有关骇客社群的简短历史的网页
我亦写了一篇文章, 名为 The Cathedral and the Bazaar, 以解释有关Linux及开放式程式码等的文化. 我亦在续篇Homesteading the Noosphere一文中再将此题目直接地说明
常问问题
问: 你会否教授我如何成为骇客 ?
自从写了这个网页, 我每星期(有时每天有数次)收到上述的要求, 可惜的是我并没有时间及精力去教人如何成为骇客. 我自己所从事的骇客活动已用了我 110%的时间. 就算我有时间, 骇客本身是一种态度及技巧你要自我学习. 你会发现真骇客们很愿意提供协助, 但若你只是不断地像婴儿般要求□养, 他们不会尊重你所以, 你应先学一些基本知识. 表现出你是正在尝试, 及你有能力自学. 接著才与骇客们讨论特殊的难题.
我要如何开始?
最好先到LUG(Linux 用家小组)讨论. 你可以在LDP General Linux Information Page找到此类小组; 很多时你可以找到一个接近你的小组, 多数是大学提供的. LUG的成员可能会提供一套Linux给你, 及教你如何安装及开始.你会否教我如何破解系统, 或教我破解术?
我不会. 任何已阅读此FAQ而仍问此问题的人实在是太愚蠢及不能教导(就算我有时间教导) 任何此类电子邮件会被忽略或以粗暴语气回答我的系统刚被破解. 你会否帮我防范再被破解 ?
不会. 每次我收到这类要求的, 都是用视窗作业系统的. 基本上是不可能有效地防止视窗作业系统被破解; 因为这作业系统有太多的程式及结构缺点, 就像要用筛子来将船划动一样.只有转用Linux等有真正安全的作业系统方可解决这个问题.在那儿可以与真骇客通讯?
最好是找一个你本区的Unix或Linux的讨论小组, 并参与讨论(你可以在 LDP的网页找到超连结) 我曾说在IRC(网上即时讨论小组)不能找到真骇客, 但我发觉现在情况有所改变. (现时有些真骇客亦在GIMP及Perl等的网上即时讨论小组出现.)你可否介绍一些有关骇客的有用书籍?
你可到本人维护的 Linux Reading List HOWTO看看, Loginataka亦有相关的资料.我应先学那种程式语言?
若你不懂HTML, 你应先学它. 在坊间有很多不好的HTML书, 好的HTML书却很少. 我本人最喜欢 HTML: The Definitive Guide. 但HTML并不是完全的程式语言. 当你有心理准备开始学写程式, 我提议你学Python.可能已有很多人提议你学Perl, 而事实上Perl是比Python更多人用. 但对初学者来说, Perl比较难学. 而且(我认为)Perl的设计比不上Python.在网上有很多Python的资讯供初学者.C语言是非常重要, 但比Python及Perl更难学. 不要以它为起点.
对於视窗作业系统的用家, 请你们不要只学Visual Basic. 它会使你得到坏的编写程式习惯, 亦并不能於不同的作业系统平台使用. 尽量不要用它.
问: 但编写开放式程式的人会否不能赚钱过活?
看来不会 □ 直至现在, 开放式程式工业是在创造就业机会而非减少就业机会. 若成功编写一个程式是经济正收益,程式编写员, 无论是开放式或非开放式的, 亦可得到薪金. 另外, 无论有多少的开放式程式, 亦有更多需求新的及度身订做的应用程式.我在Open Source网页有更详尽的解说.问: 我应如何开始, 我在那里可以很到免费的Linux ?
在这网页的其他地方已有超连结带你到可以得到免费Unix的地方. 要成为骇客, 你需要有主动性, 自发性及自学能力. 现在开始吧…. Eric S. Raymond的电子邮号esr@snark.thyrsus.com回英文首页 | 到英文主页网页地图 | Date: 1999/12/27 |
本文的PDF文档可以从这里 http://download.csdn.net/source/2940137获得。
为何有此文章?
身为《黑客辞典 http://www.catb.org/jargon/》1 和其他一些知名文档的作者, 我常收到热心的网络新人的电子邮件, 问及“如何可以成为一名神奇的黑客?”。 早在1996年我便注意到,好像还没有任何一个“常见问题”或者网络文档论述过这个重要的问题,于是我决定撰写此文。我相信很多黑客都在考虑我现在考虑的这些问题。然而,我并不认为我在这个问题上是唯一的权威,如果你不认同下面读到的这些内容,那请你写下你的看法。
如果你正在阅读离线文档,那么你可以在这里http://catb.org/~esr/faqs/hacker-howto.html 找到本文的最新版。
本文的装饰物——这个五点九宫图被称为“滑翔机”。在一款令无数黑客痴迷的名为“生命游戏”2 的数学仿真游戏中,这个简单的图案蕴含着令人吃惊的特性。我认为它是一个能够彰显黑客本质的图形徽章——抽象,起初在表面上有些神秘,但自身拥有一个具有错综复的逻辑性的入口通向整个世界。在这里http://catb.org/~esr/hacker-emblem/ 可以了解更多关于滑翔机徽章的信息。
什么是黑客
在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而,若你想知道如何成为一名黑客,只要牢记两点即可。
这是一个社区和一种共享文化,可追溯到那群数十年前使用最初的共享小型机以及最早的“阿帕网”3的专业程序员和网络专家们。而这样一群人便被称之为“黑客”。黑客们建立了互联网,黑客们让Unix操作系统成为了今天这个样子,黑客们管理着讨论组4 ,黑客们维持着万维网的运转。如果你是这种文化的一部分,你为这些做出过你的贡献并让其他的人知道你且以“黑客”之名称呼你,那你就是一名黑客!
然而,黑客精神却并未被禁锢在“软件黑客”这一范畴之中。有很多人将黑客精神应用到了其他的领域,例如电子或是音乐——事实上,你可以在所有的科学与艺术的最高境界中发现黑客精神的影子。由于这种共同的精神,软件黑客亦称后者为“黑客”——甚至有人认为黑客精神是脱离于黑客这项工作而独立存在的。但在以下的文章中,我们将重点讨论软件黑客的技能与态度,以及能令他们被称之为黑客的“共享文化”这一传统。 而另外一群人总是声称自己是黑客,但他们不是。这些人(大多是年轻人)入侵其他人的计算机或是破坏通信系统。真正的黑客称这群人为“骇客”5 并与他们划清界线。真正的黑客大多认为骇客是懒惰、不负责任以及不明智的一群人。能够破坏保安系统并不能让你成为一名黑客,正像能够偷车并不能让你成为一名汽车工程师一样。不幸的是,很多记者与作家都被误导而使用“黑客”一词去形容“骇客”,而这将永远激怒那些真正的黑客。
最根本的区别在于:黑客是创造事物,而骇客是破坏事物。
若你想成为黑客,请看下去。若你只想成为骇客,请到alt.2600 - news:alt.2600讨论小组并做好准备当你发现你远没有自己想象的那样明智之后,去坐五到十年的牢。这就是我要对骇客说的。
黑客的态度
黑客解决问题并创造事物,他们信仰自由与互助。想要以黑客的身份为大家所接受,你需要表现出你拥有这种态度,而若要表现出你拥有这种态度,则需要你真的信仰这种态度。 而如果你认为培养黑客态度仅仅是融入黑客文化的一种方式,那你就错了。真正的去信仰这些对你来说非常重要——它可以帮助你学习并保持你的动力。像所有的艺术创作一样,成为大师最有效的方法是遵循大师的思维——不仅是智慧, 还有情绪!
以下这首现代禅谒便说明了问题:
遵循此法:
仰慕大师, 跟随大师, 比肩大师, 超越大师, 成为大师。
所以,要成为黑客,请反复阅读以下几点直到你牢记并坚信它们为止。
1. 这世上有无数奇妙的问题等待我们去解决。
成为黑客是一件非常有趣的事情,但乐趣的背后需要付出大量的努力。努力需要动力。一名出色的运动员的动力往往来自于自身肢体运动与超越自身极限的一种天然成就感。正如一名黑客应该从解决问题、磨练技能以及挥洒智慧之中获取喜悦一样。
如果你不是这种人,那为了成为一名黑客,你必须让你自己成为这种人。否则你会发现你的黑客热情将被诸如性、金钱以及社会价值观等事物慢慢的消磨干净。
(你亦需要培养一种对于自学能力的信仰——坚信即便你现在不能解决全部的问题,但如果你可以解决哪怕一小部分的问题并从中学习,那么你都可以学习到足够的东西去解决下一小部分的问题——直到将整个问题全部解决为止。)
2.没有任何一个问题应该被解决两次
创造力是一个宝贵而又有限的资源。世上有如此多的新奇问题等待我们去解决,创造力不该被浪费在“再发明”这样的怪圈中。
想要成为一名黑客,就要去相信其他黑客的思考时间都是很宝贵的——以致于分享信息对于你来说是一个道义层面上的责任。解决问题并给出解决方案,好让其他的黑客可以去解决新的问题而不是永远在旧问题上止步不前。
然而,请注意:“没有任何一个问题应该被解决两次”并非是要你认为现有的解决方案是神圣不可侵犯的或者它是当前问题的唯一解决方案。通常,我们遇到一个前所未见的问题时,总是从该问题最初的那个解决方案中学会很多东西。这很好,而且通常很必要,这意味着我们可以做的更好。而不好的则是人工技术上、法律上或是体制上的阻碍(譬如闭源代码),它阻止人们使用一个现有的解决方案,而迫使人们陷入“再发明”的怪圈之中。
(你不必认为你有责任公布出你全部的作品——虽然这样做的黑客会从其他黑客那里获得最多的尊重。用它们赚取足够的钱来维持你的食物、租金和计算机——这并不违背黑客的价值观。利用你的黑客技术来维持一个家庭甚至致富是一件好事——只要你在做这些的时候没有忘记你对于黑客艺术以及黑客朋友的忠诚。)
3. 无聊与繁冗的工作等同于邪恶
黑客——或是其他一些创作者——不应在那些无聊的或是愚蠢的重复工作中充当苦力, 因为如果这样那就意味着他们没有去做一项只有他们才可以做的事情——解决新问题。这种蠢事对谁都没有好处。因此,无聊与繁冗的事情对黑客而言不仅只是不良的, 甚至是是邪恶的。
要成为一名黑客,你必须信仰此观念并将所有无聊与繁冗的事情尽可能的自动化,这不止为自己,也是为其他人(尤其是其他的黑客)。
(这里有一个显而易见的例外。黑客们有时会做一些看起来重复或无聊的事情用以令思维清晰,或是为了训练某些特殊的技能与经验并且别无他法。但这完全取决于个人的选择——没人能强迫一个善于思考的人去完成这些事情。)
4. 自由很好
黑客是天生反独裁的。若有人可以对你下达命令,那他也可以阻止你去解决那些令你着迷的问题——并且基于这种独裁的思维模式,他总能找到一些愚蠢到令人吃惊的理由去这么做。所以无论何时何地都要与独裁主义战斗,这样才不至于让你或是其他黑客被他扼杀。
(这并不等同于向所有权威挑战。儿童们需要被教导而罪犯需要被压制。同样,黑客需要接受某些权威统治,前提是从中的获益应该多于去执行统治者的命令。但这一切都该是有限度的,并且是一个平等的契约关系。而不该是一个强加于个人意愿之上的独裁思想。)
独裁依靠的是“审查”与“保密”。他们总是怀疑“自愿合作”和“信息共享”——他们只喜欢在他们控制下的“合作”。所以要成为一名黑客,你必须练就一种对审查、保密或使用暴力和欺骗手段去压迫人民的行为的本能敌对情绪。并且你该因这种信仰而采取行动。
5. 态度不能代替能力
作为一名黑客,你当拥有以上的态度。但仅有一个正确的态度不能让你成为黑客,最多能让你成为一名优秀的运动员或是摇滚明星。想成为一名黑客还需要智力、实践、奉献以及勤奋。
因此,你该时刻持有怀疑的态度并尊重每一种能力。黑客们不会让一个过难的问题去浪费他们的时间,但他们崇拜能力——特别是黑客技能,但其实任何的能力都是有价值的。很少有人能掌握的能力尤为可贵,而这其中若含有高度的智慧、技巧与集中力就再好不过了。
若你尊重能力,你便会非常乐于锻炼自身的能力——那么勤劳工作与无私奉献就会成为一种紧张的竞赛而非一件苦差事。这种态度对于成为一名黑客也是至关重要的。
基本的黑客技能
黑客的态度固然重要,但技能却更为重要。态度无法替代能力,有一些必备技能和基本工具是任何一个梦想成为黑客一员的人都应该掌握的。 随着时间的流逝,这些工具也在慢慢的吐故纳新。例如,过去需要用机器码编写的一些程序,现在却更多的用HTML去编写。但很显然,你需要掌握以下这些:
1.学习如何编程
这当然是最根本的黑客技能。如果你不熟悉任何计算机语言,我建议从Python开始。它设计清晰、文档详实,对于初学者来说非常友好。尽管它是一种非常好的初学语言,但它绝非玩具。他非常强大与灵活,并且适于开发大型项目。我已经写了一份更加详细的“Python评价 ”- http://www.linuxjournal.com/article/3882,更多的教程http://docs.python.org/tutorial/index.html 可以在Python网站 上获取到。
我过去也常推荐Java作为早期学习的一种语言。但一些批评- http://blogs.kent.ac.uk/mik/2008/01/14/the-pitfalls-of-java-as-a-first-programming-language-a-response/改变了我的想法。黑客不能像他们说的那样“像一个五金店里的管子工一样的去解决问题”,而是应该知道每一个部件是如何运作的。现在我认为最好是先学习C和Lisp,而后再是Java。
此处可能有一个很普遍的问题。如果一种编程语言令你吃不消,那它可能是优秀的编程工具却不易学习。并非只有编程语言才有这种问题,像RubyOnRails、CakePHP、Django这样的页面应用平台会很容易有一种肤浅的认识,但当你遇到一个难题时却发现无力应对,即便是去纠正一个很简单的错误。
如果你对程序的要求很严格,那你必须要去学习C——Unix的核心语言。而C++和C非常的相近,如果你学会了其中的一种,那学习另外一种将不会有什么困难。然而,这两者都不是初学者的好选择。并且实际上,越是能够避免用C编程,你的效率就越高。
C语言非常高效,也很节约计算机资源。不幸的是,C是通过要求你进行大量低级的手动资源(如内存)管理来实现这种“高效”的。所有这些低级代码都是复杂和易错的,并会占用你大量的时间去调试。在机器越来越强大的今天,这可不是个明智的权衡——一个明智的选择应该是用编程语言让机器变得不那么高效,而让你的时间变得越来越高效。因此,选择Python吧。
而其他对于黑客具有重要意义的语言包括http://www.perl.com/和http://www.lisp.org/ 。Perl值得学习的主要原因是:它被广泛的应用于动态网页和系统管理中,所以即便你不会写Perl程序你也应该学会如何阅读Perl代码。很多人选择Perl的原因与我建议Python的原因相同,既避免使用C编程而使不需要C的机器更高效。你至少应该能理解它们的代码。
LISP值得学习的原因则不同——在你掌握它之后你会收到一些意想不到的经验和启示。这些经验会让你在今后成为一个更加出色的编程者,即便你并不经常使用LISP。(你可以很容易的使用Emacs文本编辑器 或是http://www.gimp.org/的Script-Fu插件来编写LISP)
最好能学习全部这五种语言——Python、C/C++、Java、Perl、LISP.此外,作为最重要的黑客语言,它们代表了完全不同的编程方式,并且每一种都有它们自身的价值。
但你该知道若只是简单的堆砌这些语言,那你根本无法达到黑客的水平而仅仅是一个程序员而已——你应该去学习如何去用一种独立于任何一种编程语言之外的思维模式去规划你的程序。作为一名真正的黑客,你该达到可以在数日之内学会一种新的编程语言的能力,且凡是手册中做出过说明的就应该是你知道的。这意味着你得学习一些非常不同的语言。
我不可能在这里完整的介绍如何学习编程——这是一个很复杂的技能。但我可以告诉你书籍与课程并不有效。许多,或者是大部分的优秀黑客都是自学的。你仅能从书中学到语言的基本特征——就这点东西。而将知识融为自然的思维模式只能从实践与模仿中学到。而能做到这样的只有(1)阅读代码和(2)编写代码。
Peter Norvig——Google公司的顶尖黑客之一以及被广泛应用的关于人工智能的教科书作者之一——撰写了一篇非常优秀的文章《教自己在十年内学会编程 》- http://norvig.com/21-days.html,他“编程成功的秘诀”是非常值得关注的。
学习编程就像学习去写好一门自然语言一样。最好的方法就是去阅读一些大师写好的东西为规范,然后自己写一些东西,再多读些,再多写点,再多读些,再多写点……反反复复直到你的作品看起来像模像样了。
寻找优秀的代码来阅读曾经是件很不容易的事情,因为很少有大型程序的代码供新手黑客阅读和思考。而现在则发生了巨大的改变:开源的软件、编程工具和操作系统(全部由黑客创造)现在已经被广泛的使用。而这恰巧让我引入了我们的下一个主题……
2.获取一个开源的Unix系统7 并学着去使用和运行它
我假设你拥有一台个人计算机或至少是可以使用一台(花些时间来欣赏一下这是多么的弥足珍贵。黑客文化可以追溯到那个计算机昂贵到个人无力承受的时代)。对于每个想收获黑客技能的新人来说,第一步也是最重要的一步就是获取一份Linux或是BSD-Unix亦或是OpenSolaris的拷贝,之后在你的机器上安装并运行它。
的确,除了Unix系统之外这世上还有很多的操作系统。但他们都是以二进制形式发布的——你无法阅读其中的代码,也无法修改他。想要在装有Windows系统或是其他什么闭源系统的机器上学习黑客技能就像是穿着盔甲学跳舞一样。
在Mac OS X上学习还是可行的,但仅有一部分系统是开源的——你会四处碰壁,并要时刻注意不要养成依赖苹果私有代码的坏习惯。如果你将精力集中到Unix的引擎中,那你将学会不少有用的东西。
Unix是互联网的操作系统。虽然你不了解Unix也可以学习如何使用互联网,但你终究无法成为一名互联网黑客。正因如此,当今的黑客文化拥有一个强大的Unix核心。(这并不总是真的,有些早期的黑客为此不悦。但Unix与互联网的联系已足够强大以致微软的魔爪都不足以削弱这种联系。)
所以,选择一款称心的Unix吧——我本人很中意Linux,但也有别的选择(当然,你也可以同时在一台机器上同时运行Linux和Windows)。学习它,运行它,用它来思考,用它与互联网对话,阅读代码,修改代码。你会获得那些在微软的操作系统上做梦也无法得到的优秀编程工具(包括C、LISP、Python和Perl),并将从中获得很多的快乐。当你成为一名黑客高手的时候再回头来看,你会发现你获取到了比你想象的更多的知识。
关于Unix的更多知识,可以参见“Loginataka - http://catb.org/~esr/faqs/loginataka.html”。你或许也想看看《Unix编程艺术- http://catb.org/~esr/writings/taoup/html/ 》。
若你想着手于Linux,那可以看看“Linux在线- http://www.linux.org/ ”网站。你可以从那里下载或者(这样可能更好)寻找一个本地的Linux用户社群来指导你如何安装。
在这份指导诞生的头十年里,我始终认为站在一个初学者的角度来看,所有的Linux发行版几乎都是等价的。而在2006-2007年之间,一个最好的选择诞生了:Ubuntu .任何一款Linux发行版都有自己的优势,而Ubuntu却是最多新手青睐的选择。
你可以在BSD的官网- http://www.bsd.org/ 中找到BSD Unix的指导和源代码。
一个很好的尝试方法就是使用被Linux迷们称为LiveCD-的东西,它将系统完全的运行在CD中而不会改变你硬盘中的任何数据。这样可能有些慢,因为CD运行速度比较慢,但这是一个很好的方法来测试你能否适应这一切。http://www.livecdnews.com/
我还写了一篇入门教程来阐述“互联网与Unix基础 ”- http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html
我曾经反对新手独自安装Linux或是BSD。但时至今日,安装程序已经变得足够好以致新手也可以自己完成所有的安装了。尽管如此,我依然建议你和当地的Linux用户社群保持联系并寻求帮助。这没什么坏处,而且还可以让一切变得更顺利。
3.学习如何使用万维网以及编写HTML
大部分由黑客文化创造的事物是远离人们的视线的,建立工厂、办公室、学校这些事情显然和黑客没什么直接关系。只有网页是一个例外,即便是政治家也要承认这个伟大而光辉的黑客玩具改变了世界。仅此一条理由(当然还有很多其他理由),你就应该学习如何在互联网上工作。
这并不仅仅是打开一个浏览器这么简单的事情(这任何人都会作),而是要学习如何编写HTML——网页的标记语言。如果你不懂如何编程,那HTML会教给你一些习惯来帮助你学习编程。因此建立一个自己的主页,并坚持用XHTML编写——一种比过去的HTML更简洁的语言。(网上有很多的相关教程)
但仅是拥有一个主页并不能让你更接近一名黑客。网上到处都是各种各样的主页,大多都是些毫无意义、没有技术含量的垃圾——看上去很绚丽的垃圾。记住,垃圾都是一样的。(更多的信息可以参考“HTML地狱 ”- http://catb.org/~esr/html-hell.html )
要想让你的页面变得有价值,那它必须要有内容——那些对其他黑客来说有趣且有益的内容。而这将是下一个主题中要说的……
4.如果你不懂英语,请学习它。
我本人作为一个以英语为母语的美国人,过去并不愿提及这一点,因为这看起来有点像文化帝国的暴政。但一些其他语种的朋友多次敦促我指出英语是黑客文化和互联网的工作语言。因此掌握英语对于你在黑客社区的交流非常有帮助。
早在1991年我就发现很多黑客以英语作为第二语言在技术论坛中交流。在那时,我意识到英语较之其他语言拥有最多的技术词汇,因此也是完成黑客工作的最佳语言。基于同样的原因翻译用英语写成的技术类图书也往往不能令人满意(虽然都已经做完了)。
Linus Torvalds 8 ,一个芬兰人,用英文注释自己的代码(他显然是想也没想就这样做了)。他流利的英语也是他能够在世界范围内招募到Linux社区的志愿开发者的一个重要因素。这是一个值得学习的榜样。
作为一个以英语为母语的人并不能保证你拥有很实用的黑客语言。如果你的书写不够流畅或是有着千疮百孔的拼写错误,很多黑客(包括我本人)将会无视你。虽然马虎的拼写并不总意味着草率的思想,但它们之间通常还是有关联的——我们不需要一个草率的思想者。如果你还不能写的很好,那就去学吧。
黑客文化现状
正像许多文化与金钱无关一样,黑客帝国是建立在名誉之上的。你试图去解决一些有趣的问题,而到底这个问题是否有趣以及你的解决方案是否出色,这些往往只有你的技术同行或是高手们才有能力去评价。
因此,当你玩这场黑客游戏的时候,你要知道你的得分主要取决于其他黑客对你的评价(这也是为什么在其他黑客皆称你为黑客之前你并不算是个真正的黑客)。这一事实常被掩盖于黑客独自工作的表面之下,同时黑客文化也避讳(虽然上世纪90年代后期这种避讳在逐渐减弱,但依然存在)承认个人的动力会受到外部观念的左右。
具体的来说,黑客帝国所秉承的就是人类学家所称之为的“奉献文化”。你从中获得地位与荣誉并不因为你领导着其他人,亦不因你的美丽,不因你有他人所求之物,而仅因为你的给予。或者说,你献出了你的时间和创造力,收获了技能。 若要获得黑客们的尊重,以下五件事是你应该做的:
1.编写开源软件
首先(最核心也是最传统的),就是写一些其他黑客认为有趣或是有用的程序,并将源代码开放出来供整个黑客团体使用。
(我们也常将这种东西称为“自由软件”,但这会引起很多人的疑惑——到底这个“自由”该如何定义。所以我们现在更多的称其为“开源 ”软件- http://www.opensource.org/
在黑客帝国中那些受到最多尊重的大神,是编写并放出那些有广泛需求的强大程序供他人使用的人。 此处有一个历史的转折点。虽然黑客们总是视身边的开源开发者为社区的强大核心,但在上世纪90年代中期之前,大部分黑客大多数时间还是在做闭源开发工作。在1996年我撰写这份指南的第一版时,这种现象依然普遍。而开源软件成为主流则是在1997年之后的事情。今天,“黑客社区”与“开源开发者”基本成了描述同一种文化和群体的两种说法——但应该记住这并非是始终如此。
2.帮助测试和调试开源软件
应服务于那些代表并调试开源软件的人。在这个并不完美的世界中,我们不可避免的花费大量的编程时间在调试错误上。这就是为什么开源软件作者会告诉你一个优秀的测试者(那些知道如何清晰的描述问题,能够准确的定位错位,能容忍预先版的缺陷,并愿意制做一些简单的诊断程序的人)对他们来说是比宝石还要珍贵的。甚至他们中的某些人可以让整个调试阶段从一场旷日持久而精疲力竭的噩梦变成一段不无益处的小困扰。
如果你是一个新人,那么找到一款你感兴趣且正在开发阶段的程序,并试着成为一名优秀的测试者。从帮助测试程序到帮助调试再到帮助修改,这是一个很自然的过程。你会从中学会很多,并且会在日后得到你所帮助的人的回报。
3.公布有用的信息
另一件有益的事情就是在诸如“常见问题”这样的网页或是文档中收集和过滤有趣的或是有用的信息。并将这些公诸于众。
重要的技术问答的维护者会得到同开源作者同样的尊重。
4.帮助维护基础设施的运作
黑客文化(就此而言,还有互联网工程的开发工作)的运作离不开志愿者的参与。为了维护它的运作,有大量必须却枯燥的工作需要去完成——管理邮件列表,监管新闻组群,维护大型软件的存档站点,发展RFC 以及其他技术标准。- http://www.rfc.net/
而做这些事的人也会受到相当的尊重,因为谁都知道这些工作会消耗大量的时间而且显然没有编写代码有趣。做这些来奉献吧。
5.服务于黑客文化本身
最后,你可以服务并传播这文化本身(比如写一篇准确描述如何成为黑客的文章:-))。通常你不必如此,除非你已经在以上四条中取得了一定的地位与尊重。 准确的讲,黑客文化中没有领导,但却有诸如文化英雄、长老、历史学家或是发言人一类的角色。当你在这个战线中呆的足够久了,你也会成为以上几种人之一。但请注意:黑客们很排斥那些太过于个人主义的长老,所以赤裸裸的去追求这种名誉是危险的。与其费力的去追求这些,不如摆正自己的位置,并虚心和谦恭的面对自己现有的地位。
黑客与书呆子的关系
并不像传言中的那样,成为一名黑客并不一定要成为一个书呆子。但很多的黑客确实是书呆子。某些时候做一些远离社会的工作有助于你将精力集中于真正重要的事情上,比如思考和钻研。 正因如此,许多黑客因被称为“极客”9 而引以为傲——这标志着他们独立于通常社会观念之外(这也正是为何科幻小说或是策略游戏一类的东西对黑客如此钟爱)。“书呆子”这种称呼在上世纪90年代颇为盛行,因为那时这个词仅含有轻度贬义而“极客”在当时则贬义更甚。而到了2000年之后,他们两者调换了角色,至少在美国的流行文化中是如此的。时至今日,即便不是技术人才也会因以“极客”自居为傲。
如果你能集中精力去研究黑客技术而又能养家糊口,那就太棒了。在我还是新手的上世纪70年代,想做到这一点远没有现在这么简单——当今的主流文化对技术怪才越来越友善了。甚至有很多人发现黑客其实可以作为高素质的恋人或配偶。
如果你因为没有家庭而研究黑客技术,那这也不错——起码没有那么多麻烦让你分神。而且你可能很快就会组建一个自己的家庭了。
风格要点
再次重申,想要成为黑客,首先要进入黑客的思维方式。以下这些即便你不在电脑前也可以做的事情可能会对你有所帮助。这些并不能替代对黑客技术的钻研(什么都不能替代)但很多黑客都这样做,并认为这些和黑客的本质有着某种关联。
学着去写好你的母语。 虽然很多人想当然的认为程序员基本都不写作,但其实相当多的黑客(包括我认识的所有那些有所成就的人)都是优秀的作家。
阅读科幻小说,并参加科技会议 (这是结识黑客或原黑客的好方法)。
以武术的形式训练。 武术所要求的坚定的意志与黑客所要求的非常相似。最受黑客们喜爱的还是亚洲的徒手格斗术,诸如跆拳道、空手道、中国功夫、合气道或是柔术。西方的击剑与亚洲的剑道也有非常多的追随者。上个世纪90年代末期,射击运动也开始逐渐兴起。最符合黑客精神的武术是那些强调坚定意志、放松精神、增加控制力的,而不是强调原始的力量、运动力和柔韧性的。
学习一种冥想之法。 黑客之间最流行的便是禅法(最重要的是任何人都可以从禅法中受益而不必改变自己的宗教信仰)。其他的方式也行得通,但需注意不要选择一条让你做出什么疯狂举动的道路。
拥有一对善于倾听音乐的耳朵。 学会去欣赏各种奇妙的声音,并学着去演奏乐器或是歌唱。
提高你对双关语和文字游戏的认识。
以上这些你做的越多,你就越接近天然的黑客本质。为何会如此我也不是很清楚,但它们都能锻炼左右脑之间的协作这一点看来很重要。作为一个黑客必须能够做到在进行逻辑推理的同时还能够跳出一个问题的表面逻辑。 工作既娱乐,娱乐既工作。对于一个真正的黑客而言,“娱乐”、“工作”、“科学”与“艺术”之间的界线趋于消失,或者是合成为一种高级的创造性娱乐。但不要被狭隘的技术范畴所局限。虽然很多黑客都自称为程序员,但他们几乎都拥有众多其他的相关技能——常见的有系统管理、网页设计和PC硬件故障排除。每一个黑客都是一个系统管理员,同时也是熟练的脚本程序员和网页设计者。黑客们从不半途而废,如果他们决定学习某项技能,他们最终都要精通此道。
最后,以下这些不要做:
不要使用一个愚蠢而浮夸的ID或假名。
不要在讨论组中打口水仗(其他地方也不要)。
不要以“叛客”10 自居,也不要在这种人身上浪费时间。
不要发送或邮寄满是拼写和语法错误的邮件。
为了你的荣誉你该远离这些事情。黑客们的记性都很好——你可能因为早期做过的一些蠢事而多年不被认可。
使用假名的问题值得尤其注意。将自己的身份隐藏起来是愚蠢而幼稚的行为,是骇客、破解者11或其他什么低级生活方式的象征。而黑客们不这样做,他们为自己所做的事情为荣,并很乐于见到这些事情与自己的真名联系在一起。所以如果你有一个假名,请放弃它,在黑客文化中这只能标志着你是一个失败者。
历史标注:黑客、开源和自由软件
当初在1996年末我撰写此文的时候,许多与此文相关的事物并不是他们现在的样子。在这里用一些文字来澄清这些变化,以便让人们理解开源、自由软件和Linux对于黑客社区是怎样的一种关系。如果你对此并不关心,你可以直接跳到下一个章节中去。
我所描绘的黑客风尚与社区远早于1990年Linux的出现。我最初加入这一团体是在1976年,而这个团体则最早可追溯到20世纪60年代初期。但在Linux出现之前,大部分的黑客研究都是在私有系统或是像麻省理工学院的ITS这种从不在实验室外部署的少数本土实验性系统中完成的。虽然他们尝试去改变这一现状,但收效甚微。即便是在黑客社区中也只有极少数的信仰者在使用,更别说世界范围内流行的软件了。
现在所谓的“开源”其实可以追溯到黑客社区创建之处,但直到1985年之前它都是一种不成文的民间行为而不是一种由理论和宣言所倡导的自发性运动。而这一切都在1985年划上了句号,头号黑客Richard Stallman(“RMS”)试图给他起个名字——“自由软件”。但他的命名行为同时也成了一场主张运动,他为“自由软件”加入了一个思想整合,致使很多的黑客社区都不愿接受。因此,“自由软件”受到了了黑客社区一些坚定的少数派的强烈反对(特别是与BSD Unix相关的人士),但依旧得到了其余大多数人(包括我)低调而有所保留的使用。
尽管有所保留,在RMS倡导的定义和领导下,上世纪90年代中期还是在黑客社区中树立起了“自由软件”的大旗。而它受到了Linux的崛起所带来的一个严峻挑战。Linux给了开源开发一个天然的归宿。许多现在被称之为开源的项目都是在那时从私有的Unix系统迁移到了Linux平台上。围绕着Linux建立的社区瞬间爆发,比“前Linux时期”的黑客文化更庞大且趋于异化。RMS坚持要将这一系列的行动加入到他的“自由软件”运动中去,但却被迸发出的Linux社区以及他的创始人Linus Torvalds所阻止。Torvalds虽然沿用了“自由软件”的称呼,但却拒绝了RMS的思想整合。因此众多的年轻黑客纷纷效仿。
在1996年我首次公布这份黑客指南的时候,许多黑客社区迅速的围绕着Linux和少数其他的开源系统(尤其是那些BSD Unix的后裔)展开了重组。实际上在社区看来,那些我们用了几十年的时间在闭源系统上开发的闭源软件虽然还未过时,但看上去已如死去一般。越来越多的黑客们加入到Linux或Apache开源项目中去。
然而“开源”这个术语在1998年之前仍未出现。当它出现后,大多的黑客社区都在半年内通过了这一定义,而仅有少数黑客仍沿用“自由软件”的说法。自1998年以来——尤其是2003年以后——“黑客技术”与“开源(或自由软件)开发”这两个词变得越来越接近。时至今日,这两个概念仅有微小的区别,而且看起来未来也不会有什么变化了。
这些值得记住,然而,事情不总是这样的。
其他资源
Paul Graham写了一篇名为《伟大的黑客 》的文章,另一篇《在校生 》则彰显了他的智慧。- http://www.paulgraham.com/gh.html, http://www.paulgraham.com/college.html
有一篇名为《如何做个程序员 》的文档是本文很好的补充。它不止针对代码和技能提供了有价值的建议,还提出了在程序团队中如何策划项目。- http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
我还写了一篇《黑客帝国简史 》。- http://catb.org/~esr/writings/hacker-history/hacker-history.html
我写过一篇论文——《大教堂与集市 》,来解释Linux和开源文化是如何运作的。我在他的续篇《家园与智域 》中更加直观的解释了这一问题。- http://catb.org/~esr/writings/cathedral-bazaar/index.html, http://catb.org/~esr/writings/homesteading/
Rich Moen写了一篇优秀的文档,叫做《如何建设一个Linux用户组 》。- http://linuxmafia.com/faq/Linux_PR/newlug.html
Rich Moen还和我合作了一篇文档《如何提出精明的问题 》。这将帮助你找到一条最有效的寻求帮助的途径。- http://catb.org/~esr/faqs/smart-questions.html
如果你需要个人计算机、Unix或是互联网的工作原理上的指导,可以参考《Unix与互联网基础指南 》- http://en.tldp.org/HOWTO//Unix-and-Internet-Fundamentals-HOWTO/
若你想发布软件或是编写软件补丁,你可以参考《软件发布实践指南 》的指引。- http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html
如果你喜欢禅谒,你或许也会喜欢《无根之根:名家大师的Unix公案 》。- http://www.catb.org/~esr//writings/unix-koans/
常见问题
问:我如何知道我已经是一名黑客了?
答:问自己以下这三个问题: 是否能流利的说出代码?
是否能被黑客社区的目标与价值观所认同?
是否曾有过颇具规模的黑客社区成员称你为黑客?
如果以上这三个问题的答案都是肯定的,那么你已经是一名黑客了。缺一不可。
第一项测试是关于能力。只要你有本文前面所讲的最基本能力便可通过这一项。若你已经从一个开源项目中获取了大量的代码,那这并非难事。
第二项测试是关于态度。如果你像是与生俱来的拥有前文所述的黑客五大心态而不像是后天学来的,那你已经成功了一半了。这一半出于内在。而外在的另一半则要看你能在多大程度上加入到黑客社区的长期项目中去。
这有一份不完成却具有代表性的项目名单:Linux的改进与传播是否与你有关?你是否热衷于软件的自由化?反对垄断?你是否信仰计算机该被赋予让全世界变得更加富有与人道的重任?
但这里有一个值得注意的地方。黑客社区需要争取一些利益——主要是捍卫言论自由以及抵制那些会让开源非法化的“知识产权”。有些长期项目的外在表象就是像“电子前沿基金会”这样的民间自由组织那样对这些运动提供支持。但在此之上,很多黑客希望将黑客态度规范为一种怀疑论的政治态度,我们知道这只是枉费心机而已。如果有人以黑客态度为名聘你进入国会任职,那他们就错了。正确的回应应该是“不说话而只给他们看你的代码”。
第三项测试含有一个有趣的递归。我在“什么是黑客”那一节中提到过,作为一名黑客就该是一个特别的亚文化和一个与之相关的社会网中的一员——一个是内在而一个是外在。很久以前,黑客是一个非常缺乏凝聚力且个人主义的群体。但在过去的三十年,社会网的增加与互联网越来越容易的连接黑客亚文化的核心的重要性越来越显著。一个很显著的变化就是——在本世纪,我们有了自己的T恤。
那些研究网络并喜欢把黑客文化放到“无形的学院”专栏下的社会学家已经注意到,这些网络的一个重要特点就是它们有守门人——需要有社会权威性的核心成员去批准新成员加入到网络中。因为黑客文化这一“无形的学院”是松散与随性的,所以它的守门人也是很随性的。但每个黑客都从心底里清楚的一点就是——不是任何黑客都是守门人。守门人需要拥有某些资历地位或成就才能有此头衔。这很难量化,但每个黑客见到之后便知道他是。
问:你能教我黑客技术么?
答:自从发表此文开始,我每周(甚至是每天)都会收到很多类似于“请教我黑客技术”的要求。很不幸,我没有时间和精力去做这些。而且作为一个开源主义者,这已经耗去了我110%的时间了。
即便我有时间也不会教,黑客的基本能力和态度就是自学。你会发现当一个真正的黑客愿意教你些什么的时候,他会很反感用一种填鸭式的方式把自己会的东西灌输给你。 先学些东西,起码说明你尝试过了,并且有一定的自学能力。然后再向黑客们提出一些具体的问题。
如果你发邮件向黑客们寻求一些建议,有两件事你最好知道。首先,你会发现对于黑客而言,一个在书写上懒惰而粗心的人往往在思考上也是懒惰而粗心的——所以请注重拼写的准确性,并且不要忽视语法和标点的精准。第二,不要要求回复到一个非你发件账户的另一个账户上去。我们发现这样做的人往往都是使用盗取的邮箱来发件的窃贼,而我们无意鼓励或协助一个窃贼。
问:那么我该如何开始?
答:你最好的起点应该是参加一个Linux用户群的讨论会。你可以在LDP通用Linux信息站 找到很多这样的用户群。这其中可能有些离你不远,还有些与大学或学院相关。如果你有需求,Linux用户群的成员可能会给你提供一款Linux并帮助你安装和学习它。- http://www.tldp.org/links/index.html
问:你是从什么时候开始起步的?我现在学这些是不是有些晚了?
答:无论什么时候想要学习都是好的。大多数人都是在15-20岁之间对此产生兴趣,但其实有不少的例外。
问:想成为一名黑客我需要学习多久?
答:那要取决于你的天才程度和勤奋程度。只要足够的努力,大部分人都可以在十八个月到两年之内收到显著的成效。但不要以为这就是终点了。在黑客领域(其实也包括其他领域)要用大概十年左右的时间才能达到精通。而如果你是个真正的黑客,你会用毕生的时间去学习和磨练自己的技艺。
问:Visual Basic是一种不错的入门语言么?
答:如果你问这个问题,那基本可以确定你想在Windwos系统下学习黑客技术。这本身就是个糟糕的想法。想要在Windows系统下学习黑客技术就相当于想要穿着盔甲学习跳舞,我没开玩笑。不要迈出这一步,它太丑陋了,而且永远会丑陋下去。
关于VB还有一个很重要的问题——它不可移植。虽然确实有一个用VB实现的开源原型,但ECMA的适用范围并不比一个小型设备的编程接口更广泛。在Windows中,大部分的库仅供一个供应商(微软)专有。如果你不是非常小心的去甄别该用哪个库——小心到一个新手不足以达到的地步——那你就会很不幸的被限制在微软公司所支持的这几个仅有的平台中了。如果你从Unix起步,那将有更多优秀的语言和库可以选用。比如Python。
并且就像其他Basic语言一样,VB是一个先天设计不良的语言,它同样会带给你不良的编程习惯。不,别让我详细的说明,这足够出一本书了。还是学一种设计优良的语言吧。 其中一个最坏的习惯就是逐渐依赖一个供应商的专有库、组件和开发工具。一般来讲,任何一种语言若不支持Linux或一种BSD,并且/或是不能支持三个以上的供应商提供的操作系统,那这种语言就不适于黑客学习。
问:你能帮我破解系统,或是教我如何破解么?
答:不!读完这篇文章之后还会有此一问的人简直是不可救药。通常类似内容的邮件都会被我忽略掉或者是得到一份粗暴的回复。
问:我如何能得到别人的账户和密码?
答:这是骇客所为,走开,蠢货!
问:我如何才能进入/阅读/监视别人的邮箱?
答:这是骇客所为,滚吧,白痴!
问:我怎样才能窃取到IRC通道的运算特权?
答:这是骇客所为,滚远点,笨蛋!
问:我被攻击了,你能帮助我免受攻击么?
答:不行。我经常被问及类似的问题,而提问的大都一群是使用Windows的可怜虫。在Windows系统中不存在有效的安全方案来阻止骇客的攻击。代码与构架上太多的缺陷致使保护Windows系统的安全就像是用筛子划船一样困难。唯一可行的安全方案只有换成Linux或其他一些类似的操作系统,起码它们有专门的安全设计。
问:我的Windows软件出问题了,你能帮我么?
答:好的。进入DOS命令行并输入“format c:”。你所遇到的所有问题都将在几分钟之内解决。
问:在哪里我可以找到真正的黑客进行交流。
答:最好的方法是找一个你附近的Unix或Linux用户群并参加他们的会议(你可以在ibiblio的LDP 站中找到许多用户群列表的链接)。 (我经常说你不会在任何IRC上找到真正的黑客,但我意识到这一点已经改变了。像是GIMP或Perl这样的黑客社区已经开始有自己的IRC了。)
问:你能提供一些与黑客技能相关的书籍么?
答:我维护的一个“Linux阅读指南 ”可能对你有帮助。而“Loginataka ”可能也会令你感兴趣。- http://en.tldp.org/HOWTO/Reading-List-HOWTO/index.html, http://catb.org/~esr/faqs/loginataka.html
至于Python的介绍,可以直接到Python的网站上去找教程 。
问:要成为黑客是否需要精通数学?
答:不,黑客并不需要用到多少正式的数学或是算术。特别是不需要三角、微积分或是解析几何(像3D电脑绘图这种少数的特殊程序领域是个例外)。了解一些典型的逻辑运算和布尔数学即可。一些有限数学(包括有限集理论、排列组合或是象限理论)也会对你有所帮助。
更重要的是,你需要有一个像数学家那样良好的逻辑思维和精准的推理思路。当数学无法帮助你的时候,你需要用毅力与智力去改造数学。如果你缺乏这种智力,那你很难成为黑客;如果你缺乏这种毅力,那你最好现在就培养。
我认为确定逻辑能给你带来什么的一条不错的方式是去看Raymond Smullyan的《这本书叫什么?》。Smullyan那些有趣的逻辑难题把黑客精神体现的淋漓尽致。试着去解决这些问题是一个不错的开始,享受解决问题的过程则更为可贵。
问:我应该首先学习何种语言?
答:如果你还不懂XHTML(HTML最新的分支)那就先从它开始。有太多的HTML书籍流于表面而粗陋不堪,真正优秀的却凤毛麟角。我比较钟爱的是《XHTML与HTML:权威指南 》。- http://oreilly.com/catalog/9780596003821/
但HTML并不能完全算作是编程语言。当你准备开始编程的时候,我建议从Python 开始。你可能会听到许多人建议学Perl,而且Perl也比Python更流行。但它更难于学习(至少我这么看)并且设计并不如Python那样优秀。
C的确非常重要,但也比Python和Perl都要难。不要从C学起。
Windows用户,不要安装Visual Basic。它会带给你不良的习惯,并且离不开Windows系统。尽量避免这种事情发生。
问:我需要怎样的硬件?
答:在过去,个人计算机的运算速度不足且存储量小,这给黑客学习带来了人为的阻碍。但从上世纪90年代中期开始,这一切都划上了句号。只要是Intle 486DX50以上配置的机器都足以胜任开发工作、界面以及互联网交流,并且你能买得起的哪怕是最小的硬盘都已经足够存放所需的数据了。
在选择机器时最重要的一点就是看硬件是否能被Linux兼容(或BSD兼容,如果你选择走这条线路)。同样,这一点现在也是几乎所有机器都能做到了。唯一需要重点关注的在于调制解调器和网卡——有些设备属于Windows专有而不能在Linux下工作。
有一个关于硬件兼容性的说明,在这里 可以找到最新版本。- http://en.tldp.org/HOWTO/Hardware-HOWTO/index.html
问:我想要做些贡献,你能帮我挑选一个项目去做么?
答:不行,因为我不知道你的天赋和兴趣。你必须学会自我激励,否则无法成功。这也就是为什么让别人选择你的方向永远都不会成功。 试试这个:在鲜肉网 的项目公告里看几天。当你发现了一个项目让你觉得“酷!我想做这个!”的时候,就加入好了。- http://freshmeat.net/
问:我是否应该痛恨或攻击微软呢?
答:不,不用。这并不是说微软不令人讨厌。黑客文化先于微软出现,而且在微软消失后也不会消失。有时间去痛恨微软还不如去磨练自己的技术。写出一流的代码——这是最有力的痛击微软的方式。
问:但开源软件不会让程序员无法生活么?
答:看起来不会——目前看来,开源软件行业是在创造就业机会而不是减少。如果编写一个程序相较之该程序出现之前能让网络经济有所提升,那无论这个程序完成后是否开源,程序作者都会从中得利。而且无论有多少“自由软件”出炉,依然会有更多的需求与订单。我在开源 页面中对此问题做了更多的阐述。
问:我从哪能获得免费的Unix?
答:如果你还没有在机器中安装Unix,在这个页面的其他地方我给出了大多数人通常使用的免费Unix链接。作为黑客,你应该有主动性、自发性和自学能力。那么就从现在开始吧……
译者注释:
原文为Jargon File,既著名的《黑客辞典》。↩
原文为Life,是由John Horton Conway在1970年遵循冯·诺依曼的自我复制理论编写的一款逻辑游戏。↩
原文为ARPAnet,是当今国际互联网的前身。↩
原文为Usenet.↩
原文为Cracker,意为“破坏者”,本文译为“骇客”。与Hacker所代表的“黑客”作为区分。↩
原文中给出的链接已失效,此处链接为我根据原文说明自行搜索的,不确定和作者原本引用的内容是否相同。↩
原文为Unixes,此处可理解为广义的Unix系统,既包括Unix的所有衍生版以及拥有独立内核代码的其他Unix-Like系统(如Linux)。↩
林纳斯·托瓦兹,Linux系统之父,现在主要从事Linux系统内核的维护工作。↩
原文为Geek,又译为“技客”或“奇客”。原为俚语,指反常的人、畸形的人或野人。现多指对计算机或网络技术有狂热兴趣并投入大量时间钻研的人。↩
原文为Cyberpunk,此处与前文的“Cracker/骇客”含义相近。↩
原文为warez d00dz,形容从事破解和0-day漏洞攻击工作的人的专有名词。
为何有此文章?
身为《黑客辞典 http://www.catb.org/jargon/》1 和其他一些知名文档的作者, 我常收到热心的网络新人的电子邮件, 问及“如何可以成为一名神奇的黑客?”。 早在1996年我便注意到,好像还没有任何一个“常见问题”或者网络文档论述过这个重要的问题,于是我决定撰写此文。我相信很多黑客都在考虑我现在考虑的这些问题。然而,我并不认为我在这个问题上是唯一的权威,如果你不认同下面读到的这些内容,那请你写下你的看法。
如果你正在阅读离线文档,那么你可以在这里http://catb.org/~esr/faqs/hacker-howto.html 找到本文的最新版。
本文的装饰物——这个五点九宫图被称为“滑翔机”。在一款令无数黑客痴迷的名为“生命游戏”2 的数学仿真游戏中,这个简单的图案蕴含着令人吃惊的特性。我认为它是一个能够彰显黑客本质的图形徽章——抽象,起初在表面上有些神秘,但自身拥有一个具有错综复的逻辑性的入口通向整个世界。在这里http://catb.org/~esr/hacker-emblem/ 可以了解更多关于滑翔机徽章的信息。
什么是黑客
在《黑客辞典》里有不少关于“黑客”的定义, 大多和“精于技术”或“乐于解决问题并超越极限”之类的形容相关。然而,若你想知道如何成为一名黑客,只要牢记两点即可。
这是一个社区和一种共享文化,可追溯到那群数十年前使用最初的共享小型机以及最早的“阿帕网”3的专业程序员和网络专家们。而这样一群人便被称之为“黑客”。黑客们建立了互联网,黑客们让Unix操作系统成为了今天这个样子,黑客们管理着讨论组4 ,黑客们维持着万维网的运转。如果你是这种文化的一部分,你为这些做出过你的贡献并让其他的人知道你且以“黑客”之名称呼你,那你就是一名黑客!
然而,黑客精神却并未被禁锢在“软件黑客”这一范畴之中。有很多人将黑客精神应用到了其他的领域,例如电子或是音乐——事实上,你可以在所有的科学与艺术的最高境界中发现黑客精神的影子。由于这种共同的精神,软件黑客亦称后者为“黑客”——甚至有人认为黑客精神是脱离于黑客这项工作而独立存在的。但在以下的文章中,我们将重点讨论软件黑客的技能与态度,以及能令他们被称之为黑客的“共享文化”这一传统。 而另外一群人总是声称自己是黑客,但他们不是。这些人(大多是年轻人)入侵其他人的计算机或是破坏通信系统。真正的黑客称这群人为“骇客”5 并与他们划清界线。真正的黑客大多认为骇客是懒惰、不负责任以及不明智的一群人。能够破坏保安系统并不能让你成为一名黑客,正像能够偷车并不能让你成为一名汽车工程师一样。不幸的是,很多记者与作家都被误导而使用“黑客”一词去形容“骇客”,而这将永远激怒那些真正的黑客。
最根本的区别在于:黑客是创造事物,而骇客是破坏事物。
若你想成为黑客,请看下去。若你只想成为骇客,请到alt.2600 - news:alt.2600讨论小组并做好准备当你发现你远没有自己想象的那样明智之后,去坐五到十年的牢。这就是我要对骇客说的。
黑客的态度
黑客解决问题并创造事物,他们信仰自由与互助。想要以黑客的身份为大家所接受,你需要表现出你拥有这种态度,而若要表现出你拥有这种态度,则需要你真的信仰这种态度。 而如果你认为培养黑客态度仅仅是融入黑客文化的一种方式,那你就错了。真正的去信仰这些对你来说非常重要——它可以帮助你学习并保持你的动力。像所有的艺术创作一样,成为大师最有效的方法是遵循大师的思维——不仅是智慧, 还有情绪!
以下这首现代禅谒便说明了问题:
遵循此法:
仰慕大师, 跟随大师, 比肩大师, 超越大师, 成为大师。
所以,要成为黑客,请反复阅读以下几点直到你牢记并坚信它们为止。
1. 这世上有无数奇妙的问题等待我们去解决。
成为黑客是一件非常有趣的事情,但乐趣的背后需要付出大量的努力。努力需要动力。一名出色的运动员的动力往往来自于自身肢体运动与超越自身极限的一种天然成就感。正如一名黑客应该从解决问题、磨练技能以及挥洒智慧之中获取喜悦一样。
如果你不是这种人,那为了成为一名黑客,你必须让你自己成为这种人。否则你会发现你的黑客热情将被诸如性、金钱以及社会价值观等事物慢慢的消磨干净。
(你亦需要培养一种对于自学能力的信仰——坚信即便你现在不能解决全部的问题,但如果你可以解决哪怕一小部分的问题并从中学习,那么你都可以学习到足够的东西去解决下一小部分的问题——直到将整个问题全部解决为止。)
2.没有任何一个问题应该被解决两次
创造力是一个宝贵而又有限的资源。世上有如此多的新奇问题等待我们去解决,创造力不该被浪费在“再发明”这样的怪圈中。
想要成为一名黑客,就要去相信其他黑客的思考时间都是很宝贵的——以致于分享信息对于你来说是一个道义层面上的责任。解决问题并给出解决方案,好让其他的黑客可以去解决新的问题而不是永远在旧问题上止步不前。
然而,请注意:“没有任何一个问题应该被解决两次”并非是要你认为现有的解决方案是神圣不可侵犯的或者它是当前问题的唯一解决方案。通常,我们遇到一个前所未见的问题时,总是从该问题最初的那个解决方案中学会很多东西。这很好,而且通常很必要,这意味着我们可以做的更好。而不好的则是人工技术上、法律上或是体制上的阻碍(譬如闭源代码),它阻止人们使用一个现有的解决方案,而迫使人们陷入“再发明”的怪圈之中。
(你不必认为你有责任公布出你全部的作品——虽然这样做的黑客会从其他黑客那里获得最多的尊重。用它们赚取足够的钱来维持你的食物、租金和计算机——这并不违背黑客的价值观。利用你的黑客技术来维持一个家庭甚至致富是一件好事——只要你在做这些的时候没有忘记你对于黑客艺术以及黑客朋友的忠诚。)
3. 无聊与繁冗的工作等同于邪恶
黑客——或是其他一些创作者——不应在那些无聊的或是愚蠢的重复工作中充当苦力, 因为如果这样那就意味着他们没有去做一项只有他们才可以做的事情——解决新问题。这种蠢事对谁都没有好处。因此,无聊与繁冗的事情对黑客而言不仅只是不良的, 甚至是是邪恶的。
要成为一名黑客,你必须信仰此观念并将所有无聊与繁冗的事情尽可能的自动化,这不止为自己,也是为其他人(尤其是其他的黑客)。
(这里有一个显而易见的例外。黑客们有时会做一些看起来重复或无聊的事情用以令思维清晰,或是为了训练某些特殊的技能与经验并且别无他法。但这完全取决于个人的选择——没人能强迫一个善于思考的人去完成这些事情。)
4. 自由很好
黑客是天生反独裁的。若有人可以对你下达命令,那他也可以阻止你去解决那些令你着迷的问题——并且基于这种独裁的思维模式,他总能找到一些愚蠢到令人吃惊的理由去这么做。所以无论何时何地都要与独裁主义战斗,这样才不至于让你或是其他黑客被他扼杀。
(这并不等同于向所有权威挑战。儿童们需要被教导而罪犯需要被压制。同样,黑客需要接受某些权威统治,前提是从中的获益应该多于去执行统治者的命令。但这一切都该是有限度的,并且是一个平等的契约关系。而不该是一个强加于个人意愿之上的独裁思想。)
独裁依靠的是“审查”与“保密”。他们总是怀疑“自愿合作”和“信息共享”——他们只喜欢在他们控制下的“合作”。所以要成为一名黑客,你必须练就一种对审查、保密或使用暴力和欺骗手段去压迫人民的行为的本能敌对情绪。并且你该因这种信仰而采取行动。
5. 态度不能代替能力
作为一名黑客,你当拥有以上的态度。但仅有一个正确的态度不能让你成为黑客,最多能让你成为一名优秀的运动员或是摇滚明星。想成为一名黑客还需要智力、实践、奉献以及勤奋。
因此,你该时刻持有怀疑的态度并尊重每一种能力。黑客们不会让一个过难的问题去浪费他们的时间,但他们崇拜能力——特别是黑客技能,但其实任何的能力都是有价值的。很少有人能掌握的能力尤为可贵,而这其中若含有高度的智慧、技巧与集中力就再好不过了。
若你尊重能力,你便会非常乐于锻炼自身的能力——那么勤劳工作与无私奉献就会成为一种紧张的竞赛而非一件苦差事。这种态度对于成为一名黑客也是至关重要的。
基本的黑客技能
黑客的态度固然重要,但技能却更为重要。态度无法替代能力,有一些必备技能和基本工具是任何一个梦想成为黑客一员的人都应该掌握的。 随着时间的流逝,这些工具也在慢慢的吐故纳新。例如,过去需要用机器码编写的一些程序,现在却更多的用HTML去编写。但很显然,你需要掌握以下这些:
1.学习如何编程
这当然是最根本的黑客技能。如果你不熟悉任何计算机语言,我建议从Python开始。它设计清晰、文档详实,对于初学者来说非常友好。尽管它是一种非常好的初学语言,但它绝非玩具。他非常强大与灵活,并且适于开发大型项目。我已经写了一份更加详细的“Python评价 ”- http://www.linuxjournal.com/article/3882,更多的教程http://docs.python.org/tutorial/index.html 可以在Python网站 上获取到。
我过去也常推荐Java作为早期学习的一种语言。但一些批评- http://blogs.kent.ac.uk/mik/2008/01/14/the-pitfalls-of-java-as-a-first-programming-language-a-response/改变了我的想法。黑客不能像他们说的那样“像一个五金店里的管子工一样的去解决问题”,而是应该知道每一个部件是如何运作的。现在我认为最好是先学习C和Lisp,而后再是Java。
此处可能有一个很普遍的问题。如果一种编程语言令你吃不消,那它可能是优秀的编程工具却不易学习。并非只有编程语言才有这种问题,像RubyOnRails、CakePHP、Django这样的页面应用平台会很容易有一种肤浅的认识,但当你遇到一个难题时却发现无力应对,即便是去纠正一个很简单的错误。
如果你对程序的要求很严格,那你必须要去学习C——Unix的核心语言。而C++和C非常的相近,如果你学会了其中的一种,那学习另外一种将不会有什么困难。然而,这两者都不是初学者的好选择。并且实际上,越是能够避免用C编程,你的效率就越高。
C语言非常高效,也很节约计算机资源。不幸的是,C是通过要求你进行大量低级的手动资源(如内存)管理来实现这种“高效”的。所有这些低级代码都是复杂和易错的,并会占用你大量的时间去调试。在机器越来越强大的今天,这可不是个明智的权衡——一个明智的选择应该是用编程语言让机器变得不那么高效,而让你的时间变得越来越高效。因此,选择Python吧。
而其他对于黑客具有重要意义的语言包括http://www.perl.com/和http://www.lisp.org/ 。Perl值得学习的主要原因是:它被广泛的应用于动态网页和系统管理中,所以即便你不会写Perl程序你也应该学会如何阅读Perl代码。很多人选择Perl的原因与我建议Python的原因相同,既避免使用C编程而使不需要C的机器更高效。你至少应该能理解它们的代码。
LISP值得学习的原因则不同——在你掌握它之后你会收到一些意想不到的经验和启示。这些经验会让你在今后成为一个更加出色的编程者,即便你并不经常使用LISP。(你可以很容易的使用Emacs文本编辑器 或是http://www.gimp.org/的Script-Fu插件来编写LISP)
最好能学习全部这五种语言——Python、C/C++、Java、Perl、LISP.此外,作为最重要的黑客语言,它们代表了完全不同的编程方式,并且每一种都有它们自身的价值。
但你该知道若只是简单的堆砌这些语言,那你根本无法达到黑客的水平而仅仅是一个程序员而已——你应该去学习如何去用一种独立于任何一种编程语言之外的思维模式去规划你的程序。作为一名真正的黑客,你该达到可以在数日之内学会一种新的编程语言的能力,且凡是手册中做出过说明的就应该是你知道的。这意味着你得学习一些非常不同的语言。
我不可能在这里完整的介绍如何学习编程——这是一个很复杂的技能。但我可以告诉你书籍与课程并不有效。许多,或者是大部分的优秀黑客都是自学的。你仅能从书中学到语言的基本特征——就这点东西。而将知识融为自然的思维模式只能从实践与模仿中学到。而能做到这样的只有(1)阅读代码和(2)编写代码。
Peter Norvig——Google公司的顶尖黑客之一以及被广泛应用的关于人工智能的教科书作者之一——撰写了一篇非常优秀的文章《教自己在十年内学会编程 》- http://norvig.com/21-days.html,他“编程成功的秘诀”是非常值得关注的。
学习编程就像学习去写好一门自然语言一样。最好的方法就是去阅读一些大师写好的东西为规范,然后自己写一些东西,再多读些,再多写点,再多读些,再多写点……反反复复直到你的作品看起来像模像样了。
寻找优秀的代码来阅读曾经是件很不容易的事情,因为很少有大型程序的代码供新手黑客阅读和思考。而现在则发生了巨大的改变:开源的软件、编程工具和操作系统(全部由黑客创造)现在已经被广泛的使用。而这恰巧让我引入了我们的下一个主题……
2.获取一个开源的Unix系统7 并学着去使用和运行它
我假设你拥有一台个人计算机或至少是可以使用一台(花些时间来欣赏一下这是多么的弥足珍贵。黑客文化可以追溯到那个计算机昂贵到个人无力承受的时代)。对于每个想收获黑客技能的新人来说,第一步也是最重要的一步就是获取一份Linux或是BSD-Unix亦或是OpenSolaris的拷贝,之后在你的机器上安装并运行它。
的确,除了Unix系统之外这世上还有很多的操作系统。但他们都是以二进制形式发布的——你无法阅读其中的代码,也无法修改他。想要在装有Windows系统或是其他什么闭源系统的机器上学习黑客技能就像是穿着盔甲学跳舞一样。
在Mac OS X上学习还是可行的,但仅有一部分系统是开源的——你会四处碰壁,并要时刻注意不要养成依赖苹果私有代码的坏习惯。如果你将精力集中到Unix的引擎中,那你将学会不少有用的东西。
Unix是互联网的操作系统。虽然你不了解Unix也可以学习如何使用互联网,但你终究无法成为一名互联网黑客。正因如此,当今的黑客文化拥有一个强大的Unix核心。(这并不总是真的,有些早期的黑客为此不悦。但Unix与互联网的联系已足够强大以致微软的魔爪都不足以削弱这种联系。)
所以,选择一款称心的Unix吧——我本人很中意Linux,但也有别的选择(当然,你也可以同时在一台机器上同时运行Linux和Windows)。学习它,运行它,用它来思考,用它与互联网对话,阅读代码,修改代码。你会获得那些在微软的操作系统上做梦也无法得到的优秀编程工具(包括C、LISP、Python和Perl),并将从中获得很多的快乐。当你成为一名黑客高手的时候再回头来看,你会发现你获取到了比你想象的更多的知识。
关于Unix的更多知识,可以参见“Loginataka - http://catb.org/~esr/faqs/loginataka.html”。你或许也想看看《Unix编程艺术- http://catb.org/~esr/writings/taoup/html/ 》。
若你想着手于Linux,那可以看看“Linux在线- http://www.linux.org/ ”网站。你可以从那里下载或者(这样可能更好)寻找一个本地的Linux用户社群来指导你如何安装。
在这份指导诞生的头十年里,我始终认为站在一个初学者的角度来看,所有的Linux发行版几乎都是等价的。而在2006-2007年之间,一个最好的选择诞生了:Ubuntu .任何一款Linux发行版都有自己的优势,而Ubuntu却是最多新手青睐的选择。
你可以在BSD的官网- http://www.bsd.org/ 中找到BSD Unix的指导和源代码。
一个很好的尝试方法就是使用被Linux迷们称为LiveCD-的东西,它将系统完全的运行在CD中而不会改变你硬盘中的任何数据。这样可能有些慢,因为CD运行速度比较慢,但这是一个很好的方法来测试你能否适应这一切。http://www.livecdnews.com/
我还写了一篇入门教程来阐述“互联网与Unix基础 ”- http://en.tldp.org/HOWTO/Unix-and-Internet-Fundamentals-HOWTO/index.html
我曾经反对新手独自安装Linux或是BSD。但时至今日,安装程序已经变得足够好以致新手也可以自己完成所有的安装了。尽管如此,我依然建议你和当地的Linux用户社群保持联系并寻求帮助。这没什么坏处,而且还可以让一切变得更顺利。
3.学习如何使用万维网以及编写HTML
大部分由黑客文化创造的事物是远离人们的视线的,建立工厂、办公室、学校这些事情显然和黑客没什么直接关系。只有网页是一个例外,即便是政治家也要承认这个伟大而光辉的黑客玩具改变了世界。仅此一条理由(当然还有很多其他理由),你就应该学习如何在互联网上工作。
这并不仅仅是打开一个浏览器这么简单的事情(这任何人都会作),而是要学习如何编写HTML——网页的标记语言。如果你不懂如何编程,那HTML会教给你一些习惯来帮助你学习编程。因此建立一个自己的主页,并坚持用XHTML编写——一种比过去的HTML更简洁的语言。(网上有很多的相关教程)
但仅是拥有一个主页并不能让你更接近一名黑客。网上到处都是各种各样的主页,大多都是些毫无意义、没有技术含量的垃圾——看上去很绚丽的垃圾。记住,垃圾都是一样的。(更多的信息可以参考“HTML地狱 ”- http://catb.org/~esr/html-hell.html )
要想让你的页面变得有价值,那它必须要有内容——那些对其他黑客来说有趣且有益的内容。而这将是下一个主题中要说的……
4.如果你不懂英语,请学习它。
我本人作为一个以英语为母语的美国人,过去并不愿提及这一点,因为这看起来有点像文化帝国的暴政。但一些其他语种的朋友多次敦促我指出英语是黑客文化和互联网的工作语言。因此掌握英语对于你在黑客社区的交流非常有帮助。
早在1991年我就发现很多黑客以英语作为第二语言在技术论坛中交流。在那时,我意识到英语较之其他语言拥有最多的技术词汇,因此也是完成黑客工作的最佳语言。基于同样的原因翻译用英语写成的技术类图书也往往不能令人满意(虽然都已经做完了)。
Linus Torvalds 8 ,一个芬兰人,用英文注释自己的代码(他显然是想也没想就这样做了)。他流利的英语也是他能够在世界范围内招募到Linux社区的志愿开发者的一个重要因素。这是一个值得学习的榜样。
作为一个以英语为母语的人并不能保证你拥有很实用的黑客语言。如果你的书写不够流畅或是有着千疮百孔的拼写错误,很多黑客(包括我本人)将会无视你。虽然马虎的拼写并不总意味着草率的思想,但它们之间通常还是有关联的——我们不需要一个草率的思想者。如果你还不能写的很好,那就去学吧。
黑客文化现状
正像许多文化与金钱无关一样,黑客帝国是建立在名誉之上的。你试图去解决一些有趣的问题,而到底这个问题是否有趣以及你的解决方案是否出色,这些往往只有你的技术同行或是高手们才有能力去评价。
因此,当你玩这场黑客游戏的时候,你要知道你的得分主要取决于其他黑客对你的评价(这也是为什么在其他黑客皆称你为黑客之前你并不算是个真正的黑客)。这一事实常被掩盖于黑客独自工作的表面之下,同时黑客文化也避讳(虽然上世纪90年代后期这种避讳在逐渐减弱,但依然存在)承认个人的动力会受到外部观念的左右。
具体的来说,黑客帝国所秉承的就是人类学家所称之为的“奉献文化”。你从中获得地位与荣誉并不因为你领导着其他人,亦不因你的美丽,不因你有他人所求之物,而仅因为你的给予。或者说,你献出了你的时间和创造力,收获了技能。 若要获得黑客们的尊重,以下五件事是你应该做的:
1.编写开源软件
首先(最核心也是最传统的),就是写一些其他黑客认为有趣或是有用的程序,并将源代码开放出来供整个黑客团体使用。
(我们也常将这种东西称为“自由软件”,但这会引起很多人的疑惑——到底这个“自由”该如何定义。所以我们现在更多的称其为“开源 ”软件- http://www.opensource.org/
在黑客帝国中那些受到最多尊重的大神,是编写并放出那些有广泛需求的强大程序供他人使用的人。 此处有一个历史的转折点。虽然黑客们总是视身边的开源开发者为社区的强大核心,但在上世纪90年代中期之前,大部分黑客大多数时间还是在做闭源开发工作。在1996年我撰写这份指南的第一版时,这种现象依然普遍。而开源软件成为主流则是在1997年之后的事情。今天,“黑客社区”与“开源开发者”基本成了描述同一种文化和群体的两种说法——但应该记住这并非是始终如此。
2.帮助测试和调试开源软件
应服务于那些代表并调试开源软件的人。在这个并不完美的世界中,我们不可避免的花费大量的编程时间在调试错误上。这就是为什么开源软件作者会告诉你一个优秀的测试者(那些知道如何清晰的描述问题,能够准确的定位错位,能容忍预先版的缺陷,并愿意制做一些简单的诊断程序的人)对他们来说是比宝石还要珍贵的。甚至他们中的某些人可以让整个调试阶段从一场旷日持久而精疲力竭的噩梦变成一段不无益处的小困扰。
如果你是一个新人,那么找到一款你感兴趣且正在开发阶段的程序,并试着成为一名优秀的测试者。从帮助测试程序到帮助调试再到帮助修改,这是一个很自然的过程。你会从中学会很多,并且会在日后得到你所帮助的人的回报。
3.公布有用的信息
另一件有益的事情就是在诸如“常见问题”这样的网页或是文档中收集和过滤有趣的或是有用的信息。并将这些公诸于众。
重要的技术问答的维护者会得到同开源作者同样的尊重。
4.帮助维护基础设施的运作
黑客文化(就此而言,还有互联网工程的开发工作)的运作离不开志愿者的参与。为了维护它的运作,有大量必须却枯燥的工作需要去完成——管理邮件列表,监管新闻组群,维护大型软件的存档站点,发展RFC 以及其他技术标准。- http://www.rfc.net/
而做这些事的人也会受到相当的尊重,因为谁都知道这些工作会消耗大量的时间而且显然没有编写代码有趣。做这些来奉献吧。
5.服务于黑客文化本身
最后,你可以服务并传播这文化本身(比如写一篇准确描述如何成为黑客的文章:-))。通常你不必如此,除非你已经在以上四条中取得了一定的地位与尊重。 准确的讲,黑客文化中没有领导,但却有诸如文化英雄、长老、历史学家或是发言人一类的角色。当你在这个战线中呆的足够久了,你也会成为以上几种人之一。但请注意:黑客们很排斥那些太过于个人主义的长老,所以赤裸裸的去追求这种名誉是危险的。与其费力的去追求这些,不如摆正自己的位置,并虚心和谦恭的面对自己现有的地位。
黑客与书呆子的关系
并不像传言中的那样,成为一名黑客并不一定要成为一个书呆子。但很多的黑客确实是书呆子。某些时候做一些远离社会的工作有助于你将精力集中于真正重要的事情上,比如思考和钻研。 正因如此,许多黑客因被称为“极客”9 而引以为傲——这标志着他们独立于通常社会观念之外(这也正是为何科幻小说或是策略游戏一类的东西对黑客如此钟爱)。“书呆子”这种称呼在上世纪90年代颇为盛行,因为那时这个词仅含有轻度贬义而“极客”在当时则贬义更甚。而到了2000年之后,他们两者调换了角色,至少在美国的流行文化中是如此的。时至今日,即便不是技术人才也会因以“极客”自居为傲。
如果你能集中精力去研究黑客技术而又能养家糊口,那就太棒了。在我还是新手的上世纪70年代,想做到这一点远没有现在这么简单——当今的主流文化对技术怪才越来越友善了。甚至有很多人发现黑客其实可以作为高素质的恋人或配偶。
如果你因为没有家庭而研究黑客技术,那这也不错——起码没有那么多麻烦让你分神。而且你可能很快就会组建一个自己的家庭了。
风格要点
再次重申,想要成为黑客,首先要进入黑客的思维方式。以下这些即便你不在电脑前也可以做的事情可能会对你有所帮助。这些并不能替代对黑客技术的钻研(什么都不能替代)但很多黑客都这样做,并认为这些和黑客的本质有着某种关联。
学着去写好你的母语。 虽然很多人想当然的认为程序员基本都不写作,但其实相当多的黑客(包括我认识的所有那些有所成就的人)都是优秀的作家。
阅读科幻小说,并参加科技会议 (这是结识黑客或原黑客的好方法)。
以武术的形式训练。 武术所要求的坚定的意志与黑客所要求的非常相似。最受黑客们喜爱的还是亚洲的徒手格斗术,诸如跆拳道、空手道、中国功夫、合气道或是柔术。西方的击剑与亚洲的剑道也有非常多的追随者。上个世纪90年代末期,射击运动也开始逐渐兴起。最符合黑客精神的武术是那些强调坚定意志、放松精神、增加控制力的,而不是强调原始的力量、运动力和柔韧性的。
学习一种冥想之法。 黑客之间最流行的便是禅法(最重要的是任何人都可以从禅法中受益而不必改变自己的宗教信仰)。其他的方式也行得通,但需注意不要选择一条让你做出什么疯狂举动的道路。
拥有一对善于倾听音乐的耳朵。 学会去欣赏各种奇妙的声音,并学着去演奏乐器或是歌唱。
提高你对双关语和文字游戏的认识。
以上这些你做的越多,你就越接近天然的黑客本质。为何会如此我也不是很清楚,但它们都能锻炼左右脑之间的协作这一点看来很重要。作为一个黑客必须能够做到在进行逻辑推理的同时还能够跳出一个问题的表面逻辑。 工作既娱乐,娱乐既工作。对于一个真正的黑客而言,“娱乐”、“工作”、“科学”与“艺术”之间的界线趋于消失,或者是合成为一种高级的创造性娱乐。但不要被狭隘的技术范畴所局限。虽然很多黑客都自称为程序员,但他们几乎都拥有众多其他的相关技能——常见的有系统管理、网页设计和PC硬件故障排除。每一个黑客都是一个系统管理员,同时也是熟练的脚本程序员和网页设计者。黑客们从不半途而废,如果他们决定学习某项技能,他们最终都要精通此道。
最后,以下这些不要做:
不要使用一个愚蠢而浮夸的ID或假名。
不要在讨论组中打口水仗(其他地方也不要)。
不要以“叛客”10 自居,也不要在这种人身上浪费时间。
不要发送或邮寄满是拼写和语法错误的邮件。
为了你的荣誉你该远离这些事情。黑客们的记性都很好——你可能因为早期做过的一些蠢事而多年不被认可。
使用假名的问题值得尤其注意。将自己的身份隐藏起来是愚蠢而幼稚的行为,是骇客、破解者11或其他什么低级生活方式的象征。而黑客们不这样做,他们为自己所做的事情为荣,并很乐于见到这些事情与自己的真名联系在一起。所以如果你有一个假名,请放弃它,在黑客文化中这只能标志着你是一个失败者。
历史标注:黑客、开源和自由软件
当初在1996年末我撰写此文的时候,许多与此文相关的事物并不是他们现在的样子。在这里用一些文字来澄清这些变化,以便让人们理解开源、自由软件和Linux对于黑客社区是怎样的一种关系。如果你对此并不关心,你可以直接跳到下一个章节中去。
我所描绘的黑客风尚与社区远早于1990年Linux的出现。我最初加入这一团体是在1976年,而这个团体则最早可追溯到20世纪60年代初期。但在Linux出现之前,大部分的黑客研究都是在私有系统或是像麻省理工学院的ITS这种从不在实验室外部署的少数本土实验性系统中完成的。虽然他们尝试去改变这一现状,但收效甚微。即便是在黑客社区中也只有极少数的信仰者在使用,更别说世界范围内流行的软件了。
现在所谓的“开源”其实可以追溯到黑客社区创建之处,但直到1985年之前它都是一种不成文的民间行为而不是一种由理论和宣言所倡导的自发性运动。而这一切都在1985年划上了句号,头号黑客Richard Stallman(“RMS”)试图给他起个名字——“自由软件”。但他的命名行为同时也成了一场主张运动,他为“自由软件”加入了一个思想整合,致使很多的黑客社区都不愿接受。因此,“自由软件”受到了了黑客社区一些坚定的少数派的强烈反对(特别是与BSD Unix相关的人士),但依旧得到了其余大多数人(包括我)低调而有所保留的使用。
尽管有所保留,在RMS倡导的定义和领导下,上世纪90年代中期还是在黑客社区中树立起了“自由软件”的大旗。而它受到了Linux的崛起所带来的一个严峻挑战。Linux给了开源开发一个天然的归宿。许多现在被称之为开源的项目都是在那时从私有的Unix系统迁移到了Linux平台上。围绕着Linux建立的社区瞬间爆发,比“前Linux时期”的黑客文化更庞大且趋于异化。RMS坚持要将这一系列的行动加入到他的“自由软件”运动中去,但却被迸发出的Linux社区以及他的创始人Linus Torvalds所阻止。Torvalds虽然沿用了“自由软件”的称呼,但却拒绝了RMS的思想整合。因此众多的年轻黑客纷纷效仿。
在1996年我首次公布这份黑客指南的时候,许多黑客社区迅速的围绕着Linux和少数其他的开源系统(尤其是那些BSD Unix的后裔)展开了重组。实际上在社区看来,那些我们用了几十年的时间在闭源系统上开发的闭源软件虽然还未过时,但看上去已如死去一般。越来越多的黑客们加入到Linux或Apache开源项目中去。
然而“开源”这个术语在1998年之前仍未出现。当它出现后,大多的黑客社区都在半年内通过了这一定义,而仅有少数黑客仍沿用“自由软件”的说法。自1998年以来——尤其是2003年以后——“黑客技术”与“开源(或自由软件)开发”这两个词变得越来越接近。时至今日,这两个概念仅有微小的区别,而且看起来未来也不会有什么变化了。
这些值得记住,然而,事情不总是这样的。
其他资源
Paul Graham写了一篇名为《伟大的黑客 》的文章,另一篇《在校生 》则彰显了他的智慧。- http://www.paulgraham.com/gh.html, http://www.paulgraham.com/college.html
有一篇名为《如何做个程序员 》的文档是本文很好的补充。它不止针对代码和技能提供了有价值的建议,还提出了在程序团队中如何策划项目。- http://samizdat.mines.edu/howto/HowToBeAProgrammer.html
我还写了一篇《黑客帝国简史 》。- http://catb.org/~esr/writings/hacker-history/hacker-history.html
我写过一篇论文——《大教堂与集市 》,来解释Linux和开源文化是如何运作的。我在他的续篇《家园与智域 》中更加直观的解释了这一问题。- http://catb.org/~esr/writings/cathedral-bazaar/index.html, http://catb.org/~esr/writings/homesteading/
Rich Moen写了一篇优秀的文档,叫做《如何建设一个Linux用户组 》。- http://linuxmafia.com/faq/Linux_PR/newlug.html
Rich Moen还和我合作了一篇文档《如何提出精明的问题 》。这将帮助你找到一条最有效的寻求帮助的途径。- http://catb.org/~esr/faqs/smart-questions.html
如果你需要个人计算机、Unix或是互联网的工作原理上的指导,可以参考《Unix与互联网基础指南 》- http://en.tldp.org/HOWTO//Unix-and-Internet-Fundamentals-HOWTO/
若你想发布软件或是编写软件补丁,你可以参考《软件发布实践指南 》的指引。- http://en.tldp.org/HOWTO/Software-Release-Practice-HOWTO/index.html
如果你喜欢禅谒,你或许也会喜欢《无根之根:名家大师的Unix公案 》。- http://www.catb.org/~esr//writings/unix-koans/
常见问题
问:我如何知道我已经是一名黑客了?
答:问自己以下这三个问题: 是否能流利的说出代码?
是否能被黑客社区的目标与价值观所认同?
是否曾有过颇具规模的黑客社区成员称你为黑客?
如果以上这三个问题的答案都是肯定的,那么你已经是一名黑客了。缺一不可。
第一项测试是关于能力。只要你有本文前面所讲的最基本能力便可通过这一项。若你已经从一个开源项目中获取了大量的代码,那这并非难事。
第二项测试是关于态度。如果你像是与生俱来的拥有前文所述的黑客五大心态而不像是后天学来的,那你已经成功了一半了。这一半出于内在。而外在的另一半则要看你能在多大程度上加入到黑客社区的长期项目中去。
这有一份不完成却具有代表性的项目名单:Linux的改进与传播是否与你有关?你是否热衷于软件的自由化?反对垄断?你是否信仰计算机该被赋予让全世界变得更加富有与人道的重任?
但这里有一个值得注意的地方。黑客社区需要争取一些利益——主要是捍卫言论自由以及抵制那些会让开源非法化的“知识产权”。有些长期项目的外在表象就是像“电子前沿基金会”这样的民间自由组织那样对这些运动提供支持。但在此之上,很多黑客希望将黑客态度规范为一种怀疑论的政治态度,我们知道这只是枉费心机而已。如果有人以黑客态度为名聘你进入国会任职,那他们就错了。正确的回应应该是“不说话而只给他们看你的代码”。
第三项测试含有一个有趣的递归。我在“什么是黑客”那一节中提到过,作为一名黑客就该是一个特别的亚文化和一个与之相关的社会网中的一员——一个是内在而一个是外在。很久以前,黑客是一个非常缺乏凝聚力且个人主义的群体。但在过去的三十年,社会网的增加与互联网越来越容易的连接黑客亚文化的核心的重要性越来越显著。一个很显著的变化就是——在本世纪,我们有了自己的T恤。
那些研究网络并喜欢把黑客文化放到“无形的学院”专栏下的社会学家已经注意到,这些网络的一个重要特点就是它们有守门人——需要有社会权威性的核心成员去批准新成员加入到网络中。因为黑客文化这一“无形的学院”是松散与随性的,所以它的守门人也是很随性的。但每个黑客都从心底里清楚的一点就是——不是任何黑客都是守门人。守门人需要拥有某些资历地位或成就才能有此头衔。这很难量化,但每个黑客见到之后便知道他是。
问:你能教我黑客技术么?
答:自从发表此文开始,我每周(甚至是每天)都会收到很多类似于“请教我黑客技术”的要求。很不幸,我没有时间和精力去做这些。而且作为一个开源主义者,这已经耗去了我110%的时间了。
即便我有时间也不会教,黑客的基本能力和态度就是自学。你会发现当一个真正的黑客愿意教你些什么的时候,他会很反感用一种填鸭式的方式把自己会的东西灌输给你。 先学些东西,起码说明你尝试过了,并且有一定的自学能力。然后再向黑客们提出一些具体的问题。
如果你发邮件向黑客们寻求一些建议,有两件事你最好知道。首先,你会发现对于黑客而言,一个在书写上懒惰而粗心的人往往在思考上也是懒惰而粗心的——所以请注重拼写的准确性,并且不要忽视语法和标点的精准。第二,不要要求回复到一个非你发件账户的另一个账户上去。我们发现这样做的人往往都是使用盗取的邮箱来发件的窃贼,而我们无意鼓励或协助一个窃贼。
问:那么我该如何开始?
答:你最好的起点应该是参加一个Linux用户群的讨论会。你可以在LDP通用Linux信息站 找到很多这样的用户群。这其中可能有些离你不远,还有些与大学或学院相关。如果你有需求,Linux用户群的成员可能会给你提供一款Linux并帮助你安装和学习它。- http://www.tldp.org/links/index.html
问:你是从什么时候开始起步的?我现在学这些是不是有些晚了?
答:无论什么时候想要学习都是好的。大多数人都是在15-20岁之间对此产生兴趣,但其实有不少的例外。
问:想成为一名黑客我需要学习多久?
答:那要取决于你的天才程度和勤奋程度。只要足够的努力,大部分人都可以在十八个月到两年之内收到显著的成效。但不要以为这就是终点了。在黑客领域(其实也包括其他领域)要用大概十年左右的时间才能达到精通。而如果你是个真正的黑客,你会用毕生的时间去学习和磨练自己的技艺。
问:Visual Basic是一种不错的入门语言么?
答:如果你问这个问题,那基本可以确定你想在Windwos系统下学习黑客技术。这本身就是个糟糕的想法。想要在Windows系统下学习黑客技术就相当于想要穿着盔甲学习跳舞,我没开玩笑。不要迈出这一步,它太丑陋了,而且永远会丑陋下去。
关于VB还有一个很重要的问题——它不可移植。虽然确实有一个用VB实现的开源原型,但ECMA的适用范围并不比一个小型设备的编程接口更广泛。在Windows中,大部分的库仅供一个供应商(微软)专有。如果你不是非常小心的去甄别该用哪个库——小心到一个新手不足以达到的地步——那你就会很不幸的被限制在微软公司所支持的这几个仅有的平台中了。如果你从Unix起步,那将有更多优秀的语言和库可以选用。比如Python。
并且就像其他Basic语言一样,VB是一个先天设计不良的语言,它同样会带给你不良的编程习惯。不,别让我详细的说明,这足够出一本书了。还是学一种设计优良的语言吧。 其中一个最坏的习惯就是逐渐依赖一个供应商的专有库、组件和开发工具。一般来讲,任何一种语言若不支持Linux或一种BSD,并且/或是不能支持三个以上的供应商提供的操作系统,那这种语言就不适于黑客学习。
问:你能帮我破解系统,或是教我如何破解么?
答:不!读完这篇文章之后还会有此一问的人简直是不可救药。通常类似内容的邮件都会被我忽略掉或者是得到一份粗暴的回复。
问:我如何能得到别人的账户和密码?
答:这是骇客所为,走开,蠢货!
问:我如何才能进入/阅读/监视别人的邮箱?
答:这是骇客所为,滚吧,白痴!
问:我怎样才能窃取到IRC通道的运算特权?
答:这是骇客所为,滚远点,笨蛋!
问:我被攻击了,你能帮助我免受攻击么?
答:不行。我经常被问及类似的问题,而提问的大都一群是使用Windows的可怜虫。在Windows系统中不存在有效的安全方案来阻止骇客的攻击。代码与构架上太多的缺陷致使保护Windows系统的安全就像是用筛子划船一样困难。唯一可行的安全方案只有换成Linux或其他一些类似的操作系统,起码它们有专门的安全设计。
问:我的Windows软件出问题了,你能帮我么?
答:好的。进入DOS命令行并输入“format c:”。你所遇到的所有问题都将在几分钟之内解决。
问:在哪里我可以找到真正的黑客进行交流。
答:最好的方法是找一个你附近的Unix或Linux用户群并参加他们的会议(你可以在ibiblio的LDP 站中找到许多用户群列表的链接)。 (我经常说你不会在任何IRC上找到真正的黑客,但我意识到这一点已经改变了。像是GIMP或Perl这样的黑客社区已经开始有自己的IRC了。)
问:你能提供一些与黑客技能相关的书籍么?
答:我维护的一个“Linux阅读指南 ”可能对你有帮助。而“Loginataka ”可能也会令你感兴趣。- http://en.tldp.org/HOWTO/Reading-List-HOWTO/index.html, http://catb.org/~esr/faqs/loginataka.html
至于Python的介绍,可以直接到Python的网站上去找教程 。
问:要成为黑客是否需要精通数学?
答:不,黑客并不需要用到多少正式的数学或是算术。特别是不需要三角、微积分或是解析几何(像3D电脑绘图这种少数的特殊程序领域是个例外)。了解一些典型的逻辑运算和布尔数学即可。一些有限数学(包括有限集理论、排列组合或是象限理论)也会对你有所帮助。
更重要的是,你需要有一个像数学家那样良好的逻辑思维和精准的推理思路。当数学无法帮助你的时候,你需要用毅力与智力去改造数学。如果你缺乏这种智力,那你很难成为黑客;如果你缺乏这种毅力,那你最好现在就培养。
我认为确定逻辑能给你带来什么的一条不错的方式是去看Raymond Smullyan的《这本书叫什么?》。Smullyan那些有趣的逻辑难题把黑客精神体现的淋漓尽致。试着去解决这些问题是一个不错的开始,享受解决问题的过程则更为可贵。
问:我应该首先学习何种语言?
答:如果你还不懂XHTML(HTML最新的分支)那就先从它开始。有太多的HTML书籍流于表面而粗陋不堪,真正优秀的却凤毛麟角。我比较钟爱的是《XHTML与HTML:权威指南 》。- http://oreilly.com/catalog/9780596003821/
但HTML并不能完全算作是编程语言。当你准备开始编程的时候,我建议从Python 开始。你可能会听到许多人建议学Perl,而且Perl也比Python更流行。但它更难于学习(至少我这么看)并且设计并不如Python那样优秀。
C的确非常重要,但也比Python和Perl都要难。不要从C学起。
Windows用户,不要安装Visual Basic。它会带给你不良的习惯,并且离不开Windows系统。尽量避免这种事情发生。
问:我需要怎样的硬件?
答:在过去,个人计算机的运算速度不足且存储量小,这给黑客学习带来了人为的阻碍。但从上世纪90年代中期开始,这一切都划上了句号。只要是Intle 486DX50以上配置的机器都足以胜任开发工作、界面以及互联网交流,并且你能买得起的哪怕是最小的硬盘都已经足够存放所需的数据了。
在选择机器时最重要的一点就是看硬件是否能被Linux兼容(或BSD兼容,如果你选择走这条线路)。同样,这一点现在也是几乎所有机器都能做到了。唯一需要重点关注的在于调制解调器和网卡——有些设备属于Windows专有而不能在Linux下工作。
有一个关于硬件兼容性的说明,在这里 可以找到最新版本。- http://en.tldp.org/HOWTO/Hardware-HOWTO/index.html
问:我想要做些贡献,你能帮我挑选一个项目去做么?
答:不行,因为我不知道你的天赋和兴趣。你必须学会自我激励,否则无法成功。这也就是为什么让别人选择你的方向永远都不会成功。 试试这个:在鲜肉网 的项目公告里看几天。当你发现了一个项目让你觉得“酷!我想做这个!”的时候,就加入好了。- http://freshmeat.net/
问:我是否应该痛恨或攻击微软呢?
答:不,不用。这并不是说微软不令人讨厌。黑客文化先于微软出现,而且在微软消失后也不会消失。有时间去痛恨微软还不如去磨练自己的技术。写出一流的代码——这是最有力的痛击微软的方式。
问:但开源软件不会让程序员无法生活么?
答:看起来不会——目前看来,开源软件行业是在创造就业机会而不是减少。如果编写一个程序相较之该程序出现之前能让网络经济有所提升,那无论这个程序完成后是否开源,程序作者都会从中得利。而且无论有多少“自由软件”出炉,依然会有更多的需求与订单。我在开源 页面中对此问题做了更多的阐述。
问:我从哪能获得免费的Unix?
答:如果你还没有在机器中安装Unix,在这个页面的其他地方我给出了大多数人通常使用的免费Unix链接。作为黑客,你应该有主动性、自发性和自学能力。那么就从现在开始吧……
译者注释:
原文为Jargon File,既著名的《黑客辞典》。↩
原文为Life,是由John Horton Conway在1970年遵循冯·诺依曼的自我复制理论编写的一款逻辑游戏。↩
原文为ARPAnet,是当今国际互联网的前身。↩
原文为Usenet.↩
原文为Cracker,意为“破坏者”,本文译为“骇客”。与Hacker所代表的“黑客”作为区分。↩
原文中给出的链接已失效,此处链接为我根据原文说明自行搜索的,不确定和作者原本引用的内容是否相同。↩
原文为Unixes,此处可理解为广义的Unix系统,既包括Unix的所有衍生版以及拥有独立内核代码的其他Unix-Like系统(如Linux)。↩
林纳斯·托瓦兹,Linux系统之父,现在主要从事Linux系统内核的维护工作。↩
原文为Geek,又译为“技客”或“奇客”。原为俚语,指反常的人、畸形的人或野人。现多指对计算机或网络技术有狂热兴趣并投入大量时间钻研的人。↩
原文为Cyberpunk,此处与前文的“Cracker/骇客”含义相近。↩
原文为warez d00dz,形容从事破解和0-day漏洞攻击工作的人的专有名词。