黑客与画家(翻译)、如何成为一名黑客
本文是?Paul Graham?寫的一篇關于黑客與畫家共同之處的文章,深入探討了黑客工作的藝術性與創造性。雖然大部分的程序員都覺得藝術是一件很遙遠的事情,但對于那些愿意仔細打磨 代碼追求精益求精的優秀黑客來說,在創造的過程中總是能感受到藝術的真實存在(盡管可能只是隱約感受到,而且羞于把自己和藝術聯系起來)。藝術之所以會讓 人覺得高高在上遠離生活,是因為大部分人都是在衣著光鮮地談論著藝術,而不知道什么是創造。要成為一個創造者,你所要做的不是夸夸其談,而是投入全部熱情 去不斷實踐。Dirty Your Hands
英文原文?|?譯文地址
黑客與畫家
我讀完計算機本科以后,去藝術學校學習繪畫。許多人感到奇怪,喜歡計算機的人也會喜歡美術嗎?他們大概認為編程序和畫畫是兩種完全不同的工作,編程需要冷靜,精密,和正確的方法,而畫畫是表達某種狂熱的情感。
這種印象是不對的,編程和畫畫有很多共同之處,實際上,在我認識的不同類型的人中間,畫家和黑客是最相似的。
畫家和黑客的相似之處在于:他們都是創造者,就好像作曲家,建筑師,以及作家一樣。黑客和畫家類似,他們的目的是創造某種美好的事物。盡管在創造的過程中,也許會發現新技術,但他們的根本目的并不是研究技術。
我從來都不喜歡”計算機科學”這個詞,因為這種東西根本就不存在。這門學科的內容,不過是由于歷史原因偶然湊合到一起的大雜燴,就好像南斯拉夫國的 形成一樣。一頭是數學家們,他們擺弄計算機是為了得到國防部的資金贊助,中間部分,一伙人在研究仿佛是計算機自然史之類的東西--比如網絡上數據流算法的 行為特征等等。在另一個極端上,是黑客們,他們編寫有趣的軟件。對他們來說,計算機是表達的工具,如同水泥之于建筑師,顏料之于畫家。這三種人湊在一塊的 群體,就好像是數學家,物理學家和建筑師被分到一個專業里。
有時候黑客們干的事被稱為”軟件工程”,這個詞也是一種誤會。比起建筑師來,軟件設計師離工程師的距離更遠。建筑師和工程師的分界并不十分精確,但卻是實實在在存在的。其分界在于做什么和如何做:建筑師決定做什么,工程師考慮如何做出來。
這兩件事情也不能分得太開,如果你不懂得如何做,那么你設計的時候就會陷入難局。但是編程當然不是僅僅決定如何實現某種特性那么簡單,在最好的情況下,編程實際上就是設計軟件的特性--往往最好的設計方式就是實現它?。
說不定哪一天,”計算機科學”會分裂成幾個專業,就好像南斯拉夫最終分裂成幾個國家那樣。這也許是件好事。尤其是這意味著我所擅長的編程,會變成獨立的專業。
這些不同類型的工作綁到一個專業里,當然有利于行政管理,但是卻會引起智力上的困惑。這也是我不喜歡這個名詞的另一個原因。處于中間部分的那伙人所干的,和經驗科學差不多,但是另外兩頭的人,數學家和黑客,可不太象是在干真正的科學。
數學家好像并不為這個問題發愁,他們就象數學系的同行一樣,很高興地做著理論研究,不久就忘了辦公大樓的牌子寫的是”計算機科學系”。但是對黑客們 來說,這個牌子就很成問題。既然他們干的事被稱作科學,他們就會感到好歹要象那么回事,于是大學和研究所的黑客們覺得應該寫論文,而不是寫優美的程序。但 是不幸得很, 后者才是他們真正應該干的。
論文充其量不過是一個手續。黑客寫出很棒的程序,然后再做一篇論文,論文表示軟件上的成績。但是兩者之間的不協調引起了問題:好的軟件比起糟糕的軟件來,更加不適合做論文的題材。
好的軟件不適合作論文的題材。首先,論文要有獨創性的,寫過博士論文的都知道,要想保證你開墾的那片地是處女地,就等于說是你劃出一片別人都不想要 的地來。第二,論文必須言之有物。糟糕的軟件使論文材料充足,你有很多事實可以描述你是如何克服那些困難的。糟糕的假設總是會產生大量問題。大部分AI 研究就是好例子。比如,你假定,以抽象概念為參量的邏輯表達式列表可以用來表示知識,那你要論證的內容可就多了。就像Ricky Ricardo說的,Lucy,這下可夠你解釋了。
創造美好事物的過程,常常是對已有事物的細微調整,或者是把已有概念用新方式組合起來。這種事情,恐怕不太好做研究論文吧。
那么為什么大學和研究所還要用論文來衡量黑客呢? 同樣的, 為什么要用標準化考試來衡量學術才能呢?為什么要用代碼行數來衡量程序員的工作量呢?這些考試的好處是容易實施,而且有一點效果, 因此才會引誘我們繼續采用這些措施。
真正的黑客能夠寫出優雅的代碼, 但是識別這種黑客的方法,真的很不容易找到。要有好的嗅覺才可能識別出真正優秀的設計。是否真的有這種嗅覺,和是否自信有這種嗅覺,這兩者之間沒什么關聯,即使有,也是負面的。
真正的考驗是時間。經過時間的考驗,好的東西會發展壯大,壞的東西會丟棄。不幸的是,需要的時間往往太長, 以至超過人的壽命。Samuel Johnson說,需要一百年的時間,才能形成一個作家的真正聲譽。你得等到這個作家有影響的朋友都死了,他的追隨者也都死了才行。
我想黑客不得不接受名聲上的不確定性,這一點上, 他們和其他創造者沒什么不同。實際上比較起來還要幸運一些。在編程領域,一時的流行風氣雖然也有影響,但沒有繪畫領域那么大。
還有比別人的誤解更糟的事情。更糟的危險是你可能自己誤解自己。你通常在相關領域尋找靈感。如果你在計算機系,很自然地會以為,編程的本質就是實現 計算機理論。我讀本科的時候有一種令我很不舒服的感覺,我覺得自己應當多學一點計算機理論,可是期末考試完了不到三個禮拜,我就把那些東西全忘光了。這讓 我覺得自己不夠盡責。
現在我認識到我那時的想法都是錯誤的。黑客對計算機理論的了解程度,只要達到畫家對顏料化學所了解的程度就夠了。你應當知道怎樣計算時間和空間復雜 度,知道圖靈機模型。也許應當知道狀態機,至少知道這個概念,如果要寫語法解析或者正則表達式庫的時候會用得到。畫家對顏料的學問上,要記的東西比這還要 多一些呢。
對我來說,靈感的源泉不是來自于那些掛著計算機招牌的地方,而是那些聚集著創造者的地方。我從繪畫方面得到的靈感比我從計算機理論上得到的,要多得多。
打個比方。我上學的時候,學生在上機之前,要把整個程序先用紙筆寫出來。可是我覺得這不是我寫程序的方式。我喜歡坐在計算機前面寫程序,根本不用紙 筆。我并不先在紙上寫出程序并檢驗其正確性,我喜歡先敲一段代碼,當然好多毛病,然后慢慢敲打成型。我受到的教育告訴我,調試應當是檢查輸入錯誤的最后一 關,而按照我的方式,程序基本上就是調試出來的。
好長一段時間我都感到很沮喪,念小學的時候,我捉鉛筆的方式和老師教的不一樣,那時我也感到同此刻一樣的沮喪。如果我那會知道別的創造者-比如畫家 和建筑師-的做法的話,我就早該知道這種方法的名字,那就是:打草稿。我可以告訴你,他們在大學時教我的方法是錯的。你應當是一邊寫程序一邊來確定程序的 走向, 這和畫家, 作家以及建筑師的做法完全一樣。
這里蘊涵著軟件設計的真義, 認識到這一點, 就意味著程序語言應當首先要具有延展性。語言要有助于在編程中思考, 而不是僅僅表達思考的結果。它應該象鉛筆, 而不是象鋼筆。如果程序員真的象大學里教的那樣寫程序, 那么靜態類型語言就是不錯的選擇。但是我所知道的黑客都不是那樣子編程序的。我們需要這樣一種語言, 我們用它來隨意涂抹。而使用靜態類型語言編程序的感覺, 就好象手放在膝蓋上, 小心翼翼握著茶杯, 正襟危坐著和一個嚴肅的老太太談話。
談論靜態類型, 以及創造者這種話題, 我們除去了另外一個困擾的科學的問題: 數學嫉妒。科學界的每個人暗地里都認為數學家比自己聰明。我想數學家們自己大概也這么認為。反正科學家們總是把自己的作品弄得象數學論文一樣。這對物理學 倒還沒什么大害, 但是你要是在自然科學上走得越遠, 就越發現這個問題的嚴重性。
印上一整頁的公式, 看上去很讓人敬畏的樣子, 用上希臘字母就更加不得了。這種傾向可能誘惑你去研究那些可以公式化的問題, 結果是忽略了真正重要的東西。
如果黑客認同創作者的身份, 像是畫家和作家一樣, 他們就不會受此誘惑。作家和畫家才不理會數學呢, 根本就是不相干的事情。我認為, 黑客也應當這樣看。
如果大學和研究所不讓黑客做自己想做的事情, 他們還可以去公司, 可惜, 公司和大學的做法是一丘之貉。大學和研究所要求黑客當科學家, 而公司要求黑客當工程師。
我也是最近才發現這問題的。Yahoo買了Viaweb之后, 他們問我的意向, 我一向就不喜歡商業公司, 我就說我還是想編程序。進了Yahoo以后, 我發現在他們那里, 編程序的意思就是代碼實現, 和設計沒關系。程序員就是代碼工人, 他們把產品經理的愿望, 以代碼形式記錄下來。
看起來這是大公司的一貫的做法。這樣做的目的是減低工作的偏差。只有少數程序員真正懂得設計軟件, 而且這些有才能的人很不容易一下子識別出來。所以與其把軟件的未來寄托在少數聰明人身上, 不如把軟件設計讓一個委員會來作, 程序員只管編碼實現。
如果你想賺錢, 那么記住我的話, 因為我講的, 正是小公司取勝的機會。大公司采取保險的做法, 意圖規避風險。但是試圖限制這種工作效果上的震蕩的時候, 固然避免了最壞的可能,但也失去了最好的。這對大公司當然不是問題, 大公司取勝的原因不是因為發明了偉大的產品, 而是因為犯的錯誤比其他大公司少而已。
如果你有辦法和一個大公司競爭某種產品, 這個公司的產品是產品經理們設計的, 那么, 他們永遠趕不上你。不過這樣的機會很不容易找到。你很難和大公司卷入軟件競爭, 就好比你很難和對手在城堡里徒手搏斗一樣。寫一個比微軟的word還要好的字處理器是可能的, 但是在操作系統這個微軟獨占的堡壘里, 他們對你根本就不屑一顧。
軟件競爭只能在全新的市場中展開, 因為在那里還沒有誰建立起防御工事。你有可能采取大膽的策略, 集合那些既做設計又做編碼的人, 來贏得競爭。微軟最初就是這樣做的, 蘋果,HP也莫不如此。我想任何成功的創業公司都是走的這條路。
所以, 創造偉大軟件的一個辦法就是創業開公司。不過這里面還有兩個問題。第一, 開公司以后, 除了編程序, 你需要做好多其他事情。在Viaweb的時候, 我真的希望自己能擠出四分之一的時間編程就好了。實際上我四分之三的時間都是在做很討厭甚至很麻煩的事情。對此我深有體會, 有一次當我開完董事會去補牙, 坐在診所的椅子上, 我覺得簡直抵得上度假了。
還有另一個問題。寫有趣的軟件, 和寫賺錢的軟件, 經常是沒多少共同之處。設計語言是很有趣的工作, 微軟的第一個產品就是。但是現在沒人會花錢買語言。要想賺錢就得寫那種很麻煩的, 沒人會免費干的軟件。
所有的創造者都會面臨這個問題。價格是供求關系決定的, 對有趣軟件的需求總是比較少,而解決一般用戶的平凡問題的需求, 總是多一些。在高速公路邊上演出, 觀眾一定少, 在廟會搭個臺子演出, 觀眾一定多。寫長篇小說的收入, 比不上寫廣告詞的收入, 雖然那些廣告最后的歸宿是垃圾箱。設計一種語言的回報一定不多, 而搞定某些公司的老掉牙的數據庫和web server的連接問題, 回報會豐厚得多。
我認為這個難題的答案, 是創造者們應當找一個養家糊口的”日常工作”。這個名詞最初是慣于晚上演出的音樂家們使用的。它的意思是: 你做一個工作是為了賺錢, 另一個工作是因為你喜歡。
幾乎所有的創造者在他們職業生涯的早期, 都有日常工作。其中最為人所知的就是畫家和作家。如果能賺錢的日常工作剛好是你所喜愛的工作, 那你就太幸運了。音樂家就經常在唱片店工作。正在用某種語言或者操作系統的黑客, 也應當找個相近的系統管理或維護的工作。[1]
黑客應當找個日常工作糊口, 業余時間做自己喜愛的程序。我的這個說法并不是獨出心裁。所有的開源社區的黑客都是這樣做的。我要說的是, 開源社區的模型也許是正確的模型, 因為這種模型被其他創造者分別獨立地驗證過。
一般的雇主都不太愿意雇員參與開源項目, 這讓我有一點驚奇。在Viaweb則相反, 我們不愿意雇傭沒有做過開源項目的人。面試程序員的時候, 我們考慮的一個首要問題就是, 他們業余時間寫什么軟件。你要不是真的熱愛這個工作, 就不可能干的出色。如果你熱愛編程, 就必然會有自己熱愛的業余項目。[2]
黑客是創造者, 不太象是科學家。黑客尋找靈感的地方, 不應當是科學領域, 而是其他創造者工作的領域。那么, 我們從繪畫上, 能夠得到什么啟示呢?
第一件可以從繪畫領域學習的, 或者說可以驗證的, 就是怎樣學習編程。繪畫都是在實踐中學會的, 編程亦然。大部分黑客都不是因為念大學計算機課才走上編程之路的。他們13歲年紀就開始學著寫程序。即使是上了大學計算機課, 你真正學會編程, 大多也是通過自己實際寫程序。[3]
畫家通常會留下一系列作品, 你可以從中觀察到他們在實踐中學習的過程。如果你按年代順序觀察一個畫家的作品, 你會發現后一個作品在前一個作品基礎上的提高。如果一幅畫中的某樣東西特別出色, 你多半會在更早的作品中發現其發展成熟的軌跡。
我認為大多數創造者都是這樣工作的。作家和建筑設計師也不例外。對于黑客而言, 我覺得這樣的做法大概比較好: 從一個大概的草稿開始起步, 不斷嘗試采納新的想法, 做修訂版,而不是連續幾年埋頭做一個題目。
這種工作模式是區別黑客和科學家的另一個顯著標志。科學家并不通過干活來學習科學, 他們通過做實驗和解題來學習科學。科學家總是從完美的東西開始, 也就是說他們重復前人已經做過的工作, 最后達到某種高度, 才開始做自己創造性的工作。而黑客呢, 一開始就是做創造性的工作–當然這時候作品還不成樣子。黑客從創造開始, 最終達到完美。而科學家從完美開始, 最終達到創造。
創造者學習的另一種方法是觀摩杰作。對畫家來說, 美術館是技巧的寶庫。幾百年來, 美術館都是畫家學習和借鑒大師作品的地方, 它成為傳統教育方式的一個部分。觀摩杰作強迫畫家仔細觀察那幅畫是如何畫成的。
作家也是如此。本杰明-富蘭克林曾經總結Addison和Steel的散文的特點, 并加以模仿。Raymond Chandler也是這樣學寫偵探小說的。
同樣, 黑客也是通過看優秀的程序來學習編程–不僅看它的外在表現, 而且要看源碼。開源軟件有一個少人提及的優點就是: 你很容易從中學習編程。我學編程的時候, 不得不依賴書里的例子。其中有一大堆代碼是屬于Unix的, 但Unix也不開源。大部分人是讀John Lions的書里的源代碼, 而這些內容是不合法的。這本寫于1977年的書, 直到1996年都還被禁止出版。
繪畫的過程就是不斷改進的過程, 這是值得我們學習的另一個地方。繪畫通常從草圖開始,逐漸地添上細節, 但又不僅僅是添上細節那么簡單。有時候會發現最初的想法是錯的。無數的人像作品, 在x光照射之下, 會發現面部輪廓修改過, 嘴的位置也移動過, 諸如此類。
這就是我們應當學習的榜樣, 編程也應當遵循同樣的做法。想要假設軟件的規格設計完美無缺, 這顯然是不切實際的。預先接受這種現實對你有好處, 寫程序的時候就會有所準備,隨時應對可能發生的設計規格上的改變。
(大公司很難做到這一點, 這又是一個小公司可以發揮優勢的地方。)
現在差不多每個人都知道過早優化的危險。我認為我們也同樣應當顧慮另外一個問題, 就是過遲確定軟件的設計規格。
好的工具可以幫助我們避免這個危險。好的語言也可以幫助你較容易地改變主意。動態類型語言就有這個優點, 你用不著預先就指定數據的表現形式。不過, 我認為彈性的關鍵之處在于, 它使語言具有較高的抽象度, 如果一個程序比較短, 那它就比較容易修改。
這似乎聽起來讓人迷惑。但是偉大的作品總是精益求精。例如, 達芬奇在國家美術館畫Genevra de Benci像的時候, 頭像后面是檜柏樹叢, 他仔細地描繪每一片葉子。許多畫家也許認為,這些東西是襯托頭像的, 沒人會仔細看。
達芬奇并不這樣認為。他繪畫的認真程度, 并不取決于看畫的人的認真程度如何。達芬奇和米開朗琪羅一樣, 都是一絲不茍。從總體看去, 那些似乎看不見的細節也會變得顯著。這是一絲不茍的重要之處。觀眾經過這幅畫的時候, 注意力一下子就被吸引過去, 那些原本不易覺察的細節, 綜合在一起產生了驚人的效果, 就好像一千個細微的聲音唱出的和聲一樣。
偉大的軟件對于美的追求, 也需要超人的投入。當你仔細查看好軟件的時候, 會發現那些不為人注意的部分同樣優美。我不是說我自己寫的軟件是偉大的, 但我知道, 寫代碼的時候,要盡量寫得清晰易讀。有的程序變量名取得丑陋極了, 有的程序行縮進亂七八糟, 讀這樣的代碼真能讓我發瘋。
如果把黑客僅僅當作代碼工人的話, 那他會像工人挖水溝一樣從一頭干到另一頭。但是如果把黑客當作創造者的話, 我們就必須考慮靈感的因素。
編程序的過程和繪畫的過程類似, 也會有起有落。上新項目的時候, 一天干16個小時不知道累, 也有時候, 無論如何都提不起興致。
這種狀況也必須考慮在內, 你應對的方法不同, 效果也會不一樣。當你開著手動檔汽車過山的時候, 有時候為了防止拋錨, 不得不松開離合器。松開離合器可以防止拋錨。在繪畫和編程之中, 有一些是關鍵的東西, 另外一些是常規的工作, 留下一些容易作的工作, 等你厭倦的時候, 就做這些較輕松的工作。
比如說, 在編程時可以故意留一些bug, 我比較喜歡找bug。這時候, 黑客這個詞的含義可以說恰當極了。你面臨的問題總體上是有限制的, 你要做的就是解決掉它。假定你的程序應該做x, 結果卻做了y, 哪里出了問題? 你可以斷定最終一定是可以解決的。這個活跟刷墻一樣, 是不錯的調劑。
繪畫不僅可以教我們如何處理自己的工作, 還教我們如何協同工作。過去很多偉大的作品都是由一群人共同完成的, 盡管在美術館的標簽上可能只寫著一個人的名字。達芬奇在Verrocchio 的工作室當學徒時, 就參與繪制<<基督受洗>>中的天使。這樣的事情當時很常見。當米開朗其羅堅持要自己一人繪制西斯廷教堂屋頂的人像時, 就被認為是很不得體的事情。
就我所知, 畫家們一起作畫時, 他們并不是一起畫一個共同的部分, 而是一個主要畫家畫主題人物, 他的副手畫背景和其他部分, 絕對不會有人摻和別人正在畫的東西。
我認為這種模式也適用于軟件開發, 不過別走得太遠。如果一段代碼有三四個程序員分別寫過, 那么沒人真正對它負責。結果就會變成公用房間一樣沒人收拾, 又冷清又灰暗。正確的做法是把程序分成嚴格定義的模塊, 每個模塊有專人負責, 仔細設計模塊之間的接口, 使之盡可能像程序語言本身那樣, 精確地表達出來。
軟件和繪畫一樣, 都是為人而做的。黑客也應當像畫家一樣, 努力創作出偉大的作品。你必須為用戶的立場著想。
我小時候, 就聽人講要學會從別人的立場來設想。意思就是做別人想要你做的事情, 而不是做你自己想做的事情。這當然給” 換位思考”這個詞帶來了壞名聲。因此我一直不愿意這樣做。
可是, 我錯了。換位思考確實是成功的秘密, 這并不意味著放棄自我。理解別人的觀點, 并不是說你要按別人的興趣辦事。在某種情況下剛好相反, 舉個例子, 打仗的時候, 理解敵人觀點, 其目的恰好是要反其道而行之。[4]
大多數創作是為人的, 你得理解人的需要。差不多所有偉大的作品主題都是人, 因為人最感興趣的, 就是人類自身。
好程序員和偉大的程序員之間的唯一的差別, 就是體察別人的能力。有些程序員很聰明, 但論到”換位思考”, 則是完全的自我主義者。這樣的人不可能設計出偉大的軟件[5], 他們從來不懂得理解別人的觀點。
判斷一個人換位思考的能力如何, 最好的辦法是看他怎樣向那些不懂技術的人講解技術問題。我們大概都見過那樣一些人, 不管多么聰明, 這件事情上卻是糟得很。如果有人問, 什么是編程語言, 他們會說, 呃, 就是一種高級語言, 能經過編譯器處理產生目標碼。高級語言?編譯器? 目標碼? 不知道編程語言的人, 難道會知道這些東西?
軟件的目標之一, 就是解釋自己。你要寫出好程序, 就應當知道用戶對軟件了解甚少。他們用軟件時, 全無思想準備。如果軟件的行為剛好合乎他們的設想, 那就最好了。別指望用戶會去讀操作手冊。這方面, 我見過的最好系統是早期的蘋果, 那時候還是1985年。蘋果干了所有軟件都做不了的事情, 那就是能正常運行。[6]
源碼同樣也應當解釋自己。如果讓人回憶關于編程的名言, 經常提到的是結構化和解釋語言初期的一句話:
程序寫出來是給人看的, 碰巧機器也能運行。
你不但要為用戶設身處地地著想, 對讀者也是一樣, 因為讀者可能就是你自己。好多程序員寫了程序, 過半年再看, 簡直看不懂究竟是怎么回事。我就見過有幾個人因為這原因放棄了perl。[7]
缺乏換位思考的能力仿佛是高智商的特征, 尤其在某些地方, 這都成了一種風尚。但我不覺得真的有什么關聯。數學和自然科學和人類感情無關, 這些領域的人顯然都很聰明, 于是乎高智商就和”不通世故人情”掛起構來。事實上好多平常智商的人在這方面也不行。看看脫口秀節目里那些站起來發問的人, 那些問題問的, 真叫拐彎抹角, 主持人得重新梳理一遍, 才能搞得清是啥意思。
如果編程和繪畫寫作一樣的話, 它也一樣酷嗎? 畢竟, 人只有一次生命, 最好是做有意義的事情。
這問題真難回答。在贏得名氣上總是有很大的滯后。這就好像遙遠的星星發出的亮光, 要經過好多年才能到達我們眼里。繪畫行業光芒四射是因為500年前就產生的杰作。那時候,沒人會象我們現在這樣看重這些作品。我們現在所知的Urbino 公爵Federico daMontafeltro先生的形象, 是從Piero della Francesca的作品里的高鼻子男人哪里得來的。這在當時的人眼里看來, 一定是非常奇特的。
所以當我說編程沒有繪畫那么酷的時候, 我們應當記住繪畫在它古老的光輝年代, 同樣也不見得那么酷。
我們可以自信地說, 現在正是黑客事業的光輝年代, 在大部分領域, 偉大的作品誕生很早。1430-1500年代的繪畫現在仍難以超越, 莎士比亞彷佛生來就是戲劇家, 把這門藝術推進到如此之高的程度, 以致于后來的劇作家都生活在他的陰影里。Albrecht Durer之于雕刻, 奧斯丁之于小說, 也是如此。
一次又一次, 我們看到同樣的模式。新的媒體誕生了, 人們熱情高漲, 短短幾代人就把它的能量發揮到極至。黑客事業似乎也正處于這樣的時期。
達芬奇時代的繪畫行業并不酷, 是他的杰作造就了繪畫行業的酷。黑客事業之未來, 全依賴我們今日之創造。
作者注:
[1] 照相術的出現, 毀掉了畫家的日常工作。歷史上很多畫家靠替人畫像維持生計。
[2] 我聽說微軟不鼓勵員工從事開源項目, 業余搞也不行。不過現在有那么多黑客都在做開源項目, 這種政策也許會令他們難以招募到很多一流程序員。
[3] 大學所能學到的編程技術, 其狀況相當于你學到的關于讀書, 打扮或者約會的知識: 你上高中那時候的品味多差啊。
[4] 這里有一個”換位思考”的例子。在Viaweb的時候, 如果在兩個選擇之間下不了決心, 我們就會問: 我們的對手最恨什么? 當一個對手在軟件里加了個沒用的特性, 這個特性我們沒有, 他們就在媒體上大作文章。我們當然也可以解釋說這個特性根本是廢物, 但是我們還是決定也實現它, 因為這樣的話, 對手會更生氣。于是當天下午我們就加上了這個特性。
[5] 不包括文本編輯器和編譯器。因為這兩樣東西黑客自己也天天用, 自己就是典型用戶,所以用不著了解別人的觀點。
[6] 差不多如此。他們在內存使用上弄巧成拙, 產生好多很麻煩的磁盤交換。幾個月后, 我買了個新驅動器加上, 這問題就解決了。
[7] 給程序加注釋, 并不是增加易讀性的好辦法。我把Abelson和Sussman的話再發揮一下:程序語言是用來表達算法的, 碰巧也能在機器上運行。好的編程語言, 表達軟件的能力比英語更好。只有在代碼含義復雜難解的地方, 才有必要加注釋, 就好像高速公路上急轉彎的地方才會有警告標志。
感謝Trevor Blackwell, Robert Morris, Dan Giffin, 和Lisa Randall閱讀本文的草稿, 感謝Henry Leitner和Larry Finkelstei邀請我講話。
http://www.zhuoqun.net/html/y2010/1459.html
?如何成為一名黑客?(英文原文?)
翻譯:Barret
內容一覽
為什么會有這份文檔?
什么是黑客?
黑客應有的態度
黑客的基本技能
黑客文化中的地位
黑客和書呆子(Nerd)的聯系
風格的意義
其它資源
FAQ(常問問題解答)
為什么會有這份文檔?
作為 Jargon File 的編輯和 一些其他有名的類似性質文章的作者,我經常收到充滿熱情的網絡新手的email提問(確實如此) “我如何才能成為一名出色的黑客?”非常奇怪的是似乎沒有任何的FAQ或者Web形式的文檔來說明這個 十分重要的問題,因此我寫了一份。
如果你現在讀的是這份文檔的離線拷貝,那么請注意當前最新版本(英文版)在 http://www.tuxedo.org/~esr/faqs/hacker-howto.html可以得到。
注意:在這份文檔最后有 FAQ(常問問題解答)。 請在向我提出任何關于這份文檔的疑問之前讀兩遍。
目前這份文檔有很多翻譯版本: 保加利亞語, 簡體中文, 繁體中文, 丹麥語, 荷蘭語, 法語, 德語, 匈牙利語, 印尼語, 日語, 朝鮮語, 葡萄牙語, 俄語及 瑞典語。 注意由于這份文檔時有修正,所以以上翻譯版本可能有不同程度的過時。
——————————————————————————–
什么是黑客?
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網站得到。
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 及其他低等生物幼稚愚蠢的行為特點。黑客不會做這些事; 他們對他們所作的感到驕傲,而且樂于人們將作品與他們的 真名相聯系。 因此, 若你現在用假名,放棄它。在黑客文化里它會令你你失敗的。
——————————————————————————–
其它資源
Peter Seebach 維護著一個非常好的 Hacker FAQ, 專給那些不懂如何與黑客打交道的經理看的。如果Peter的站點不能訪問,下面這個 Excite搜索應該有一份拷貝。
我也著有黑客文化簡史。
我寫了一份 大教堂與市集,對于Linux及開放源代碼文化現象有詳細的解釋。 我也在這個話題上進一步闡述導致的結局—— 開拓智域。
Rick Moen寫了一份很好的關于 如何運轉一個Linux用戶組的文檔。
我和Rick Moen合作完成了另一份關于 提問的智慧的文章,可以讓你事半功倍的獲得幫助。
如果你想知道PC、UNIX及Internet基本概念和工作原理,參考 The Unix and Internet Fundamentals HOWTO。
當你釋放出一個軟件或為其打補丁,試著按 軟件發行慣例 HOWTO去做。 (以上的提到的文章的中文版大多都可以在www.aka.org.cn和www.linuxforum.net找到。)
——————————————————————————–
FAQ(常問問題解答)
問:你能教我做黑客嗎?
問:那么,我要如何開始?
問:我得什么時候開始學?現在會不會太遲了?
問:要學多久才能學會黑客道?
問:Visual Basic及Delphi是好的入門語言嗎?
問:你能幫我“黑”掉一個站點嗎?或者教我怎么黑它?
問:我怎么樣才能得到別人帳號的密碼?
問:我如何入侵/查看/監視別人的Email?
問:我如何才能在IRC聊天室里偷到頻道op的特權?
問:我被黑了。你能幫我避免以后再被攻擊嗎?
問:我的Windows軟件出現問題了。你能幫我嗎?
問:我在哪里能找到可以與之交流的真正的黑客?
問:你能推薦一些有關黑客的好書嗎?
問:成為一名黑客我需要擅長數學嗎?
問:我該從那種語言學起?
問:我需要什么樣的機器配置?
問:我得因此憎恨和反對Microsoft嗎?
問:但開放源代碼軟件不會使程序員丟飯碗嗎?
問:我要如何開始?哪里有免費的Unix?
問:你能教我做黑客嗎?
答:自從第一次發布這份文檔,我每周都會收到一些請求, (頻繁的話一天幾封)要我“教會他們做黑客”。遺憾的是,我 沒有時間和精力來做這個;我自己的黑客項目,及我作為一個開放源代碼倡導者 的四處奔波已經占用了我110%的時間。
即便我想教你,黑客也依然基本上是一項自行修煉的的態度和技術。 當真正的黑客想幫助你的時候,如果你乞求他們一湯匙一湯匙“喂”你的話, 你會發現他們不會尊重你。
先去學一些東西。顯示你在嘗試,你能靠自己去學習。然后再去向你遇到的黑客請教特殊的問題。
如果你發E-mail給一位黑客尋求他的幫助,這是兩件首要記住的事情。 第一,寫出來的文字顯得懶且粗心的人通常非常懶于思考且非常馬大哈,不能成為好黑客—— 因此注意拼寫正確,使用正確的語法及發音,否則你可能會無人理睬。 第二,不要試圖要求回復到一個ISP帳號,而那個帳號與你 的發信地址不同。這樣做的人一般是使用盜用帳號,不會有人有興趣為虎作倀幫助竊賊的。
問:那么,我要如何開始?
答:對你而言最佳的入門方式也許是去參加LUG(Linux用戶組)的聚會。 你可以找到在 LDP的綜合Linux信息頁面上找到類似的組織;也許有一個在你家附近的, 而且非常有可能與一所大學或學校掛鉤。如果你提出要求,LUG成員興許會給你一套Linux, 當然此后會幫你安裝并帶你入門。
問:我得什么時候開始學?現在會不會太遲了?
答:你有動力學習的時候就是好時候。大多數人看來都是在15-20歲之間開始感興趣的,但 據我所知,在此年齡段之外的例外也是有的。
問:要學多久才能學會黑客道?
答:這取決于你的聰明程度和努力程度。大多數人只要他們專注, 就能在18個月到2年之間學會一套令人尊敬的技能。但是,不要以為就此結束了; 如果你是一個真正的黑客,你要用你的余生來學習和完善你的技術。
問:Visual Basic及Delphi是好的入門語言嗎?
答:不,因為他們不是可移植的。他們不是那些語言的開放源代碼實現, 所以你被限制在廠商選擇支持的那些平臺里。接受這樣一種壟斷局面不是黑客的態度。
Visual Basic特別糟糕。它是Microsoft的私有語言這個事實就足夠讓它臉面全無, 不像其他的Basic,它是一種設計糟糕的語言會教給你壞的編程習慣。
其中一個壞習慣是會依賴于單一廠商的函數庫、控件及開發工具。 一般而言,任何不能夠支持至少Linux或者一種BSD,或其他第三方操作系統的語言,都是 一種不適合應付黑客工作的語言。
問:你能幫我“黑”掉一個站點嗎?或者教我怎么黑它?
答:No。任何讀完這份FAQ后還問這個問題的人,都是無可救藥的蠢材, 即使有時間指教我也不會理睬。任何發給我的此類E-mail都會被忽略或被痛罵一頓。
問:我怎么樣才能得到別人帳號的密碼?
答:這是駭客行為。滾得遠遠的,白癡。
問:我如何入侵/查看/監視別人的Email?
答:這是駭客行為。在我面前消失,混蛋。
問:我如何才能在IRC聊天室里偷到頻道op的特權?
答:這是駭客行為。去S吧,冥頑不靈的家伙。
問:我被黑了。你能幫我避免以后再被攻擊嗎?
答:不行。目前為止,每次問我這個問題的,都是一些運行Microsoft Windows的菜鳥。 不可能有效的保護Windows系統免受駭客攻擊;太多缺陷的代碼和架構使保護Windows的努力有如 隔靴搔癢。唯一可靠的預防來自轉移到Linux或其他設計得至少足夠安全的系統。
問:我的Windows軟件出現問題了。你能幫我嗎?
答:當然。進入DOS方式,然后鍵入“format c:”。你遇到的任何問題將會在幾分鐘之內消失。
問:我在哪里能找到可以與之交流的真正的黑客?
答:最佳辦法是在你附近找一個Unix或Linux的用戶組,參加他們的聚會。 (你可以在Metalab的LDP站點 找到一些指向用戶組的鏈接。)
我過去曾說過不能在IRC上找到真正的黑客,但我發覺現在情況有所改變。 顯然一些真正的黑客的社區像GIMP及Perl,也有IRC頻道了。)
問:你能推薦一些有關黑客的好書嗎?
答:我維護著一份Linux Reading List HOWTO,也許你會覺得有用。 Loginataka也很有意思。
關于Python的介紹,請訪問在Python站點上的 入門資料。
問:成為一名黑客我需要擅長數學嗎?
答:不用。黑客道很少使用常規的數學或算術,不過你絕對需要能邏輯性地思考和進行精密的推理。
尤其是你不會用到微積分或電路分析(我們把這些留給電子工程師們 :-))。 一些有限數學(包括布爾代數,集合論,組合數學,圖論)的背景知識會有幫助。
問:我該從那種語言學起?
答:HTML——如果你還不懂的話。市面上有一大堆的封面精美,宣傳得天花亂墜的 糟糕的 HTML書籍,不幸的是很少有好的。我最喜歡的是 HTML: The Definitive Guide。
但 HTML 不完全是一種編程語言。當你準備開始編程時,我推薦從 Python起步。 你會聽到一大群人推薦 Perl,并且 Perl 依然比 Python 流行得多,但是 難學得多且(以我之見)設計得不是很好。
C 確實重要,但它要比 Python 或 Perl 難多了。不要嘗試先學 C。
Windows用戶不要滿足于 Visual Basic。 它會教給你壞習慣,而且它不可以移植,只能在Windows下運行。避免它。
問:我需要什么樣的機器配置?
答:過去個人電腦能力相當不夠并且內存小,結果給黑客的學習過程設置 了人為的障礙。不過一段時間以前開始就不是這樣了;任何配置比一臺 Intel 486DX50 好的 機器都有足夠的能力進行開發工作,X,及 Internet 通訊,同時你現在買的最小的磁盤 都大得富足了。(依Barret之見,現在要至少Pentium 166MMX才夠。)
選擇用來學習的機器時重要的一點是注意配件是否是Linux兼容的(或BSD兼容,如果你選擇學 BSD)。同剛才提到的一樣,大多數現在的機器都是符合的;唯一的值得注意的區域在于 modem和打印機;有些具備為Windows設計的配件的機器不會在Linux下工作。
關于硬件兼容性有一個FAQ;最新版本在 這里。
問:我得因此憎恨和反對Microsoft嗎?
答:不,你不必如此。不是因為Microsoft不令人討厭,而是因為黑客文化早在 Microsoft出現之前就存在了,且將在Microsoft成為歷史后依然存在。 你耗費在憎恨Microsoft的任何力氣不如花在愛你的技術上。寫好的代碼—— 那會相當有效地打擊Microsoft又不會讓你得到惡報應。
問:但開放源代碼軟件不會使程序員丟飯碗嗎?
答:看起來不太可能——目前為止,開放源代碼軟件產業似乎創造了更多的就業機會而不是 減少就業機會。如果寫一個程序比起不寫來是純經濟收益的話,那么在寫完后, 程序員應該得到報酬不管程序是否是開放源代碼。 并且,無論寫出多么“免費自由”的軟件,都存在更多對新的,定制的軟件的需求。 我有這方面更多的論述,放在開放源代碼 網站資料中。
問:我要如何開始?哪里有免費的Unix?
答:在本份文檔的某個地方我已經提到過何處可以得到最常用的免費Unix。 要做一名黑客,你需要自立自強,以及自學能力。現在開始吧……
總結
以上是生活随笔為你收集整理的黑客与画家(翻译)、如何成为一名黑客的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go的优雅终止姿势
- 下一篇: 一款游戏让你成为 Vim 高手!