如何成為一名黑客

寫在前面的話:雖然很多人都知道這篇文章,但是我相信還是有一部分人沒有見到它,即便是你讀過它,可我相信時不時找出來讀一下還是會有不一樣的想法,它就像是那口「奉天成仁」的箱子,時不時提醒你該加點兵器進去了.

什麼是黑客?

Jargon File 包含了一大堆關於「hacker」這個詞的定義,大部分與技術高超和熱衷解決問題 及超越極限有關。但如果你只想知道如何 成為 一名黑客, 那麼只有兩件事情確實相關。

這可以追溯到幾十年前第一台分時小型電腦誕生, ARPAnet 實驗也剛展開的 年代,那時有一個由程序設計專家和網路名人所組成的, 具有分享特點的文化社群。 這種文化的成員創造了 「hacker」 這個名詞。黑客們建立了 Internet。 黑客們發明出了現在使用的 UNIX 操作系統。黑客們使 Usenet 運作起來, 黑客們讓 WWW 運轉起來。如果你是這個文化的一部分,如果你對這種文化有所貢獻,而且 這個社群的其它成員也認識你並稱你為 hacker, 那麼你就是一位黑客。

黑客精神並不僅僅局限在軟體的黑客文化中。 有人用黑客態度對待其它事情,如電子學和音樂—— 事實上,你可以在任何最高級別的科學和藝術活動中發現它。 精於軟體的黑客讚賞這些在其他領域的同類並把他們也稱作黑客—— 有人宣稱黑客天性是絕對獨立於他們工作的特定領域的。 但在這份文檔中, 我們將注意力集中在軟體黑客的技術和態度, 以及發明了「黑客」一詞的以共享為特徵的文化傳統之上。

有一群人大聲嚷嚷著自己是黑客,但他們不是。 他們(主要是正值青春的少年)是一些蓄意破壞計算機和電話系統的人。 真正的黑客把這些人叫做「駭客」(cracker),並不屑與之為伍。 多數真正的黑客認為駭客們又懶又不負責任,還沒什麼大本事。 專門以破壞別人安全為目的的行為並不能使你成為一名黑客, 正如 用鐵絲偷開走汽車並不能使你成為一個汽車工程師。 不幸的是,很多記者和作家往往錯把「駭客」當成黑客; 這種做法一直使真正的黑客感到惱火。

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

如果你想成為一名黑客,請接著讀下去。如果你想做一個駭客,去讀 alt.2600 新聞組,並在意識到你並不像自己想像的那麼聰明後去坐五到十次監獄。 關於駭客,我只想說這麼多。

黑客應有的態度

黑客們解決問題,建設事物,同時他們崇尚自由和無私的雙向幫助。 要被他人承認是一名黑客,你的行為得體現出你好像具備了這種態度一般。 而要想做得好象你具備這種態度一般,你就得切切實實堅持它。

但是如果你認為培養黑客態度只是一條在黑客文化圈中得到承認的路子, 那就大錯特錯了。成為具備這些特質的這種人對 你自己非常重要——有助於你學習,及給你提供源源不斷的動力。 同所有創造性的藝術一樣,成為大師的最有效方法就是模仿大師的精神—— 不僅從智力上,也要從感情上進行模仿。

或許, 下面這首現代的禪詩很好的闡述了這個意思:

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. 態度不能替代能力。

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

因此,你必須學會懷疑,並尊重各種各樣的能力。 黑客們不會為那些裝模做樣的人浪費時間,但他們卻非常尊重能力—— 尤其是從事黑客工作的能力,不過任何能力總歸是好的。 具備很少人能具備的那些方面的能力尤其好,其中具備 涉及腦力、技巧和專註方面能力的當然最好。

尊敬能力,你就會享受到提高自己能力的樂趣—— 辛苦的工作和奉獻會變成一種高度娛樂而非苦差事。 要想成為一名黑客,這一點非常重要。

黑客的基本技能

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

這些基本技術隨著新技術的出現和老技術的過時也隨時間在緩慢改變。 例如,過去內容包括使用機器語言編程,而直到最近才包括了HTML。 總的來說現在主要包括以下技術:

1. 學習如何編程。

這當然是最基本的黑客技能。如果你還不會任何編程語言,我建議你從Python開始。 它設計清晰,文檔齊全,合適初學者入門。 它是一門很好的入門語言,並且不僅僅只是個玩具; 它非常強大、靈活,也適合做大型項目。 我有一篇 Python評價詳細說明這點。好的 教程 可以在Python網站得到。 (譯者:比較好的中文Python站點可能是pythonrecord.51.net。)

Java也是好的入門語言。它比Python難得多,但是生成的代碼速度也快得多。 它同時也是一種優秀的計算機語言,不止是用來入門。

但是注意,如果你只會一兩門語言,你將不會達到黑客所要求的技術水平, 甚至也不能達到一個程序員的水平——你需要學會如何以抽象的方式思考編程問題, 獨立於任何語言。要做一名真正的黑客,你需要學會在幾天內通過一些手冊, 結合你現在所知,迅速掌握一門新語言。這意味著你應該學會幾種截然不同的語言。

如果要做一些重要的編程工作,你將不得不學習C語言,Unix的核心語言。 C++與C非常其他類似;如果你了解其中一種,學習另一種應該不難。 但這兩種都不適合編程入門者學習。而且事實上,你越避免用C編程,你的工作效率會越高。

C非常有效率,節約你的機器資源。不幸的是,C的高效是通過你手動做很多底層的管理 (如內存)來達到的。底層代碼都是複雜極易出現bug的,會使你花極多的時間調試。 如今的機器速度如此之快,這通常是得不償失——比較明智的做法是使用一種運行較慢、較低 效率,但大幅節省你的時間的語言。因此,選擇Python。

其他對黑客而言比較重要的語言包括 Perl和 LISP。 Perl實用,值得一學;它被廣泛用於動態網頁和系統管理, 因此即便你從不用Perl寫程序,至少也應該學會看。許多人使用Perl的理由和 我建議你使用Python的理由一樣,都是為了避免用C完成那些不需要C高效率的工作。 你會需要理解那些工作的代碼的。

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

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

這裡我無法給你完完全全的指導教會你如何編程——這是個複雜的技能。 但我可以告訴你,書本和上課也不能作到(最好的黑客中,有許多,也許 幾乎都是自學成材的)。 你可以從書本上學到語言的特點——只是一些皮毛, 但要使書面知識成為自身技能只能通過實踐和虛心向他人學習。 因此要作到 (一)讀代碼(二)寫代碼

學習如何編程就象學慣用優美的自然語言寫作一樣。 最好的做法是讀一些大師的名著,試著自己寫點東西,再讀些,再寫點,再讀些,再寫點…… 如此往複,直到你的文章達到你體會到的範文的簡潔和力量。

過去找到適合閱讀的好的代碼是困難的,因為幾乎沒有大型程序的源代碼能讓新手練手。 這種狀況已經戲劇性地發生變化;開放源代碼軟體,編程工具和操作系統(全都由黑客寫成)現在已經 隨處可見。讓我們在下一個話題中繼續討論……

2. 得到一個開放源代碼的Unix並學會使用、運行它。

我假設你已經擁有或者能使用一台個人電腦(今天的孩子們真幸福 :-) )。新手們能夠朝學習黑客技能邁出的最基本的一步就是得到 一份Linux或BSD-Unix的一種,安裝在個人電腦上,並運行它。

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

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

所以, 安裝一套UNIX——我個人喜愛LINUX但還有其他種類的 (是的,你可以同時安裝Linux及DOS/Windows在同一電腦上)。 學習它,使用它,配置它。用它在Internet上衝浪。閱讀它的源代碼。修改它的源代碼。 你會得到比在Microsoft操作系統上更好的編程工具(包括C,LISP,Python及Perl)。 你會覺得樂趣無窮,學到在你成為大師之前意識不到的更多的知識。

想知道更多關於學習Unix的信息,訪問 The Loginataka。

想知道如何得到一份Linux,訪問 我在哪裡可以獲得Linux。 (譯者:對於中文讀者來講,最簡單的方式未過於前往附近的D版/正版光碟店。)

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

我有寫一篇關於 Unix和Internet基礎的入門文章。

(註:如果你是一個新手,我不推薦自己獨立安裝Linux或者BSD。 安裝Linux的話,尋求本地Linux用戶組的幫助;或聯繫 Open Projects Network。 LISC維護著一些 IRC頻道, 在那裡你可以獲得幫助。)

3. 學會如何使用WWW和寫HTML

黑客文化建造的大多東西都在你看不見的地方發揮著作用,幫助工廠、辦公室和大學正常運轉, 表面上很難看到它對非黑客的普通人的生活的影響。Web是一個大大的例外。 即便政客也同意,這個巨大耀眼的黑客玩具正在改變整個世界。 單是這個原因(還有許多其它的),你就需要學習掌握Web。

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

但僅僅擁有一個主頁不能使你成為一名黑客。 Web里充滿了各種網頁。大多數是毫無意義的,零信息量垃圾——界面時髦的垃圾, 注意,垃圾的水準都類似(更多信息訪問 The HTML Hell Page)。

要想有價值,你的網頁必須有內容—— 它必須有趣或對其它黑客有幫助。這是下一個話題所涉及的……

4. 如果你不懂實用性的英語,學習吧。

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

這一點千真萬確。大概1991年的時候我就了解到許多黑客在技術討論中使用英語,甚至當他們的母語都 相同,英語對他們而言只是第二語言的時候;據我知道的報導,當前英語有著比其他語言豐富得多的技術辭彙, 因此是一個對於工作來說相當好的工具。 基於類似的原因,英文技術書籍的翻譯通常不令人滿意(如果有翻譯的話)。

Linus Torvalds,一個芬蘭人,用英語注釋他的代碼(很明顯這對他來說不是湊巧)。 他流利的英語成為他能夠管理全球範圍的Linux開發人員社區的重要因素。 這是一個值得學習的例子。

黑客文化中的地位

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

相應地,當你在玩黑客遊戲時,你得認識到你的分數主要靠其他黑客對你的技術的評價給出 (這就是為什麼只有在其它黑客稱你為黑客時,你才算得上是一名黑客)。 這個事實常會被黑客是一項孤獨的工作這一印象所減弱;也會被另一個黑客文化的禁忌所減弱 (現在逐漸減弱但仍強大):拒絕承認自我或外部評估與一個人的動力有關係。

特別地,黑客王國被人類學家們稱為一種奉獻文化。 在這裡你不是憑藉你對別人的統治來建立地位和名望,也不是靠美貌,或擁有其他人想要的東西, 而是靠你的奉獻。尤其是奉獻你的時間,你的創造和你的技術成果。

要獲得其他黑客的尊敬,基本上有五種事情你可以干:

1. 寫開放源代碼軟體

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

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

黑客王國里最受尊敬的偶像是那些寫了大型的、好用的、具有廣泛用途的軟體, 並把它們公布出去,使得每人都在使用他軟體的人。

2. 幫助測試並調試開放源代碼軟體

黑客也尊敬那些使用、測試開放源代碼軟體的人。 在這個並非完美的世界上,我們不可避免地要花大多數的開發時間在調試階段。 這就是為什麼任何有頭腦的開放源代碼的作者都會告訴你好的beta測試員 (知道如何清楚描述出錯癥狀,很好地定位錯誤,能忍受快速發布中的bug, 並且願意使用一些簡單的診斷工具)象紅寶石一樣珍貴。 甚至他們中的一個能判斷出哪個測試階段是延長的, 哪個是令人精疲力盡的噩夢,哪個只是一個有益的小麻煩。

如果你是個新手,試著找一個你感興趣的正在開發的程序,做一個好的beta測試員。 你會自然地從幫著測試,進步到幫著抓臭蟲,到最後幫著改程序。 你會從中學到很多,並且與未來會幫你的人結下友誼。

3. 公布有用的信息

另一個好事是收集整理有用有趣的信息做成網頁或文檔如FAQ列表,且讓他們容易獲得。

主要技術FAQ的維護者受到幾乎同其他開放源代碼的作者一樣多的尊敬。

4. 幫助維護基礎設施的運轉

黑客文化(還有Internet的工程方面的發展,就此而言)是靠自願者運轉的。 要使Internet能正常工作,就要有大量枯燥的工作不得不去完成——管理mail list,新聞組,維護大型軟體庫,開發RFC和其它技術標準等等。

做這類事情的人會得到很多尊敬,因為每人都知道這些事情是十分花時間又不象編程那樣好玩。 做這些事情需要奉獻精神。

5. 為黑客文化本身服務

最後,你可以為這個文化本身做宣傳(例如,象我這樣,寫一個「如何成為黑客」的正面的教程 :-) ) (譯者:不知道Barret把它翻成中文算不算?)。 這並非一定要在你已經在這個圈子呆了很久,因以上四點中的某點而出名,有一定聲譽後才能去做。

黑客文化沒有領袖。精確地說,它確實有些文化英雄、部落長者、歷史學家和發言人。 若你在這圈內呆的夠長,你或許成為其中之一。 記住:黑客們不相信他們的部落長者的自誇的炫耀, 因此大舉追求這種名譽是危險的。與其奮力追求,不如先擺正自己的位置 等它自己到你的手中——那時則要做到謙虛和優雅。

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

同流行的迷思相反,做一名黑客並不一定要你是個書獃子。 但它確實有幫助,而且許多黑客事實上是書獃子。 做一個深居簡出的人有助於你集中精力進行十分重要的事情,如思考和編程。

因此,很多黑客都願意接受「書獃子」這個外號, 更有甚者使用更尖刻的「geek(怪人)」一詞並引以為豪—— 這是一種宣布他們獨立於主流社會的聲明方式。訪問 The Geek Page 參加更多的討論。

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

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

風格的意義

重申一下,作為一名黑客,你必須進入黑客精神之中。 當你不在計算機邊上時,你仍然有很多對黑客工作有幫助的事情可做。 它們並不能替代真正的編程(沒有什麼能),但很多黑客都那麼做, 並感到它們與黑客的本質存在某些基本的連繫。

  • 學會流暢地用母語寫作。儘管程序員不能寫好文章的錯誤看法相當普遍, 但是有令人驚訝數目的黑客(包括所有我知道的最棒的)都是不錯的作家。

  • 閱讀科幻小說。參加科幻小說討論會。(一個碰到黑客和未來會成為黑客的人的好方法)

  • 學禪,並且/或者練功習武。(精神修鍊看來是驚人相似。)

  • 練就能分析音樂的聽覺,學會鑒賞特別的音樂。學會玩某種樂器,或唱歌。

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

這些事情,你已經做的越多,你就越是天生做黑客的材料。 至於為什麼偏偏是這些事情,原因並不完全清楚, 但它們都涉及用到左-右腦能力的綜合,這似乎是關鍵所在 (黑客們既需要清晰的邏輯思維,有時又需要偏離邏輯跳出問題的表象)。

最後,還有一些要去做的事情。

  • 不要使用愚蠢的,嘩眾取寵的ID或昵稱。

  • 不要捲入Usenet(或其他地方的論壇)的罵戰。

  • 不要自稱為「cyberpunk(網路叛客)」,也不要浪費時間和那些人打交道。

  • 不要讓你寄出的Email或張貼的帖子充滿錯誤的拼寫和亂七八糟的語法。

做以上的事情,只會招來嘲笑。黑客們個個記憶超群—— 你將需要數年的時間讓他們忘記你犯下的錯誤。

網名的問題值得深思。將身份隱藏在虛假的名字後是駭客、解密者、d00dz 及其他低等生物幼稚愚蠢的行為特點。黑客不會做這些事; 他們對他們所作的感到驕傲,而且樂於人們將作品與他們的 名相聯繫。 因此, 若你現在用假名,放棄它。在黑客文化里它會令你你失敗的。

原文作者:Eric Raymond

—————————————————————————————————————————

放個廣告,老司機乘車點

幾年前讀了《黑客與畫家》這本書,我是一名塗鴉插畫師,也是一名白帽子黑客。

「傑出、優秀、正直、有底線的優秀人才,比如Hackers,他們不服從管教,不願意委身於社會大環境的潮水之中而無法辨別方向。然而,很自負的人必須培養出敏銳的感覺,及時發現周圍形式的變化,知道如何脫身。」——Paul Graham 《黑客與畫家》

我想通過此次live和大家聊聊如何系統的學習插畫與塗鴉,零基礎選手怎樣入門插畫和塗鴉,以及具有黑客精神的程序員如何從畫畫中吸收靈感。

點擊這裡上車 →_→知乎 Live - 全新的實時問答


推薦閱讀:

王琦:一個極致主義者的從零到一
當老闆問你我們的網站安全嗎?我們到底該如何回答?

TAG:黑客Hacker | 网络安全 | 互联网 |