posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          [zz]給計算機系學生的建議

          Posted on 2007-07-16 16:44 ZelluX 閱讀(120) 評論(0)  編輯  收藏
          作者: 周思博 (Joel Spolsky)

          譯: Chen Bin

          2005年1月2日

          雖然大概一兩年前我還在夸夸其談桌面應用程序是將來的潮流,大學生們現在還是偶爾
          向我請教職業發展的問題。所以我把我的建議寫下來。以供學生們閱讀,嘲笑,忽略。


          大多數銳氣十足的學生從來不向前輩征求意見。在計算機科學領域,這樣做是正確的。
          因為前輩們很可能說些“在2010年前,市場對于那些只會敲擊鍵盤的代碼工人的需求將
          會超過一億(因此前景是樂觀的)”,或者諸如“Lisp語言現在真的很熱門”。

          我和那些前輩也差不多,當我給別人建議時,實際上我不知道自己在說些什么。我是如
          此的落后于時尚,以至于連AIM也搞不明白,而不得不使用 email(恐龍時代的產品,在
          那個時代,音樂是刻在扁扁的的圓圓的盒子上,噢,那種盒子叫cd)。(譯者按:我認
          為祖兒這里在說反話,后文很多地方作者都在說反話,讀者盡量理解這種美國式幽默吧
          。)

          所以你最好不要理睬我將要說的,你應該立刻去制作某種在線交友軟件。

          然而,

          如果你喜歡編程,那就感謝上帝吧:你屬于幸運的少數人,這些人喜歡工作,他們的工作
          可以保證他們能過上舒適的生活。大多數人沒有這么幸運。對大多數人來說,工作是不
          愉快的,忍受工作的目的攢錢,是為了在年滿65歲退休后能過上自己想過的生活。如果
          他們想過的生活不需要靈活的膝蓋,明亮的眼鏡,輕盈的腳步的話。

          現在讓我回到主題,我將提供一些建議。

          好了,不羅嗦了,下面就是Joel給計算機系學生們七條免費的建議:

          畢業前學會寫作

          畢業前學會C語言

          畢業前學習微觀經濟學(microeconomics)

          不要因為某些非計算機課程枯燥無趣就敬而遠之

          學習有大量編程實踐的課程

          不要擔心工作都跑到印度去了

          好好做夏季畢業實習

          讓我逐條解釋這些建議。但解釋之前我要說明一下,如果因為這些建議是Joel的建議你
          就打算無條件地接受,以至于連我的理由都想跳過,那么你就太單純,太容易被別人騙
          了。如果你是那種單純的人,我還要給你第八條建議,找心理醫生咨詢一下如何培養自
          信(self-esteem)。

          畢業前學會寫作

          如果Linus Torvalds不懂如何布道的話,Linux會成功嗎? 正象每一個黑客,Linus精通
          寫作,他知道如何準確地在email和郵件討論組中使用書面英語表達自己的思想,所以他
          能夠從全世界召集大量志愿者為Linux工作。

          你聽說過最近風靡全世界的極限編程(Extreme Programming)嗎? 即使你不懂什么是
          極限編程,你至少聽說過這個詞。為什么?因為宣傳極限編程的人都是天才的作者和演
          說家。

          就看看你身邊的那些小型的軟件開發組織吧,最有權力和影響力的人是那些可以用自信
          ,準確,舒適的英語交流的人。好吧,我承認這些人也許言過其實,但是你無可奈何。


          一個合格的程序員和一個偉大的程序員的區別不在于知道多少種編程語言,不在于他們
          是喜歡Python或者Java,而是在于他們是否擅長表達。他們能夠說服,所以他們獲得權
          力。他們能夠寫清楚明白的評論和接口文檔,所以他們使得別人不用重寫,而可以重用
          他們的代碼,否則他們的代碼就是毫無用處的。他們也能夠寫出清晰的用戶手冊,于是
          最終用戶可以理解他們的代碼是做什么用的,明白了他們的工作的價值。sourceforge埋
          葬著許多精美的代碼,這些已死的代碼無人使用,因為代碼的作者很少寫(或者根本不
          寫)用戶手冊。

          我不會雇傭一個不懂寫作的程序員。如果你擅長寫,你就很容易找到工作,緊接著你就
          會被要求寫技術規格文檔,這意味著你已經被管理層注意到了。

          大學里有一些課程,要求你做很多的寫作練習,不要猶豫,趕快參加這些課程。不要錯
          過任何要求你每周或者每天練習寫作的課程。

          給自己建立一個網絡日志(weblog)。在上面寫的越多,你會寫地越容易。寫地越容易
          ,你就寫地越多,這是一個正向地循環激勵。

          畢業前學會C語言

          我可沒有說是C++。雖然現在用C的工作不多,但是掌握各種編程語言的程序員事實上用
          C來交流(lingua franca);更重要的是,C比某些“現代”語言更接近機器語言。我不
          管現在大學里在教什么流行的垃圾語言(trendy junk),你至少得花一個學期接近機器
          。否則,你不可能使用高級語言寫出高效的代碼。這意味這你不會有機會寫編譯器或者
          操作系統,也許這是更好的編程工作;別人不會相信你能夠為大項目設計架構。無論你
          知道多少高級的控制結構,知道如何進行錯誤處理,如果你不能解釋為什么while (*s
          ++ = *t++);的意思是進行字符串拷貝(而且對你而言這是世界上最自然,最易懂的代
          碼),那么你就是在對編程一竅不通的狀態下編程(programming based on superstit
          ion)。打個比方,就好比一個醫生不懂基本的解剖學就給你開處方,如果你問這個醫生
          為什么開這種藥而不是那種藥,他會說因為醫藥銷售代表說這種藥有用。

          畢業前學習微觀經濟學(microeconomics)

          我個人對經濟學的一些理解:在經濟學剛誕生的時候,它只是局限于有限的領域,在這
          些領域中人們發展和發現了很多有用的理論和很有趣的事實,這些理論和事實是從邏輯
          上是可以證明的。然后, 經濟學開始走下坡路了。 “有限的領域”就是微觀經濟學,
          它對于商業可以進行有意義的指導。然后,事情就開始變糟了(以下部分你可以跳過)
          ,你接下來碰到的是討論諸如失業率和銀行利率之間關系之類東東的宏觀經濟學,很多
          時候宏觀經濟學討論的理論都是無法證明正確或者錯誤的。接下來事態更加惡化了,經
          濟學中的一些領域開始和物理學搭界,嗯,學習物理經濟學也許你幫你在華爾街找到好
          工作。言歸正傳,無論如何請學習微觀經濟學,因為你需要知道什么是“供給和需求”
          ,什么是競爭優勢,什么是凈現值(NPVs,Net Present Value,指項目經濟壽命期內現
          金流入總和與現金流出總和之差額),什么是折扣和邊際效用(discounting and marg
          inal utility),如果你真想了解商業是如何運作的話。

          為什么計算機系的學生要學習經濟學?因為理解商業基本規律的程序員對商業界來說是
          寶貴的程序員。我記得無數個程序員使我非常沮喪,因為他們在代碼中堅持某些瘋狂的
          設計,這些設計從技術上來說,完美;從資本主義的角度來看,發瘋。如果你是一個理
          解商業的程序員,商業會給你回報。這就是你要學習經濟學的原因。

          不要因為某些非計算機課程枯燥無趣就敬而遠之

          首先,你需要讓你的學分平均分(GPA)看起來漂亮點。

          不要低估學分平均分的威力。很多雇主和人事經理(包括我)閱讀簡歷時首先看成績,
          為什么?因為這代表了大部分的教授在很長的時期內對你的學業的一個平均的看法。托
          福成績(美國的托福大致相對于我國的高考中的語文考試)?哈,幾個小時的測驗而已
          。當然學分不一定說明了一切,如果你修的是很難的課程,學分就有可能低一點。即使
          你的學分平均分很高,我還是要看各科分數是否一致。如果你應聘的是軟件工程師職位
          ,我為什么要關心你在大學里學的歐洲歷史課程分數的高低呢?畢竟,歷史很枯燥。那

          修這門課的時候,我已經不再是雄心勃勃了。我可不指望在這么課程中得個A,我夢想的
          是混個及格。邏輯本質上是很簡單的:如果結論正確,前提必須正確。例如,如果“所
          有讀書好的人都能找到工作”并且“張三的讀書好”,那么“張三能夠找到好工作”。
          就這么簡單。

          但是我要學的是動態邏輯, 動態邏輯和一般邏輯差不多,但是要考慮時間因素。例如,
          “在你開燈之后,你可以看見你的鞋子”加上“過去燈被打開了”意味著“你現在可以
          看到你的鞋子”

          動態邏輯學對于象Zuck教授這樣的天才理論家來說非常誘人,因為這門學科的知識也許
          可以用來證明計算機程序是否正確。我記得在第一堂課上,為了證明“如果你有一盞關
          著的燈”并且“你按了一下開關”,那么“現在燈亮了”,Zuck教授就使用了兩黑板加
          上邊上的墻壁。

          證明過程難以置信的復雜。我覺得如此復雜的證明過程很可能會有小錯誤,但是我沒辦
          法證明證明過程本身是正確的。事實上,寫在黑板上的證明跳過了很多中間步驟,許多
          步的證明使用了演繹法,使用了歸納法,以及一些研究生才懂的證明方法。

          作為課后作業,我們需要證明以下命題:如果燈過去是關著的,并且現在它是開著的,
          請證明有人按了開關

          我真的試著證明它了。

          我花了許多小時,試圖證明這個命題。

          在無數個小時的努力后,我發覺Zuck博士的原始的證明有一個邏輯上的錯誤,也許這個
          錯誤是我的筆記抄錯了,我不知道。于是我終于認識到,如果為了證明一個簡單的問題
          需要花三個小時寫下幾黑板的證明步驟,再考慮到這個漫長的證明過程中可能會引入種
          種錯誤,那么這種機制是不可能用來證明任何有趣的東西的。

          對動態邏輯學家來說,有用是無關緊要的。

          于是我退出了那門課程,發誓永遠不會去讀計算機系的研究生。

          這個故事的主題是,計算機科學和軟件開發不一樣。如果你非常非常幸運,你的學校會
          開軟件開發的課程。然而,他們也可能不開這樣的課程,因為名牌大學認為教授實用技
          巧的事情應該留給那些二三流的技術學院或者某些釋放犯人再安置計劃。你可以在任何
          地方學習編程,我們是耶魯大學,我們培養未來的世界領導人。你付給耶魯16萬美元的
          學費就是為了學習如何寫循環語句嗎?你把耶魯當成什么地方了?Java速成班嗎?哼。


          問題在于,我們沒有一個專業的學校教授軟件開發。所以如果你想成為一個程序員,你
          可以進計算機系讀書(當然計算機科學也值得學習),但是你學的不是軟件開發。

          如果走運的話,你可以在計算機系發掘出很多有大量編程實踐的課程,就象你能在歷史
          系找到很多提供寫作水平的課程一樣。這些課程絕對值得學習。如果你喜歡編程,不要
          為你不能上教授諸如lambda算子或者線性代數的課程沮喪,在那里你連摸一下計算機的
          機會都沒有。找找看有沒有名字中帶有“實習(Practicum)”字樣的課程,不要在乎P
          racticum是個拉丁語。有用的(無奈狀)課程就是需要在課程名中塞一些拉丁語,才能
          從那些裝模作樣(Liberal Artsy Fartsy)管理層的眼前蒙混過關。

          不要擔心工作都跑到印度去了

          啊哈,如果你人在印度,你就無所謂了。愿你享受外包帶來的工作機會并順祝身體健康


          但是我聽說現在愿意讀計算機系的學生越來越少了。據說原因之一是工作機會都跑到印
          度去了。我認為這種觀點是大錯特錯。首先,根據眼前的商業時尚選擇事業是非常愚蠢
          的。其次,即使工作真的都跑到印度和中國去了,編程對于其他有趣的工作來說都是極
          好的訓練,例如業務流程工程(business process engineering)。第三,無論是在美
          國還是印度,好程序員仍然是非常短缺的,請相信我。當然,現在有許多所謂搞IT的人
          吵吵嚷嚷地說就業形勢不好,工作太難找。但是事實如何?恕我直言,好程序員找工作
          還是很容易。第四,你還有更好的主意嗎?歷史系的畢業生找工作更容易嗎?去法學院
          如何?據我所知,99%的律師恨他們的工作,每分鐘都恨。而且律師一周工作90小時。
          正象我以前說過的,如果你喜歡計算機,那么感謝上帝,你將屬于全世界人中的極少數
          的幸運兒,這些幸運兒熱愛他們的工作,而且工作也可以提供體面的收入。

          實際上,我也不認為報考計算機系的人越來越少有多大的意義。相對于internet泡沫時
          期大家都瘋狂的往計算機系擠,現在的人數回落只是回歸正常水平而已。在泡沫時期,
          我們這個行業涌入了許多對計算機毫無興趣的南郭先生,他們夢想的是拿著高的嚇人的
          薪水加誘人的期權,然后年輕退休。謝天謝地,現在這些人都跑了。

          好好做夏季畢業實習

          明智的招聘者知道熱愛編程的人初中就為當地的牙醫寫數據庫程序,高中就在計算機夏
          令營教課,為校報規劃網站,在某個軟件公司做實習。他們找的就是這樣的人。

          如果你喜歡編程,你最容易犯的最大的錯誤就是“有活就接”。我知道,其他專業的學
          生假期打工可顧不了這些條條框框。但是你不一樣,你擁有一種特殊技能,不要浪費它
          。當你畢業時,你的簡歷上應該已經羅列一堆的編程工作實習。讓其他人去“為大家提
          供租車服務”(Tom Welling是個例外,他業余時間去演超人)。

          最后,為了讓你的生活更容易一點,也為了說明我這篇文章是能夠自圓其說的,我將給
          我自己的公司的做做廣告。我的公司Fog Creek軟件公司,可以為大學生提供軟件開發方
          面的實習機會。在我們公司,你可以學習“編碼,開發,商業”。去年在我們公司實習
          的Ben就是這么說的,可不是因為我給他什么好處他才這么說。二月一號截至,抓緊機會
          吧。

          如果你聽了我的建議,你就會太早地賣掉Microsoft公司的股票,拒絕Google提供的職位
          ,原因是因為你已經擁有自己的公司了。到時候可別后悔,更別怪我,呵呵。





          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 龙胜| 营山县| 龙山县| 济源市| 铜山县| 上栗县| 常熟市| 嘉定区| 芜湖县| 铅山县| 龙川县| 龙门县| 德化县| 阿拉尔市| 英吉沙县| 泗水县| 德惠市| 临颍县| 河西区| 许昌县| 海林市| 通江县| 巴林左旗| 马山县| 定兴县| 平阳县| 禄丰县| 藁城市| 友谊县| 安陆市| 大英县| 灵川县| 湄潭县| 荣昌县| 无棣县| 深州市| 连山| 华容县| 汤阴县| 黑河市| 洛隆县|