到底什麼是黑客?

關於「hacker」這個詞的定義,大部分是關於「技術高超」、「熱衷解決問題」、以及「超越極限」的內容。但如果你只想知道如何成為一名黑客的話,真正重要的只有兩條。

這可以追溯到幾十年前,那時候第一代分時微型計算機才剛剛誕生, 而 ARPAnet 的實驗也才剛展開。那時的編程專家和組網高手建立了一個具有共享性質的文化社群, 「hacker」 這個名詞就是其中的成員創造的。黑客們建立了互聯網,黑客們讓 Unix 操作系統演化到現在的模樣,黑客們經營著 Usenet,黑客們讓萬維網運轉起來。如果你是這個文化的一部分,如果你對這種文化有所貢獻,而且這個社群的其它成員也認識你並稱你為 hacker,那麼你就是一名黑客。

黑客的思維方式並不僅僅局限在軟體黑客的文化圈內。也有人用黑客態度對待其它事情,如電子和音樂方面——其實你可以在任何最高級別的科學和藝術活動中發現它的身影。軟體黑客對這些領域的踐行者尊重有加,並把他們也稱作黑客——有人宣稱黑客天性是絕對獨立於他們工作的特定領域的。但在這份文檔中,我們將集中書寫在軟體黑客的技術和態度,以及發明了「黑客」一詞的、以共享為特徵的文化傳統。

有另外一群人大聲嚷嚷著自己是黑客,但他們根本不是。他們主要由青少年男性構成,是一些蓄意破壞計算機和電話系統的人。真正的黑客把這些人叫做「駭客」(cracker),並不屑與之為伍。黑客們通常認為他們是一群懶散、沒有責任心、而且不是很聰明的人。會通過熱接線發動汽車並不意味著你是一個汽車工程師。一樣的道理,會破壞安全也不意味著你是一名黑客,不幸的是,很多記者和作家往往錯把「駭客」當成黑客;這種做法一直使真正的黑客感到惱火。

根本的區別是:黑客搞建設,駭客搞破壞。

如果你想成為一名黑客,請接著讀下去。如果你想做一個駭客,就去讀 alt.2600 新聞組吧,順便準備好去蹲個五到十年的監獄,而且最終你會意識到你並不像自己想象的那麼聰明。

關於駭客,我能說的只有這些。

黑客的態度

黑客們解決問題,建設事物,同時他們信仰自由和無私的雙向幫助。要想作為一名黑客被社群認同,你需要體現出自己已經具備了這種態度。而要體現出這種態度,你就得真正相信和贊同這種態度。

但是,如果你認為培養黑客態度只是進入黑客文化圈的敲門磚,那就大錯特錯了。這種態度將有助於有助於你的學習,並且能為你提供源源不斷的動力,所以它對你而言是至關重要的。和所有創造性的藝術一樣,成為大師的最有效方法,就是模仿大師的精神——智力上的模仿還不夠,還要從感情上進行模仿。

或者正如下面這首現代的禪詩講的:

修行之道:

關注大師的言行,

跟隨大師的舉動,

和大師一併修行,

領會大師的意境,

成為真正的大師。

所以,如果你想成為一名黑客,反覆讀下面的事情直至你相信它們為止:

這個世界充滿了令人著迷的問題等著我們解決

做一名黑客會有很多樂趣,但是這些樂趣需要付出很多努力才能獲得。這些努力需要動力。成功的運動員在表演和超越自我極限的時候獲得身體上的愉悅,並把這種愉悅作為自己的動力。同樣,為了成為一名黑客,你要從解決問題、磨練技術,以及鍛煉智力中得到基本的享受。

如果你不是天性如此,而你又想成為一名黑客,你就要設法成為這樣的人。否則你會發現,你的黑客熱情會被其他分心的事物吞噬掉——如金錢、性、以及社交圈的認同。

(你必須建立對於自己學習能力的信念——就算你掌握的知識不足以解決當前的問題,如果你從問題的一小部分下手並從中學習,你將學到足夠的知識用來解決下一部分——以此類推,直到整個問題都被你解決為止。)

一個問題不應該被解決兩次

有創新能力的大腦是一種寶貴的有限資源。當世界還充滿非常多有待解決的有趣的新問題時,它們不應該被浪費在重新發明輪子的事情上。

作為一名黑客,你必須相信其他黑客的思考時間是寶貴的——因此共享信息、解決問題、併發布結果給其他黑客幾乎是一種道義,這樣其他人就可以去解決新問題,而不用在舊問題上面浪費精力了。

(這並不是在說你有義務把自己所有的作品都免費發布出來,但這樣做的黑客能獲得大家最大的尊敬。使用黑客技能養家糊口甚至發財致富都沒關係,只要你別忘記自己作為一個黑客的責任,不背離黑客群體即可。)

無聊和乏味的工作是罪惡

黑客(以及所有創造力的人們)都不應該被愚蠢的重複性勞動所困擾。重複性勞動浪費了他們解決新問題的時間,而解決新問題正是黑客最大的價值所在。這種浪費會傷害到每一個人。無聊和乏味的工作不僅僅是令人不舒服而已,而且本身就是一種罪惡。

作為一個黑客,你必須堅信這點並儘可能多地將乏味的工作自動化,這不僅是為了你自己,也是為了其他人(尤其是其他黑客們)。

(對此有一個明顯的例外。黑客有時為了休息大腦、學習技能、或者別的特別的原因,也會做一些在他人看來是重複性或枯燥的事情。但這是自願的——只要是有思維能力的人,就不應該被迫做無聊的活兒。)

崇尚自由

黑客們是天生的反權威主義者。任何能向你發號施令的人都可以讓你停止解決令你著迷的問題,同時,按照權威主義者的一般思路,他通常會給出一些極端愚昧的理由。因此,不論何處,任何權威主義的做法,只要它影響到了你和其他的黑客,你就要和它斗到底。

(這並非向所有權威挑戰。兒童需要監護,罪犯要被看管起來。如果服從命令得到某種東西比起用其他方式得到它更節約時間,黑客可以同意接受某種形式的權威。但這是一個有限度的,斟酌過的的交易;那種權威主義者想要的個人服從是不在考慮範圍內的。)

權威主義者喜歡審查和保密。他們不信任自願的合作和信息的共享——他們只喜歡由他們控制的所謂「合作」。因此,作為一個黑客,你應該對審查、保密,以及使用武力或欺騙去壓迫有行為能力的人們的做法有一種本能的敵意。同時你要有為此信念付出的意願。

態度不能替代能力

作為一名黑客,你必須培養起這些態度。但只具備這些態度並不能使你成為一名黑客,也不能使你成為一個運動健將和搖滾明星。成為一名黑客需要智力、實踐、奉獻精神、以及辛苦的工作。

因此,你必須學著忽略態度問題,並尊重各種各樣的能力。黑客們不會為那些裝模做樣的人浪費時間,但他們卻非常尊重能力——尤其是從事黑客工作的能力(雖然有能力總歸是好事)。如果能具備少有人能掌握的技能就更好了,當然如果你具備一些急需的技能,而這些技能又需要敏銳的思維、高超的技巧、和專註的精神,那就是再好不過了。

如果你尊重能力,你就會享受到提高自己能力的樂趣——辛苦的工作和奉獻將不會是一件苦差事,而是一種緊張的娛樂,這是成為黑客至關重要重要的一點。

黑客的基本技能

黑客態度重要,但技術更加重要。態度無法替代技術,在你被別的黑客稱為黑客之前,你必須掌握一些基本的技術作為你隨身攜帶的工具。

隨著新技術的出現和老技術的過時,這個工具包的內容也在不斷改變。比如以前機器語言編程也被列在裡邊,而 HTML 是直到最近才包括進去的。不過現在可以清楚地告訴你包含以下內容:

學習如何編程

這一條無須多說,當然是最基本的黑客技能。如果你還不會任何編程語言,我建議你從 Python 開始學起。它設計清晰,文檔齊全,而且對初學者比較友好。雖然它很適合作為一種入門語言,但它不僅僅只是個玩具;它非常強大、靈活,也適合做大型項目。

我曾經推薦過將 Java 作為初學的語言,但這則批評改變了我的想法(在裡邊搜索」The Pitfalls of Java 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 寫程序,至少也應該學會讀懂 Perl。許多人使用 Perl 的理由和 我建議你使用 Python 的理由一樣,都是為了避免用 C 完成那些不需要 C 高效率的工作。你會需要理解那些工作的代碼的。

LISP 值得學習的理由不同——最終掌握了它時你會得到豐富的啟迪和經驗。雖然你實際上很少會用到 LISP,但這些經驗會使你在以後的日子裡成為一個更好的程序員。

當然,實際上你最好五種都會(Python,Java,C/C++,Perl 和 LISP)。除了是最重要的黑客語言外,它們還代表了截然不同的編程思路和方法,每種都會讓你受益匪淺。(你可以通過修改 Emacs 編輯器的模式)

單單學習編程語言並不會讓你達到黑客的程度,甚至連程序員的程度都難企及——你需要脫離某種編程語言的素服,學習通過編程解決問題的思路。要成為一個真正的黑客,你需要達到幾天就能學會一門編程語言的水平,你可以將文檔里的信息和你已經掌握的知識結合起來,很快就學會一門編程語言。這意味著你需要先學會機種思路截然不同的語言才行。

編程是一個複雜的技能,我無法給你完整的指南來教會你如何編程,不過我可以告訴你,書本和課程也無法教會你如何編程——很多黑客,或者也許幾乎所有的黑客,都是靠自學的。你從書本上學到語言的特點——只是一些皮毛,但要使書面知識成為自身技能,你只能通過實踐和虛心向他人學習。因此你要做的就是 (a) 讀代碼,(b) 寫代碼。

Peter Novig 是 Google 公司的頂尖黑客之一,而且是最受歡迎的 AI 課本的一名作者。他寫了一篇好文章名叫Teach Yourself Programming in Ten Years(譯註:十年教會自己編程),其中的「recipe for programming success」(譯註:編程的成功之道)尤其值得一讀。

學習編程就象學習自然語言寫作一樣。最好的做法是讀一些大師的名著,試著自己寫點東西,再讀些,再寫點,再讀些,再寫點……如此往複,直到你的文章具備範文的力量和感覺為止。

以前要找適合閱讀的好代碼並不容易,因為幾乎沒有大型程序的源代碼能讓新手練手。這種狀況已經戲劇性地發生變化;開源軟體、編程工具、和操作系統(全都由黑客寫成)現在已經隨處可見。

學習使用開源的 Unix 系統

我將假設你已經有一台個人計算機供自己使用了(你可以體會一下這意味著多少東西。早些時候,計算機是如此的昂貴,沒有人能買得起。而黑客文化就是在那樣的環境下演化來的)。新手們能夠朝學習黑客技能邁出的最基本的一步,就是找一版 Linux 或 BSD-Unix,安裝在個人電腦上,並且把它跑起來。

沒錯,這世界上除了Unix還有其他操作系統。但它們都是以二進位形式發布的——你無法讀到它的源代碼,也不可能修改它。嘗試在運行 DOS、Windows、或 MacOS 的機器上學習黑客技術,就象是穿著騎士鎧甲學跳舞。

除此之外,Unix 還是 Internet 的操作系統。你可以學會上網卻不知道 Unix,但你不了解 Unix 就無法成為一名 Internet 黑客。因此,今天的黑客文化在很大程度上是以 Unix 為核心的。(這點並不總是真的,一些很早的黑客對此一直很不滿,但 Unix 和 Internet 之間的聯繫已是如此之強,就連 Microsoft 這樣強力的公司也對此也無可奈何。)

所以, 安裝一套 Unix 吧——我個人偏愛 Linux,但還有其他種類共你選擇(是的,你可以在同一電腦上同時安裝 Linux 和 DOS/Windows)。學習它,運行它,鼓搗它。用它上 Internet。閱讀它的源代碼。修改它的源代碼。你會用到很多優秀的編程工具(包括 C, LISP,Python 及 Perl),這些工具在 Windows 下是做夢都沒法得到的。你會覺得樂趣無窮。當你有一天成為大師再回顧初學的日子,你會覺得那時學到的東西可真多。

如果你想了解更多關於學習 Unix 的信息,讀一下 The Loginataka(譯註:ESR 的另一著作,可以稱為黑客大藏經)吧。也許你還想看看 The Art of Unix Programming (譯註:Unix 編程藝術,經典著作)。

你可以訪問 Linux Online! 網站,這個網站可以幫你起步。你可以從那裡下載到Linux,或者更好的辦法是找一個本地的 Linux 用戶組,讓他們幫你安裝 Linux。

在這份 HOWTO 文檔發布后的前十年裡,關於 Linux 我寫的是,從新人的觀點來看,所有的Linux 發行版都差不多,但在 2006-2007 之間,我們終於有了一個最佳選擇: Ubuntu。我們可以說各種Linux 發行版各有千秋,但 Ubuntu 是新人最容易上手的一個發行版。

你可以在 www.bsd.org 找到 BSD Unix 的求助及其他資源。

Linux 有一種被稱為 Live CD 的發行方式,這種發行版會從CD 運行起來,而且不會動到你硬碟里的東西,Live CD 是嘗試 Linux 的一個不錯的方法。由於光碟機讀寫本來就比較慢,Live CD 的速度一般也會比較慢,不過 Live CD 總歸是一個能嘗試各種可能性而又不過激的方法。對於新手,我以前不鼓勵你自己獨立安裝Linux 或者 BSD,現在這些系統的安裝工具已經足夠好了,就算對新手來說,獨立安裝操作系統也不是不可能的事。無論如何,我還是推薦你聯繫本地的 Linux 用戶組,向他們尋求幫助,這會進程更加順利。

學會使用萬維網以及編寫 HTML

黑客文化建造的大多東西都在你看不見的地方發揮著作用。浙西東西可以幫助工廠、辦公室、以及大學正常運轉起來,但從表面上很難看到它們對非黑客的普通人的生活的影響。而 Web 是一個大大的例外。就連政客也同意,這個龐大耀眼的黑客玩具正在改變整個世界。就算只是因為這個(還有許多其它的原因),Web 也值得你一學。

這並不是僅僅意味著如何使用瀏覽器(誰都會),而是要學會如何寫 HTML,也就是 Web 的標記語言。如果你不會編程,寫HTML會教你一些有助於學習的思考習慣。因此,先完成一個主頁。(網上有很多不錯的資源,比如 這個 HTML 入門教程。)

但僅僅擁有一個主頁不能使你成為一名黑客。 Web里充滿了各種網頁。大多數是毫無意義的、毫無信息量的垃圾——界面時髦的垃圾,不過還是垃圾。

要想有價值,你的網頁必須有內容——它必須有趣或對其它黑客有幫助。

學習英語,如果你的水平不夠用的話

作為一個以英語為母語的美國人,我以前很不情願提到這點,免得被當做一種文化上的帝國主義。但相當多以其他語言為母語的人一直勸我指出這一點,那就是:英語是黑客文化和 Internet 的工作語言,只有懂英語,你才能在黑客社區順利做事。

大概1991年的時候,我就了解到許多黑客在技術討論中使用英語,甚至有時他們來自同一種母語也在用英文討論。在現階段,英語有著比其他語言豐富得多的技術辭彙,因此是一個對於工作來說相當好的工具。基於類似的原因,英文技術書籍的翻譯通常都不怎麼令人滿意。(如果有翻譯的話)。

Linus Torvalds 是芬蘭人,但他的代碼註解是用英語寫的(很明顯他從沒想過其他的可能性)。他流利的英語。是他能夠管理全球範圍的 Linux 開發人員社區的重要因素。 這是一個值得學習的例子。

就算你的母語是英語,這也無法保證你的語言技能足夠達到黑客的標準。如果你的寫作文字不通、語法混亂、錯字連篇,包括我在內的大部分的黑客都會忽略你的存在。雖然寫作馬虎不一定意味著思考也馬虎,但我們發現兩者的關聯性還是挺強的——馬虎的頭腦對我們來說毫無價值,如果你寫作能力不夠,就好好學習寫作吧。

提高自己在黑客圈中的地位

和大部分不涉及金錢的文化一樣,黑客王國靠聲譽運轉。你設法解決有趣的問題,但它們到底多有趣,你的解法有多好,是要由那些和你具有同樣技術水平,或比你更厲害的人去評判的。

相應地你需要認識到,當你在玩黑客遊戲時,你的分數主要是靠其他黑客對你的技術的評價得到的(這就是為什麼只有在其它黑客稱你為黑客時,你才算得上是一名黑客)。常人的印象里,黑客是一項獨來獨往的工作,所以上述評價方式並不為眾人所知。另一個黑客文化誤區是拒絕承認自我或外部評價是一個人的動力,這種想法在 1990 年代末以後就逐漸衰退了,但現在還有人這麼認為。這也是讓上述評價方式鮮為人知的原因之一。

明確地講,黑客行為就是人類學家所稱的「奉獻文化」。在這裡你不是憑藉你對別人的統治來建立地位和名望,也不是靠美貌,或擁有其他人想要的東西,而是靠你的貢獻。尤其是貢獻你的時間、你的創造、以及你的技術成果。

要獲得其他黑客的尊敬,你可以從下面五種事情著手:

撰寫開源軟體

第一個方法(也是最重要,最傳統的方法)是寫些被其他黑客認為有趣或有用的程序,並把程序源代碼提供給整個黑客文化圈使用。

(過去我們稱之為「free software (自由軟體)」, 但這卻使很多不知 free 的精確含義的人感到困惑。現在我們很多人,根據搜索引擎網頁內容分析,至少三分之二的人在使用」open-source software,即「開源軟體」這個詞)。

黑客領域裡最受尊敬的偶像,是那些寫了大型的、好用的、用途廣泛的軟體,並把它們發布出來,使得每人都在使用他軟體的人。

但是從歷史方面來講有一點值得一提。雖然黑客們一直認為開源軟體的開發者是真正的黑客,但在 1990 年代中期以前,大部分黑客會把自己的主要時間用來撰寫閉源軟體,直到我 1996 年開始寫這篇 HOWTO 時也是如此。但從 1997 年後開源軟體進入了主流,而且改變了這一切。以現在的觀點來看,「黑客社群」和「開源開發者」是對這一個社群的兩種稱呼,但值得記住的是,以前這兩者的概念並不完全一樣。要了解更多信息,你可以看看 關於黑客、開源、以及自由軟體的歷史這一節的內容。

幫助測試並調試開源軟體

黑客也尊敬那些使用和測試開源軟體的人。這個世界並不完美,我們不可避免地要把大多數的開發時間放在調試階段。這就是為什麼任何有頭腦的開源代碼的作者都會告訴你好的 beta 測試員象紅寶石一樣珍貴。好的測試者知道如何清楚描述出錯癥狀,很好地定位錯誤,能忍受快速發布中的 bug,並且樂意配合做一些例行的診斷性工作。一個優秀的測試者可以讓一場曠日持久辛苦不堪的調試大戰變成一場有益身心的小打小鬧。

如果你是個新手,試著找一個你感興趣的正在開發中的程序,做一個好的 beta 測試員。你會自然地從幫著測試,進步到幫著抓 bug,到最後幫著改程序。你會從中學到很多,而且善因種善果,以後別人也會很樂意幫助你。

發布有用的信息

另一件好事是收集整理有用有趣的信息,做成網頁或類似 FAQ 的文檔,並且讓大家都能看到。

技術性 FAQ 的維護者會受到和開源代碼的作者一樣多的尊敬。

幫助維護基礎設施的運轉

黑客文化(還有互聯網工程方面的發展)是靠志願者推動的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成——管理郵件列表和新聞組,維護大型軟體庫,開發 RFC 和其它技術標準等等。

做這類事情的人會得到很多尊敬,因為每人都知道這些事情費時頗多,而又不象編程那樣有趣。做這些事情需要奉獻精神。

為黑客文化本身服務

最後,你可以為這個文化本身做宣傳(例如像我這樣,寫一個「如何成為黑客」的教程 :-) )這並不要求在你已經在這個圈子呆了很久,因以上四點中的某點而出名,有一定聲譽后才能去做。

黑客文化沒有領袖,這點是確認無疑的。但黑客圈裡確實有些文化英雄、部落長者、史學家、還有發言人。如果你在這圈裡呆足夠長時間,你也許也能成為其中之一。 記住:黑客們不相信他們的部落長者的自誇,因此過分追求這種名譽是危險的。與其奮力追求,不如先擺正自己的位置,等它自己落到你的手中——那時則要做到謙虛和優雅。

黑客和書獃子(Nerd)的聯繫

和大家普遍認為的相反,並不是只有書獃子才能成為一名黑客。但它確實有幫助,而且許多黑客事實上是書獃子。做一個深居簡出的人有助於你集中精力進行十分重要的事情,如思考和編程。

因此,很多黑客都接受了「geek(奇客)」這個標籤,並把它作為驕傲的獎章——這是宣布他們獨立於主流社會期望的一種方式(這個標籤也是他們喜歡科幻小說和策略型遊戲的標記,而這些也是很多黑客喜歡的東西)。1990 年代更多用的稱呼是「nerd(書獃子)」,那時「nerd」只帶點輕微的貶義,而「geek」則是地地道道的蔑稱,而在 2000 年以後,這兩者逐漸調轉過來了,至少再美國的大眾文化中是這樣。而到了現在,甚至在非技術人群里,也有不少以 geek 精神為傲的文化團體。

如果你能集中足夠的精力做好黑客工作同時還能有正常的生活,這是件好事。現在要做到這一點比我在 1970 年代還是新手的時候要容易的多;如今主流文化對技術怪人要友善得多。甚至有越來越多的人意識到黑客通常是很好的戀人和配偶的材料。

如果你因為生活上不如意而迷上做黑客,那也沒什麼——至少你不會分神了。也許你以後還能找到自己的生活。

你可能會喜歡