如何成為一名黑客?


為什么會有這篇文檔?
身為新黑客詞典(The Jargon File)和許多其他廣為人知的同類文章的作者,我常收到熱心的網(wǎng)絡新人的電子郵件,問及(大意上是)“如何成為一名魔法師似的黑客?”。1996年的時候我注意到這個重要的問題并沒有相關的FAQ或文檔頁面,所以我寫了一份。許多黑客認為這篇文章是權威的,我覺得它應該是吧。此外,我不會尋求在這個話題上的獨立著作權,如果你不喜歡在這里讀到的內(nèi)容,自己寫一篇吧。
如果你是在離線閱讀本文,可以在http://catb.org/~esr/faqs/hacker-howto.html找到本文的最新版本。(譯注:本文的最新中文版可以在這里找到)
注意:本文的末尾有一系列常見問題。請在向我發(fā)郵件詢問關于本文的任何問題前再三閱讀。
目前本文有許多語言的翻譯版:阿拉伯語,白俄羅斯語,?中文,捷克語,丹麥語,荷蘭語,愛沙尼亞語,德語,希臘語,意大利語,希伯來語,挪威語,?波斯語,巴西葡萄牙語,羅馬尼亞語,西班牙語,土耳其語,瑞典語。請注意,由于本文不定期更新,這些翻譯版可能存在不同程度的過時。
本文里九宮格中的5個黑點的裝飾圖被稱作glider。這是一個使很多黑客多年癡迷的被稱作康威生命游戲(LIFE)中,具有令人驚奇特性的簡單圖案。我認為它是很好的黑客精神徽章 —— 抽象,初見的時候感覺有點神秘,通過它復雜的邏輯可以通向整個世界。如果你想了解更多關于glider的信息,請看這里。
如果你覺得這篇文章有價值,請在Gittip上給我一點贊助。也請考慮贊助其他為你提供了有價值代碼的黑客。小額的贊助也能夠聚小流成江海,使為你提供幫助的人從繁重的勞動中解放出來,創(chuàng)造更多的價值。
什么是黑客?
新黑客詞典(Jargon File)中有數(shù)個“黑客”的定義,主要形容”技術專才”或”有志解決問題及超越極限之人”。要成為黑客,有兩個要點。
這可以追溯到幾十年前第一臺分時小型電腦誕生, ARPAnet 實驗也剛展開的年代,那時有一個由程序設計專家和網(wǎng)絡名人所組成的, 具有分享特點的文化社群。這種文化的成員創(chuàng)造了 “hacker” 這個詞。他們建立了互聯(lián)網(wǎng),他們發(fā)明了現(xiàn)在使用的Unix操作系統(tǒng),他們管理Usenet討論組,他們令WWW運作。因此,若你有上述的特性及參與同類的社區(qū),亦有對以上種種作出貢獻,同時社區(qū)的人知道你是誰又稱你為“hacker”,你便是黑客。
然而,黑客的理念并非只局限于軟件社區(qū)。有很多人將黑客的態(tài)度應用于其他事物,如電子學或音樂上——實際上,黑客的理念存在于任何學科領域。由于了解黑客的理念及精神,軟件社區(qū)的黑客亦會稱后者為黑客。有些人亦認為黑客的理念是獨立于黑客所從事的實際工作。本篇文章我們將專注于討論軟件黑客的技巧,態(tài)度及傳統(tǒng)。
另外,有一群人也稱自已為“黑客”,他們(多數(shù)是年青人)用電腦侵入其他電腦的系統(tǒng)作出破壞。黑客們稱這群人為“Cracker(破壞者)”,并不認同他們?yōu)楹诳?。多?shù)黑客會認為Cracker是懶惰, 不負責任,不杰出的人。有能力侵入安全系統(tǒng)并不能使你成為黑客,正如可以用鐵絲來偷車并不能使你成為汽車工程師一樣。不幸的是很多作家及報道均稱這群人為“黑客”。這一直使黑客們非常惱火。
黑客與Cracker的主要區(qū)別在于,前者搞建設,后者搞破壞。
如果你想成為一個黑客,請繼續(xù)讀下去。如果你只想做一個Cracker,請到alt.2600討論組,并做好當你發(fā)現(xiàn)自己不如想象中聰穎的時候進5到10次監(jiān)獄的準備。關于Cracker我就說這么多。

黑客們解決問題,建設事物,他們崇尚自由和無私的雙向幫助。要被他人承認是一名黑客,你必須表現(xiàn)得你具備了這樣的態(tài)度。而要表現(xiàn)得你具備了這種態(tài)度,你必須徹徹底底的堅持它。
如果你認為培養(yǎng)黑客的態(tài)度只是一條在這個文化圈中得到認同的路子,那就錯了。成為具備這種素質(zhì)的人,對你非常重要——促使你保持學習和成為黑客的自發(fā)性。正如所有創(chuàng)造性藝術一樣,成為大師的最有效途徑就是效仿大師的精神——不僅從理念上,還要從態(tài)度上效仿。
或許下面的這首現(xiàn)代禪詩很好的闡述了這個意思:
To follow the path: 沿著這樣一條道路:?
look to the master, 關注大師,?
follow the master, 跟隨大師,?
walk with the master, 與大師同行,?
see through the master, 洞察大師,?
become the master. 成為大師。
如果你想成為一名黑客,反復閱讀以下內(nèi)容直到你相信它們:
1.??世上仍有大量迷人的事情等待解決
作為一名黑客可以享受很多樂趣,同時需要付出相當多的努力。努力需要動力。成功的運動員從鍛煉身體、超越身體極限中獲得精神愉悅。類似的,作為一名黑客,你可以從解決問題、磨練技術和鍛煉智力中獲得樂趣。
如果你天生不是這樣的人,那你需要設法變成這樣的人以使你能夠成為一名黑客。否則你將會發(fā)現(xiàn)你的精力會被諸如性、金錢、社會上的虛名之類讓人分心的東西所消磨掉。
(你還需要對自己的學習能力樹立信心——相信盡管你對某一問題了解得不多,只要你能解決其中一部分,并從中學習,你可以解決其他的部分——直到解決它。)
2. 同樣的問題不應被重復處理兩次
創(chuàng)造性的智慧是非常有價值且稀缺的資源。它們不應當被浪費在重復造輪子上,世上仍有大量迷人的新問題等著解決。
作為一名黑客,你應該堅信其他黑客的時間非常寶貴,所以你有義務共享信息,解決問題之后公布方案,這樣其他人可以去解決新的問題,而不是忙于應付舊問題。
注意,“同一個問題不應該被重復處理兩次”并不是說你必須認為所有已有方案都是最優(yōu)的,或每個問題只有唯一的解決方案。通常我們從一個問題的最初解決方案中能夠學習到很多東西。這很好,并且對于我們思考如何能做得更好來說,這通常是必要的。我們反對的是人為的技術、法律上的,或者機構性的設置障礙(例如閉源軟件),使得一個好的方案不能被重復使用,逼得人們重造輪子。
(你不必認為你必須將所有你的創(chuàng)造發(fā)明都公布出去,雖然這樣做的黑客將會贏得大家極度尊重。適當賣一些錢來換取足夠的食物、租金和電腦并不違反黑客的價值觀。用你的技能來養(yǎng)家糊口甚至致富都可以,只要你在做這些的時候別忘記你是一名黑客。)
3. 拒絕重復和沉悶的事情
黑客(以及富有創(chuàng)造力的所有人)不應當被愚蠢的重復性勞動所困擾,因為這意味著他們并沒有在做只有他們才能做的事情——解決新問題。這樣的浪費會傷害所有人。因此,無聊和乏味的工作不僅僅是令人不爽,而是罪惡。
作為一個黑客,你應該堅信這一點并盡可能的將枯燥的工作自動化,這不僅僅是為了你自己,也為了其他人(尤其是其他黑客)。
(這里有一個例外。黑客有時會做一些看起來重復或枯燥的事情以進行腦力休息,或以此來鍛煉一種技能,或以此獲得某種除此以外無法獲取的經(jīng)驗。但這是有選擇的——有腦子的人不該被強迫做枯燥的事。)
4. 自由萬歲
黑客是天生的反獨裁主義者。任何能向你發(fā)號施令的人能夠迫使你停止解決令你著迷的問題。同時,按照獨裁者的一般思路,他通常會給出一些極端愚昧的理由。因此,不論何處,任何獨裁主義的作法,只要它壓迫你和其他黑客,你就要和它斗到底。
(這并非向所有權威挑戰(zhàn)。兒童需要監(jiān)護,罪犯要被看管起來。如果服從命令得到某種東西比起用其他方式得到它更節(jié)約時間,黑客可以同意接受某種形式的權威。但這是一個有限度的,有意的交易,那種權威想要的個人服從不是你應該同意給予的。)
權威喜歡審查和保密。他們不信任自愿的合作和信息共享——他們只喜歡由他們控制的所謂“合作”。因此,作為一個黑客,你得對審查、保密,以及使用武力或欺騙去壓迫有行為能力的人們的做法有一種本能的敵意。同時你要有為此信念斗爭的意愿。
5. 精神不能代替能力
作為一個黑客,你必須培養(yǎng)起這些精神。但是僅僅有精神并不能使你成為黑客,也不能使你成為運動健將或搖滾明星。成為一名黑客還需要智力,實踐,奉獻精神和辛勤工作。
因此,你需要學會有懷疑態(tài)度和尊重任何能力。黑客不會為裝模作樣的人浪費時間,但他們尊重能力——尤其是從事黑客工作的能力,不過任何能力都是好的。很少人能具備的高要求能力尤其好,其中涉及腦力,技巧和專注方面的能力最好。
尊重能力,你就會享受到提高自己的能力所帶來的樂趣——辛苦的工作和奉獻將不再是苦差而是一種高度娛樂。想要成為一名黑客,這一點尤其重要。
基本黑客技能
黑客的態(tài)度很重要,但技能更重要。態(tài)度不能替代能力,在被別的黑客稱你為黑客之前,你有一些基本技能需要掌握。
這些基本技能隨著時間的推移和技術的革新也緩慢的變化著。例如,以前的內(nèi)容中包括了使用機器語言編程,最近包含進了HTML??偟膩碚f當前包括以下內(nèi)容:
1. 學習編程
理所當然,這是最基本的黑客技能。如果你一門計算機語言都不懂,我建議你從Python學起。它設計良好,文檔詳盡,并且對新人十分友好。盡管它是一門很好的入門語言,但它不只是玩具水平。它非常強大靈活,并且適用于大型項目。我寫過一篇詳細的對Python的評價。在Python的網(wǎng)站可以找到很好的教程。在Computer Science Circles也有一篇不錯的第三方教程。
我早前曾經(jīng)建議使用Java作為入門語言,但這篇評價改變了我的看法(請在文檔中搜索“The Pitfalls of Java as a First Programming Language”)。如同文中尖銳指出的一樣,一個黑客不能“像五金店中的管道工一樣處理問題”。你需要知道所有的組件事實上都干了什么?,F(xiàn)在,我認為最好先學C和Lisp,然后再學Java。
另外有一點需要注意。如果一門語言幫你做了太多工作,它會同時是一個好的生產(chǎn)工具和一個不好的初學對象。不僅語言有這個問題,比如Web框架RubyOnRails,CakePHP,Django也很容易讓你流于表面,面對困難問題的時候束手無策,甚至無法對一個簡單問題進行追查并給出解決方案。
如果你需要做一些重要的編程工作,你需要學習C語言,它是Unix的核心語言。C++跟C關系密切。如果你了解其中一種,學習另外一種應該不難。但是這兩種語言都不適合作為入門學習。此外,如果你越避免用C編程,你的工作效率會越高。
C的執(zhí)行效率非常高,并且非常節(jié)省機器資源。不幸的是C的高效是通過讓你手動進行許多底層資源(例如內(nèi)存)管理來獲得的。底層代碼復雜并且容易出bug,你需要花費很多時間來進行調(diào)試。鑒于當今的機器性能如此之高,這樣的做法通常很不劃算——通常更好的做法是使用一種稍微慢一些,不那么高效,但是能夠大幅節(jié)省你的時間的語言。那便是Python。
其他對黑客而言比較重要的語言包括Perl和LISP。Perl很實用,它廣泛應用于動態(tài)網(wǎng)頁和系統(tǒng)管理方面,因此即使你從不寫Perl代碼,至少也得能看懂。許多人使用Perl的理由和我建議你使用Python的理由一樣,都是為了避免用C完成那些執(zhí)行效率需求不那么高的工作。你需要能夠看懂他們的代碼。
LISP之所以值得一學是基于另外的理由——當你最終掌握了它的時候,你將會獲得巨大的啟迪。它將使你成在今后為一個更好的程序員,即使你實際上很少使用LISP本身。(你可以通過為Emacs文本編輯器或者GIMP的Script-Fu編寫插件或修改現(xiàn)有插件來很容易的學習LISP。)
當然,你最好五種語言都會(Python,C/C++,Java,Perl和LISP)。除了是重要的黑客語言之外,它們也代表了截然不同的編程思路和方法,每一種都能讓你受益匪淺。
但是單純的堆砌語言是不可能成為一個黑客,甚至程序員的。你需要學會如何獨立于任何具體的語言之外來思考編程問題。作為一名真正的黑客,你需要通過手冊和你已有的知識掌握到在幾天之內(nèi)學會一門語言的要點。這意味著你需要學習許許多多不同的語言。
這里我無法給你完完全全的指導教會你如何編程——這是個復雜的技能。但我可以告訴你,書本和課程也不能做到(最好的黑客中,有許多,也許幾乎都是自學成材的)。你可以從書本上學到語言的特點——這只是皮毛,但要使書面知識成為自身技能只能通過實踐和虛心向他人學習。因此要做到讀代碼及寫代碼。
Peter Norvig,Google最頂級的黑客之一,也是世界上最受歡迎的AI教材(譯注:指“人工智能:一種現(xiàn)代方法”和“人工智能程序設計范例:通用Lisp語言的案例研究”等)的共同作者。他寫了一篇名為Teach Yourself Programming in Ten Years的短文。他在文中提到的“編程成功的訣竅(recipe for programming success)”特別值得留意。
學習編程就像學習用優(yōu)美的自然語言書寫一樣。最好的辦法就是閱讀大師的名著,試著自己寫點東西,再讀一些,再寫一點,再讀一些,再寫一點……如此往復,直到你的作品達到如你在范文中所見的簡潔和健壯。
我必須再提一下How To Learn Hacking,這是一些簡單的說明,但是學起來并不容易。
以前很難找到適合閱讀的好代碼,因為幾乎沒有大型程序的代碼能夠供新人閱讀和練手。這種情況已經(jīng)發(fā)生戲劇性的變化。開源軟件,編程工具和操作系統(tǒng)(都是由黑客創(chuàng)造的)現(xiàn)在隨處可見。這剛好帶我們到下一個話題……
2. 獲取一個開源的Unix并學習運行和使用它
我假定你擁有或者能使用一臺個人電腦(現(xiàn)在的孩子真幸福。黑客文化建立之初電腦貴得要死,沒人買得起)。新手們向黑客技能邁出的最重要一步就是獲取一份Linux或BSD-Unix的拷貝,將其安裝在個人電腦上,并運行它。
沒錯,世上除了Unix還有其他操作系統(tǒng)。但它們都是以二進制形式發(fā)布的——你讀不到源碼,你也不能修改代碼。在類似Microsoft Windows那樣的閉源操作系統(tǒng)上學習黑客技術就像戴著腳鐐學跳舞。
在Mac OS X上倒是可以,不過它只有一部分是開源的——你可能會撞墻,也必須很小心的避免養(yǎng)成依賴Apple專有代碼的壞習慣。如果你專注于底層的Unix,你可以學到一些有用的東西。
Unix是互聯(lián)網(wǎng)上的操作系統(tǒng)。雖然你不懂Unix仍然可以學會使用互聯(lián)網(wǎng),但若你不懂Unix,你將不能在互聯(lián)網(wǎng)上從事黑客活動。因此,現(xiàn)今的黑客文化是嚴重以Unix為中心的。(曾經(jīng)不是這樣,并且有一些老派的黑客對此仍然感到不太高興。但是現(xiàn)今Unix和互聯(lián)網(wǎng)的羈絆如此之強,連Microsoft也無法撼動分毫。)
所以,請安裝一套Unix - 我個人喜愛Linux但還有其他種類的(并且,你可以在同一臺電腦上運行Linux和Windows)。學習它,使用它,調(diào)教它。用它在互聯(lián)網(wǎng)上沖浪。閱讀它的代碼,修改它的代碼。你將獲得比Windows操作系統(tǒng)上更好的編程工具(包括C,LISP,Python和Perl)。你會覺得其樂無窮,學到比你想像更多更好的知識。
想要獲取更多和學習Unix相關的信息,請參考Loginataka。你或許還想看看《Unix編程藝術》[The Art Of Unix Programming](譯注:這里給出的是原文鏈接。國內(nèi)有翻譯版出售)。
我認為博客Let’s Go Larval!對于處在學習Linux階段中的用戶是非常易懂和有用的。這篇文章How I Learned Linux?就是一個很好的起點。
想開始Linux之旅,請參考Linux Online!。你可以從那里下載Linux或者(更好的主意是)找到一個當?shù)氐腖inux用戶群為你的安裝過程提供幫助。
在本文最初的10年間,我認為從一個初學者的角度來說,所有Linux發(fā)行版都差不多。不過在2006~2007年間,一個事實上最好的選擇出現(xiàn)了:Ubuntu。其他發(fā)行版各有所長,而Ubuntu對初學者最友好。注意,相比Ubuntu默認那個丑陋的幾乎不可用的“Unity”桌面,Xubuntu和Kubuntu更好用一點。
你可以在www.bsd.org找到BSD相關的幫助和資源。
一個試水的好辦法是試試被Linux愛好者稱為“Live CD”的東西,那是一個完全在光盤或者U盤上運行,而不修改你硬盤的發(fā)行版。它運行起來比較慢,因為光盤很慢,但是這是一個在做出任何不可挽救的改變前看看可行性的辦法。
我寫過一篇關于Unix和互聯(lián)網(wǎng)基礎的入門文章。
我曾經(jīng)不建議新手獨自安裝Linux或者BSD。現(xiàn)在它們的安裝程序已經(jīng)做得足夠好,你作為新人也完全搞得定。盡管如此,我仍然建議和你當?shù)氐腖inux用戶群取得聯(lián)系并尋求幫助。這沒壞處,并且可以讓整個過程更順利。
3. 學習使用萬維網(wǎng)(World Wide Web,WWW)和HTML(超文本標記語言)
大多數(shù)的黑客造物在你所不知的地方發(fā)揮著作用,幫助工廠、辦公室和學校運轉,這看上去跟普通人沒太大關系。Web是一個大大的例外,即便政客也承認這個巨大耀眼的黑客玩具正在改變著世界。單就這一個原因(當然還有其他理由)你就需要學習掌握Web。
這并不僅僅意味著如何使用瀏覽器(誰都會),而是要學會如何寫HTML,Web的標記語言。如果你不會編程,寫HTML會教你一些有助于學習的思考習慣。因此,先完成一個主頁。嘗試堅持使用XHTML,一種比標準HTML更清晰的語言。
但僅僅擁有一個主頁不能使你成為一名黑客。Web里充滿了各種網(wǎng)頁。大多數(shù)是毫無意義的,零信息量的垃圾——界面時髦,能奪人眼球的垃圾還是垃圾(更多信息訪問The HTML Hell Page)。
所以,你的頁面必須有內(nèi)容——得是有趣并且對其他黑客來說有用的內(nèi)容。這是我們下一個議題要說的……
4. 學習實用英語
作為一個美國人和一個以英語為母語的人,我以前很不情愿提到這點,免得成為一種文化上的帝國主義。但相當多以其他語言為母語的人一直勸我指出這一點,那就是英語是黑客文化和Internet的工作語言,你需要懂得以便在黑客社區(qū)順利工作。
大概1991年的時候我了解到許多黑客在技術討論中使用英語,即使在他們的母語都相同,英語對他們而言只是第二語言的時候也常如此。據(jù)我所知,當前英語有著比其他語言豐富得多的技術詞匯,因此是一個對于工作來說相當好的工具?;谕瑯拥睦碛?,英文技術書籍的翻譯(如果有的話)通常都不能令讀者滿意。
芬蘭人Linus Torvalds用英語注釋他的代碼(很明顯這不是湊巧)。他流利的英語成為他能夠管理全球范圍的Linux開發(fā)人員社區(qū)的重要因素。這是一個值得學習的例子。
即使作為一個以英語為母語的人也不代表你就具備了成為黑客所需的語言技能。一般而言,如果你寫得像個半文盲似的,文中充斥著各種語法、拼寫錯誤,多半得不到理睬。雖然不嚴謹?shù)奈墓P并不總是意味著不嚴謹?shù)乃季S,但我們發(fā)現(xiàn)這兩者之間的關聯(lián)還是挺緊密的。而我們不需要這種思維不嚴謹?shù)娜恕H绻悻F(xiàn)在還沒有具備這樣的書寫能力,趕緊培養(yǎng)。
黑客社區(qū)的身份
像大部分非盈利社區(qū)一樣,黑客社區(qū)靠聲譽運轉。你設法解決有趣的問題,但問題是否有趣及解決方法是否有效,需要由那些和你具有同樣甚至更高技術水平的人去評判。
因此,要玩黑客這個游戲,你需要以其他黑客對你技能的評判作為對自己的評價(所以我說,在其他黑客稱你為黑客之前,你不是一個真正的黑客)。這個事實常被人誤解(從1990年代后有所好轉,但還是很嚴重),人們認為黑客都是不在乎別人的評價,孤僻的人。這實際上是一個黑客文化的禁忌。
特別地,黑客被人類學家們稱為奉獻社區(qū)。在這里你不是憑借你對別人的統(tǒng)治來建立地位和名望,也不是靠美貌,或擁有其他人想要的東西,而是靠你的奉獻。尤其是奉獻你的時間,你的創(chuàng)造力和你的技術成果。
要想獲得黑客的尊重,你基本上有5件事情可干:
1. 編寫開源軟件
首先(也是最傳統(tǒng)和最重要的)是寫一些其他黑客覺得有趣或有用的程序,并且開放源代碼。
(我們曾經(jīng)把這些程序稱為“自由軟件(free software)”,但是太多人不能確定這里的“free”是什么意思?,F(xiàn)在我們通常使用“開源”軟件這個詞。
黑客間最受尊敬的圣人是那些編寫了大型的,功能強勁且滿足了廣泛需求的開源軟件供他人使用的人。
但是這里有段有趣的歷史。雖然黑客一直敬重開源軟件開發(fā)者,并且他們是我們社區(qū)的核心,但是直到1990年代中期,絕大部分黑客絕大多數(shù)時間是在閉源軟件上工作的。在我1996年寫本文的第一版的時候仍然如此。到1997年之后開源軟件逐漸成為主流并改變了這一點?,F(xiàn)在,“黑客社區(qū)”和“開源軟件開發(fā)者”本質(zhì)上是對同一文化和同一人群的兩種表述——但值得記住的是,曾經(jīng)不是如此。(想了解更多,請看“歷史記錄:黑客活動,開源,和自由軟件”。)
2. 幫助測試和調(diào)試開源軟件
黑客也尊敬那些為開源軟件進行測試和除錯的人。在這個并非完美的世界上,我們不可避免地要花大多數(shù)的開發(fā)時間在調(diào)試階段。這就是為什么許多開源軟件作者都會高度評價那些好的beta測試員(知道如何清楚描述出錯癥狀,很好地定位錯誤,能忍受快速發(fā)布中的bug,并且愿意使用一些簡單的診斷工具),認為他們像紅寶石一樣珍貴。一個好的測試員可以使如惡夢的測試及除錯工作變?yōu)橐患档媒?jīng)歷的小煩惱。
如果你是個新手,試著找一個你感興趣的正在開發(fā)的程序,嘗試做一個好的beta測試員。你會自然地從幫著測試,進步到幫著抓bug,到最后幫著改程序。你會從中學到很多,并且與未來會幫到你的人結下友誼。
3. 發(fā)布有用的信息
另一個好事是收集整理有用有趣的信息做成網(wǎng)頁或文檔如FAQ(常見問題)列表,且讓他們?nèi)菀撰@得。
技術性FAQ的維護者往往如同開源軟件作者一樣很受人尊重。
4. 幫助維護基礎設施運轉
黑客社區(qū)(也包括互聯(lián)網(wǎng)發(fā)展)是靠自愿者組成的。有大量重要但平淡的事情需要處理——管理郵件列表,新聞組,維護大型軟件歸檔庫,開發(fā)RFC和其他技術標準等。
做以上事情的人會得到很多人的尊敬,因為大家都知道這些事情需要大量的時間并且不如編寫軟件那么有趣。這類工作需要使命感。
5. 為黑客社區(qū)服務
最后,你還可以為黑客社區(qū)做服務和宣揚(比如寫一篇“如何成為黑客”的文章 :-))。通常你不會做這些工作,直到你已經(jīng)做了以上四種中的一樣,并且取得了相當?shù)闹取?/p>
黑客社區(qū)沒有既定的領導者,但是有被人們尊重的英雄,長老級人物,史學家和發(fā)言人。當你在這個圈里足夠久,你可能會成為他們中的一員。但請謹記,黑客對于自我夸耀的長老并不認同,因此不要嘗試大舉追求這種名譽。與其奮力追求,不如先擺正自己的位置,等它自己到你手中,那時需要做到謙虛和優(yōu)雅。
黑客與書呆子(Nerd)的關系
與流行的傳說不同,黑客并不是書呆子。但這確實對你成為黑客有幫助,并且很多黑客確實是書呆子。做一個深居簡出的人有助于使你更能集中精力做一些重要的事,例如思考和從事黑客活動。
因此,許多黑客甚至以“極客(geek)”(譯注:這個詞原本在美國俚語中指“反常的人”)為名——這是一種宣布他們獨立于普通社會的方式(此外,黑客也通常沉迷于其他一些事情例如科幻和戰(zhàn)略游戲)。“書呆子”這個詞通常在1990年代也被如此使用,那時候“書呆子”這個詞略含貶義,而“極客”貶義更重。2000年以后這兩個詞的關系發(fā)生了轉變,至少在美國流行文化上是如此,現(xiàn)在甚至在非技術專家中也出現(xiàn)了以標榜為極客為豪的情況。
如果你能集中足夠的精力做好黑客工作同時還能有正常的生活,這很好?,F(xiàn)在做到這一點比我在1970年代還是新手的時候要容易的多;如今主流文化對技術怪人要友善的多。甚至有越來越多的人意識到黑客通常是很好的戀人和配偶侯選。
如果你因為生活上的不如意而成為黑客,那也不錯——至少你不用分神了?;蛟S今后你能有一個不錯的生活。
歷史記錄:黑客活動,開源,和自由軟件
當我在1996年末剛開始寫這篇文檔的時候,很多情況跟現(xiàn)在是不同的。簡單的介紹一下這個變化對于對開放源代碼、自由軟件和Linux跟黑客社區(qū)的關系感到困惑的人們可會有所幫助。如果你對這些不感興趣,可以直接跳過這里,前往FAQ和參考資料部分。
我描述的黑客精神和黑客社區(qū)遠早于1990年出現(xiàn)的Linux。我最初進入這個圈子大概是在1976年,其原因可以追溯到1960年代早期。但是在Linux出現(xiàn)前,多數(shù)黑客行為是在專有操作系統(tǒng),或一些自主研發(fā)的實驗性系統(tǒng)上,例如MIT的ITS,這個系統(tǒng)從未在實驗室以外的地方使用過。雖然在早期(Linux出現(xiàn)之前)有過一些試圖改變這種狀況的努力,但是它們的影響都非常輕微,僅限于真正懷抱這樣理想的人群,即使在當時的黑客社區(qū)這也是絕對少數(shù),更不論對于世界范圍內(nèi)的通用軟件群體的影響了。
現(xiàn)在被稱為“開放源代碼”的行為,其歷史與黑客社區(qū)一樣久遠,但是直到1985年這都只是一個無名的民間行為,沒有相關的理論和宣言。這段史前時代在1985年結束,大黑客Richard Stallman(“RMS”)嘗試給了它一個名字——“自由軟件(Free Software)”。但是這個命名行為也是一個強制要求行為,他為“自由軟件”標簽加上了大多數(shù)已有的黑客社區(qū)從不接受的意識形態(tài)的包袱。“自由軟件”的標簽被黑客社區(qū)中的一部分重要人物(尤其是與BSD Unix有關聯(lián)的社區(qū))明確拒絕,并且其余的大部分人也在嚴肅并且持保留意見的情況下使用它(包括我本人)。
除此之外,大約在1990年代中期以前,RMS想要在“自由軟件”口號下定義和引領黑客社區(qū)。在Linux崛起之后,這受到了極大挑戰(zhàn)。Linux為開放源代碼開發(fā)活動提供了一個天然的環(huán)境。許多在現(xiàn)今被稱為“開放源代碼”條款下發(fā)布的項目紛紛從專有Unix向Linux遷移。圍繞Linux的社區(qū)呈現(xiàn)爆炸式的增長,比在Linux出現(xiàn)前的黑客文化規(guī)模更大且更多樣化。RMS想要將這些活動與他的“自由軟件”運動關聯(lián)起來,但是由于Linux社區(qū)爆炸式的多樣性和該社區(qū)的創(chuàng)始人,Linus Torvalds的公開懷疑所阻礙。Torvalds仍然使用“自由軟件”這一詞匯,因為找不到更好的替代品,但他公開拒絕了RMS的意識形態(tài)觀念。許多年輕黑客紛紛效仿。
在1996年,當我第一次發(fā)布本文的時候,黑客社區(qū)正在圍繞Linux和一些其他開放源代碼的操作系統(tǒng)(尤其是BSD Unix的繼承者)進行重組。我們中的許多人曾經(jīng)在封閉源代碼的操作系統(tǒng)上花費大量時間開發(fā)封閉源代碼軟件的集體記憶并沒有因此褪色,但是這看起來已經(jīng)是過去。黑客們將自己作為黑客的定義與開發(fā)源代碼項目例如Linux和Apache越來越緊密的結合在一起。
然而“開放源代碼”這個詞直到1998年初才出現(xiàn)。當它出現(xiàn)之后,多數(shù)黑客社區(qū)在6個月之內(nèi)采用了它,除了與“自由軟件”在意識形態(tài)層面綁定的極少數(shù)例外。自1998年起,尤其是2003年之后,“黑客”和“開放源代碼(和自由軟件)開發(fā)”越來越緊密相連。今天,幾乎已經(jīng)無法也沒必要將它們區(qū)分開,并且這一點看起來在將來也不會改變。
然而,曾經(jīng)并不是這樣,這一點值得我們記住。
其它資源
Paul Graham寫了一篇名為“Great Hackers”和一篇名為“Undergraduation”的文章,有很多精妙的見解。(中文版詳見國內(nèi)出版圖書《黑客與畫家》)
年輕的黑客可能會發(fā)現(xiàn)Things Every Hacker Once Knew有趣并且有用。
有一篇名為How To Be A Programmer的文章,對如何成為程序員做了詳盡的說明。它的價值不僅限于代碼及其相關能力上,對于如何在一個程序員團隊中工作也有建設性價值。
我寫過一篇A Brief History Of Hackerdom。
我寫過一篇名為“大教堂與市集(The Cathedral and the Bazaar)”的文章,在文中解釋了Linux和開源社區(qū)是如何運作的。在它的續(xù)集“開拓智域(Homesteading the Noosphere)”中,我進一步深入探討了這個問題。
Rick Moen寫了一篇很棒的關于如何運營一個Linux用戶組的文章。
Rick Moen和我共著了一篇關于提問的智慧的文章。它將使你更容易獲取到幫助。
如果需要個人電腦、Unix 和互聯(lián)網(wǎng)如何工作的基礎知識,參閱Unix和互聯(lián)網(wǎng)工作的基本原理。
當你發(fā)布軟件或補丁時,試著按軟件發(fā)布實踐操作。
如果你對禪詩感興趣,你可能會喜歡Rootless Root: The Unix Koans of Master Foo。
How To Become A Hacker
Eric Steven Raymond,?Thyrsus Enterprises, <?esr@thyrsus.com?>
Copyright ? 2001 Eric S. Raymond
翻譯:柯非, <?zer4tul@gmail.com?>
這篇譯文基于2017.10.06更新的原文修訂版1.50。
如果對譯文有任何意見或者建議,請發(fā)Issue,或直接發(fā)Pull Request給我。
譯文:
http://www.0x08.org/docs/hacker-howto.html#respect1

