How to be a hacker
英文原文來自http://www.catb.org/~esr/faqs/hacker-howto.html,How To Become A Hacker,作者是埃里克·斯蒂芬·雷蒙(Eric Steven Raymond),著名的《Unix編程藝術》就出自他手,他的一句話對開源運動有很大影響——“足夠多的眼睛,就可讓所有問題浮現”(given enough eyeballs, all bugs are shallow),這句話也被稱作林納斯定律。
下面是譯文部分。
?
為什么寫這篇文章?
作為Jargon File的編輯和一些其他類似的知名文檔的作者,我經常收到來自熱情的網絡新手們的電子郵件請教:我如何才能學著成為一名神奇的黑客?早在1996年,我就注意到似乎沒有任何FAQ或web文檔能解決這個至關重要的問題,因此我開始了這篇文章。?
如果你正離線瀏覽這篇文章的快照,你可以在這個鏈接上得到文章當前的最新版本:http://catb.org/~esr/faqs/hacker-howto.html。
?
黑客是什么?
Jargon File有一堆“黑客”的定義,大多數是說技術熟練、解決問題的快感和克服阻礙等。如果你想知道如何成為一名黑客,只有兩件事是真的相關的。
最早的黑客是那些最初使用微電腦和阿帕網實驗的專業程序員及網絡專才。黑客們創建了Internet,黑客們開發出了Unix操作系統,黑客們打造了萬維網。如果你是他們的一部分,如果你對這個文化有所貢獻,并且這個文化中有人認識你,并叫你黑客,那么你就是一名黑客。
黑客并不局限于軟件黑客,黑客是一種態度,在其他領域我們也能見到黑客的身影,像電子學,音樂。軟件黑客認識到這種同類的精神到處都有,并也稱他們為黑客。雖然如此, 但接下來我們還是只關注軟件黑客們的技能和態度。
有一群人高呼他們自己是黑客,可實際上差得遠。這些人(主要是處于青春期的男孩們)為侵入電腦和盜用電話系統感到愉快。可真正的黑客叫他們“破壞者(crackers)”,并不認同他們是黑客,相反認為他們是懶惰的、不負責任的、不是很優秀的,破壞安全并不能使你成為黑客,就像用鐵線來偷車的人并不被稱作汽車工程師一樣。不幸的是,很多記者和作家被騙用黑客來稱呼那些破壞者們,這一直讓真正的黑客很惱怒。
最基本的不同是:hacker,創造,而cracker,破壞。
?
?
黑客的態度
1. 世界充滿了迷人的問題等待人們來解決
2. 沒有要必須解決兩次的問題
3. 單調乏味是惡魔
4. 自由無價
5. 態度不代表能力
?
黑客解決問題并創建新事物,他們信仰自由和自愿的互助。如果你想成為黑客,就要具備這些,并相信這些。
?
但是如果把刻意去培養這些態度當成成為黑客的方法,那你還是差點。只有去相信它才是最重要的。說白點,就是還要從精神上塑造。正如下面這首禪詩所說:
?
? ? 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.?態度不代表能力
要成為一名黑客,你必須要養成這些態度中的一些。但是只是獲得一種態度并不能使你成為一個黑客,如同并不能使你成為一名冠軍運動員和搖滾巨星一樣。成為一名黑客需要才智,實干,付出和努力。
因此,你要學會不去信任態度,而是尊重每一種能力。黑客不會讓難題浪費他們的時間,但他們崇拜能力——尤其是黑客能力,但是任何能力都是有價值的。掌握很少有人能掌握的技能是好的,如果這些技能包括對內心的震動,打磨和濃縮就是最好的。
?
? ? ? ? ??
?
黑客的基本技能
?
1. 學會如何編程
2. 獲得一個開源的Unix并學會使用和運行它
3. 學會如何使用WWW并且寫HTML
4. 如果你不會實用的英語,去學會它
?
黑客態度是至關重要的,但是技能更重要。態度代替不了技能,在你被任何黑客稱為黑客之前,有一些基本的技能需要你去擁有。
?
這些技能隨著時間會慢慢改變,因為技術會創造新的技能,而淘汰舊的。例如,過去需要用機器語言編程,直到今天有了HTML就不需要了。但是現在很清楚需要以下技能:
?
1. 學會如何編程
當然這是基本的黑客技能。如果你不懂得計算機語言,我建議從Python學起。設計簡介,文檔詳實,適合初學者。盡管它是一個好的第一語言,但它不只是一個玩具;它很有力量,而且靈活,適合大的工程。我寫了一個更詳細的Python的評估。在?Python web site?上有好的教程。在?Computer Science Circles?上有個優秀的第三方的教程。
?
我過去建議把java當成一門初學的好語言,但是這個批判改變了我的主意(搜索“The Pitfalls of Java as a First Programming Language”)。黑客不能強有力地把java當成解決問題的有效工具;你必須知道它如何實際工作。現在我認為最好從C和Lisp學起,而不是java。
?
這里有一個更普遍的觀點。如果一門語言代替你做了太多事,它是一個好的工具同時卻不是一個適合學習的語言。不只是語言有這種問題;web app framework,像RubyOnRails,CakePHP,Django,很容易去得到膚淺的理解,給你帶來簡單的解決方法,但是當你去解決難題甚至是debug都缺少應有的資源。
?
如果你陷入高深的編程,你就要學習C,它是Unix的核心語言。C++跟C很相近;所以如果你了解其中一個,學習另一個也不是難事。然而這兩個中沒有哪個對你首次學習語言來說是好的,容易的。實際上,你避免用C編程的越多,你就會越有效率。
?
C很有效率,也很會節省機器資源。但不幸的是,為了得到效率C要求你手動做很多底層的資源管理(如內存)。所有的底層代碼都是復雜的,容易導致bug,將會耗費你大量的時間在debug上。隨著今天的機器越來越強大,通常有一個壞的tradeoff——有效地使用一門使用機器時間很少的語言是更聰明的,這時你的時間就會更有效率,就像Python。
?
還有Perl和LISP對黑客也有實際的重要性。如果用于實踐,Perl很值得去學習;它被廣泛用于動態網頁和系統管理,因此即使你從不使用Perl你也應當學會讀它。很多用Perl的人都是出于這樣的目的的,這樣就可以在不需要C的機器效率的工作上避免使用C編程。你需要能夠理解他們的代碼。
?
LISP值得學習是出于另一種目的——當你最后掌握它時你會獲得深刻的啟迪和經驗。這種經驗會使你在剩下的日子里成為一個更好的程序員,即使你實際上并不常使用LISP。(如果你想早早地得到一些LISP的初始經驗,可以去編寫或修改Emacs文本編輯器的編輯模式,或者GIMP的Script-Fu插件。)
?
實際上最好要全部學會這五種語言,Python,C/C++,Java,Perl和LISP。除了成為最重要的hacking語言,它們代表著五種不同的編程方法,每一種都會對你有價值。
?
你需要學習如何用一般的方法去思考編程問題,否則你就不會達到擁有這些技能的黑客水平或者只是一個在簡單疊加語言的程序員。你可以學習語言的特征—— 從書中學習知識,但是只有通過實踐和工作才能把那些知識轉化成生存的技能。就通過讀代碼和寫代碼來去做吧。
?
Peter Norvig,是谷歌頂級黑客之一,同時是AI方向里使用最廣泛的教科書的合作作者, 寫過很多優秀的文章如Teach Yourself Programming in Ten Years。他編程成功的秘訣值得好好學習。
?
學習編程就如同學習寫好的自然語言一樣。最好的方式就是讀高手寫的東西,自己去寫一些東西,先讀很多,嘗試去寫一些,再讀很多,再多寫一些...就這樣去重復,直到你可以寫出強大而簡潔的東西。
?
關于這個學習過程我在How To Learn Hacking?中已經說得很詳細了。雖然說得簡單,但實際上并不容易。
?
?
2.?獲得一個開源的Unix并學會使用和運行它
我認為你有一臺電腦并且可以使用它。(先花點時間感激一下那意味著什么。黑客文化起源的時候,個人電腦很貴,以致于個人不能擁有它們。)一個菜鳥要獲得黑客技能最重要的單個步驟就是獲得一份Llinux或一種BSD-Unix的拷貝,把它安裝到PC上,運行它。
?
是的,這個世界上除了Unix還有其他的操作系統。但是它們都是以二進制形式發布的——你讀不到源碼,更不能去修改它。嘗試去學著hack一個跑windows或其他閉源操作系統的機器就像嘗試去學穿著模子在跳舞一樣。
?
(未完待續)
?
總結
以上是生活随笔為你收集整理的How to be a hacker的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库 中的 事物
- 下一篇: 如何解压tar.xz文件