如何成為一名黑客 How To Become A Hacker

junecau發表於2011-03-19

 

 

 

  如何成為一名黑客 How To Become A Hacker 收藏
1.為什麼會有這篇文章?

作為 Jargon File (行話文章)的編輯和一些其他有名的類似性質文章的作者,我經常收到充滿熱情的網路新手的 email 提問(確實如此)“我如何才能成為一名出色的黑客?”非常奇怪的是似乎沒有任何的 FAQ 或者 Web 形式的文章來說明這個十分重要的問題,因此我寫了一篇。

如果你現在讀的是這篇文章的離線拷貝,那麼請注意當前最新版本(英文版)可以在http://www.tuxedo.org/~esr/faqs/hacker-howto.html 得到。

注意:在這份文件最後有 FAQ(常見問題解答)。請在向我提出任何關於這份文件的疑問之前讀兩遍。

目前這份文件有很多翻譯版本: 保加利亞語, 簡體中文, 繁體中文, 丹麥語, 荷蘭語, 法語, 德語, 匈牙利語, 印尼語, 日語, 朝鮮語,葡萄牙語, 俄語及瑞典語。注意由於這份文件時有修正,所以以上翻譯版本可能有不同程度的過時。

2.什麼是黑客?

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

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

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

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

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

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

3.黑客應有的態度

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

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

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

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站點可能是 http://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並學會使用、執行它。

我假設你已經擁有或者能使用一臺個人電腦(今天的孩子們真幸福 Smile )。新手們能夠朝學習黑客技能邁出的最基本的一步就是得到一份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.為黑客文化本身服務

 
發表於 @ 2008年01月05日 08:34:00 | 評論( 13 ) | 編輯| 舉報| 收藏

舊一篇:經典轉載:學習Linux的九條忠告 | 新一篇:一個偉大的開源軟體開發者

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/tianyiyang/archive/2008/01/05/2026312.aspx

相關文章