EricS.Raymond:如何成為一名黑客

程式設計師詩人發表於2017-03-18

如何成為一名黑客

http://www.0x08.org/docs/hacker-howto.html#hacker-howto

埃裡克·史蒂文·雷蒙德

Thyrsus企業 esr@thyrsus.com

Copyright © 2001 Eric S. Raymond
翻譯:柯非, < zer4tul@gmail.com >
這篇譯文基於2015.07.19更新的原文修訂版1.50。
如果對譯文有任何意見或者建議,發Issue,或直接發Pull Request給我。
目錄
為何會有這篇文件
什麼是黑客
黑客的精神1. 世上仍有大量迷人的事情等待解決
2. 同樣的問題不應被重複處理兩次
3. 拒絕重複和沉悶的事情
4. 自由萬歲
5. 精神不能代替能力

基本黑客技能1. 學習程式設計
2. 獲取一個開源的Unix並學習執行和使用它
3. 學習使用全球資訊網(World Wide Web,WWW)和HTML(超文字標記語言)
4. 學習實用英語

黑客社群的身份1. 編寫開源軟體
2. 幫助測試和除錯開源軟體
3. 釋出有用的資訊
4. 幫助維護基礎設施運轉
5. 為黑客社群服務

黑客與書呆子(Nerd)的關係
風格
歷史記錄:黑客活動,開源,和自由軟體
其他資源
常見問題

為何會有這篇文件
身為新黑客詞典(The Jargon File)和許多其他廣為人知的同類文章的作者,我常收到熱心的網路新人的電子郵件,問及(大意上是)“如何成為一名魔法師似的黑客?”。1996年的時候我注意到這個重要的問題並沒有相關的FAQ或文件頁面,所以我寫了一份。許多黑客認為這篇文章是權威的,我覺得它應該是吧。此外,我不會尋求在這個話題上的獨立著作權,如果你不喜歡在這裡讀到的內容,自己寫一篇吧。
如果你是在離線閱讀本文,可以在http://catb.org/~esr/faqs/hacker-howto.html找到本文的最新版本。(譯註:本文的最新中文版可以在這裡找到)
注意:本文的末尾有一系列常見問題。請在向我發郵件詢問關於本文的任何問題前 再三閱讀
目前本文有許多語言的翻譯版:阿拉伯語白俄羅斯語, 中文捷克語丹麥語荷蘭語愛沙尼亞語德語希臘語義大利語希伯來語挪威語, 波斯語巴西葡萄牙語羅馬尼亞語西班牙語土耳其語瑞典語。請注意,由於本文不定期更新,這些翻譯版可能存在不同程度的過時。
本文裡九宮格中的5個黑點的裝飾圖被稱作glider。這是一個使很多黑客多年痴迷的被稱作康威生命遊戲(LIFE)中,具有令人驚奇特性的簡單圖案。我認為它是很好的黑客精神徽章 —— 抽象,初見的時候感覺有點神祕,通過它複雜的邏輯可以通向整個世界。如果你想了解更多關於glider的資訊,請看這裡
如果你覺得這篇文章有價值,請在Gittip上給我一點贊助。也請考慮贊助其他為你提供了有價值程式碼的黑客。小額的贊助也能夠聚小流成江海,使為你提供幫助的人從繁重的勞動中解放出來,創造更多的價值。

什麼是黑客?
新黑客詞典(Jargon File)中有數個“黑客”的定義,主要形容”技術專才”或”有志解決問題及超越極限之人”。要成為黑客,有兩個要點。
這可以追溯到幾十年前第一臺分時小型電腦誕生, ARPAnet 實驗也剛展開的 年代,那時有一個由程式設計專家和網路名人所組成的, 具有分享特點的文化社群。 這種文化的成員創造了 “hacker” 這個詞。他們建立了網際網路,他們發明了現在使用的Unix作業系統。他們管理Usenet討論組。他們令WWW運作。因此,若你有上述的特性及參與同類的社群,亦有對以上種種作出貢獻,同時社群的人知你是誰又稱你為“hacker”,你便是黑客。
然而,黑客的理念並非只侷限於軟體社群。有很多人將黑客的態度應用於其他事物,如電子或音樂上——實際上,黑客的理念存在於任何科學及文學。由於瞭解黑客的理念及精神,軟體社群的黑客亦會稱後者為黑客。有些人亦認為黑客的理念是獨立於黑客所從事的媒體。然而,我們將在這篇文章專注討論軟體黑客的技巧,態度及傳統。
另外,有一群人亦稱自已為“黑客”,他們(多數是年青人)用電腦侵入其他電腦的系統作出破壞。黑客們稱這群人為“Cracker(破壞者)”,亦不認同他們為黑客。多數黑客會認為Cracker是懶惰, 不負責任,不傑出的人。有能力侵入安全系統並不能使你成為黑客,正如可以用鐵絲來偷車並不能使你成為汽車工程師一樣。不幸的是很多作家及報導均稱這群人為“黑客”。這一直使黑客們非常惱火。
黑客與Cracker的主要區別在於,前者搞建設,後者搞破壞。
如果你想成為一個黑客,請繼續讀下去。如果你只想做一個Cracker,請到alt.2600討論組,並做好當你發現自己不如想象中聰穎的時候進5到10次監獄的準備。關於Cracker我就說這麼多。

黑客的精神
世上仍有大量迷人的事情等待解決
同樣的問題不應被重複處理兩次
拒絕重複和沉悶的事情
自由萬歲
精神不能代替能力

黑客們解決問題,建設事物,他們崇尚自由和無私的雙向幫助。要被他人承認是一名黑客,你必須表現得你具備了這樣的態度。而要表現得你具備了這種態度,你必須徹徹底底的堅持它。
如果你認為培養黑客的態度只是一條在這個文化圈中得到認同的路子,那就錯了。成為具備這種素質的人對 ¸非常重要 —— 使你保持學習和成為黑客的自發性。正如所有創造性藝術一樣,成為大師的最有效途徑就是效仿大師的精神——不僅從理念上,還要從態度上效仿。
或許下面的這首現代禪詩很好的闡述了這個意思:
To follow the path:沿著這樣一條道路:look to the master,關注大師,follow the master,跟隨大師,walk with the master,與大師同行,see through the master,洞察大師,become the master.成為大師。

如果你想成為一名黑客,反覆閱讀以下內容直到你相信它們:

  1. 世上仍有大量迷人的事情等待解決
    作為一名黑客可以享受很多樂趣,同時需要付出相當多的努力。努力需要動力。成功的運動員從鍛鍊身體、超越身體極限中獲得精神愉悅。類似的,作為一名黑客,你可以從解決問題、磨練技術和鍛鍊智力中獲得樂趣。
    如果你天生不是這樣的人,那你需要設法變成這樣的人以使你能夠成為一名黑客。否則你將會發現你的精力會被諸如性、金錢、社會上的虛名之類讓人分心的東西所消磨掉。
    (你還需要對自己的學習能力樹立信心——相信儘管你對某一問題了解得不多,只要你能解決其中一部分,並從中學習,你可以解決其他的部分——直到解決它。)
  2. 同樣的問題不應被重複處理兩次
    創造性的智慧是非常有價值且稀缺的資源。它們不應當被浪費在重複發明輪子上,世上仍有大量迷人的新問題等著解決。
    作為一名黑客,你應該堅信其他黑客的時間非常寶貴——所以你有義務共享資訊,解決問題之後公佈方案,這樣其他人可以去解決新的問題,而不是忙於應付舊問題。
    注意,“同一個問題不應該被重複處理兩次”並不是說你必須認為所有已有方案都是最優的,或每個問題只有唯一的解決方案。通常我們從一個問題的最初解決方案中能夠學習到很多東西。這很好,並且對於我們思考如何能做得更好來說,這通常是必要的。我們反對的是人為的技術、法律上的,或者機構性的設定障礙(例如閉源軟體),使得一個好的方案不能被重複使用,逼得人們重造輪子。
    (你不必認為你必須將 所有 你的創造發明都公佈出去,雖然這樣做的黑客將會贏得大家極度尊重。適當賣一些錢來換取足夠的食物、租金和電腦並不違反黑客的價值觀。用你的技能來養家餬口甚至致富都可以,只要你在做這些的時候別忘記你是一名黑客。)
  3. 拒絕重複和沉悶的事情
    黑客(以及富有創造力的所有人)不應當被愚蠢的重複性勞動所困擾,因為這意味著他們並沒有在做只有他們才能做的事情——解決新問題。這樣的浪費會傷害所有人。因此,無聊和乏味的工作不僅僅是令人不爽,而是罪惡。
    作為一個黑客,你應該堅信這一點並儘可能的將枯燥的工作自動化,這不僅僅是為了你自己,也為了其他人(尤其是其他黑客)。
    (這裡有一個例外。黑客有時會做一些看起來重複或枯燥的事情以進行腦力休息,或以此來鍛鍊一種技能,或以此獲得某種除此以外無法獲取的經驗。但這是有選擇的——有腦子的人不該被強迫做枯燥的事。)
  4. 自由萬歲
    黑客是天生的反獨裁主義者。 任何能向你發號施令的人能夠迫使你停止解決令你著迷的問題。 同時,按照獨裁者的一般思路,他通常會給出一些極端愚昧的理由。因此,不論何處,任何獨裁主義的作法,只要它壓迫你和其他黑客,你就要和它鬥到底。
    (這並非向所有權威挑戰。兒童需要監護,罪犯要被看管起來。如果服從命令得到某種東西比起用其他方式得到它更節約時間,黑客可以同意 接受某種形式的權威。但這是一個有限度的,有意的交易;那種權威想要的個人服從不是你應該同意給予的。)
    權威喜歡審查和保密。他們不信任自願的合作和資訊共享——他們只喜歡由他們控制的所謂“合作”。因此,作為一個黑客,你得對審查、保密,以及使用武力或欺騙去壓迫有行為能力的人們的做法有一種本能的敵意。 同時你要有為此信念鬥爭的意願。
  5. 精神不能代替能力
    作為一個黑客,你必須培養起這些精神。但是僅僅有精神並不能使你成為黑客,也不能使你成為運動健將或搖滾明星。成為一名黑客還需要智力,實踐,奉獻精神和辛勤工作。
    因此,你需要學會有懷疑態度和尊重任何能力。黑客不會為裝模作樣的人浪費時間,但他們尊重能力——尤其是從事黑客工作的能力,不過任何能力都是好的。很少人能具備的高要求能力尤其好,其中涉及腦力,技巧和專注方面的能力最好。
    尊重能力,你就會享受到提高自己的能力所帶來的樂趣——辛苦的工作和奉獻將不再是苦差而是一種高度娛樂。想要成為一名黑客,這一點尤其重要。

    基本黑客技能
    學習程式設計
    獲取一個開源的Unix並學習執行和使用它
    學習使用全球資訊網(World Wide Web,WWW)和HTML(超文字標記語言)
    學習實用英語

黑客的態度很重要,但技能更重要。態度不能替代能力,在被別的黑客稱你為黑客之前,你有一些基本技能需要掌握。
這些基本技能隨著時間的推移和技術的革新也緩慢的變化著。例如以前的內容中包括了使用機器語言程式設計,最近包含進了HTML。總的來說當前包括以下內容:

  1. 學習程式設計
    理所當然,這是最基本的黑客技能。如果你一門計算機語言都不懂,我建議你從Python學起。它設計良好,文件詳盡,並且對新人十分友好。儘管它是一門很好的入門語言,但它不只是玩具水平。它非常強大靈活,並且適用於大型專案。我寫過一篇詳細的對Python的評價。在Python的網站可以找到很好的教程。在Computer Science Circles也有一篇不錯的第三方教程。
    我早前曾經建議使用Java作為入門語言,但這篇評價改變了我的看法(請在文件中搜尋“The Pitfalls of Java as a First Programming Language”)。如同文中尖銳指出的一樣,一個黑客不能“像五金店中的管道工一樣處理問題”。你需要知道所有的元件事實上都 幹了什麼。現在,我認為最好先學C和Lisp,然後再學Java。
    另外有一點需要注意。如果一門語言幫你做了太多工作,它會同時是一個好的生產工具和一個不好的初學物件。不僅語言有這個問題,Web框架比如RubyOnRails,CakePHP,Django也很容易讓你流於表面,面對困難問題的時候束手無策,甚至無法對一個簡單問題進行追查並給出解決方案。
    如果你需要做一些重要的程式設計工作,你需要學習C語言,它是Unix的核心語言。C++跟C關係密切。如果你瞭解其中一種,學習另外一種應該不難。但是這兩種語言都不適合作為入門學習。此外,如果你越避免用C程式設計,你的工作效率會越高。
    C的執行效率非常高,並且非常節省機器資源。不幸的是C的高效是通過讓你手動進行許多底層資源(例如記憶體)管理來獲得的。底層程式碼複雜並且容易出bug,你需要花費很多時間來進行除錯。鑑於當今的機器效能如此之高,這樣的做法通常很不划算——通常更好的做法是使用一種稍微慢一些,不那麼高效,但是能夠 大幅 節省你的時間的語言。那便是Python。
    其他對黑客而言比較重要的語言包括Perl和LISP。Perl很實用,它廣泛應用於動態網頁和系統管理方面,因此即使你從不寫Perl程式碼,至少也得能看懂。許多人使用Perl的理由和我建議你使用Python的理由一樣,都是為了避免用C完成那些執行效率需求不那麼高的工作。你需要能夠看懂他們的程式碼。
    LISP之所以值得一學是基於另外的理由——當你最終掌握了它的時候,你將會獲得巨大的啟迪。它將使你成在今後為一個更好的程式設計師,即使你實際上很少使用LISP本身。(你可以通過為Emacs文字編輯器或者GIMP的Script-Fu編寫外掛或修改現有外掛來很容易的學習LISP。)
    當然,你最好五種語言都會(Python,C/C++,Java,Perl和LISP)。除了是重要的黑客語言之外,它們也代表了截然不同的程式設計思路和方法,每一種都能讓你受益匪淺。
    但是單純的堆砌語言是不可能成為一個黑客,甚至程式設計師的。你需要學會如何獨立於任何具體的語言之外來思考程式設計問題。作為一名真正的黑客,你需要通過手冊和你已有的知識掌握到在幾天之內學會一門語言的要點。這意味著你需要學習許許多多不同的語言。
    這裡我無法給你完完全全的指導教會你如何程式設計——這是個複雜的技能。但我可以告訴你,書本和課程也不能作到(最好的黑客中,有許多,也許 幾乎 都是自學成材的)。 你可以從書本上學到語言的特點——這只是皮毛,但要使書面知識成為自身技能只能通過實踐和虛心向他人學習。因此要作到(1) 程式碼及(2) 程式碼。
    Peter Norvig,Google最頂級的黑客之一,也是世界上最受歡迎的AI教材(譯註:指“人工智慧:一種現代方法”和“人工智慧程式設計範例:通用Lisp語言的案例研究”等)的共同作者。他寫了一篇名為Teach Yourself Programming in Ten Years的短文。他在文中提到的“程式設計成功的訣竅(recipe for programming success)”特別值得留意。
    學習程式設計就像學習用優美的自然語言書寫一樣。最好的辦法就是閱讀大師的名著,試著自己寫點東西,再讀一些,再寫一點,再讀一些,再寫一點……如此往復,直到你的作品達到如你在範文中所見的簡潔和健壯。
    我必須再提一下How To Learn Hacking,這是一些簡單的說明,但是學起來並不容易。
    以前很難找到適合閱讀的好程式碼,因為幾乎沒有大型程式的程式碼能夠供新人閱讀和練手。這種情況已經發生戲劇性的變化。開源軟體,程式設計工具和作業系統(都是由黑客創造的)現在隨處可見。這剛好帶我們到下一個話題……
  2. 獲取一個開源的Unix並學習執行和使用它
    我假定你擁有或者能使用一臺個人電腦(現在的孩子真幸福。黑客文化建立之初電腦貴得要死,沒人買得起)。新手們向黑客技能邁出的最重要一步就是獲取一份Linux或BSD-Unix的拷貝,將其安裝在個人電腦上,並執行它。
    沒錯,世上除了Unix還有其他作業系統。但它們都是以二進位制形式釋出的——你讀不到原始碼,你也不能修改程式碼。在類似Microsoft Windows那樣的閉源作業系統上學習黑客技術就像戴著腳鐐學跳舞。
    在Mac OS X上倒是可以,不過它只有一部分是開源的——你可能會撞牆,也必須很小心的避免養成依賴Apple專有程式碼的壞習慣。如果你專注於底層的Unix,你可以學到一些有用的東西。
    Unix是網際網路上的作業系統。雖然你不懂Unix仍然可以學會使用網際網路,但若你不懂Unix,你將不能在網際網路上從事黑客活動。因此,現今的黑客文化是嚴重以Unix為中心的。(曾經不是這樣,並且有一些老派的黑客對此仍然感到不太高興。但是現今Unix和網際網路的羈絆如此之強,連Microsoft也無法撼動分毫。)
    所以,請安裝一套Unix – 我個人喜愛Linux但還有其他種類的(並且,你 可以 在同一臺電腦上執行Linux和Windows)。學習它,使用它,調教它。用它在網際網路上衝浪。閱讀它的程式碼,修改它的程式碼。你將獲得比Windows作業系統上更好的程式設計工具(包括C,LISP,Python和Perl)。你會覺得其樂無窮,學到比你想像更多更好的知識。
    想要獲取更多和學習Unix相關的資訊,請參考Loginataka。你或許還想看看[Unix程式設計藝術][The Art Of Unix Programming](譯註:這裡給出的是原文連結。國內有翻譯版出售)。
    我認為部落格Let’s Go Larval!對於處在學習Linux階段中的使用者是非常易懂和有用的。 這篇文章How I Learned Linux 就是一個很好的起點。
    想開始Linux之旅,請參考Linux Online!。你可以從那裡下載Linux或者(更好的主意是)找到一個當地的Linux使用者群為你的安裝過程提供幫助。
    在本文最初的10年間,我認為從一個初學者的角度來說,所有Linux發行版都差不多。不過在2006~2007年間,一個事實上最好的選擇出現了:Ubuntu。其他發行版各有所長,而Ubuntu對初學者最友好。注意,相比Ubuntu預設那個醜陋的幾乎不可用的“Unity”桌面,Xubuntu和Kubuntu更好用一點。
    你可以在www.bsd.org找到BSD相關的幫助和資源。
    一個試水的好辦法是試試被Linux愛好者稱為“Live CD”的東西,那是一個完全在光碟上執行,而不修改你硬碟的發行版。它執行起來比較慢,因為光碟很慢,但是這是一個在做出任何不可挽救的改變前看看可行性的辦法。
    我寫過一篇關於Unix和網際網路基礎的入門文章。
    我曾經不建議新手獨自安裝Linux或者BSD。現在它們的安裝程式已經做得足夠好,你作為新人也完全搞得定。儘管如此,我仍然建議和你當地的Linux使用者群取得聯絡並尋求幫助。這沒壞處,並且可以讓整個過程更順利。
  3. 學習使用全球資訊網(World Wide Web,WWW)和HTML(超文字標記語言)
    大多數的黑客造物在你所不知的地方發揮著作用,幫助工廠、辦公室和學校運轉,這看上去跟普通人沒太大關係。Web是一個大大的例外,即便 政客 也承認這個巨大耀眼的黑客玩具正在改變著世界。單就這一個原因(當然還有其他理由)你就需要學習掌握Web。
    這並不僅僅意味著如何使用瀏覽器(誰都會),而是要學會如何寫HTML,Web的標記語言。如果你不會程式設計,寫HTML會教你一些有助於學習的思考習慣。因此,先完成一個主頁。嘗試堅持使用XHTML,一種比標準HTML更清晰的語言。(Web上有很多很好的初學者指南,例如這個)。
    但僅僅擁有一個主頁不能使你成為一名黑客。Web裡充滿了各種網頁。大多數是毫無意義的,零資訊量的垃圾——介面時髦,能奪人眼球的垃圾還是垃圾(更多資訊訪問The HTML Hell Page)。
    所以,你的頁面必須有內容——得是有趣並且/或者對其他黑客來說有用的內容。這是我們下一個議題要說的……
  4. 學習實用英語
    作為一個美國人和一個以英語為母語的人,我以前很不情願提到這點,免得成為一種文化上的帝國主義。但相當多以其他語言為母語的人一直勸我指出這一點,那就是英語是黑客文化和Internet的工作語言,你需要懂得以便在黑客社群順利工作。
    大概1991年的時候我瞭解到許多黑客在技術討論中使用英語,即使在他們的母語都相同,英語對他們而言只是第二語言的時候也常如此。據我所知,當前英語有著比其他語言豐富得多的技術詞彙,因此是一個對於工作來說相當好的工具。基於同樣的理由,英文技術書籍的翻譯(如果有的話)通常都不能令讀者滿意。
    芬蘭人Linus Torvalds用英語註釋他的程式碼(很明顯這不是湊巧)。他流利的英語成為他能夠管理全球範圍的Linux開發人員社群的重要因素。這是一個值得學習的例子。
    即使作為一個以英語為母語的人也不代表你就具備了成為黑客所需的語言技能。一般而言,如果你寫得象個半文盲似的,文中充斥著各種語法、拼寫錯誤,多半得不到理睬。雖然不嚴謹的文筆並不總是意味著不嚴謹的思維,但我們發現這兩者之間的關聯還是挺緊密的。而我們不需要這種思維不嚴謹的人。如果你現在還沒有具備這樣的書寫能力,趕緊培養。

    Status in the Hacker Culture
    編寫開源軟體
    幫助測試和除錯開源軟體
    釋出有用的資訊
    幫助維護基礎設施運轉
    為黑客社群服務

象大部分非盈利社群一樣,黑客社群靠聲譽運轉。你設法解決有趣的問題,但問題是否有趣及解決方法是否有效,需要由那些和你具有同樣甚至更高技術水平的人去評判。
因此,要玩黑客這個遊戲,你需要以其他黑客對你技能的評判作為對自己的評價(所以我說,在其他黑客稱你為黑客之前,你不是一個真正的黑客)。這個事實常被人誤解(從1990年代後有所好轉,但還是很嚴重),人們認為黑客都是不在乎別人的評價,孤僻的人。這實際上是一個黑客文化的禁忌。
特別地,黑客被人類學家們稱為 奉獻社群。在這裡你不是憑藉你對別人的統治來建立地位和名望,也不是靠美貌,或擁有其他人想要的東西,而是靠你的奉獻。尤其是奉獻你的時間,你的創造力和你的技術成果。
要想獲得黑客的尊重,你基本上有5件事情可幹:

  1. 編寫開源軟體
    首先(也是最傳統和最重要的)是寫一些其他黑客覺得有趣或有用的程式,並且開放原始碼。
    (我們曾經把這些程式稱為“自由軟體(free software)”,但是太多人不能確定這裡的“free”是什麼意思。現在我們通常使用“開源”軟體這個詞。
    黑客間最受尊敬的聖人是那些編寫了大型的,功能強勁且滿足了廣泛需求的開源軟體供他人使用的人。
    但是這裡有段有趣的歷史。雖然黑客一直敬重開源軟體開發者,並且他們是我們社群的核心,但是直到1990年代中期,絕大部分黑客絕大多數時間是在閉源軟體上工作的。在我1996年寫本文的第一版的時候仍然如此。到1997年之後開源軟體逐漸成為主流並改變了這一點。現在,“黑客社群”和“開源軟體開發者”本質上是對同一文化和同一人群的兩種表述——但值得記住的是,曾經不是如此。(想了解更多,請看“歷史記錄:黑客活動,開源,和自由軟體”。)
  2. 幫助測試和除錯開源軟體
    黑客也尊敬那些為開源軟體進行測試和除錯的人。在這個並非完美的世界上,我們不可避免地要花大多數的開發時間在除錯階段。 這就是為什麼許多開源軟體作者都會高度評價那些好的beta測試員 (知道如何清楚描述出錯症狀,很好地定位錯誤,能忍受快速釋出中的bug,並且願意使用一些簡單的診斷工具),認為他們像紅寶石一樣珍貴。一個好的測試員可以使如惡夢的測試及除錯工作變為一件值得經歷的小煩惱。
    如果你是個新手,試著找一個你感興趣的正在開發的程式,嘗試做一個好的beta測試員。 你會自然地從幫著測試,進步到幫著抓bug,到最後幫著改程式。你會從中學到很多,並且與未來會幫到你的人結下友誼。
  3. 釋出有用的資訊
    另一個好事是收集整理有用有趣的資訊做成網頁或文件如FAQ(常見問題)列表,且讓他們容易獲得。
    技術性FAQ的維護者往往如同開源軟體作者一樣很受人尊重。
  4. 幫助維護基礎設施運轉
    黑客社群(也包括網際網路發展)是靠自願者組成的。有大量重要但平淡的事情需要處理——管理郵件列表,新聞組,維護大型軟體歸檔庫,開發RFC和其他技術標準等。
    做以上事情的人會得到很多人的尊敬,因為大家都知道這些事情需要大量的時間並且不如編寫軟體那麼有趣。這類工作需要使命感。
  5. 為黑客社群服務
    最後,你還可以為黑客社群做服務和宣揚(比如寫一篇“如何成為黑客”的文章 :-))。通常你不會做這些工作,直到你已經做了以上四種中的一樣,並且取得了相當的知名度。
    黑客社群沒有既定的領導者,但是有被人們尊重的英雄,長老級人物,史學家和發言人。當你在這個圈裡足夠久,你可能會成為他們中的一員。但請謹記,黑客對於自我誇耀的長老並不認同,因此不要嘗試大舉追求這種名譽。與其奮力追求,不如先擺正自己的位置,等它自己到你手中,那時需要做到謙虛和優雅。

黑客與書呆子(Nerd)的關係

與流行的傳說不同,黑客並不是書呆子。但這確實對你成為黑客有幫助,並且很多黑客確實是書呆子。做一個深居簡出的人有助於使你更能集中精力做一些重要的事,例如思考和從事黑客活動。
因此,許多黑客甚至以“極客(geek)”(譯註:這個詞原本在美國俚語中指“反常的人”)為名——這是一種宣佈他們獨立於普通社會的方式(此外,黑客也通常沉迷於其他一些事情例如科幻和戰略遊戲)。“書呆子”這個詞通常在1990年代也被如此使用,那時候“書呆子”這個詞略含貶義,而“極客”貶義更重。2000年以後這兩個詞的關係發生了轉變,至少在美國流行文化上是如此,現在甚至在非技術專家中也出現了以標榜為極客為豪的情況。
如果你能集中足夠的精力做好黑客工作同時還能有正常的生活,這很好。現在做到這一點比我在1970年代還是新手的時候要容易的多;如今主流文化對技術怪人要友善的多。甚至有越來越多的人意識到黑客通常是很好的戀人和配偶侯選。
如果你因為生活上的不如意而成為黑客,那也不錯——至少你不用分神了。或許今後你能有一個不錯的生活。

風格
重申一下,作為一名黑客,你必須進入黑客式思維模式。當你不在電腦邊的時候你仍然有很多有益的事情可做。它們不能替代真正的黑客活動(沒有什麼可以),但是很多黑客都這麼幹,並且感到它們與黑客精神存在某些根本的聯絡。
學會流暢的使用母語寫作。雖然認為程式設計師寫不好文章的誤解仍然很普遍,但是有數量令人驚訝的黑客(包括我所知造詣最高的那些)都是不錯的寫手。

閱讀科幻小說。參加科幻聚會(一個接觸黑客和可能成為黑客的人的好方法)。

加入黑客空間(hackerspace)並做一些東西出來(另外一個接觸黑客和可能成為黑客的人的好方法)。

習武。武術的精神修煉與黑客之道驚人的相似。黑客中比較常見的當然是亞洲的空手格鬥技巧,例如跆拳道、空手道及其變種、中國功夫、合氣道、柔術(譯註:這裡指的是日本傳統武術,而不是柔身術或軟功)。西方擊劍和亞洲劍術也有相當的追隨者。在持槍合法的地區,射擊從1990年代起也越來越受歡迎。與黑客之道最契合的武術是那些強調精神修煉、放鬆意識,強調控制而不是單純的蠻力的型別。

學習一種冥想修煉。黑客中一直以來最受歡迎的是禪(很重要的是學禪並不要求你有特定的宗教信仰)(譯註:這裡指的是日本禪宗,而不是漢地佛教禪宗)。其他方式也可以,但是請注意一定選擇那些不會要求你相信很瘋狂東西的方式。

修習音樂。學會鑑賞特別的音樂。學會玩某種樂器,或唱歌。

提高對雙關語、文字遊戲的鑑賞能力。

這些事情,你已經在做的越多,你就越是天生做黑客的料。至於為什麼偏偏是這些事情,原因並不完全清楚,但它們都涉及用到左右腦混合使用,這似乎是關鍵所在。黑客們既需要清晰的邏輯思維,有時又需要偏離邏輯跳出問題的表象。
工作即娛樂,娛樂即工作。對於真正的黑客來說,“玩”,“工作”,“科學”和“藝術”之間沒有界線,或者說,它們在一個高層面的創造性趣味裡融合在一起。另外,不要對一點點技能就感到滿足。雖然大多數黑客自稱是程式設計師,他們實際上在其他相關的方面也很可能相當強悍——常見的是系統管理、頁面設計和PC硬體故障處理。一個黑客,如果他是一名系統管理員,他很可能對指令碼程式設計和頁面設計也相當在行。黑客不會半途而廢,如果他們要學習一門技能,他們會將其學好。
最後,一些你 不應 做的事。
不要使用愚蠢,譁眾取寵的ID或暱稱。
不要捲入Usenet(或其他任何地方)的罵戰。
不要自稱為“數字朋克(cyberpunk)”,也不要浪費時間跟他們打交道。
不要傳送含有大量拼寫和語法錯誤的email和帖子。
做出以上事情只會招來嘲笑。黑客的記性都很好——你犯下的錯誤會令你將要經過多年才可以被其他黑客接受。
網名的問題值得深思。將身份隱藏在虛假的名字後是駭客、warez d00dz及其他低等生物幼稚愚蠢的行為特點。黑客不會做這些事;他們對他們所作的感到驕傲,而且樂於人們將作品與他們的 真名 相聯絡。 因此, 若你現在用假名,放棄它。黑客社群裡只會將用假名的人視為失敗者。

歷史記錄:黑客活動,開源,和自由軟體
當我在1996年末剛開始寫這篇文件的時候,很多情況跟現在是不同的。簡單的介紹一下這個變化對於對開放原始碼、自由軟體和Linux跟黑客社群的關係感到困惑的人們可會有所幫助。如果你對這些不感興趣,可以直接跳過這裡,前往FAQ和參考資料部分。
我描述的黑客精神和黑客社群遠早於1990年出現的Linux。我最初進入這個圈子大概是在1976年,其原因可以追溯到1960年代早期。但是在Linux出現前,多數黑客行為是在專有作業系統,或一些自主研發的實驗性系統上,例如MIT的ITS,這個系統從未在實驗室以外的地方使用過。雖然在早期(Linux出現之前)有過一些試圖改變這種狀況的努力,但是它們的影響都非常輕微,僅限於真正懷抱這樣理想的人群,即使在當時的黑客社群這也是絕對少數,更不論對於世界範圍內的通用軟體群體的影響了。
現在被稱為“開放原始碼”的行為,其歷史與黑客社群一樣久遠,但是直到1985年這都只是一個無名的民間行為,沒有相關的理論和宣言。這段史前時代在1985年結束,大黑客Richard Stallman(“RMS”)嘗試給了它一個名字——“自由軟體(Free Software)”。但是這個命名行為也是一個強制要求行為,他為“自由軟體”標籤加上了大多數已有的黑客社群從不接受的意識形態的包袱。“自由軟體”的標籤被黑客社群中的一部分重要人物(尤其是與BSD Un ix有關聯的社群)明確拒絕,並且其餘的大部分人也在嚴肅並且持保留意見的情況下使用它(包括我本人)。
除此之外,大約在1990年代中期以前,RMS想要在“自由軟體”口號下定義和引領黑客社群。在Linux崛起之後,這受到了極大挑戰。Linux為開放原始碼開發活動提供了一個天然的環境。許多在現今被稱為“開放原始碼”條款下發布的專案紛紛從專有Unix向Linux遷移。圍繞Linux的社群呈現爆炸式的增長,比在Linux出現前的黑客文化規模更大且更多樣化。RMS想要將這些活動與他的“自由軟體”運動關聯起來,但是由於Linux社群爆炸式的多樣性和該社群的創始人,Linus Torvalds的公開懷疑所阻礙。Torvalds仍然使用“自由軟體”這一詞彙,因為找不到更好的替代品,但他公開拒絕了RMS的意識形態觀念。許多年輕黑客紛紛效仿。
在1996年,當我第一次釋出本文的時候,黑客社群正在圍繞Linux和一些其他開放原始碼的作業系統(尤其是BSD Unix的繼承者)進行重組。我們中的許多人曾經在封閉原始碼的作業系統上花費大量時間開發封閉原始碼軟體的集體記憶並沒有因此褪色,但是這看起來已經是過去。黑客們將自己作為黑客的定義與開發原始碼專案例如Linux和Apache越來越緊密的結合在一起。
然而“開放原始碼”這個詞直到1998年初才出現。當它出現之後,多數黑客社群在6個月之內採用了它,除了與“自由軟體”在意識形態層面繫結的極少數例外。自1998年起,尤其是2003年之後,“黑客”和“開放原始碼(和自由軟體)開發”越來越緊密相連。今天,幾乎已經無法也沒必要將它們區分開,並且這一點看起來在將來也不會改變。
然而,曾經並不是這樣,這一點值得我們記住。

其他資源
Paul Graham寫了一篇名為“Great Hackers”和一篇名為“Undergraduation”的文章,有很多精妙的見解。
有一篇名為How To Be A Programmer的文章,對如何成為程式設計師做了詳盡的說明。它的價值不僅限於程式碼及其相關能力上,對於如何在一個程式設計師團隊中工作也有建設性價值。
我寫過一篇A Brief History Of Hackerdom
我寫過一篇名為“大教堂與市集(The Cathedral and the Bazaar)”的文章,在文中解釋了Linux和開源社群是如何運作的。在它的續集“開拓智域(Homesteading the Noosphere)”中,我進一步深入探討了這個問題。
Rick Moen寫了一篇很棒的關於如何運營一個Linux使用者組的文章。
Rick Moen和我共著了一篇關於提問的智慧的文章。它將使你更容易獲取到幫助。
如果需要個人電腦、Unix 和網際網路如何工作的基礎知識,參閱Unix 和網際網路工作的基本原理
當你釋出軟體或補丁時,試著按軟體釋出實踐操作。
如果你對禪詩感興趣,你可能會喜歡Rootless Root: The Unix Koans of Master Foo

常見問題
Q: 如何證明我已經是一名黑客了?Q: 你能教我做黑客嗎?Q: 我該如何開始?Q: 我該什麼時候開始學?現在會不會太遲了?Q: 學會黑客之道要多長時間?Q: Visual Basic是一門好的入門語言嗎?Q: 你能教我“黑”掉一個網站,或者教我怎麼黑它嗎?Q: 我怎麼樣才能得到別人帳號的密碼?Q: 我如何入侵/檢視/監視別人的email?Q: 我如何才能盜取IRC的頻道管理員許可權?Q: 我被人入侵了。你能幫我避免以後再被攻擊嗎?Q: 我的Windows軟體出現問題了。你能幫我嗎?Q: 我在哪裡可以找到能與之交流的真正的黑客?Q: 你能推薦一些有關黑客的好書嗎?Q: 成為一名黑客我需要擅長數學嗎?Q: 我該從哪種語言開始學?Q: 我需要什麼樣的機器配置?Q: 我想做貢獻。你能幫我挑選一個問題來處理嗎?Q: 我得因此憎恨和反對Microsoft嗎?Q: 但開放原始碼軟體不會使程式設計師丟飯碗嗎?Q: 哪裡有免費的Unix?
Q: 如何證明我已經是一名黑客了?
A: 問自己以下三個問題:

  • 你能夠流暢的編寫程式碼嗎?* 你是否與黑客社群的目標和價值觀產生共鳴?* 是否有知名黑客稱你為黑客?

如果你對三個問題的回答都是肯定的,你就已經是一名黑客。哪怕只有一個回答是否定的也不行。
第一個問題是關於技能的。如果你具備了前文提到的基本技能,就應該沒問題。如果你已經有相當數量的程式碼被開源專案所接受,可以跳過這個問題。
第二個問題是關於精神的。如果前面的五條黑客的精神明顯比其他地方的描述更貼近你的真實生活,你就已經通過了一半。這是內在的一半,外在的一半是你對黑客社群長期專案的貢獻程度。
這裡有一個不完整但具有指示性的專案列表:Linux的改進和發展是否有你的貢獻?你是否對軟體自由充滿激情?你是否反對壟斷?你是否為了讓計算機成為這個世界更豐富多彩、更人性化的工具而努力?
請注意。黑客社群有一些特定的,主要是防禦性的政治傾向——其中兩條是維護言論自由和抵禦可能使開放原始碼非法的“智慧財產權”。有一些長期專案是公民自由組織,例如電子前哨基金會(EFF),外在的態度包括支援他們。除此之外,大多數企圖將黑客精神系統化為一個具體的政治程式的黑客都值得懷疑。我們曾經為此付出過代價,並瞭解到這些想法通常會導致分裂並且令人心煩意亂。如果有人想要以黑客精神的名義來招攬你,那是他們搞錯了重點。最好的回應恐怕是“閉嘴,給他們看程式碼(Shut up and show them the code)。”
第三個問題是遞迴的。我在“什麼是黑客”中提到過,成為一名黑客,就是成為一個具有分享特點的文化社群的一員。很久之前,黑客相比現在是一個鬆散的,不自知的群體。但是近30年來,由於網際網路使得黑客文化的核心更易發展和維護,人際網路方面取得了長足進步。這種改變最簡單的代表就是,在這個世紀,我們有了自己的T恤。
社會學家在研究類似黑客社群這樣的被統稱為“無形學院(invisible colleges)”的人際網路時注意到,這類網路通常都有門衛——具有社群授權的核心成員會稽核新人的進入申請。由於黑客社群是“無形學院”中比較鬆散和非正式的一種,門衛的身份也是非正式的。但是所有黑客天生就知道並非每個黑客都是門衛。在取得門衛的頭銜前需要具備特定的資歷和成就。這很難度量,但是每個黑客在看到它的時候就能知道。
Q: 你能教我做黑客嗎?
A: 自從第一次釋出這份文件,我每週都會收到一些請求,(通常一天幾封)要我“教會他們做黑客”。遺憾的是,我沒有時間和精力來做這個;我自己的黑客專案,及我作為一個開放原始碼倡導者 的四處奔波已經佔用了我110%的時間。
即便我想教你,黑客也依然基本上是一項自行修煉的的態度和技術。當真正的黑客想幫助你的時候,如果你乞求他們一湯匙一湯匙“喂”你的話,你會發現他們不會尊重你。
先去學一些東西。顯示你在嘗試,你能靠自己去學習。然後再去向你遇到的黑客請教特殊的問題。
如果你發E-mail給一位黑客尋求他的幫助,有兩件首要記住的事情。第一,寫出來的文字顯得懶且粗心的人通常非常懶於思考且非常馬大哈,不能成為好黑客——因此注意拼寫正確,使用正確的語法及發音,否則你可能會無人理睬。 第二,不要試圖要求回覆到與你的發信地址不同的另一個帳號。這樣做的人一般是使用盜用帳號,不會有人有興趣為虎作倀幫助竊賊的。
Q: 我該如何開始
A: 對你而言最佳的入門方式也許是去參加LUG(Linux使用者組)的聚會。 你可以在 LDP的綜合Linux資訊頁面上找到類似的組織;也許有一個在你附近的,而且非常有可能與一所大學或學校掛鉤。如果你提出要求,LUG 成員興許會給你一套 Linux,當然此後會幫你安裝並帶你入門。
下一步(如果你在附近找不到LUG的話,這是第一步)找一個你感興趣的開放原始碼專案。讀它的程式碼,並且檢查它的bug。學著做貢獻,並從此入門。
入門的唯一方式是提升你的技能。如果你還想問我關於如何開始的私人建議,我還是會給你相同的答案,因為沒有捷徑。我還會在心裡認為你可能是個失敗者——因為你沒有耐性讀完這個 FAQ,並且也沒有足夠的智商從文中理解到入門的唯一途徑就是提升你的技能。你沒救了。
Q: 我該什麼時候開始學?現在會不會太遲了?
A: 你有動力學的時候就可以。多數人是在15到20歲之間開始感興趣的,但據我所知也有在這個年齡區間之外的例外。
Q: 學會黑客之道要多長時間?
A: 這取決於你的聰明程度和努力程度。多數人如果足夠專注的話,能在18個月到2年之間學會一套令人尊敬的技能。但是,不要以為這就結束了。在黑客領域(在其他很多領域也一樣),需要10年時間精湛技藝。如果你是一個真正的黑客,你要用你的餘生來學習和完善你的技術。
Q: Visual Basic是一門好的入門語言嗎?
A: 你問這個問題,那通常意味著你想在Microsoft Windows下從事黑客活動。這本身就不是個好主意。我將在Windows下學習黑客技巧比喻為戴著腳鐐學跳舞,這不是開玩笑。別這麼做。Windows很糟糕,而且它從來沒有變好一點。
Visual Basic有一個很重要的問題,主要是源於它不可移植。雖然已經有Visual Basic的開源實現,但ECMA的可執行標準只覆蓋了其程式設計介面的很小一部分。在Windows中,大多數函式庫是由單一供應商(Microsoft)專有的。如果你不能非常小心的選擇你所使用的特性(比任何新手所能做到的都更小心),你最終很可能被束縛在Microsoft決定支援的那些平臺上。如果你從Unix系統開始,有更好的程式語言和更好的函式庫可用。例如Python。
此外,如同其他 Basic 語言一樣,Visual Basic是一種設計糟糕的語言,它會教給你壞的程式設計習慣。別讓我詳細列舉和解釋它們,這夠寫一本書了。找一門設計優良的程式語言來學。
壞習慣之一就是依賴單一廠商提供的函式庫、控制元件和開發工具。通常,一門不能支援至少Linux或一種BSD,或其他第三方作業系統的語言,都不適合應付黑客工作。
Q: 你能幫我“黑”掉一個網站,或者教我怎麼黑它嗎?
A: No。任何讀完這份FAQ後還問這個問題的人都是無藥可救的蠢材,即使有時間我也不會理睬。任何發給我的此類e-mail都會被忽略掉或被痛罵一頓。
Q: 我怎麼樣才能得到別人帳號的密碼?
A: 這是破壞行為。滾開,白痴。
Q: 我如何入侵/檢視/監視別人的email?
A: 這是破壞行為。從我面前消失,混蛋。
Q: 我如何才能盜取IRC的頻道管理員許可權?
A: 這是破壞行為。去死,蠢貨。
Q: 我被人入侵了。你能幫我避免以後再被攻擊嗎?
A: 不能。每次問我這個問題的都是些執行Microsoft 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: 不。黑客道很少使用常規的數學或算術。 尤其是你不會用到三角學、微積分或數學分析(在特定領域,這些學科很有用,例如3D電腦影像)。一些有限數學(包括布林代數,集合論,組合數學,圖論)的背景知識會有幫助。瞭解一些系統的邏輯和布林代數是有好處的。一些基礎的離散數學(包括有限集合論、組合數學和圖論)會有幫助。
更重要的是:你需要能夠像數學家一樣進行邏輯性地思考和進行縝密的推理。在這一點上絕大部分數學理論幫不了你,你需要有能夠應付數學的修養和智力。如果你不夠聰明,你成為黑客的希望很渺茫。如果你的修養不夠,最好培養起來。
我認為一個好的瞭解你當前狀況的辦法是,找一本Rymond Smullyan的書 What Is The Name Of This Book?。Smullyan那些有趣的邏輯題很符合黑客精神。如果你能解答它們,這是個很好的訊號。如果你能享受解題的過程那就更好了。
Q: 我該從哪種語言開始學?
A: XHTML(最新的HTML方言)——如果你還不懂的話。市面上有一大堆的封面精美,宣傳得天花亂墜的 糟糕的HTML書籍,不幸的是很少有好的。我最喜歡的是HTML: The Definitive Guide
但HTML不完全是一種程式語言。當你準備開始程式設計時,我推薦從Python起步。 你會聽到一大群人推薦Perl,並且Perl依然比Python流行得多,但是難學得多且(以我之見)設計得不是很好。
C確實重要,但它要比Python或Perl難多了。不要嘗試先學C。
Windows使用者不要滿足於Visual Basic。它會教給你壞習慣,而且它不可以移植,只能在Windows下執行。避免它。
Q: 我需要什麼樣的機器配置?
A: 過去個人電腦計算能力相當不夠且記憶體小,給黑客的學習過程設定了人為的障礙。不過從1990年代以後就不是這樣了,任何配置比一臺Intel 486DX50好的機器都有足夠的能力進行開發工作,跑Xorg,及進行Internet通訊,同時現在能買到的最小的磁碟都已經綽綽有餘。
選擇用來學習的機器時重要的一點是注意配件是否是Linux相容的(或BSD相容,如果你選擇學 BSD)。同剛才提到的一樣,大多數現在的機器都是符合的;唯一的值得注意的地方在於 調變解調器和印表機;有些具備為Windows設計的配件的機器不會在Linux下工作。
關於硬體相容性有一個FAQ;最新版本在這裡
Q: 我想做貢獻。你能幫我挑選一個問題來處理嗎?
A: 不行。因為我不知道你擅長什麼,也不知道你對什麼感興趣。你需要做到自我驅動,否則無法進步。這也是為什麼讓別人幫你挑選方向幾乎都不會有用。
Q: 我得因此憎恨和反對Microsoft嗎?
A: 不,你不必如此。不是因為Microsoft不令人討厭,而是因為黑客文化早在Microsoft出現之前就存在了,且將在Microsoft成為歷史後依然存在。你耗費在憎恨Microsoft的任何力氣不如花在熱愛你的技術上。寫好的程式碼——那會相當有效地打擊Microsoft又不會讓你得到惡報。
Q: 但開放原始碼軟體不會使程式設計師丟飯碗嗎?
A: 看起來不太可能——目前為止,開放原始碼軟體產業似乎創造了更多的就業機會而不是減少就業機會。如果寫一個程式比起不寫來是純經濟收益的話,那麼在寫完後,程式設計師應該得到報酬不管程式是否是開放原始碼。並且,無論寫出多麼“免費自由”的軟體,都存在更多對新的,定製的軟體的需求。我有這方面更多的論述,放在Open Source網站資料中。
Q: 哪裡有免費的Unix?
A: 如果你的機器上還沒有安裝Unix,我在本文的其他地方已經指出了從哪裡可以獲取到常用的免費Unix。在本份文件的某個地方我已經提到過何處可以得到最常用的免費Unix。作為一名黑客,你需要自立自強,以及自學能力。現在開始吧……

How To Become A Hacker

Eric Steven Raymond

http://www.catb.org/~esr/faqs/hacker-howto.html


相關文章