◇ [howto] 如何成為一位 hacker


發信人: Thinker.bbs@bbs.yzu.edu.tw (我狂 我笑 我傲 *), 看板: 386BSD 標 題: [轉錄][howto] How to Become a Hacker - big5 發信站: 元智大學風之塔 (Mon Sep 22 11:08:29 1997) 轉信站: fromzero!netnews.ntu!spring!News.csie.ncu!news.ncu!ice.yzit!bbs.yzu 如何成為一位 hacker 這真是一個好問題, 不止是原作者說他被問過很多次, 包括我和許多網路上的 朋友們也常有這個困擾. 不過和作者不同的是, 我經常沒有一個固定的答案 :p 事實上我所能提供也只是自己的經驗, 卻沒有足夠的能力來肯定自己的看法是 不是正確的. 這份文章應該可以減去大家不少的麻煩 :) 嗯!! 這次自告奮勇當起翻譯, 雖然是起於晚上回到住的地方之後很無聊, 可以用 來打發時間. 不過我翻了百行之後, 越翻越後悔. 主要是因為堶惘酗@些句子實 在很難翻譯, 這大概是因為我的英文底子不太好的關係吧!! 好不容易, 終於是 翻完了. 為讓句子更通順或者是個人誤解, 翻譯後和原文有些出入, 這方面還請 各位大大見諒. :-) Thinker -------------------------------------------------------------------------- 如何成為一位 hacker 為何有這份文件? 身為 Jargon File 的編輯, 常有一些網路新手發 mail 問我 "如何成為一個厲害的 hacker?". 但, 很奇怪的, 似乎沒有任何的 FAQs 或 Web documents 說明這麼重要 的問題, 所以我寫了一份我自己的看法. 如果你是以 offline 的方式在看這一份文件的某一個版本, 那麼你可以在 "http://www.ccil.org/~esr/faqs/hacker-howto.html" 找到這份文件的目前最新版本. 怎麼樣才算是一位 Hacker ?? 在 Jargon File 埵酗@堆關於 `hacker' 這個名詞的定義, 大部份必須是技術上的 行家或熱衷於解決問題, 克服限制的人. 然而, 如果你想知道如何成為一位 hacker, 有兩件事是很有關連的. 這可以追溯到幾十年前第一台 minicomputer 剛誕生, ARPAnet 實驗也剛展開的 時代. 那時有一個由程式設計專家和網路名人所組成的, 具有分享特質的文化族群. 這種文化堛漲身創造了 `hacker' 這個名詞. 這些 Hacker 建立了 Internet, 創造出我們現在使用的 UNIX 作業系統, 他們也使 Usenet 運作起來, 並且讓 World Wide Web 動起來. 如果你是這個文化的一部分, 如果你對這些種種有所供獻, 而且 這個文化堛漕銗戌身也認識你, 並稱你為 hacker, 那麼你就是一位 hacker. 在精神上, hacker 並不單指(限制於)這種軟體 hacker 的文化. 有人也把 hacker 的特質發揮在其它領域, 例如: 電子或者音樂方面. 事實上你會發現, 在任何一種 科學或藝術的最高境界, 你都可以發現 hacker 的特質. 軟體 hacker 們認為, 那些類似的精神也都可以稱為 "hacker". 有些人還主張 hacker 的通性是獨立於任何 媒介之上的, 不特別屬於任何一種 hacker 所在的環境. 但是, 在這份文件, 我們將把重點放在軟體 hacker 們所需的技能、態度和發明 `hacker' 這個詞的分享 文化的傳統. 在另一個團體, 他們的成員也很大聲的稱自己為 hacker, 但是他們不是真的 hacker. 這些人(大部分是男性青年)專門闖入電腦和入侵電話系統, 真正的 hacker 們稱他 們為 `cracker', 並且不願意和他們在一些做任何事. hacker 們認為這些人都是懶 惰, 不負責, 並且不夠光明正大的, 並且認為能破解安全系統並不能使你成為一位 hacker. 但是很不幸的, 很多記者和作家不明究理的使用 `hacker' 這個字來描述 cracker 們; 這讓真的 hacker 們很忿怒. 基本上, hacker 和 cracker 之間最主要的不同是: hacker 們創造新東西, cracker 們破壞東西. 如果你想要成為一位 hacker, 繼續讀下去吧. 如果你是想要成為一位 cracker, 那麼 就去讀 alt.2600 newsgroup 並準備在你發現自己並不如想像中那麼行時, 給自己一 點評價. 所有關於 cracker 的事情就只有這些了. Hacker 態度 Hacker 們解決了問題並創造新東西, 他們相信自由並自願的互相幫助. 想要被別人 接受成為一位 hacker, 你必須發自內心的表現出這種態度. 為了要很自發的表現出 這種態度, 你就必須先完全認同這些態度. 如果你只是把學習 hacker 態度這件事當作一種能在這個文化媊僚o認同的途徑, 那麼你己經乎略了真正的重點. 由衷的接受這些態度是很這要的, 這能幫 助你學習並維持你的動機. 就像那些具創造性的藝術一樣, 成為一位大師的最有效 方法是學習大師們的精神; 並不只是學習知識和情緒而己. 所以, 如果你想要成為一位 hacker, 請反復的做下面的事情, 直到你完全領會它們: 1. 這世上充滿著等著被解決的迷人問題. 作為一個 hacker 是充滿快樂的, 但這是一種因為努力得到成果所帶來的快樂. 努 力的成果則帶來動機. 成功的運動家的動機則來自於, 使他們的身體不斷進化, 並把自己推向物理上的極限所帶來的快樂. 類似的情形, 要成為 hacker, 你必須 要能從解決問題, 精進技術, 和運用知識的過程中感受到一種悸動. 如果你不是天生就能感受到這種悸動的人, 那麼, 為了要成為 hacker, 你必須使自己 變成這樣的人. 否則, 你會發現你的 hacking energy 就會像性, 金錢, 和社交活動 一樣, 因為分心而被消磨掉. (你也必須為你的學習能力建立一種信念直到你完成你的工作 -- 即使你只處理一小 部份, 而你也不知道你到底還要學些什麼東西才有辨法解決你的問題, 但是你會努力 學習, 準備充足, 以應付下一個問題.) 2. 沒有任何人必須一再的解決同一個問題. 富創造力的頭腦是貴重而有限的資源. 有這麼多迷人的新問題在那等著被解決. 因此富創造力的頭腦不該被浪費的用來重複發明輪子. 身為一位 hacker, 你必須了解到其它 hacker 們的時間也是很寶貴的 -- 所以, 分享資訊, 解決問題和提供解決方案給其它 hacker 以解決新的問題, 這些幾乎算是 道義上的責任. ( 即使 hacker 們所擁有的大多是從其它 hacker 的身上得來的, 但這並不意謂你 必需把你創造的作品全部交出來, 你可以賣出足夠數量的產品, 以求得溫飽, 給付 房租和買電腦設備, 這和 hacker 的價值觀並不相違背. 使用你的 hacking 技能 以供給一個家庭的生活, 甚至是致富, 只要你仍不忘記你是一位 hacker, 那麼這些 行為並不會產生予盾. ) 3. 無聊而單調的工作是有害的. Hacker 們(有創造力的人也是一樣)永遠不該做一些無聊而單調並且愚蠢的反復性 工作. 因為, 如果這樣的事情發生的話, 這表示他們正在做一些不是他們該做的事 -- 解決新的問題. 這樣的浪費對任何人而言都是一種傷害. 無聊單調的工作不只是 無趣而己, 而且是一種有害的物質. 要做為一位 hacker 要能盡可能的自動避免無聊, 對此你必須有相當的認知. 這不只是 為了你自己而已, 也是為了所有的人(尤其是其它的 hacker). (這埵酗@些例外. 有時侯 hacker 們會去做一些被認為無聊或重複性的工作, 當做 腦力的訓練, 或是為了要學習得某種技能或某種你所沒有的特殊經驗. 不過這是一 種選擇, 任何人都不該被強迫面對無聊事. ) 4. 自由才好. hacker 們天性上是反對獨裁的. 任何一個給你命令的人就能給你一個獨裁式的工作, 並且可以給你一些笨的可以的理由, 停止你解決任何吸引著你的問題. 所以任何獨裁式 的行為都會被挑戰, 以免會危害到你和其它的 hacker 們. (這和為反對而反對是不同的, 小孩子是需要被指導和阻止他們犯錯. hacker 也會同 意接受某些權威, 照著指示做以較短的時間得到他想要的. 不過那是一種有限且理性 的協定; ..... ) 專制在監察和保密這些事上是很有效的方法. 這些行使專制的人並不相信自願性質的 合作和資訊分享 -- 他們只相信在他們控制之下的合作關係. 所以, 身為一位 hacker, 你必具有一種敵對的天性, 以對抗監察, 秘密和使用外力強迫或迷惑可以信任的人等 行為. 你必須以互信做為你行為的基礎. 5. 態度並非不等效於能力 要成為一位 hacker, 你必須開始培養這些態度. 但, 如果你只是單獨的模仿某一種 態度, 這並不能使你成為一位真正的 hacker, 也不會使你成為一位運動冠軍或 搖滾明星. 因此, 你必須學會猜疑態度和尊敬各種能力. Hacker 們不會想浪費時間在虛華的人的 身上, 他們尊敬的是能力 -- 特別是身為 hacker 的能力, 但對於其它方面的能力 也是充滿敬意. 如果有能力追求一些很少人能弄懂的技術,追求精神上的技巧, 並能 集中精神, 那就再好不過了. 如果你尊敬各種的能力, 那麼你就會樂於自己發展這些能力 -- 這會使的努力工作 和奉獻成為一種剌激性的消遣而非一份苦差事. 這對於想要成為 hacker 的 人而言, 是很重要的. 一位 Hacker 所需的基本技能 hacker 的精神態度是很重要的, 但技術則更是重要. hacker 的態度雖然是無可取代, 但在夢想別的 hacker 開始也叫你 hacker 前, 有些基本的工具和技術是必備的. 隨著新科技的發明和舊技術的取代, 這些工具隨時間在慢慢的改變. 例如: 以往總是 會學會用機器碼寫程式, 直到最近我們開始使用 HTML. 不過, 在 1996 年末, 下面所舉的工具是很明顯的被需要的: 1. 學習程式設計. 當然, 這是基礎的 hacking 技能. 在 1997 年, 理所當然的, 你必須學會 C. 但, 如果你只是學一種語言, 那麼你不能算是一位 hacker, 了不起只能算是一個 programmer. 除此, 你還必須學會學會以獨立於任何程式語言之上的概括性觀念來思考 一件程式設計上的問題. 要成為一位真正的 hacker, 你必須要能在幾天之內將 manual 內容和你目前己經知道的關連起學會一種新的語言. 也就是說, 你必會學 會數個不同的語言. 還了 C 之外, 你至少還要會 LISP 或 Perl (Java 也正在努力的擠上這個名單; 譯者註: 我很懷疑這份名單說 :p ). 除了幾重要的 hacking 常用語言之外, 這些語言提供你一些不同的程式設計途徑, 並且讓你在好的方法中學習. 程式設計是一種複雜的技術, 我沒辨法在這奡ㄗ悝嗾膋瑣Е艅B驟. 但是我能告訴你 一些在書本上和課堂上所沒有的東西 (有很多, 幾乎全部最好的 hacker 們都 是自習而來的). (a) 讀別人的程式碼 和 (b) 寫程式, 這兩項是不錯的方法. 學習寫程式就像在學習寫一種良好的自然語言, 最好的方法是去看一些專家們所寫的 東西, 然後寫一些你自己的東西, 然後讀更多, 再寫更多 ... 然後一直持續, 一直到 你發展出一種屬於自己的風格和特色. 要找到好的程式碼來看是很一件很困難的事, 因為, 對菜鳥 hacker 們而言, 適於 供他們閱讀和努力的大型程式的 source 數量很少. 但這事己有了戲劇性的變化了; 現在免費的供應的軟體、程式設計工具和作業系統(大都公開提供 source, 而且 全都是由 hacker 們寫成的)到處可看. 進入下一個主題... 2. 取得一個免費的 UNIX , 並學習使用和維護. 我先假設你己經有一部個人電腦或者是可以使用任何一部 (現在的年輕人真幸福,可 如此輕易的擁有 :-)). 取得 hacker 技巧的第一個步驟是取得一份 Linux 或者一份 免費的 BSD-Unix, 並將它安裝在自己的機器, 並使之順利的運作. 沒錯, 在這個世界上除了 Unix 之外, 還有其它的作業系統. 但是他們只提供 bianry, 你不能看到他們的程式碼, 你也不能修改他們. 想要在 DOS 或 Windows 或 MacOS 開始 hacking, 無疑就是要你綁著枷鎖跳舞一樣. 除此之外, Unix 是 Internet 上的作業系統. 當你在不懂 Unix 的情況下學習使用 Internet 時, 你沒辨法在不懂 Unix 的情況下成為 Internet 的 hacker. 因為這 個原故, 現在的 hacker 文化還是很牢固的以 Unix 為中心繞著. (這並不完全是 正確的, 而且有些活在舊時代的 hacker 甚至也不喜歡這種情形, 但是 Unix 和 Internet 之間的共生共成己經到了牢不可破的地步, 即使是 Microsoft 的大塊肌肉 也沒能在上面留下明顯的傷痕.) 因些, 把 Unix 裝起來吧! (我自己是喜歡 Linux, 但是還有其它的東東可用.) 學習 它, 讓它運作起來, 讓它陪你努力精進. 用他向整個 Internet 喊話. 看程式碼, 改程式. 有一天你成為一位高竿的 hacker, 你回頭往後看時會發現, 你得到比 Microsoft 作業系統所能提供的還要好的程式設計工具(包括 C, Lisp和 Perl). 而且得到快樂, 並學到比你想像中的還要多的知識. 關於學習 Unix, 在 Loginataka 有更多的資料. (http://www.ccil.org/~esr/faqs/loginataka.html) 看一下 Linux distribution 的目錄或 Linux CD, 並把自己交付給它. 3. 學習使用 World Wide Web 並學會寫 HTML. 在 hacker 文化堻迣y出來的東西, 大多在他們的活動範圍外被使用著, 如, 在 工廠和辨公室或大學堻Q漠漠的使用著. 但 Web 是一個很大的例外, 這個 hacker 眼中 的大玩具甚至還被政客們接受, 並巧巧的在改變這個世界. 因此(還有很多好的理由), 你必須學習 Web. 並不只是學習使用 browser (這太容易了)而己, 還要學會寫 HTML 這個 Web 的 標籤語言. 如果你不知道如何設計程式, 寫 HTML 也可以給一些習慣上的幫助. 嗯!! 建立 home page 吧! 不過, 有一個 home page 並沒任何特別之處能讓你成為一位 hacker. Web 上到處 都是 home page, 而且大部份都沒什麼重點, 沒什麼內容的爛泥 -- 很好看的爛泥巴, 但是看起來都一樣, 差不多. (http://www.ccil.org/~esr/html-hell.html) 為了讓你的 page 有其價值, 它必須是有內容的東西 -- 它必須是有趣並且(或者) 對其它 hacker 有用處的. Hacker 文化的狀況 就像大多數沒有經濟活動的文化一樣, hackerdom 的運作是建立在名望之上. 當你嘗試 去解決一個有趣的問題時, 你所做事是否有趣, 你的解決方案是不是真的好用, 這些只 有你的技術上的同好或前輩準備好為你做評價. 因此, 當你開始玩起 hacker 的遊戲時, 你的主要分數是來自其它 hacker 們對你的技 術的看法(這就是為什麼只當其它的 hacker 都認為你是 hacker 時, 你才算是一位真正 的 hacker). 這個事實被人們認為 hacking 是一種孤獨的工作的印象所朦敝了; 也被 hacker 文化的禁忌(現在己漸漸的朽壞了, 但依然存在) 和存在人們內心動機堛漲菑j 或特權之間的衝突所朦敝. 具體的說, hackerdom 就是人類學家所說的「天才文化」.你在其中所得到的地位和名望 並不來自於支配其它人, 或是因為長的漂亮, 或因為你有一些別人想要的東西, 而是因 為你送出東西. 特別是, 你給送出你的時間,你的創造力和你的技術成果. 下面有五種事, 你會因為做了這些事而愛到 hacker 們尊敬: 1. 寫免費的軟體. 第一種是寫那些其它 hacker 們覺的有趣或好用的程式, 並把 source 公開開放給整 個 hacker 文化中的人使用. hackerdom 最愛尊敬的是寫出大而功能強的程式的人, 而且這程式是廣為大家需要的, 所以大家都在做用這些程式. 2. 幫忙 test 和 debug 免費的軟體 hacker 們也尊敬幫忙 debug 免費軟體的人. 在這個不是很完美的世界, 你不可避 免的必須花掉大部分的軟體發展週期在 debug 階段上. 這就是為什麼在任何免費 軟體發展者的腦子堻ㄦ|告訴你一件事, 好的 beta 測試者(能很很清楚的描述發生 的狀況,正確的發現問題出處, 可以容忍測試版本的 bug, 並且能進行一些簡單的診 斷程序)和紅寶石一樣貴重. 如果你是一隻菜鳥, 試著開始去找一個你有興趣的正在發展中的程式, 並且成為一 位好的 beta 測試者. 從幫忙測試開始, 很自然的你開始幫忙 debug, 進而開始 幫忙修改程式. 你將在這過程中學習到很多東西, 並,且和以後可以幫助你的人 結下因果. 3. 公佈有用的資訊. 另一項好事是收集和過濾有用和有趣的資訊, 整理成 Web page 或 FAQ 之類 的文件, 讓大家能很容易的收得. 幾種主要技術 FAQ 的維護者都能得和免費軟體的作者幾乎一樣多的尊敬. 4. 幫忙維持一些簡單的工作. hacker 文化是由一群自願者維持運作著. 有一些工作很無趣但卻必須維持正常運 作的, 如: 管理 mailing list, 維護 newsgroup, 維持大的軟體供應站臺, 推動 RFC 和其它技術標準. 做這類的事將會得到很多的尊敬, 因為大家都知道這些工作是很花時間, 但又不像 玩弄程式碼般有趣. 5. 為 hacker 文化而努力. 最後一項, 你可以為這個文化效勞, 並推廣這個文化(例如, 寫一份正確的入門手冊, 教別人如何成為一位 hacker :-)). 在你因為做了前面四件事之一而出名之前, 這不 是你該做的事. 正確的說, hacker 文化堥癡S有任何的領導者, 但在這文化埵釧瓵蛌漱憭ぉ^雄, 族群歷史學家. 當你在其中混的夠久之後, 你也許會成為這之中的一員. 注意: hacker 們並不相信族群, 喧騷自大的長者, 所以成為這樣的長者是非常的危險. 與其去和別人競爭, 你寧可為自己定位, 給自己一個親切譜虛的身份. Hacker 和 Nerd(怪胎) 的關係 成為一位 hacker, 你不需要成為令人討厭的人(Nerd), 反於社會常態. 然而, 這對你 而言卻是非常有幫助的, 而且有很多 hacker 也是讓人討厭的人. 當一個社會的浪人有 益於讓你專心在真正重要的事情上面, 例如: 思考和 hacking. 因此, 有很多 hacker 們接受了 `nerd' 這種稱呼, 甚至是使用 `geek'(雜耍演員) 這 個字眼, 並引以為傲 -- 這是一種說明他們獨主於世俗習慣之外的方法. 在 The Geek Page 可找到更多相關的討論。 (http://samsara.circus.com/~omni/geek.html) 如果你能夠適當的專注於 hacking 這事上面, 並且還保有你的生活, 那很好. 而且現在 要做到這樣, 比起以前我還是個菜鳥時容易. 主流文化現在也較為 techno-nerd (技術 怪胎)所接受. 甚至有越來越多的人認為 hacker 們可以是很好的男朋友, 女朋友,老公 和老婆. 在 Girl's Guide to Geek Guys 可找到更多相關的訊息。 (http://www.bunnyhop.com/BH5/geekguys.html) 如果你是因為沒有生活而想開始 hacking, 那也沒關係, 至少你就沒有不能專心的 問題了. 也許不久之後你就是一位 hacker 了. 風範要點 再一次的強調, 要成為 hacker 就要了解 hacker 的精神. 如果你並不玩電腦, 那麼還 是有一些事情可以幫助你. 這些不能成為 hacker 的代替品, 不過有不少的 hacker 經常做這些事, 並認為這些事和 hacking 的本質有某種基本的關連. * 閱讀科學小說, 並參加小說的聚會(這是一個遇到 hacker 和原始 hacker們的 好方法). * 學禪, 並且(或者)接觸戰爭的藝術. (鋼鐵般的紀律似乎很重要.) * 訓練你的耳朵對音樂的分析能力, 試著欣賞某種特殊的音樂, 並好好的玩一些 樂器或者唱歌. * 增加對於俏皮話和文字遊戲的認識. * 加強你的母語寫作能力. (有很驚人數量的 hacker, 都是不錯的作家. 這包括一 位我所知道的最好的 hacker.) 你做越多這些事, 那麼你就愈是天生 hacker 的料。 最後, 有一些事千萬不要做. * 不要使用愚蠢而誇張的代號(user ID)或化名. * 不要加入 Usenet 堛瑣啎 (或者任何地方的). * 不要自稱為 `cyberpunk'(電腦搗蛋玩家),也不要浪費任何時間在這麼做的人身上. * 不要 post 或 email 一些充滿錯字或文法錯誤的文章. 做了這些事的結果只是為你招來大家的責難和批評. Hacker 們的記憶力都很好, 他們會 一直記住你的所做所為, 你可能要花數年的時間才有辨法讓他們重新接受你. 其它的資源 Loginataka 有提到一些關於 Unix hacker 的訓練和態度. (http://www.ccil.org/~esr/faqs/loginataka.html) 我也寫了關於 Hackerdom 歷史的簡介. (http://www.ccil.org/~esr/faqs/hacker-hist.html) Peter Seebach 也維護了一份很不錯的 Hacker FAQ, 這份文件是專門給不知道 如何和 hacker 們相處的經理人們看的. (http://www.solon.com/~seebs/faqs/hacker.html) 我也寫了一份 paper「Cathedral and the Bazaar」, 上面解釋 Linux 文化的運作 方式. 你可以在我寫的page 上找的到. (http://www.ccil.org/~esr/writings/index.html) 常被提出的問題 (FAQ) Q: 你能教我如何 hack 嗎? 自從公開這個 page 以來, 我每週都收到很多人來信問"請告訴我所有關於 hacking 的事". 但很不幸的, 我沒有這個時間或者是精力去做這件事; 我的 hacking project 已經用掉我 110% 的時間了. 就算我願意, 但是基本上, hacking 是一種必須自習而成的生活態度和技術. 你會發現, 當真正 hackers 願意幫助你的同時,你將得不到他們的尊敬,若你求他們把會的東西都 直接餵給你的話。 先學一點東西吧! 表現出你正在努力嘗試, 你有能力獨立學習的. 然後再帶著你所 遇到的難題去和 hacker 見面. Q: 我要在那堣~能找的到一位真的 hacker 並和他們交談? 很好, 不過很確定的, 不會在 IRC. 就我所能看到的, 那堸ㄓF騙子和 cracker 之外 什麼也沒有. 最好的方法是找到一個在你附近的 Unix 或 Linux 的使用群, 並加入他們, 參加他們的聚會 (在 Linux Users' Group page on Sunite 有一份目錄). (http://unc.sunsite.edu/linux/ldp/lugs.html) Q: 我應該從那一種語言開始學呢? 如果你真的不懂 HTML 的話, 那就從它開始吧. 市面上有很多外表光鮮亮麗的 HTML 爛書. 我最喜歡的一本是 HTML: The Definitive Guide. (http://www.ora.com/catalog/html2/) 如果你已經準備好開始學 programming 了, 我會建議你從 Perl(http://www.perl.com/) 或 Python(http://www.python.org/)開始. 而 C 是真的很重要, 不過它也真的很難. Q: 我要如何開始呢? 在那堹鉈釣鴔K費的 Unix 呢? 我在這 page 內到處都有指向取得 Linux 的地方. 要成為一位hacker, 你必須要有 動機並且主動進取還要獨立學習. 就從現在開始吧.... 原著 Eric S. Raymond <esr@snark.thyrsus.com> 譯者 Thinker(@freebsd.ee.ntu.edu.tw)