程序員的十大層次

 程序員的十個層


覺得這篇文章寫的還蠻意思,全篇很長我簡要的把該文改寫一下,以突出十個層次的區別:
中國的程序員水平比西方程序員水平差,還是中國有許多優秀的程序員達到或超過了西方程序員
同等水平呢?要解決這個問題,必須先知道程序員有多少種技術層級,每個層級需要什麼樣的技
術水平,然後再比較中國和西方在各個技術層級的人數,就可以知道到底有沒有差距,差距有多
大。
當然,對於如何劃分程序員的技術層級,不同公司或不同人會有不同的劃分標準,下面的劃分僅
代表個人的觀點,如有不當之處,還請砸板磚予以糾正。
一、菜鳥
第1 層樓屬於地板層,邁進這層樓的門檻是很低的。基本上懂計算機的基本操作,瞭解計算
機專業的一些基礎知識,掌握一門基本的編程語言如C/C++,或者Java,或者JavaScript,...,
均可入門邁進這層。
二、大蝦
從第1 層爬到第2 層相對容易一些,以C/C++程序員爲例,只要熟練掌握C/C++編程語言,
掌握C 標準庫和常用的各種數據結構算法,掌握STL 的基本實現和使用方法,掌握多線程編程
基礎知識,掌握一種開發環境,再對各種操作系統的API 都去使用一下,搞網絡編程的當然對
socket 編程要好好掌握一下,然後再學習一些面向對象的設計知識和設計模式等,學習一些測
試、軟件工程和質量控制的基本知識,大部分人經過2~3 年的努力,都可以爬到第2 層,晉升
爲"大蝦"。
三、牛人
由於"大蝦"們經常被一些疑難問題給卡住,所以有了"大蝦"們只好繼續學習,他們需要將原
來所學的知識進一步熟練掌握,比如以熟練掌握C++編程語言爲例,除了學一些基礎性的C++
書籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要
的是需要了解C++編譯器的原理和實現機制,瞭解操作系統中的內部機制如內存管理、進程和
線程的管理機制,瞭解處理器的基礎知識和代碼優化的方法,此外還需要更深入地學習更多的數
據結構與算法,掌握更深入的測試和調試知識以及質量管理和控制方法,對各種設計方法有更好
的理解等。
學習上面說的這些知識不是一揮而就的,不看個三五十本書並掌握它是做不到的。以數據結
構算法來說,至少要看個5~10 本這方面的著作;以軟件設計來說,光懂結構化設計、面向對
象設計和一些設計模式是不夠的,還要了解軟件架構設計、交互設計、面向方面的設計、面向使
用的設計、面向數據結構算法的設計、情感化設計等,否則是很難進到這個樓層的。
四、大牛
從第3 層爬到第4 層可不像上面說過的那幾層一樣容易,要成爲大牛的話,你必須要能做
牛人們做不了的事情,解決牛人們解決不了問題。比如牛人們通常都不懂寫操作系統,不會寫編
譯器,不懂得TCP/IP 協議的底層實現,如果你有能力將其中的任何一個實現得象模象樣的話,
那麼你就從牛人升級爲"大牛"了。
當然,由於各個專業領域的差別,這裏舉操作系統、編譯器、TCP/IP 協議只是作爲例子,
並不代表成爲"大牛"一定需要掌握這些知識,以時下熱門的多核編程來說,如果你能比牛人們更
深入地掌握其中的各種思想原理,能更加自如的運用,並有能力去實現一個象開源項目TBB 庫
一樣的東西,也可以成爲"大牛",又或者你能寫出一個類似Apache 一樣的服務器,或者寫出一
個數據庫,都可以成爲"大牛"。
當"牛人"晉升爲"大牛",讓"牛人們"發現有比他們更牛的人時,對"牛人"們的心靈的震撼是可
想而知的。由於牛人們的數量龐大,並且牛人對大蝦和菜鳥階層有言傳身教的影響,所以大牛們
通常能獲得非常高的社會知名度,幾乎可以用"引無數菜鳥、大蝦、牛人競折腰"來形容,看看前
面提過的Linus Torvalds 等大牛,應該知道此言不虛。
雖然成爲"大牛"的條件看起來似乎很高似的,但是這層樓並不是很難爬的一層,只要通過一定的
努力,素質不是很差,還是有許多"牛人"可以爬到這一層的。由此可知,"大牛"這個樓層的人數
其實並不像想像的那麼少,例如比爾·蓋茨之類的人好像也是屬於這一層的。
五、專家
當大牛們真正動手做一個操作系統或者類似的其他軟件時,他們就會發現自己的基本功仍然有很
多的不足。以內存管理爲例,如果直接抄襲Linux 或者其他開源操作系統的內存管理算法,會被
人看不起的,如果自動動手實現一個內存管理算法,他會發現現在有關內存管理方法的算法數量
衆多,自己並沒有全部學過和實踐過,不知道到底該用那種內存管理算法。
看到這裏,可能有些人已經明白第5 層樓的奧妙了,那就是需要做基礎研究,當然在計算機裏,
最重要的就是"計算"二字,程序員要做基礎研究,主要的內容就是研究非數值"計算"。
非數值計算可是一個非常龐大的領域,不僅時下熱門的"多核計算"與"雲計算"屬於非數值計算範
疇,就是軟件需求、設計、測試、調試、評估、質量控制、軟件工程等本質上也屬於非數值計算
的範疇,甚至芯片硬件設計也同樣牽涉到非數值計算。如果你還沒有真正領悟"計算"二字的含義,
那麼你就沒有機會進到這層樓來。
六、學者
當"專家"們想繼續往上一層樓爬時,他們幾乎一眼就可以看到樓梯的入口,不過令他們吃驚的是,
樓梯入口處豎了一道高高的門檻,上面寫着"創新"二字。不幸的是,大多數人在爬到第5 層樓時
已經體能消耗過度,無力翻過這道門檻。
以查找爲例,並不是去天天盯着那些複雜的查找結構和算法進行研究,你需要做的是將二分查找、
哈希查找、普通二叉樹查找等基礎性的知識好好地複習幾遍。
以哈希查找爲例,首先你需要去將各種衝突解決方法如鏈式結構、二次哈希等編寫一遍,再試試
不同種類的哈希函數,然後還需要試試在硬盤中如何實現哈希查找,並考慮數據從硬盤讀到內存
後,如何組織硬盤中的數據才能快速地在內存中構建出哈希表來,...,這樣你可能需要將一個哈
希表寫上十幾個不同的版本,並比較各個版本的性能、功能方面的區別和適用範圍。
總之,對任何一種簡單的東西,你需要考慮各種各樣的需求,以需求來驅動研究。最後你將各種
最基礎性的查找結構和算法都瞭然於胸後,或許某天你再看其他更復雜的查找算法,或者你在散
步時,腦袋裏靈光一現,突然間就發現了更好的方法,也就從專家晉升爲"學者"了。
七、大師
從第6 層樓爬到第7 層樓,並沒有多少捷徑可走,主要看你有沒有足夠的能量。你如果能象Hoare
一樣設計出一個快速排序的算法;或者象Eugene W. Myers 一樣設計出了一個用編輯圖的最短
路徑模型來解決diff 問題的算法;或者象M.J.D. Powell 一樣提出了一個能夠處理非線性規劃問
題的SQP 方法;或者你發現基於比較的排序算法,它的複雜度下界爲O(NLogN);或者你發現
用棧可以將遞歸的算法變成非遞歸的;或者你設計出一個紅黑樹或者AVL 樹之類的查找結構;
或者你設計出一個象C++或Java 一樣的語言;或者你發明了UML;...,你就爬到了第7 層,晉
升爲"大師"了。
八、科學家
科學家向來都是一個神聖的稱號,因此我把他放在了“大師”之上。要成爲科學家,你的貢獻必須
超越大師,不妨隨便舉一些例子。
如果你象Dijkstra 一樣設計了ALGOL 語言,提出了程序設計的三種基本結構:順序、選擇、循
環,那麼你可以爬到第8 層樓來。順便說一下,即使拋開這個成果,Dijkstra 憑他的PV 操作和
信號量概念的提出,同樣可以進到這層樓。
如果你象Don Knuth 一樣,是數據結構與算法這門學科的重要奠基者,你也可以進到這層樓來。
當然,數據結構和算法這門學科不是某個人開創的,是許多大師和科學家集體開創的。
如果你象巴科斯一樣發明了Fortran 語言,並提出了巴科斯範式,對高級程序語言的發展起了重
要作用,你也可以進到這層樓來。
九、大科學家
進入這層樓的門檻通常需要一些運氣,比如某天有個蘋果砸到你頭上時,你碰巧發現了萬有引力,
那麼你可以進到這層樓來。當然,萬有引力幾百年前就被人發現了,如果你現在到處嚷嚷着說你
發現了萬有引力,恐怕馬上會有人打110,然後警察會把你送到不正常人類的聚集地去。因此,
這裏舉萬有引力的例子,只是說你要有類似的成就才能進到這層樓來。
當然,程序員們最關心的是自己有沒有機會變成大科學家。既然計算機這門大學科的開創性成果
早就被馮·諾伊曼、圖靈等人摘走了,那麼程序員們是不是沒有機會變成大科學家了呢?我們的
古人說得好:“江山代有才人出,各領風騷數百年”,現在在計算機這門學科下面誕生了許多非常
重要的大的分支,所以你還是有足夠的機會進到這層樓的。
如果你能夠徹底解決自然語言理解(機器翻譯)這門學科中的核心問題, 或者你在人工智能或
者機器視覺(圖像識別)方面有突破性的發現,那麼你同樣可以輕易地晉升爲“大科學家”。這
樣當某天你老了去世時,或許那天國人已經覺醒,你也能享受到如Dijkstra 一樣的待遇,有滿城
甚至全國的人去爲你送葬。
十、大哲
看了這層樓的名字“大哲”,可能不少人已經猜到了這層樓的祕密,那就是你的成果必須要上升到
哲學的高度,你纔有機會能進到這層來。
當然,上升到哲學高度只是一個必要條件,牛頓的萬有引力似乎也上升到了哲學的高度,因爲不
知道引力到底是怎麼來的,但是牛頓沒有被劃到這一層,因爲進到這層還有另外的條件,那就是
你的成果必須引起了哲學上的深度思考,並能讓人們的世界觀向前跨進一大步。竊以爲牛頓、愛
因斯坦等人的成就還達不到讓人們世界觀向前跨進一大步的程度。
所以,這層樓中的人的成就對我們普通人認識世界非常重要,你可以不學相對論,但是你不可以
不對這層樓的人所作出的成就不瞭解,否則你的世界觀就是極其不完整的,會犯許多認識上的錯
誤。不幸的是,中國的科普知識普及還不夠到位,知道這層樓成就的人好像並不多,程序員中恐
怕更少。下面就來看看這些用一隻手的手指數得清的大哲們,到底有什麼成就,能比萬有引力定
律和相對論還重要。
1、希爾伯特(1862~1943)
第1 位進到此樓層是一位名叫“希爾伯特”的大數學家,如果你學過《泛函分析》,那麼你在學
習希爾伯特空間時可能已經對這位大數學家有所瞭解;如果你不是學數學出身的,又對數學史不
感興趣的話,恐怕你從來沒有聽說過這個名字。不過如果我問一下,知不知道二次世界大戰前世
界數學中心在那裏,你肯定會有興趣想知道。
不妨說一下,二戰前整個世界的數學中心就在德國的哥廷根,而我們這位大數學家希爾伯特便是
它的統帥和靈魂人物。即使在二戰期間,希特勒和丘吉爾也有協定,德國不轟炸牛津和劍橋,作
爲回報,英國不轟炸海德堡和哥廷根。
2、哥德爾(1906~1978)
這位大哲的名字叫“哥德爾(G?del) ”,你可能從來也沒有聽說過這個名字,即使你讀了一個數
學系的博士學位,如果你的研究方向不和這位大哲對口的話,你也不一定了解這位大哲的成就,
更不知道他的成果對我們這個世界有何意義。
簡單地說,這位大哲20 多歲時就證明了兩個定理,一個叫做“哥德爾完全性定理”,另一個更
重要的叫做“哥德爾不完全性定理”。你也許會覺得奇怪,第9 層樓的成就就已經上升到了公理
的高度,這種證明定理的事情不是學者和大師們做的事情嗎?怎麼能比第9 層樓的成就還高呢?
下面就來簡單說一下這兩個定理的含義,你就會明白這屬於系統級的定理,絕不是普通的定理和
公理所能比擬的。
“哥德爾完全性定理”證明了邏輯學的幾條公理是完備的,即任何一個由這些公理所產生出的問
題,在這個公理系統內可以判定它是真的還是假的,這個結論表明了我們人類所擁有的邏輯思維
能力是完備的。這條定理並不能將其帶入這層樓來,帶其進入這層樓的是另一條定理。
可能你看過《未來戰士》、《黑客帝國》、《I,Robot》之類的科幻電影,於是你產生製造一個和人
一樣或者比人更高一級的智能機器人的想法,這就引入了一個達到哲學高度的問題,“人到底能
不能製造出具有和人一樣的思維能力的機器來?”。
我只能告訴你,“你的願望是良好的,但現實是殘酷的”。如果你仔細思考一下不完全性定理的含
義,並結合現代計算機所具有的能力分析一下,你會發現這個問題的答案暫時是否定的。如果你
想造出和人一樣思維能力的機器,那麼你需要去好好學習這位大哲及其後續研究者的成果,並在
他們的基礎上有新的突破才行。
3、海森堡(1901~1976)
海森堡這個名字相信沒有幾個人不知道的,大部分人在學習物理時都學過他的“測不準關係”,
也就是因爲這個“測不準關係”,海森堡爬到了第十層樓。
如果你看過《時間簡史》和《霍金講演錄-黑洞、嬰兒宇宙及其他》,你也許已經瞭解測不準關
系的威力,所以這裏不想做過多的討論,只談一些和本土產生的哲學思想相關的東西。
十一、超越第十層的上帝
看了上面的小標題,你可能會覺得奇怪,這篇文章不是講“程序員的十層樓”嗎?怎麼冒出了第
11 層來了?
其實這並不矛盾,程序員確實只有十層樓,因爲爬到第11 層時,已經變成上帝,不再是程序員
了;所以超出10 層樓本身並不重要,關鍵的問題是看你有沒有能力變成上帝。
1、誰是上帝?
菜鳥們認爲Linus Torvalds 是程序員中的上帝,看完了前面各層樓的介紹,此時再看到這句話,
相信你要忍不住在心裏笑起來。當然,你會不會笑起來是事先註定的。Don Knuth 也不是上帝,
他離上帝還有三層樓的距離。即使是大哲們,他們離天堂也還差一層樓,因此這個世界上有史以
來還沒有任何一個人變成過上帝。
我們感興趣的是,將來會不會有人爬到比大哲們更高的樓層上,變成了上帝。
要變成上帝,你得有上帝一樣的能力,上帝會造人,你會嗎?
你也許會怯生生地問:“我可以和愛人生小孩,算不算造人?”,你可能還會理直氣壯地說:“現
在生物學上都可以克隆人了,早就有人掌握了造人的方法”。
事實上克隆人需要有人的體細胞,必須要先有人纔會有體細胞。上帝造人時,這個世界上並沒有
人,是從無生命的物質“塵土”中創造出的人。因此,用最原始的方法生人和克隆人都是從有生
命信息的物質中生人,不能算作造人。
讀後感:
終於輪到我來發表一下看法了,這也是我爲什麼要把這篇文章摘抄下來的原因。可以看出本文作
者是爲C/C++程序員並且受過良好的教育,以及高於編程以外的思考。要說作者參透了一切,
看破了紅塵。那到未必,不過作者的十個層次分級對一名程序員來說一個很好的指導性意見。最
後用《天道》中的《自嘲》做爲結束:
卜算子·自嘲
本是後山人,偶做前堂客,醉舞經閣半卷書,坐井說天闊。
大志戲功名,海斗量福禍,論到囊中羞澀時,怒指乾坤錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章