如何成為一名黑客
作者:Eric Raymond
翻譯 waterbird [AKA]
---什麼是黑客?
Jargon File中對“黑客”一詞給出了很多個定義,大部分定義都涉及高超的程式設計技術,
強烈的解決問題和克服限制的欲望。如果你想知道如何成為一名黑客,那麼好,隻有兩
方面是重要的。(态度和技術)
長久以來,存在一個專家級程式員和網絡高手的共享文化社群,其曆史可以追溯到幾十
年前第一台分時共享的小型機和最早的ARPAnet實驗時期。 這個文化的參與者們創造了
“黑客”這個詞。 黑客們建起了Internet。黑客們使Unix作業系統成為今天這個樣子。
黑客們搭起了Usenet。黑客們讓WWW正常運轉。如果你是這個文化的一部分,如果你已
經為它作了些貢獻,而且圈内的其他人也知道你是誰并稱你為一個黑客,那麼你就是
一名黑客。
黑客精神并不僅僅局限于軟體黑客文化圈中。有些人同樣以黑客态度對待其它事情如
電子和音樂---事實上,你可以在任何較進階别的科學和藝術中發現它。軟體黑客們
識别出這些在其他領域同類并把他們也稱作黑客---有人宣稱黑客實際上是獨立于他
們工作領域的。 但在本文中,我們将注意力集中在軟體黑客的技術和态度,以及發
明了“黑客”一詞的哪個共享文化傳統之上。
另外還有一群人,他們大聲嚷嚷着自己是黑客,實際上他們卻不是。他們是一些蓄意
破壞計算機和電話系統的人(多數是青春期的少年)。真正的黑客把這些人叫做“駭
客”(cracker),并不屑與之為伍。多數真正的黑客認為駭客們是些不負責任的懶家
夥,還沒什麼大學事。專門以破壞别人安全為目的的行為并不能使你成為一名黑客,
正如拿根鐵絲能打開汽車并不能使你成為一個汽車工程師。不幸的是,很多記者和
作家往往錯把“駭客”當成黑客;這種做法激怒真正的黑客。
根本的差別是:黑客們建設,而駭客們破壞。
如果你想成為一名黑客,繼續讀下去。如果你想做一個駭客,去讀 alt.2600 新聞討論區,
并在發現你并不像自己想象的那麼聰明的時候去坐5到10次監獄。 關于駭客,我隻想
說這麼多。
---黑客的态度
黑客們解決問題,建設事物,信仰自由和雙向的幫助,人人為我, 我為人人。
要想被認為是一名黑客,你的行為必須顯示出你已經具備了這種态度。要想做的好象
你具備這種态度,你就不得不真的具備這種态度。但是如果你想靠培養黑客态度在黑
客文化中得到承認,那就大錯特錯了。因為成為具備這些特質的這種人對你自己非常
重要,有助于你學習,并給你提供源源不斷的活力。同所有有創造性的藝術一樣,成
為大師的最有效方法就是模仿大師的精神---不是僅從理智上,更要從感情上進行模仿。
So,如果你想做一名黑客,請重複以下事情直到你相信它們:
1 這世界充滿待解決的迷人問題
做一名黑客有很多樂趣,但卻是些要費很多氣力方能得到的樂趣。 這些努力需要動力。
成功的運動員從健壯體魄,挑戰自我極限中汲取動力。同樣,做黑客,你必須
要有從解決問題,磨練技術,鍛煉智力中得到基本的熱望。如果你還不是這類人又想
做黑客,你就要設法成為這樣的人。否則你會發現,你的黑客熱情會被其他誘惑無情
地吞噬掉---如金錢、性和社會上的虛名。
(同樣你必須對你自己的學習能力建立信心---相信盡管你對某問題所知不多,但如果
你一點一點地學習、試探,你最終會掌握并解決它。)
2. 一個問題不應該被解決兩次
聰明的腦瓜是寶貴的,有限的資源。當這個世界還充滿其他有待解決的有趣問題之時,
他們不應該被浪費在重新發明輪子這些事情上。 作為一名黑客,你必須相信其他黑客
的思考時間是寶貴的---是以共享資訊,解決問題并釋出結果給其他黑客幾乎是一種道
義,這樣其他人就可以去解決新問題而不是重複地對付舊問題。
(你不必認為你一定要把你的發明創造公布出去,但這樣做的黑客是赢得大家尊敬最多
的人。賣些錢來給自己養家糊口,買房買車買計算機甚至發大财和黑客價值也是相容
的,隻要你别忘記你還是個黑客。)
3. 無聊和乏味的工作是罪惡
黑客們應該從來不會被愚蠢的重複性勞動所困擾,因為當這種事情發生時就意味着他
們沒有在做隻有他們才能做的事情---解決新問題。這樣的浪費傷害每一個人。是以,
無聊和乏味的工作不僅僅是令人不舒服而已,它們是極大的犯罪。 要想做的象個黑客,
你必須完全相信這點并盡可能多地将乏味的工作自動化,不僅為你自己,也為了其他人
(尤其是其他黑客們)。
(對此有一個明顯的例外。黑客們有時也做一些重複性的枯燥工作以進行“腦力休息”,
或是為練熟了某個技巧,或是獲得一些除此無法獲得的經驗。但這是他自己的選擇---有
腦子的人不應該被迫做無聊的活兒。)
4 自由就是好
黑客們是天生的反權威主義者。任何能向你發指令的人會迫使你停止解決令你着迷的問
題,同時,按照權威的一般思路,他通常會給出一些極其愚昧的理由。是以,不論何時
何地,任何權威,隻要他壓迫你或其他黑客,就要和他鬥到底。
(這并非說任何權力都不必要。兒童需要監護,罪犯也要被看管起來。 如果服從指令得
到某種東西比起用其他方式得到它更節約時間,黑客會同意接受某種形式的權威。但這
是一個有限的、特意的交易;權力想要的那種個人服從不是你的給予,而是無條件的
服從。)
權力喜愛審查和保密。他們不信任自願的合作和資訊共享---他們隻喜歡由他們控制的
合作。是以,要想做的象個黑客,你得對審查、保密,以及使用武力或欺騙去壓迫人
們的做法有一種本能的反感和敵意。
5. 态度不能替代能力
要做一名黑客,你必須培養起這些态度。但隻具備這些态度并不能使你成為一名黑客,
就象這并不能使你成為一個運動健将和搖滾明星一樣。成為一名黑客需要花費智力,
實踐,奉獻和辛苦。
是以,你必須學會不相信态度,并尊重各種各樣的能力。黑客們不會為那些故意裝模
做樣的人浪費時間,但他們卻非常尊重能力---尤其是做黑客的能力,不過任何能力
總歸是好的。具備很少人才能掌握的技術方面的能力尤其為好,而具備那些涉及腦力、
技巧和聚精會神的能力為最好。
如果你尊敬能力,你會享受提高自己能力的樂趣---辛苦的工作和奉獻會變成一種高度
娛樂而非賤役。 要想成為一名黑客,這一點非常重要。
---基本黑客技術
黑客态度是重要的,但技術更加重要。态度無法替代技術,在你被别的黑客稱為黑客之
前,有一套基本的技術你必須掌握。 這套基本技術随着新技術的出現和老技術的過時
也随時間在緩慢改變。例如,過去包括使用機器碼程式設計,而知道最近才包括了HTML語
言。但現在明顯包括以下技術:
1 學習如何程式設計
這當然是最基本的黑客技術。如果你還不會任何計算機語言,我建議你從Python開始。
它設計清晰,文檔齊全,對初學者很合适。盡管是一門很好的初級語言,它不僅僅隻
是個玩具。它非常強大,靈活,也适合做大型項目。
但是記住,如果你隻會一門語言,你将不會達到黑客所要求的技術水準,甚至也不能
達到一個普通程式員的水準---你需要學會如何以一個通用的方法思考程式設計問題,獨立
于任何語言。要做一名真正的黑客,你需要學會如何在幾天内通過一些手冊,結合你
現在所知,迅速掌握一門新語言。這意味着你應該學會幾種不同的語言。
如果要做一些重要的程式設計,你将不得不學習C語言,Unix的核心語言。其他對黑客而言比
較重要的語言包括Perl和LISP。 Perl很實用,值得一學;它被廣泛用于活動網頁和系
統管理,是以即便你從不用Perl寫程式,至少也應該能讀懂它。 LISP 值得學習是因
為當你最終掌握了它你會得到豐富的經驗;這些經驗使你在以後的日子裡成為一個更好
的程式員,即使你實際上可能很少使用LISP本身。
當然,實際上你最好四種都會。 (Python, C, Perl, and LISP). 除了是最重要的四種
基本語言,它們還代表了四種非常不同的程式設計方法,每種都會讓你受益非淺。
這裡我無法完整地教會你如何程式設計---這是個複雜的活兒。但我可以告訴你,書本和課程
也不能作到。幾乎所有最好的黑客都是自學成材的。真正能起作用的就是去親自讀代碼
和寫代碼。
學習如何程式設計就象學習用自然語言寫作一樣。最好的做法是讀一些大師的名著,試着自
己寫點東西,再讀些,再寫點,又讀些,又寫點....如此往複,直到你達到自己在範文
中看到的簡潔和力量。
過去找到好的代碼去讀是困難的,因為很少有大型程式的可用源代碼能讓新手練手。這
種狀況已經得到了很大的改善;現在有很多可用的開放源碼軟體,程式設計工具和作業系統
(全都有黑客寫成)。這使我們自然地來到第二個話題...
2 得到一個開放源碼的Unix并學會使用、運作它
我假設你已經擁有了一台個人計算機或者有一個可用的( 今天的孩子們真幸福 :-) )。
新手們最基本的一步就是得到一份Linux或BSD-Unix,安裝在個人計算機上,并運作它。
當然,這世界上除了Unix還有其他作業系統。但它們都是以二進制形式發送的---你無法
讀到它的源碼,更不可能修改它。嘗試在DOS或Windows的機器上學習黑客技術,就象是
在腿上綁了鐵塊去學跳舞。
除此之外,Unix還是Internet的作業系統。你可以不知道Unix而學會用Internet,但不懂
它你就無法成為一名Internet黑客。因為這個原因,今天的黑客文化在很大程度上是以
Unix為中心的。(這點并不總是真的,一些很早的黑客對此很不高興,但Unix和Internet
之間的共生關系已是如此之強,甚至連微軟也無可奈何)
So,裝一個Unix---我個人喜歡Linux,不過也有其他選擇。(你也可以在同一台機器上同
時運作DOS,Windows和Linux)學會它。運作它。用它跟Internet對話。讀它的代碼。試着
去修改他。你會得到比微軟作業系統上好的多的程式設計工具(包括C,Lisp, Python, and
Perl),你會得到樂趣,并将學到比你想象的更多知識。
關于學習Unix的更多資訊,請看 The Loginataka.
要得到Linux,請看: 哪裡能得到 Linux.
3 學會如何使用WWW和寫HTML
大多黑客文化建造的東西都在你看不見的地方發揮着作用,幫助工廠、辦公室和大學正
常運轉,表面上很難看到它對他人的生活的影響。Web是一個大大的例外。即便政客也同
意,這個巨大而耀眼的黑客玩具正在改變整個世界。單是這個原因(還有許多其它的)
, 你就需要學習如何掌握Web。
這并不是僅僅意味着如何使用浏覽器(誰都會),而是要學會如何寫HTML,Web的标記語
言。如果你不會程式設計,寫HTML會教你一些有助于學習的思考習慣。是以,先建起自己的主
頁。
但僅僅建一個首頁也不能使你成為一名黑客。 Web裡充滿了各種網頁。多數是無意義的,
零資訊量垃圾。
要想有價值,你的網頁必須有内容---必須有趣或對其它黑客有用。這樣,我們來到下一
個話題....
---黑客文化中的地位
象大部分不涉及金錢的文化一樣,黑客王國的運轉靠聲譽維護。你設法解決有趣的問題,
但它們到底多有趣,你的解法有多好,是要有那些和你具有同樣技術水準的人或比你更
牛的人去評判的。
相應地,當你在玩黑客遊戲時,你知道,你的分數要靠其他黑客對你的技術的評估給出。
(這就是為什麼隻有在其它黑客稱你為黑客是,你才算得上是一名黑客)這個事實常會被
黑客是一項孤獨的工作這一印象所減弱;它也會被另一個黑客文化的禁忌所減弱(此禁忌
的效力正在減弱但仍很強大):拒絕承認自我或外部評估是一個人的動力。
特别地,黑客王國被人類學家們稱為一種精英文化。在這裡你不是憑借你對别人的統治來
建立地位和名望,也不是靠美貌,或擁有其他人想要的東西,而是靠你的奉獻。尤其是奉
獻你的時間,你的才智和你的技術成果。
要獲得其他黑客的尊敬,你可以做以下五種事情:
1. 寫開放源碼的軟體
第一個(也是最基本和傳統的)是寫些被其他黑客認為有趣或有用的程式,并把程式的原
代碼公布給大家共享。
(過去我們稱之為“自由軟體-free software”,但這卻使很多不知free的精确含義的人
感到不解。現在我們很多人使用“開放源碼-open source”這個詞)
黑客王國裡最受尊敬的大牛們是那些寫了大型的、具有廣泛用途的軟體,并把它們公布出
去,使每人都在使用他的軟體的人。
2. 幫助測試并修改開放源碼的軟體
黑客們也尊敬也那些使用、測試開放源碼軟體的人。在這個并非完美的世界上,我們不可
避免地要花大量軟體開發的時間在測試和抓臭蟲階段。 這就是為什麼任何開放源碼的作
者稍加思考後都會告訴你好的beta測試員象紅寶石一樣珍貴。 (他知道如何清楚描述出錯
症狀,很好地定位錯誤,能忍受快速釋出的軟體中的bug,願意使用一些簡單的診斷工具)
甚至他們中的一個能判斷出哪個測試階段是延長的、令人精疲力盡的噩夢,哪個隻是一
個有益健康的玩意兒。
如果你是個新手,試着找一個趕興趣的正在開發的程式,作一個好的beta測試員。從幫着
測試,到幫着抓臭蟲,到最後幫着改程式,你會不斷進步。以後你寫程式時,會有别人來
幫你,你就得到了你當初善舉的回報。
3. 公布有用的資訊
另一個好事是收集整理網頁上有用有趣的資訊或文檔如FAQ。許多主要FAQ的維護者和其他
開放源碼的作者一樣受到大家的尊敬。
4. 幫助維護基礎設施的運轉
黑客文化是靠自願者運轉的。要使Internet能正常工作,就要有大量枯燥的工作不得不去
完成----管理mail list,newsgroup,維護大量文檔,開發RFC和其它技術标準等等。做
這類事情的人會得到很多人的尊敬,因為每人都知道這些事情是耗時耗力的苦役,不象編
碼那樣好玩。做這些事情需要毅力。
5. 為黑客文化本身服務
最後,你可以為這個文化本身服務(例如象我這樣,寫一個“如何成為黑客”的初級教程
:-- )(hehe,象我這樣把它翻成中文 :-) ) 這并非一定要在你已經在這裡呆了很久,
精通所有以上4點,獲得一定聲譽後後才能去做。
黑客文化沒有領袖。精确地說,它确實有些文化英雄和部落長者和曆史學家和發言人。若
你在這圈内呆的夠長,你或許成為其中之一。
記住:黑客們不相信他們的部落長者的自誇的炫耀,是以很明顯地去追求這種名譽是危險
的。你必須具備基本的謙虛和優雅。
---黑客和怪人(Nerd)的聯系
同流行的傳說相反,做一名黑客并不一定要你是個怪人。然而,很多黑客都是怪人。做一
個出世者有助于你集中精力進行更重要的事情,如思考和程式設計。
是以,很多黑客都願意接受“怪人”這個标簽,更有甚者願意使用“傻子(geek)”一詞并
自以為豪---這是宣布他們與主流社會不合作的聲明。
如果你能集中足夠的精力來做好黑客同時還能有正常的生活,這很好。今天作到這一點比
我在1970年代是個新手是要容易的多。今天主流文化對技術怪人要友善的多。甚至有更多
的人意識到黑客通常更富愛心,是塊很好的做戀人和配偶的材料。 更多資訊見 Girl's
Guide to Geek Guys.
如果你因為生活上不如意而為做黑客而吸引,那也沒什麼---至少你不會分神了。或許以
後你會找到自己的另一半。
---風格的意義
重申一下,做一名黑客,你必須進入黑客精神之中。當你不在計算機邊上時,你仍然有很
多事情可做。它們并不能替代真正的程式設計(沒有什麼能替代程式設計),但很多黑客都那麼做
,并感到它們與黑客精神存在一種本質的關聯。
閱讀科幻小說。參加科幻小說讨論會。(一個很好的尋找黑客的場合)
研究禅宗,或練功習武。
練就一雙精确的耳朵,學會鑒賞特别的音樂。學會玩某種樂器,或唱歌。
提高對雙關語的鑒賞。
學會流暢地用母語寫作。(令人驚訝的時,我所知道的所有最棒的黑客,都是很不錯的作
家)
這些事情,你做的越多,你就越适合做黑客。至于為什麼偏偏是這些事情,原因并不很清
楚,但它們都涉及到了左-右腦的綜合技巧,這似乎是關鍵所在。(黑客們既需要清晰的
邏輯思維,有時也需要強烈的跳出邏輯之外的直覺)
最後,還有一些不要去做的事情。
不要使用愚蠢的,過于嘩衆取寵的ID
不要自稱為網絡崩客(punk) ,也不要對那些人浪費時間
不要寄出充滿拼寫和文法錯誤的email,或張貼錯誤百出的文章
做以上的事情,會使大大損害你的聲譽。黑客們個個記憶超群---你将需要數年的時間讓他們
忘記你的愚蠢。
---其它資源
Peter Seebach為那些不知如何同黑客打交道的經理們維護了一個非常精彩的黑客FAQ。
The Loginataka 有許多關于如何正确培養一個Unix黑客的态度的材料。
我也曾寫過一篇“黑客文化簡史”。
我還寫過另一篇文章,“大教堂與集市”,解釋了許多Linux和開放源碼文化的運做原理
。我還在它的續集“開拓智域”一文中有更直接的論述。
---FAQ(常問問題解答)
問:你會教我如何做黑客嗎?
自從第一次釋出此頁,我每周都會得到一些請求,要我“教會他如何做黑客”;遺憾的
是,我沒有足夠的時間和精力來做這個;我自己的程式設計項目已經占用了我110%的時間。
甚至即便我想教你也不可能,黑客基本上是一項需要你自行修煉的的态度和技術。你會
發現即使真正的黑客想幫助你,如果你乞求他們填鴨一樣教你的話,你不會赢得他們的
尊敬。首先去學習。顯示你在嘗試,你能靠自己去學習。然後再去向黑客們請教問題。
問:你會幫我“黑”掉一個站點嗎?或者教我怎麼黑它?
No. 任何在讀完FAQ後還問此問題人,都是愚不可及的家夥,即使有時間我也不會理睬。
任何發給我的此類mail都會被忽略或被痛斥。
問:哪裡能找到真正的可以與之交流的黑客?
最佳辦法是就近參加一個Unix或Linux的使用者組,參加他們的會議。
問:我該先學哪種語言?
HTML, 如果你還不會的話.
但它不是一個真正的程式設計語言。當你準備程式設計時,我建議你從 Python開始. 會有很多人
向你推薦Perl,它比Python還受歡迎,但卻難學一些。
C 是非常重要的,但它卻是最難學的。不要一開始就嘗試學C。
問:開放源碼的自由軟體不會使程式員餓肚子嗎?
這似乎不大可能---到目前,開放源碼軟體産業創造了而不是消滅了大量工作機會。
如果寫一個程式比不寫一個程式隻是個純粹經濟上的收益的話,無論它是否免費,隻要
它被完成,程式員都會從中得到回報。而且,無論軟體是由多麼的free的方法開發的,
對更新的軟體應用的需求總是會有的。
問:我從何學起?哪裡有免費的Unix?
本頁的其他地方指向最常用的免費Unix。要做一名黑客,你需要自立自強,以及自我教
育的能力。
現在開始吧......