最近這個話題很熱,不吐不快,標題叫程序員的目標不夠醒目,不得以用了下吉日風格的標題,莫怪莫怪。不知是不是因為最近災難頻發(fā),大家都比較困惑。很多程序員的困惑是,費了比別人多的努力,每天加著班,沒有女朋友,沒有生活,我的目標就是當個經(jīng)理,賺大錢,確很難實現(xiàn)。是的,就這個目標來說我可以肯定的說,90%以上的程序員都會失望,大公司就那么多個,工資高的職位就這么多,經(jīng)理職位就這么多,任何行業(yè)都是這樣,之所以會失望,其實我認為就是你的目標錯了,高工資,當經(jīng)理都跟程序員沒有關系,程序員是一個職業(yè),一個專業(yè)的職業(yè),那么作為一個程序員應該有一個專業(yè)上的目標,賺多少錢和程序員的專業(yè)素養(yǎng)沒有關系,你可以把賺多少錢開寶馬作為人生的目標,但是你作為程序員的目標不應該是賺錢。
很多人在入行的時候就定錯了目標,好高騖遠的想去混入管理層拿高工資,要當架構師就不用寫代碼,浮躁,結果就是做了多年之后除了比入行的時候多了點經(jīng)驗,其實程序員的職業(yè)能力上一點提高都沒有,才畢業(yè)的時候就會寫寫網(wǎng)頁做做網(wǎng)站,結果工作多年后還是只會干這個,不過多了點經(jīng)驗,于是簡歷上把這個技能包裝包裝,于是就成了XX行業(yè)資深開發(fā)專家.......這里不是歧視做網(wǎng)站,真正做網(wǎng)站的比如豆瓣,人人之類的大型互聯(lián)網(wǎng)網(wǎng)站的開發(fā)是很有技術含量和技術深度的,我以上所說的寫寫網(wǎng)頁做做網(wǎng)站所指的什么大家都明白。
可以這么說,現(xiàn)在行業(yè)內的程序員80%都不是真正的程序員,對那些做著程序員工作的代碼工人來說,程序員只是一個混口飯吃的工作而已,那么工作的目的就是賺錢,盯著錢看就沒什么不對了。人生目標和自己的專業(yè)目標分不清楚,難怪那頭都討不到好。專業(yè)和職業(yè)是兩碼,專業(yè)關注的是你做事的能力,職業(yè)關系的是你在公司的職位,這個東西理不清楚就只能是兩頭不討好。
作為程序員應該追求的是自己專業(yè)素養(yǎng)上的提升,作為一個職員應該向著高薪努力,當然有的程序員自己又是老板,比如康盛創(chuàng)想的戴志康 ,那么作為老板又有另外的追求了。我覺得作為一個程序員,在一個程序員的社區(qū)里應該關注的是自己的專業(yè)而不是在這里大談程序員怎么怎么賺不到錢。
最后發(fā)幾個真正大牛的事跡,作為自我激勵到目標,計算機的世界很大,還有很多技能是我們沒有掌握的,我們自己所做的也不是都做到了最好。每天看看動力就足了:
Bill Joy, 前任Sun的首席科學家,當年在Berkeley時主持開發(fā)了最早版本的BSD。他還是vi和csh的作者。當然,Csh Programming Considered Harmful 是另一個話題樂。據(jù)說他想看看自己能不能寫個操作系統(tǒng),就在三天里寫了個自己的Unix, 也就是BSD的前身。當然是傳說了,但足見他的功力。另一個傳說是,1980年初的時候,DARPA讓BBN在Berkley Unix里加上BBN開發(fā)的TCP/IP代碼。但當時還是研究生的B伯伯怒了,拒絕把BBN TCP/IP加入BSD,因為他覺得BBN的TCP/IP寫得不好。于是B伯伯出手了,端的是一箭封喉,很快就寫出了高性能的伯克利版TCP/IP。當時 BBN和DARPA簽了巨額合同開發(fā)TCP/IP Stack,誰知他們的代碼還不如一個研究生的好。于是他們開會。只見當時B伯伯穿個T-shirt出現(xiàn)在會議室(當時穿T-shirt不象現(xiàn)在,還是相當散漫的哈)。只見BBN問:你怎么寫出來的?而B伯伯答:簡單,你讀協(xié)議,然后編程就行了。最令偶暈倒的是,B伯伯碩士畢業(yè)后決定到工業(yè)界發(fā)展,于是就到了當時只有一間辦公室的Sun, 然后他就把Sparc設計出來樂。。。象這種軟硬通吃的牛人,想不佩服都不行的說。據(jù)Bill Joy的同事說,一般開會的時候B伯伯總是拿一堆雜志漫不經(jīng)心地讀。但往往在關鍵之處,B伯伯發(fā)言,直切要害,提出漂亮的構想,讓同事們徹底崩潰。對了,他還是Java Spec和JINI的主要作者之一。
John Carmack,ID Software的founder和Lead Programmer。上個月和一個搞圖形的師兄聊天,他竟然不知道John Carmack, 也讓偶大大地暈了一把。不過也許搞研究的和搞實戰(zhàn)的多少有些隔吧。想必喜歡第一人稱射擊游戲的都知道J哥哥。90年代初只要能在PC上搞個小動畫都能讓人驚嘆一番的時候,J哥哥就推出了石破天驚的Castle Wolfstein, 然后再接再勵,doom, doomII, Quake...每次都把3-D技術推到極限。J哥哥的簡歷上說自己的專長是"Exhaust 3-D technology",真是牛人之言不我欺的說。做J哥哥這樣的人是很幸福的,因為各大圖形卡廠家一有了新產(chǎn)品就要向他“進貢” ,不然如果他的游戲不支持哪種卡,哪種卡基本就會夭折樂。當初MS的Direct3D也得聽取他的意見,修改了不少API。當然,J哥哥在結婚前十數(shù)年如一日地每天編程14小時以上,也是偶們凡人望塵莫及的。對了,J哥哥高中肆業(yè)(?),可以說是自學成才。不過呢,誰要用這個例子來為自己學習不好辯護,就大錯特錯了。那 Leonardo Da Vinci還是自學成才呢(人是私生子,不能上學)。普通人和天才還是有區(qū)別的。對了,其實偶們叫“達分奇”是相當不對的,因為Vinci是地名,而Da Vinci就是從Vinci來的人的意思。換句話說,Leonardo Da Vinci就是“從Vinci來的Leonardo”的意思。叫別人“Da Vinci”就不知所謂樂。嗯,扯遠了,打住。
David Cutler,VMS和Windows NT的首席設計師,去微軟前號稱硅谷最牛的kernel開發(fā)員。當初他和他的手下在微軟一周內把一個具備基本功能的bootable kernel寫出來,然后說:“who can't write an OS in a week?",也是牛氣沖天的說。順便說一句,D爺爺?shù)絅T3.5時,管理1500名開發(fā)員,自己還兼做設計和編程,不改coder本色啊。D爺爺天生脾氣火爆,和人爭論時喜歡雙手猛擊桌子以壯聲勢。 日常交談F-word不離口。他面試秘書時必問:"what do you think of the word '[censored]'?" ,讓無數(shù)美女剎羽而歸。終于有一天,一個同樣火爆的女面對這個問題脫口而出:"That's my favorite word"。于是她被錄取樂,為D爺爺工作到NT3.5發(fā)布。
Don Knuth。高爺爺其實用不著偶多說。學編程的不知道他就好像學物理的不知道牛頓,學數(shù)學的不知道歐拉,學音樂的不知道莫扎特,學Delphi的不知到 Anders Hejlsberg,或者學Linux不知道Linus Torvalds一樣,不可原諒啊。為了讓文章完整,就再羅唆幾句吧。高爺爺本科時就開始給行行色色的公司寫各種稀奇古怪的編譯器掙外快了。他賣給別人時收一兩千美元,那些公司拿了 code,加工一下賣出去就是上萬上十萬。不過也沒見高爺爺不爽過,學者本色的說。想想那可是60年代初啊,高爺爺寫編譯器寫多了,順帶就搞出了個 Attribute Grammar和LR(k),大大地造福后人啊。至于高爺爺在CalTech的編程比賽(有Alan Kay得眾多高高手參加)總是第一,寫的Tex到86年就code freeze,還附帶2^n美分獎勵等等都是耳熟能詳?shù),偶就不饒舌樂?
順便說一下,高老大爺是無可爭議的寫作高手。他給Concrete Mathematics 寫的前言可謂字字鏗鏘,堪為前言的典范。他的技術文章也是一絕,文風細致,解釋精當,而且沒有學究氣,不失輕快跳脫。記得幾年前讀Concrete Mathemathics,時不時開懷大笑,讓老媽極其郁悶,覺得我nerdy到家,不可救藥。其實呢,子非魚,安知魚之樂,更不知那完全是高爺爺?shù)墓。說到寫作高手,不能不提Stephen A. Cook。他的文章當年就被我們的寫作老師極力推薦,號稱典雅文風的樣本。庫爺爺一頭銀發(fā),身材頎長,總是面帶謙和的微笑,頗有仙風道骨,正好和他的仙文相配的說。
高爺爺其實還是開源運動的先驅。雖然他沒有象Richard Stallman那樣八方奔走,但他捐獻了好多作品,都可以在網(wǎng)上看到,比如著名的Mathematical Writing,MMIXWare,The Tex Book等,更不用說足以讓他流芳百世的Tex樂。
Ken Thompson,C語言前身B語言的作者,Unix的發(fā)明人之一(另一個是Dennis M. Riche老大,被尊為DMR),Belle(一個厲害的國際象棋程序)的作者之一, 操作系統(tǒng)Plan 9的主要作者(另一個是大牛人Rob Pike, 前不久被google挖走了)。Ken爺爺也算是計算機歷史上開天辟地的人物了。1969年還是計算機史前時代,普通人都認為只有大型機才能運行通用的操作系統(tǒng),小型機只有高山仰止的份兒。至于用高級語言來寫操作系統(tǒng),更是笑談。Ken爺爺自然不是池中物,于是他和DMR怒了,在1969年到1970間用匯編在PDP-7上寫出了UNIX的第一個版本。他們并不知道,一場轟轟烈烈的UNIX傳奇由此拉開了序幕。Ken爺爺在1971年又把Unix用C重寫,于是C在隨后20年成就了不知多少豪杰的夢想和光榮。
Ken爺爺還有段佳話: 裝了UNIX的PDP-11最早被安裝在Bell Lab里供大家日常使用。很快大家就發(fā)現(xiàn)Ken爺爺總能進入他們的帳戶,獲得最高權限。Bell Lab里的科學家都心比天高,當然被搞得郁悶無比。于是有高手怒了,跳出來分析了UNIX代碼,找到后門,修改代碼,然后重新編譯了整個UNIX。就在大家都以為“這個世界清凈了”的時候,他們發(fā)現(xiàn)Ken爺爺還是輕而易舉地拿到他們的帳戶權限,百思不解后,只好繼續(xù)郁悶。誰知道這一郁悶,就郁悶了14年,直到Ken爺爺?shù)莱鰝中緣由。原來,代碼里的確有后門,但后門不在Unix代碼里,而在編譯Unix代碼的C編譯器里。每次C編譯器編譯UNIX的代碼,就自動生成后門代碼。而整個Bell Lab的人,都是用Ken爺爺?shù)腃編譯器。
Rob Pike, AT&T Bell Lab前Member of Technical Staff ,現(xiàn)在google研究操作系統(tǒng) 。羅伯伯是Unix的先驅,是貝爾實驗室最早和Ken Thompson以及Dennis M. Ritche開發(fā) Unix的猛人,UTF-8的設計人。他還在美國名嘴David Letterman的晚間節(jié)目上露了一小臉,一臉憨厚地幫一胖子吹牛搞怪。讓偶佩服不已的是,羅伯伯還是1980年奧運會射箭的銀牌得主。他還是個頗為厲害的業(yè)余天文學家,設計的珈瑪射線望遠鏡差點被NASA用在航天飛機上。他還是兩本經(jīng)典,The Unix Programming Environment 和 The Practice of Programming 的作者之一。如果初學者想在編程方面精益求精,實在該好好讀讀這兩本書。它們都有中文版的說。羅伯伯還寫出了Unix下第一個基于位圖的窗口系統(tǒng),并且是著名的blit 終端的作者。當然了,羅伯伯還是號稱銳意革新的操作系統(tǒng),Plan9,的主要作者。可惜的是,Plan9并沒有引起多少人的注意。羅伯伯一怒之下,寫出了振聾發(fā)聵的雄文 Systems Software Research is Irrelevant,痛斥當下系統(tǒng)開發(fā)的不思進取,固步自封的弊病。雖然這篇文章是羅伯伯含忿出手,頗有偏激之詞,但確實道出了系統(tǒng)開發(fā)的無奈:開發(fā)周期越來越長,代價越來越大,用戶被統(tǒng)一到少數(shù)幾個系統(tǒng)上,結果越來越多的活動是測量和修補,而真正的革新越來越少。就在羅伯伯郁悶之極的時候,google登門求賢來樂。如果說現(xiàn)在還有一家大眾公司在不遺余力地把系統(tǒng)開發(fā)推向極致的話,也就是google了。隨便看看google的成果就知道了。具有超強容錯和負載平衡能力的分布式文件系統(tǒng)GFS (現(xiàn)在能夠用100,000臺廉價PC搭起一個巨型分布系統(tǒng),并且高效便宜地進行管理的系統(tǒng)也不多哈),大規(guī)模機器學習系統(tǒng)(拼寫檢查,廣告匹配,拼音搜尋。。。哪個都很牛的說),更不用說處理海量并行計算的各式google服務了。Rob在System Software Research is Irrelevant里蕭瑟地說現(xiàn)在沒有人再關心系統(tǒng)研究的前沿成果了。想不到他錯了,因為google關心。google網(wǎng)絡了大批功成總是試圖吸取系統(tǒng)研究的最新成果。想必Rob Pike在google很幸福。愿他做出更棒的系統(tǒng)。
Dennis M. Ritchie, 既然Ken Thompson是我的偶像,新聞組上人稱DMR的Dennis M. Ritchie自然也是,畢竟兩人共同締造了UNIX,而Dennis幾乎獨力把C搞大(當然,C的前身是B,而B是Ken Thompson一手做出來的)。兩人1983年分享圖靈獎,是有史以來少數(shù)幾個因工程項目得獎的工程師(本來是唯一的一對兒,但Alan Kay才因為SmallTalk得獎,所以就成了唯二的樂) 。一個人一生能做出一個卓越的系統(tǒng)已經(jīng)不易,DMR的C和UNIX長盛不衰近30年,至今生機勃勃,DMR此生可以無憾的說。D爺爺也算有家學淵源:他老爸在AT&T貝爾實驗室工作了一輩子,并在電路設計方面卓有成就,還出了本頗有影響的書The Design of Switching Circuits,據(jù)說在交換理論和邏輯設計方面有獨到的論述。當然,D爺爺和他老爸是不同時代的人:他老爸的研究成形于晶體管發(fā)明之前,而D爺爺?shù)墓ぷ麟x了晶體管就玩兒不轉樂。不要看D爺爺搞出了C,其實他最愛的編程語言是Alef,在Plan9上運行,支持并行編程。Alef的語法和C相似,但數(shù)據(jù)類型和執(zhí)行方式都和 C大大不同。說到語言,D爺爺對后來人有非常中肯的建議:抱著學習的目的來開發(fā)你自己的語言,不要冀望于它被眾人接受。這個建議不光對語言開發(fā)有用,也適用于其它大型系統(tǒng)的開發(fā)。別的不說,DMR后來領導自己的團隊在1995年和 1996分別推出了Plan9和Inferno操作系統(tǒng),又用多少人知道呢?其實,D爺爺當初也沒想過C會風行世界。他開發(fā)C的初衷和Eric S. Raymond在Cathedral and Bazaar里闡述的一樣,就是要消除自己對現(xiàn)有工具的不爽之處。誰知D爺爺無心插柳,C竟然受到眾多程序員的狂熱擁戴,連D爺爺自己都大惑不解。在一次采訪中D爺爺說大概那是因為C的抽象程度碰巧既滿足了程序員的要求, 又容易實現(xiàn)。當然C一度是Unix上的通用語言也是原因。但不管怎么說,D爺爺對編程語言出色的審美意識奠定了C廣為流傳的基礎。最后八卦一下。D爺爺?shù)臉I(yè)余愛好和NBA大牛Karl Malone一樣:開卡車。不過D爺爺更喜歡開NASCAR,而KM獨愛巨無霸。D爺爺自稱心中不供偶像,如果一定要說一個,那就是Ken Thompson了,F(xiàn)在Ken爺爺退休當飛機教練去了,而D爺爺當了貝爾實驗室系統(tǒng)開發(fā)部的頭,整日忙于開支票。他倆合作20年,屢屢創(chuàng)造歷史。這段令人神往的佳話,也就長留你我心中樂。
P.S., 很多人都以為Brian W. Kernighan是C的作者。其實BWK只是寫了那本經(jīng)典K&R C。據(jù)D爺爺說,他,Ken, 和Kernighan三人中,Kernighan最能寫文章,他次之,而Ken寫得最少;但說到編程,Ken爺爺才是當之無愧的老大。
Edsger Wybe Dijkstra, 對,就是E.W. Dijkstra. 一提到EWD,很多人就會想起找最短路徑的Dijkstra Algorithm,就好像一提到Sir. Tony Hoare,就想起Quick Sort一樣。其實這些個算法不過是兩個牛人在他們職業(yè)生涯中最瑣碎的貢獻。比如Dijkstra算法,無非是戴爺爺在1956年為了展示新計算機 ARMAC的計算能力,初試身手的成果,屬于他的算法處女作。據(jù)戴爺爺自述,他搞出最短路徑算法的時候連紙筆都沒用。當時他和他老婆在阿姆斯特丹一家咖啡廳的陽臺上曬太陽喝咖啡,突然就把這個算法想出來樂。而且當時的算法研究還比較原始,牛人們忙著用計算機搞數(shù)值計算,對離散算法不屑一顧。那時連一個象樣的專注于離散算法的專業(yè)期刊都沒有。戴爺爺于是推遲發(fā)表這個算法。直到1959年,他才把這個算法發(fā)表在Numerische Mathematik的創(chuàng)刊號上,權為捧場。 EWD在多個領域牛氣沖天,端的是理論和編程兩手硬的高手。只不過他的很多工作比較深刻,學校的老先生們覺得本科生接受不了,不給本科生講而已。戴爺爺大概因為最短路徑算法一戰(zhàn)成名,于是有人請他參加另一臺計算機X1的設計工作,并且把設計實時中斷系統(tǒng)的任務派給了他,F(xiàn)在看來實時中斷也許不算什么,但要知到,X1前根本就沒有實時中斷的概念。實現(xiàn)它簡直就是一場豪賭。戴爺爺起初還不情愿,但經(jīng)不住項目負責人Bram和Carel的輪番 “吹捧”:我們知道實時中斷讓您工作變得非常困難,但象您這樣的牛人肯定能做出來的說。結果戴爺爺被糖衣炮彈徹底擊穿,接下了這個燙手山芋。兩三年后,他不僅搞出了實時中斷,還圍繞這個寫出了自己的博士論文,順利戴上博士帽。讓戴爺爺真正成名立萬的還是在X1上開發(fā)的Algo60,最早的高級語言之一。戴爺爺沒日沒夜地工作了8個月,就搞出了Algo60,也因此獲得了 1972年的圖靈獎。因為Algo60,戴爺爺發(fā)表了一篇石破天驚的文章:Recursive Programming,于是人們才知道,原來高級語言也可以高效地實現(xiàn)遞歸,原來從此以后,所有程序員都不可避免地和戴爺爺發(fā)明的一個詞(應該說是概念)打交道:堆棧。而且Algo60還讓戴爺爺深入地思考多道程序設計的問題,最終發(fā)明了每個系統(tǒng)程序員都繞不開的概念:semaphore。當然,戴爺爺總是把他發(fā)明的概念嚴格形式化,極具科學家本色的說。和這些成就想比,他提出的吃飯的哲學家問題,也就沒什么好說的了。說來好笑,當時的大學(忘了哪所了)還是覺得戴爺爺沒有受過正統(tǒng)的數(shù)學訓練,也不是專門搞數(shù)值分析的,所以最后不太情愿地給了他一個教職。這種小挫折并不能妨礙象戴爺爺這樣的牛人創(chuàng)造歷史。他一邊教數(shù)值分析,一邊開始開發(fā)一個新的操作系統(tǒng),并培養(yǎng)計算機科學家。幾年后,THE Multiprogramming System橫空出世。THE是第一個支持松散耦合,顯式同步的進程并由此使得嚴格證明系統(tǒng)沒有死鎖變得容易的操作系統(tǒng)。可惜戴爺爺任職的系不識貨,還強行解散了他的研究小組(1972年戴爺爺給他的系主任說他得了圖靈獎,系主任的第一反應是你們搞計算機就喜歡亂發(fā)獎)。這讓戴爺爺相當郁悶,得了抑郁癥。在極度郁悶之中,戴爺爺決定用寫作來治療自己的抑郁癥。于是經(jīng)典就誕生樂:Notes on Structured Programming。戴爺爺從此被尊為結構化編程的奠基人,而且他的抑郁癥也被治好樂。EWD太牛,結果他的故事也太多。先到這里吧。1973起,他的故事就在美國發(fā)生了。
Anders Hejlsberg,微軟.NET的首席架構師,編程語言設計和實現(xiàn)的頂尖高手。他一手做出了 Turbo Pascal, 也是Delphi, J++(尤其是WFC),C#, 和.NET的主要作者。這些作品的名字足以為他立傳。作為一個程序員,我在這樣的大師面前實在無語。生子當如Anders的說。李維的《Borland傳奇》里已詳細講述了Anders的傳奇故事,我就不用費舌了:http: //java.mblogger.cn/iexploiter/posts/1505.aspx 。Artima上有Anders談C#的系列訪談。MSDN上有一段Anders導游的錄像 。有興趣可以去看看牛人的豐采。