程式設計師的十層樓(十種境界)——轉載
原文出處:未知(如有知曉的,請告知,必將修改,以示對原作者的尊重)
自西方文藝復興以來,中國在自然科學方面落後西方很多,軟體領域也不例外。當然現在中國的許多程式設計師們對此可能有許多不同的意見,有些人認為中國的程式設計師水平遠落後於西方,有些則認為中國的程式設計師個人能力並不比西方的程式設計師差,只是整個軟體產業落後而已。
那麼,到底中國的程式設計師水平比西方程式設計師水平差,還是中國有許多優秀的程式設計師達到或超過了西方程式設計師同等水平呢?要解決這個問題,必須先知道程式設計師有多少種技術層級,每個層級需要什麼樣的技術水平,然後再比較中國和西方在各個技術層級的人數,就可以知道到底有沒有差距,差距有多大。
當然,對於如何劃分程式設計師的技術層級,不同公司或不同人會有不同的劃分標準,下面的劃分僅代表個人的觀點,如有不當之處,還請砸板磚予以糾正。
第1層 菜鳥
第1層樓屬於地板層,邁進這層樓的門檻是很低的。基本上懂計算機的基本操作,瞭解計算機專業的一些基礎知識,掌握一門基本的程式語言如C/C++,或者Java,或者JavaScript,...,均可入門邁進這層。
在這層上,中國有著絕對的優勢,除了從計算機專業畢業的眾多人數外,還有大量的通訊、自動化、數學等相關專業的人士進入這一行,此外還有眾多的其他專業轉行的人士,人數絕對比西方多出甚多。並且還有一個優勢就是我們這層人員的平均智商比西方肯定高。
沒有多少人願意一輩子做菜鳥,因為做"菜鳥"的滋味實在是不咋的,整天被老大們吆喝著去裝裝機器,搭建一下測試環境,或者對照著別人寫好的測試用例做一些黑盒測試,好一點的可以被安排去寫一點測試程式碼。當然如果運氣"好"的話,碰到了國內的一些作坊式的公司,也有機會去寫一些正式的程式碼。
所以,菜鳥們總是在努力學習,希望爬更高的一層樓去。
第2層 大蝦
從第1層爬到第2層相對容易一些,以C/C++程式設計師為例,只要熟練掌握C/C++程式語言,掌握C標準庫和常用的各種資料結構演算法,掌握STL的基本實現和使用方法,掌握多執行緒程式設計基礎知識,掌握一種開發環境,再對各種作業系統的API都去使用一下,搞網路程式設計的當然對socket程式設計要好好掌握一下,然後再學習一些物件導向的設計知識和設計模式等,學習一些測試、軟體工程和質量控制的基本知識,大部分人經過2~3 年的努力,都可以爬到第2層,晉升為"大蝦"。
中國的"大蝦"數量和"菜鳥"數量估計不會少多少,所以這層上仍然遠領先於西方。
大蝦們通常還是有些自知之明,知道自己只能實現一些簡單的功能,做不了大的東西,有時候還會遇到一些疑難問題給卡住,所以他們對那些大牛級的人物通常是非常崇拜的,國外的如Robert C. Martin、Linus Torvalds,國內的如求伯君、王志東等通常是他們崇拜的物件。其中的有些人希望有一天也能達到這些大牛級人物的水平,所以他們繼續往樓上爬去。
第3層 牛人
由於"大蝦"們經常被一些疑難問題給卡住,所以有了"大蝦"們只好繼續學習,他們需要將原來所學的知識進一步熟練掌握,比如以熟練掌握C++程式語言為例,除了學一些基礎性的C++書籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++編譯器的原理和實現機制,瞭解作業系統中的內部機制如記憶體管理、程式和執行緒的管理機制,瞭解處理器的基礎知識和程式碼最佳化的方法,此外還需要更深入地學習更多的資料結構與演算法,掌握更深入的測試和除錯知識以及質量管理和控制方法,對各種設計方法有更好的理解等。
學習上面說的這些知識不是一揮而就的,不看個三五十本書並掌握它是做不到的。以資料結構演算法來說,至少要看個 5~10本這方面的著作;以軟體設計來說,光懂結構化設計、物件導向設計和一些設計模式是不夠的,還要了解軟體架構設計、互動設計、面向方面的設計、面向使用的設計、面向資料結構演算法的設計、情感化設計等,否則是很難進到這個樓層的。
當然除了上面說的知識外,大蝦們還需要去學習各種經驗和技巧。當然這點難不倒他們,現在出版的書籍眾多,網路上的技術文章更是不勝數,然後再去各種專業論壇裡泡一泡,把這些書籍和文章中的各種經驗、技能、技巧掌握下來,再去學習一些知名的開源專案如Apache或 Linux作業系統的原始碼實現等。此時對付一般的疑難問題通常都不在話下,菜鳥和大蝦們會覺得你很"牛",你也就爬到了第3層,晉升為"牛人"了。
看了上面所講的要求,可能有些大蝦要暈過去了,成為牛人要學這麼多東西啊!要求是不是太高了?其實要求一點也不高,這麼點東西都掌握不了的話,怎麼能讓別人覺得你"牛"呢?
需要提一下的是,進入多核時代後,從第2層爬到第3層增加了一道多核程式設計的門檻。當然要邁過這道門檻並不難,已經有很多前輩高人邁進了這道門檻,只要循著他們的足跡前進就可以了。想邁進這道門檻者不妨去學習一下TBB開源專案的原始碼(連結:),然後上Intel的部落格(http: //software.intel.com/zh-cn/blogs/)和多核論壇( /IntelMulti-core/)去看看相關文章,再買上幾本相關的書籍學習一下。
在國內,一旦成為"牛人",通常可以到許多知名的公司裡去,運氣好者可以掛上一個架構師的頭銜,甚至掛上一個"首席架構師"或者"首席xx學家"的頭銜也不足為奇。有不少爬到這層的人就以為到了樓頂了,可以眼睛往天上看了,開始目空一切起來,以為自己什麼都可以做了,什麼都懂了,經常在網路上亂砸板磚是這個群體的最好寫照。由此也看出,國內的牛人數量仍然眾多,遠多於西方的牛人數量,在這層上仍然是領先的。
也有不少謙虛的"牛人",知道自己現在還不到半桶水階段。他們深知爬樓的遊戲就像猴子上樹一樣,往下看是笑臉,往上看是屁股。為了多看笑臉,少看屁股,他們並沒有在此停步不前,而是繼續尋找到更上一層的樓梯,以便繼續往上爬。
第4層 大牛
從第3層爬到第4層可不像上面說過的那幾層一樣容易,要成為大牛的話,你必須要能做牛人們做不了的事情,解決牛人們解決不了問題。比如牛人們通常都不懂寫作業系統,不會寫編譯器,不懂得TCP/IP協議的底層實現,如果你有能力將其中的任何一個實現得象模象樣的話,那麼你就從牛人升級為"大牛"了。
當然,由於各個專業領域的差別,這裡舉作業系統、編譯器、TCP/IP協議只是作為例子,並不代表成為"大牛"一定需要掌握這些知識,以時下熱門的多核程式設計來說,如果你能比牛人們更深入地掌握其中的各種思想原理,能更加自如的運用,並有能力去實現一個象開源專案TBB 庫一樣的東西,也可以成為"大牛",又或者你能寫出一個類似Apache一樣的伺服器,或者寫出一個資料庫,都可以成為"大牛"。
要成為"大牛"並不是一件簡單的事情,需要付出比牛人們多得多的努力,一般來說,至少要看過200~400本左右的專業書籍並好好掌握它,除此之外,還得經常關注網路和期刊雜誌上的各種最新資訊。
當"牛人"晉升為"大牛",讓"牛人們"發現有比他們更牛的人時,對"牛人"們的心靈的震撼是可想而知的。由於牛人們的數量龐大,並且牛人對大蝦和菜鳥階層有言傳身教的影響,所以大牛們通常能獲得非常高的社會知名度,幾乎可以用"引無數菜鳥、大蝦、牛人競折腰"來形容,看看前面提過的Linus Torvalds等大牛,應該知道此言不虛。
雖然成為"大牛"的條件看起來似乎很高似的,但是這層樓並不是很難爬的一層,只要透過一定的努力,素質不是很差,還是有許多"牛人"可以爬到這一層的。由此可知,"大牛"這個樓層的人數其實並不像想像的那麼少,例如比爾·蓋茨之類的人好像也是屬於這一層的。
由於"大牛"這層的人數不少,所以也很難統計除到底是中國的"大牛"數量多還是西方的大牛數量多?我估計應該是個旗鼓相當的數量,或者中國的"大牛"們會更多一些。
看到這裡,可能會有很多人會以為我在這裡說瞎話,Linus Torvalds寫出了著名的Linux作業系統,我國並沒有人寫出過類似的東西啊,我國的"大牛"怎麼能和西方的比呢? 不知大家注意到沒有,Linus Torvalds只是寫出了一個"象模象樣"的作業系統雛形,Linux後來真正發展成聞名全球的開源作業系統期間,完全是因為許多支援開源的商業公司如 IBM等,派出了許多比Linus Torvalds更高樓層的幕後英雄在裡面把它開發出來的。
可能有些菜鳥認為Linus Torvalds是程式設計師中的上帝,不妨說個小故事:
Linus,Richard Stallman和Don Knuth(高德納)一同參加一個會議。
Linus 說:"上帝說我創造了世界上最優秀的作業系統。"
Richard Stallman自然不甘示弱地說:"上帝說我創造了世界上最好用的編譯器。"
Don Knuth一臉疑惑的說:"等等,等等,我什麼時候說過這些話?"
由此可以看出,Linus Torvalds的技術水平並不像想像中那麼高,只是"牛人"和"大蝦"覺得"大牛"比他們更牛吧了。在我國,有一些當時還處於"大蝦"層的人物,也能寫出介紹如何寫作業系統的書,並且書寫得非常出色,而且寫出了一個有那麼一點點象模象樣的作業系統來。我想中國的"大牛"們是不會比西方差的,之所以沒有人寫出類似的商業產品來,完全是社會環境的原因,並不是技術能力達不到的原因。
"大牛"們之所以成為大牛,主要的原因是因為把"牛人"給蓋了下去,並不是他們自己覺得如何牛。也許有很多菜鳥、大蝦甚至牛人覺得"大牛"這層已經到頂了,但大多數"大牛"估計應該是有自知之明的,他們知道自己現在還沒有爬到半山腰,也就勉強能算個半桶水的水平,其中有些爬到這層沒有累趴下,仍然能量充沛,並且又有志者,還是會繼續往更上一層樓爬的。
看到這裡,也許有些菜鳥、大蝦、牛人想不明白了,還有比"大牛"們更高的樓層,那會是什麼樣的樓層?下面就來看看第5層樓的奧妙。
第5層 專家
當大牛們真正動手做一個作業系統或者類似的其他軟體時,他們就會發現自己的基本功仍然有很多的不足。以記憶體管理為例,如果直接抄襲Linux或者其他開源作業系統的記憶體管理演算法,會被人看不起的,如果自動動手實現一個記憶體管理演算法,他會發現現在有關記憶體管理方法的演算法數量眾多,自己並沒有全部學過和實踐過,不知道到底該用那種記憶體管理演算法。
看到這裡,可能有些人已經明白第5層樓的奧妙了,那就是需要做基礎研究,當然在計算機裡,最重要的就是"計算"二字,程式設計師要做基礎研究,主要的內容就是研究非數值"計算"。
非數值計算可是一個非常龐大的領域,不僅時下熱門的"多核計算"與"雲端計算"屬於非數值計算範疇,就是軟體需求、設計、測試、除錯、評估、質量控制、軟體工程等本質上也屬於非數值計算的範疇,甚至晶片硬體設計也同樣牽涉到非數值計算。如果你還沒有真正領悟"計算"二字的含義,那麼你就沒有機會進到這層樓來。
可能有人仍然沒有明白為什麼比爾·蓋茨被劃在了大牛層,沒有進到這層來。雖然比爾·蓋茨大學未畢業,學歷不夠,但是家有藏書2萬餘冊,進入軟體這個行業比絕大部分人都早,撇開他的商業才能不談,即使只看他的技術水平,也可以算得上是學富五車,頂上幾個普通的計算機軟體博士之和是沒有問題的,比起Linus Torvalds之類的"大牛"們應該技高一籌才對,怎麼還進不了這層樓呢?
非常遺憾的是,從Windows作業系統的實現來看,其對計算的理解是很膚淺的,如果把Google對計算方面的理解比做大學生,比爾·蓋茨只能算做一個初中生,所以比爾·蓋茨永遠只能做個大牛人,成不了"專家"。
看到這裡,也許國內的大牛們要高興起來了,原來比爾·蓋茨也只和我等在同一個層次,只要再升一層就可以超越比爾·蓋茨了。不過爬到這層可沒有從"牛人"升為"大牛"那麼簡單,人家比爾·蓋茨都家有2萬多冊書,讓你看個500~1000本以上的專業書籍並掌握好它應該要求不高吧。當然,這並不是主要的條件,更重要的是,需要到專業的學術站點去學習了,到 ACM,IEEE,Elsevier,SpringerLink,SIAM等地方去下載論文應該成為你的定期功課,使用Google搜尋引擎中的學術搜尋更是應該成為你的日常必修課。此外,你還得經常關注是否有與你研究相關的開源專案冒出來,例如當聽到有TBB這樣針對多核的開源專案時,你應該第一時間到 Google裡輸入"TBB"搜尋一下,將其原始碼下載下來好好研究一番,這樣也許你的一隻腳已經快邁進了這層樓的門檻。
當你象我上面說的那樣去做了以後,隨著時間的推移,總會有某天,你發現,在很多小的領域裡,你已經學不到什麼新東西了,所有最新出來的研究成果你幾乎都知道。此時你會發現你比在做"牛人"和"大牛"時的水平不知高出了多少,但是你一點也"牛"不起來,因為你學的知識和思想都是別人提出來的,你自己並沒有多少自己的知識和思想分享給別人,所以你還得繼續往樓上爬才行。
我不知道國內的"專家"到底有多少,不過有一點可以肯定的是,如果把那些專門蒙大家的"磚家"也算上的話,我們的磚家比西方的要多得多。
第6層 學者
當"專家"們想繼續往上一層樓爬時,他們幾乎一眼就可以看到樓梯的入口,不過令他們吃驚的是,樓梯入口處豎了一道高高的門檻,上面寫著"創新"二字。不幸的是,大多數人在爬到第5層樓時已經體能消耗過度,無力翻過這道門檻。
有少數體能充足者,可以輕易翻越這道門檻,但是並不意味著體力消耗過度者就無法翻越,因為你只是暫時還沒有掌握恢復體能的方法而已,當掌握了恢復體能的方法,將體能恢復後,你就可以輕易地翻越這道門檻了。
怎麼才能將體能恢復呢?我們的老祖宗"孔子"早就教導過我們"溫故而知新",在英文裡,研究的單詞是"research",其字首"re"和"search"分別是什麼意思不用我解釋吧。或許有些人覺得"溫故而知新"和"research"有些抽象,不好理解,我再給打個簡單的比方,比如你在爬一座高山,爬了半天,中途體力不支,怎麼恢復體力呢?自然是休息一下,重新進食一些食物,體力很快就可以得到恢復。
由此可知,對體能消耗過度者,休息+重新進食通常是恢復體能的最佳選擇。可惜的是,國內的老闆們並不懂得這點,他們的公司裡不僅連正常國家規定的休息時間都不給足,有些公司甚至有員工"過勞死"出現。所以國內能翻越"創新"這道門檻的人是"少之又少",和西方比起來估計是數量級的差別。
再說說重新進食的問題,這個重新進食是有講究的,需要進食一些基礎性易消化的簡單食物,不能進食山珍海味級的複雜食物,否則很難快速吸收。以查詢為例,並不是去天天盯著那些複雜的查詢結構和演算法進行研究,你需要做的是將二分查詢、雜湊查詢、普通二叉樹查詢等基礎性的知識好好地複習幾遍。
以雜湊查詢為例,首先你需要去將各種衝突解決方法如鏈式結構、二次雜湊等編寫一遍,再試試不同種類的雜湊函式,然後還需要試試在硬碟中如何實現雜湊查詢,並考慮資料從硬碟讀到記憶體後,如何組織硬碟中的資料才能快速地在記憶體中構建出雜湊表來,...,這樣你可能需要將一個雜湊表寫上十幾個不同的版本,並比較各個版本的效能、功能方面的區別和適用範圍。
總之,對任何一種簡單的東西,你需要考慮各種各樣的需求,以需求來驅動研究。最後你將各種最基礎性的查詢結構和演算法都瞭然於胸後,或許某天你再看其他更復雜的查詢演算法,或者你在散步時,腦袋裡靈光一現,突然間就發現了更好的方法,也就從專家晉升為"學者"了。
學者所做的事情,通常都是在前人的基礎上,進行一些小的最佳化和改進,例如別人發明了鏈式基數排序的方法,你第1個發現使用一定的方法,可以用陣列替代連結串列進行基數排序,效能還能得到進一步提高。
由於學者需要的只是一些小的最佳化改進,因此中國還是有一定數量的學者。不過和國外的數量比起來,估計少了一個數量級而已。
也許有人會覺得現在中國許多公司申請專利的數量達到甚至超過西方已開發國家了,我們的學者數量應該不會比他們少多少。因此,有必要把專利和這裡說的創新的區別解釋一下。
所謂專利者,只要是以前沒有的,新的東西,都可以申請專利;甚至是以前有的東西,你把他用到了一個新的領域的產品裡去,也可以申請專利。比如你在房子裡造一個水泥柱子,只要以前沒有人就這件事申請專利,那麼你就可以申請專利,並且下次你把水泥柱子挪一個位置,又可以申請一個新的專利;或者你在一個櫃子上打上幾個孔,下次又把孔的位置改一改,...,均可申請專利。
這層樓裡所說的創新,是指學術層面的創新,是基礎研究方面的創新,和專利的概念是完全不同的,難度也是完全不同的。你即使申請了一萬個象那種打孔一類的專利,加起來也夠不到這層樓裡的一個創新。
當你爬到第6層樓時,你也許會有一種突破極限的快感,因為你終於把那道高高的寫著"創新"二字的門檻給翻過去了,實現了"0"的突破。這時,你也許有一種"獨上高樓,慾望盡天涯路"的感覺,但是很快你會發現看到的都是比較近的路,遠處的路根本看不清楚。如果你還有足夠的體力的話,你會想爬到更高一層的樓層去。
第7層 大師
從第6層樓爬到第7層樓,並沒有多少捷徑可走,主要看你有沒有足夠的能量。你如果能象Hoare一樣設計出一個快速排序的演算法;或者象Eugene W. Myers一樣設計出了一個用編輯圖的最短路徑模型來解決diff問題的演算法;或者象M.J.D. Powell一樣提出了一個能夠處理非線性規劃問題的SQP方法;或者你發現基於比較的排序演算法,它的複雜度下界為O(NLogN);或者你發現用棧可以將遞迴的演算法變成非遞迴的;或者你設計出一個紅黑樹或者AVL樹之類的查詢結構;或者你設計出一個象C++或Java一樣的語言;或者你發明了 UML;...,你就爬到了第7層,晉升為"大師"了。
上面舉的這些例子中,其中有些人站的樓層比這層高,這裡只是為了形象說明而舉例他們的某個成就。從上面列出的一些大師的貢獻可以看出,成為大師必須要有較大的貢獻。首先解決問題必須是比較重要的,其次你要比前輩們在某方面有一個較大的提高,或者你解決的是一個全新的以前沒有解決過的問題;最重要的是,主要的思路和方法必須是你自己提供的,不再是在別人的思路基礎上進行的最佳化和改進。
看了上面這些要求,如果能量不夠的話,你也許會覺得有些困難,所以不是每個人都能成為"大師"的。中國軟體業裡能稱得上是"大師"的人,用屈指可數來形容,估計是綽綽有餘。值得一提得是,國外的"大師"就象我們的"大牛"一樣滿天飛的多。
我把我猜測本國有可能進到這層樓的大師列一下,以起個拋磚引玉的作用。漢王的"手寫識別"技術由於是完全保密的,不知道它裡面用了什麼思想,原創思想佔的比重有多少,因此不知道該把它劃到這層樓還是更高一層樓去。原山東大學王小云教授破解DES和MD5演算法時,用到的方法不知道是不是完全原創的,如果是的話也可進到這層樓來。
陳景潤雖然沒有徹底解決哥德巴赫猜想,但他在解決問題時所用的方法是創新的,因此也可以進到這層樓來。當然,如果能徹底解決哥德巴赫猜想,那麼可以算到更高的樓層去。
求伯君和王志東等大牛們,他們在做WPS和表格處理之類的軟體時,不知是否有較大的原創演算法在裡面,如果有的話就算我錯把他們劃到了大牛層。由於所學有限,不知道國內還有那些人能夠得上"大師"的級別,或許有少量做研究的教授、院士們,可以達到這個級別,有知道的不妨回個帖子晾一晾。
鑑於"大師"這個稱號的光環效應,相信有不少人夢想著成為"大師"。或許你看了前面舉的一些大師的例子,你會覺得要成為大師非常困難。不妨說一下,現在有一條通往"大師"之路的捷徑開啟了,那就是多核計算領域,有大量的處女地等待大家去挖掘。
以前在單核時代開發的各種演算法,現在都需要改寫成並行的。資料結構與演算法、影像處理、數值計算、作業系統、編譯器、測試除錯等各個領域,都存在大量的機會,可以讓你進到這層樓來,甚至有可能讓你進到更高一層樓去。
第8層 科學家
科學家向來都是一個神聖的稱號,因此我把他放在了“大師”之上。要成為科學家,你的貢獻必須超越大師,不妨隨便舉一些例子。
如果你象Dijkstra一樣設計了ALGOL語言,提出了程式設計的三種基本結構:順序、選擇、迴圈,那麼你可以爬到第8層樓來。順便說一下,即使拋開這個成果,Dijkstra憑他的PV操作和訊號量概念的提出,同樣可以進到這層樓。
如果你象Don Knuth一樣,是資料結構與演算法這門學科的重要奠基者,你也可以進到這層樓來。當然,資料結構和演算法這門學科不是某個人開創的,是許多大師和科學家集體開創的。
如果你象巴科斯一樣發明了Fortran語言,並提出了巴科斯正規化,對高階程式語言的發展起了重要作用,你也可以進到這層樓來。
或者你象Ken Thompson、Dennis Ritchie一樣發明了Unix作業系統和功能強大、高效、靈活、表達力強的C語言,對作業系統理論和高階程式語言均作出重大貢獻,那麼你也可以進到這層樓來。
或者你有Frederick P. Brooks一樣機會,可以去領導開發IBM的大型計算機System/360和OS/360作業系統,並在失敗後反思總結,寫出《人月神話》,對軟體工程作出里程碑式的貢獻,你也可以進到這層來。
或者你提出了物件導向設計的基本思想,或者你設計了網際網路的TCP/IP協議,或者你象Steven A.Cook一樣奠定NP完全性的理論基礎,或者你象Frances Allen一樣專注於平行計算來實現編譯技術,在編譯最佳化理論和技術取得基礎性的成就,…,均可進入這層。
當然,如果你發明了C++語言或者Java語言,你進不到這層來,因為你用到的主要思想都是這層樓中的科學家提出的,你自己並沒有沒有多少原創思想在裡面。
看了上面列出的科學家的成就,你會發現,要成為“科學家”,通常要開創一門分支學科,或者是這個分支學科的奠基者,或者在某個分支學科裡作出里程碑式的重大貢獻。如果做不到這些的話,那麼你能象Andrew C. Yao(姚期智)一樣在對計算理論的多個方向如偽隨機數生成,密碼學與通訊複雜度等各個方向上作出重要貢獻,成為集大成者,也可以進入這層樓。
成為“科學家”後,如果你有幸象Dijkstra一樣,出現在一個非常重視科學的國度。當你去世時,你家鄉滿城的人都會自動地去為你送葬。不過如果不幸生錯地方的話,能不挨“板磚”估計就算萬幸了。
從上面隨便舉的一些例子中,你可能能猜到,西方科學家的數量是非常多的,於是你會想中國應該也有少量的科學家吧?我可以很負責任地告訴你一個不幸的結果,中國本土產生的科學家的數量為0。目前在國內,軟體領域的唯一的科學家就是上面提過的姚期智,還是國外請回來的,並不是本土產生的。
可能你不同意我說的本土科學家數量為0的結論,因為你經常看到有許多公司裡都有所謂“首席XX科學家”的頭銜。我想說的是,這些所謂的“首席XX科學家”都是遠遠夠不到這層樓的級別的,有些人的水平估計也就是一個“牛人”或“大牛”的級別,好一點的最多也就一個“學者”的級別。尤其是那些被稱作“首席經X學家”的,基本上可以把稱號改為“首席坑大家”。
雖然我國沒有人能爬到這層樓上來,但是西方國家仍然有許多人爬到了比這層更高的樓上。如果要問我們比西方落後多少?那麼可以簡單地回答為:“落後了三層樓”。下面就來看看我們做夢都沒有到過的更高一層樓的秘密。
第9層 大科學家
進入這層樓的門檻通常需要一些運氣,比如某天有個蘋果砸到你頭上時,你碰巧發現了萬有引力,那麼你可以進到這層樓來。當然,萬有引力幾百年前就被人發現了,如果你現在到處嚷嚷著說你發現了萬有引力,恐怕馬上會有人打110,然後警察會把你送到不正常人類的聚集地去。因此,這裡舉萬有引力的例子,只是說你要有類似的成就才能進到這層樓來。
牛頓發現萬有引力定律開創了經典物理運動力學這門學科,如果你也能開創一門大的學科,那麼你就從科學家晉升為“大科學家”。比如愛因斯坦建立了相對論,從一個小職員變成了大科學家。當然大科學家可遠不止這兩人,數學界裡比物理學界更是多得多,如歐幾里得建立了平面幾何,笛卡爾開創解析幾何,還有尤拉、高斯、萊布尼茨等數不清的人物,跟計算相關的大科學家則有圖靈等人。
從上面列出的一些大科學家可以發現,他們的成就不僅是開創了一個大的學科,更重要的是他們的成就上升到了“公理”的層面。發現公理通常是需要一點運氣的,如果你的運氣不夠好的話,另外還有一個笨辦法也可以進到這層樓來,那就是成為集大成者。例如馮·諾伊曼,對數學的所有分支都非常瞭解,許多領域都有較大的貢獻,即使撇開他對計算機的開創貢獻,成為大科學家照樣綽綽有餘。
當然,程式設計師們最關心的是自己有沒有機會變成大科學家。既然計算機這門大學科的開創性成果早就被馮·諾伊曼、圖靈等人摘走了,那麼程式設計師們是不是沒有機會變成大科學家了呢?我們的古人說得好:“江山代有才人出,各領風騷數百年”,現在在計算機這門學科下面誕生了許多非常重要的大的分支,所以你還是有足夠的機會進到這層樓的。
如果你能夠徹底解決自然語言理解(機器翻譯)這門學科中的核心問題,或者你在人工智慧或者機器視覺(影像識別)方面有突破性的發現,那麼你同樣可以輕易地晉升為“大科學家”。這樣當某天你老了去世時,或許那天國人已經覺醒,你也能享受到如Dijkstra一樣的待遇,有滿城甚至全國的人去為你送葬。
現在還剩下另外一個大家感興趣的問題沒有討論,那就是這層中已經出現了牛頓、愛因斯坦、高斯等我們平常人都認為是頂級的科學家,是不是這層已經是樓頂了呢?相信還記得本文標題的人應該知道現在僅僅是第9層,還有第10層沒有到達呢。可能不少人現在要感到困惑了,難道還有人站在比牛頓、愛因斯坦、高斯等人更高的樓層上?
這個世界上確實存在可以用一隻手的手指數得清的那麼幾個人,他們爬到了第10層樓上。因此,第10層樓不是虛構的,而是確實存在的。如果對此有疑惑或者認為我在胡謅一番的話,那麼不妨繼續往下看下去,窺一下第10層樓的秘密。
第10層 大哲
看了這層樓的名字“大哲”,可能不少人已經猜到了這層樓的秘密,那就是你的成果必須要上升到哲學的高度,你才有機會能進到這層來。
當然,上升到哲學高度只是一個必要條件,牛頓的萬有引力似乎也上升到了哲學的高度,因為不知道引力到底是怎麼來的,但是牛頓沒有被劃到這一層,因為進到這層還有另外的條件,那就是你的成果必須引起了哲學上的深度思考,並能讓人們的世界觀向前跨進一大步。竊以為牛頓、愛因斯坦等人的成就還達不到讓人們世界觀向前跨進一大步的程度。
所以,這層樓中的人的成就對我們普通人認識世界非常重要,你可以不學相對論,但是你不可以不對這層樓的人所作出的成就不瞭解,否則你的世界觀就是極其不完整的,會犯許多認識上的錯誤。不幸的是,中國的科普知識普及還不夠到位,知道這層樓成就的人好像並不多,程式設計師中恐怕更少。下面就來看看這些用一隻手的手指數得清的大哲們,到底有什麼成就,能比萬有引力定律和相對論還重要。
1、希爾伯特 (1862~1943)
第1位進到此樓層是一位名叫“希爾伯特”的大數學家,如果你學過《泛函分析》,那麼你在學習希爾伯特空間時可能已經對這位大數學家有所瞭解;如果你不是學數學出身的,又對數學史不感興趣的話,恐怕你從來沒有聽說過這個名字。不過如果我問一下,知不知道二次世界大戰前世界數學中心在那裡,你肯定會有興趣想知道。
不妨說一下,二戰前整個世界的數學中心就在德國的哥廷根,而我們這位大數學家希爾伯特便是它的統帥和靈魂人物。即使在二戰期間,希特勒和丘吉爾也有協定,德國不轟炸牛津和劍橋,作為回報,英國不轟炸海德堡和哥廷根。
整個二十世紀上半期的超一流數學家,幾乎都出自其門下。這裡不妨舉幾個我們熟悉的人物,例如馮·諾伊曼就曾受到他和他的學生施密特和外爾的思想影響,還到哥廷根大學任過希爾伯特的助手,錢學森的老師馮·卡門是在哥廷根取得博士學位的。順便提一下,這位大數學家發現當時物理學上出了很多大的成果如相對論和量子力學,但是這些物理學家的數學功力明顯不足,因此有一段時間帶領他的學生們研究過物理學,並獨立發現了廣義相對論,只是不好意思和物理學家爭功勞,將廣義相對論的功勞全部讓給了愛因斯坦。
廣義相對論相對於這位大數學家在數學上的貢獻,其實是算不了什麼的,只是由此可看出這位大數學家品格的高尚之處。如果再去看看牛頓之流的人物的品行,整天和萊布尼茨、虎克等人爭功勞,利用自己的優勢地位打壓他人,甚至鬧得上法庭,和這位希爾伯特先生比起來,簡直就是個小丑。
說到這裡,你可能對這位大數學家“希爾伯特”有了一些初步映象,感覺到了他的重要性,不過他在數學上的主要成就可不是幾句話說得清楚的。首先,他是一位集大成者,精通當時數學所有分支領域,在數學的各個領域都有較大的貢獻,當然這些成就只能讓他成為一個大科學家,不能帶他進入這層樓。事實上這位“希爾伯特”解決的任何一個數學問題都夠不到這層樓的高度,那麼他怎麼混到這層樓來了呢?
話得從1900年說起,當時還很年輕的希爾伯特在當時的世界數學大會上做了一個報告,高屋建甌地提出了著名的23個未解決的數學問題,然後整個二十世紀上半期,全世界的數學家們都在這23個問題的指導下展開研究,直到現在仍然有許多數學家受這23個問題的指導在進行研究。例如我們熟知的哥德巴赫猜想,就屬於其中第8個問題素數分佈的一個子問題。
如果用“高瞻遠矚”來形容這位大數學家的話,那麼這個世界上恐怕沒有第二個人再配得上“高瞻遠矚”這四個字,不論是尤拉、高斯、牛頓、愛因斯坦還是被譽為最有才華的數學家伽羅華,概不例外。
雖然那23個問題是歸納總結出來的,並不全是原創,但是其中有不少問題是可以上升到哲學的高度,引起深度思考的。可能大多數人都會覺得希爾伯特是進不到這層樓的,我們知道提出問題的人和解決問題的人是一樣偉大的,何況他提出的問題是如此之多,基於這點,個人覺得應該讓希爾伯特跨進這層樓的門檻裡。
看完這位希爾伯特的成就,你可能會覺得對你的世界觀並沒有產生任何影響。確實如此,他提出的問題不是用來影響你的,而是用來影響其他大科學家和大哲的,下面再來說說另一位對他提出的23個問題中的第2個問題有傑出貢獻的大哲,你就會感覺到大哲們的成果的威力了。
2、哥德爾 (1906~1978)
這位大哲的名字叫“哥德爾 (G??del) ”,你可能從來也沒有聽說過這個名字,即使你讀了一個數學系的博士學位,如果你的研究方向不和這位大哲對口的話,你也不一定了解這位大哲的成就,更不知道他的成果對我們這個世界有何意義。
簡單地說,這位大哲20多歲時就證明了兩個定理,一個叫做“哥德爾完全性定理”,另一個更重要的叫做“哥德爾不完全性定理”。你也許會覺得奇怪,第9層樓的成就就已經上升到了公理的高度,這種證明定理的事情不是學者和大師們做的事情嗎?怎麼能比第9層樓的成就還高呢?下面就來簡單說一下這兩個定理的含義,你就會明白這屬於系統級的定理,絕不是普通的定理和公理所能比擬的。
“哥德爾完全性定理”證明了邏輯學的幾條公理是完備的,即任何一個由這些公理所產生出的問題,在這個公理系統內可以判定它是真的還是假的,這個結論表明了我們人類所擁有的邏輯思維能力是完備的。這條定理並不能將其帶入這層樓來,帶其進入這層樓的是另一條定理。
“哥德爾不完全性定理”是在1930年證明的,它證明了現有數學的幾條公理(ZF公理系統)是不完備的,即由這些公理產生出的問題,無法由這幾條公理判斷它是真的還是假的。例如希爾伯特23個問題中的第1個問題,也就是著名的康托爾連續統假設,哥德爾在1938年證明了現有公理系統中不能證明它是“假”的,科恩(Cohen,或許也可以稱得上是“半”個大哲)在1963年證明了現有公理系統不能證明它是“真”的。最有趣的是,即使你將某個不可判定的問題,作為一條新的公理加入進去,所組成的新的公理系統仍然是不完備的,即你無法構造一個有限條公理的系統,讓這個公理系統是完備的。
也許你仍然無法理解上面這段話的含義,不妨先說一下它對我們現實世界的影響。你可能知道1936年出現的圖靈機是現代計算機的理論模型,如果沒有哥德爾不完全性定理的思想,圖靈機什麼時候能出來是很難說的,所以這位哥德爾可以算作計算機理論的奠基者的奠基者。計算機對我們這個世界產生的影響比原子彈大了多少,我想不用我說大家也都清楚。當然,對現實世界的影響只能把哥德爾同圖靈等人一樣劃到大科學家那一層去,能進入這層乃是另有原因。
可能你看過《未來戰士》、《駭客帝國》、《I,Robot》之類的科幻電影,於是你產生製造一個和人一樣或者比人更高一級的智慧機器人的想法,這就引入了一個達到哲學高度的問題,“人到底能不能製造出具有和人一樣的思維能力的機器來?”。
我只能告訴你,“你的願望是良好的,但現實是殘酷的”。如果你仔細思考一下不完全性定理的含義,並結合現代計算機所具有的能力分析一下,你會發現這個問題的答案暫時是否定的。如果你想造出和人一樣思維能力的機器,那麼你需要去好好學習這位大哲及其後續研究者的成果,並在他們的基礎上有新的突破才行。
為了說明這位大哲所研究領域的重要性,這裡順便再討論一個我們日常爭議不休的問題,那就是孔夫子的“人之初、性本善 ”以及西方認為“人之初、性本惡”的觀點孰優孰劣的問題。可能有許多人發現西方社會現在領先我們,於是就認為“性本惡”是對的,“性本善”是錯的,中國應該拋棄以前的舊思想,改用西方的思想。當然也有一些老學究們,認為中國的人文思想是領先於西方的,自然而然地認為“性本善”是對的,“性本惡”是錯的。
如果你學過大哲用過的公理化的分析方法,你就知道一套系統的多條公理間只要不會推匯出矛盾的地方,即可以自圓其說,那麼它可以看作是對的。這樣你可以很輕易地給這個問題下一個結論,即“性本善”和“性本惡”是對等的,不存在孰優孰劣的問題,更不存在誰對誰錯的問題。只要你不同時將“性本善”和“性本惡”放入一個系統內,那麼是不會有問題的,甚至你也可以認為“人之初、既無善、亦無惡”,或者認為“人之初、部分善、部分惡”,都是可以自圓其說的,所以我們的老祖宗提出的思想並沒有問題,之所以落後乃是其他原因造成的。這個問題其實在高斯所處的時代就有了結論,那時有人提出了非歐幾何,即平行線公理問題,有人認為過一點可以作多條平行線,還有人認為平行線在無窮遠點是相交的,和歐氏幾何關於過一點只能作一條平行線的公理都是矛盾的,但是他們各自的系統內推匯出的結論都是正確的。
上面說的只是對哥德爾不完全性定理的一些粗淺解析,實際上如果深入思考一下它的含義的話,你會發現它對物理學等許多學科有重大影響,包含的道理實在是深刻,遠非一般的思想所能比擬,有興趣者不妨“google”或“百度”一下“哥德爾”。或許只有我們的老祖宗“老子” 提出的哲學思想,深度可以有得一比。
哥德爾不完全性定理也給那些認為科學是嚴謹的人當頭一棒,原來連數學這樣的純理論學科都是不嚴謹的,其他學科就更不用說了。
至此,已經說完數學上的大哲,下面不妨再看看物理學上的大哲,物理學上好像只出過一位叫“海森堡”的大哲(注:由於本人對物理學不甚瞭解,不知道“霍金”夠不夠得上大哲的稱號)。
自西方文藝復興以來,中國在自然科學方面落後西方很多,軟體領域也不例外。當然現在中國的許多程式設計師們對此可能有許多不同的意見,有些人認為中國的程式設計師水平遠落後於西方,有些則認為中國的程式設計師個人能力並不比西方的程式設計師差,只是整個軟體產業落後而已。
那麼,到底中國的程式設計師水平比西方程式設計師水平差,還是中國有許多優秀的程式設計師達到或超過了西方程式設計師同等水平呢?要解決這個問題,必須先知道程式設計師有多少種技術層級,每個層級需要什麼樣的技術水平,然後再比較中國和西方在各個技術層級的人數,就可以知道到底有沒有差距,差距有多大。
當然,對於如何劃分程式設計師的技術層級,不同公司或不同人會有不同的劃分標準,下面的劃分僅代表個人的觀點,如有不當之處,還請砸板磚予以糾正。
第1層 菜鳥
第1層樓屬於地板層,邁進這層樓的門檻是很低的。基本上懂計算機的基本操作,瞭解計算機專業的一些基礎知識,掌握一門基本的程式語言如C/C++,或者Java,或者JavaScript,...,均可入門邁進這層。
在這層上,中國有著絕對的優勢,除了從計算機專業畢業的眾多人數外,還有大量的通訊、自動化、數學等相關專業的人士進入這一行,此外還有眾多的其他專業轉行的人士,人數絕對比西方多出甚多。並且還有一個優勢就是我們這層人員的平均智商比西方肯定高。
沒有多少人願意一輩子做菜鳥,因為做"菜鳥"的滋味實在是不咋的,整天被老大們吆喝著去裝裝機器,搭建一下測試環境,或者對照著別人寫好的測試用例做一些黑盒測試,好一點的可以被安排去寫一點測試程式碼。當然如果運氣"好"的話,碰到了國內的一些作坊式的公司,也有機會去寫一些正式的程式碼。
所以,菜鳥們總是在努力學習,希望爬更高的一層樓去。
第2層 大蝦
從第1層爬到第2層相對容易一些,以C/C++程式設計師為例,只要熟練掌握C/C++程式語言,掌握C標準庫和常用的各種資料結構演算法,掌握STL的基本實現和使用方法,掌握多執行緒程式設計基礎知識,掌握一種開發環境,再對各種作業系統的API都去使用一下,搞網路程式設計的當然對socket程式設計要好好掌握一下,然後再學習一些物件導向的設計知識和設計模式等,學習一些測試、軟體工程和質量控制的基本知識,大部分人經過2~3 年的努力,都可以爬到第2層,晉升為"大蝦"。
中國的"大蝦"數量和"菜鳥"數量估計不會少多少,所以這層上仍然遠領先於西方。
大蝦們通常還是有些自知之明,知道自己只能實現一些簡單的功能,做不了大的東西,有時候還會遇到一些疑難問題給卡住,所以他們對那些大牛級的人物通常是非常崇拜的,國外的如Robert C. Martin、Linus Torvalds,國內的如求伯君、王志東等通常是他們崇拜的物件。其中的有些人希望有一天也能達到這些大牛級人物的水平,所以他們繼續往樓上爬去。
第3層 牛人
由於"大蝦"們經常被一些疑難問題給卡住,所以有了"大蝦"們只好繼續學習,他們需要將原來所學的知識進一步熟練掌握,比如以熟練掌握C++程式語言為例,除了學一些基礎性的C++書籍如《C++ Primer》,《Effective C++》,《Think in C++》,《Exception C++》等之外,更重要的是需要了解C++編譯器的原理和實現機制,瞭解作業系統中的內部機制如記憶體管理、程式和執行緒的管理機制,瞭解處理器的基礎知識和程式碼最佳化的方法,此外還需要更深入地學習更多的資料結構與演算法,掌握更深入的測試和除錯知識以及質量管理和控制方法,對各種設計方法有更好的理解等。
學習上面說的這些知識不是一揮而就的,不看個三五十本書並掌握它是做不到的。以資料結構演算法來說,至少要看個 5~10本這方面的著作;以軟體設計來說,光懂結構化設計、物件導向設計和一些設計模式是不夠的,還要了解軟體架構設計、互動設計、面向方面的設計、面向使用的設計、面向資料結構演算法的設計、情感化設計等,否則是很難進到這個樓層的。
當然除了上面說的知識外,大蝦們還需要去學習各種經驗和技巧。當然這點難不倒他們,現在出版的書籍眾多,網路上的技術文章更是不勝數,然後再去各種專業論壇裡泡一泡,把這些書籍和文章中的各種經驗、技能、技巧掌握下來,再去學習一些知名的開源專案如Apache或 Linux作業系統的原始碼實現等。此時對付一般的疑難問題通常都不在話下,菜鳥和大蝦們會覺得你很"牛",你也就爬到了第3層,晉升為"牛人"了。
看了上面所講的要求,可能有些大蝦要暈過去了,成為牛人要學這麼多東西啊!要求是不是太高了?其實要求一點也不高,這麼點東西都掌握不了的話,怎麼能讓別人覺得你"牛"呢?
需要提一下的是,進入多核時代後,從第2層爬到第3層增加了一道多核程式設計的門檻。當然要邁過這道門檻並不難,已經有很多前輩高人邁進了這道門檻,只要循著他們的足跡前進就可以了。想邁進這道門檻者不妨去學習一下TBB開源專案的原始碼(連結:),然後上Intel的部落格(http: //software.intel.com/zh-cn/blogs/)和多核論壇( /IntelMulti-core/)去看看相關文章,再買上幾本相關的書籍學習一下。
在國內,一旦成為"牛人",通常可以到許多知名的公司裡去,運氣好者可以掛上一個架構師的頭銜,甚至掛上一個"首席架構師"或者"首席xx學家"的頭銜也不足為奇。有不少爬到這層的人就以為到了樓頂了,可以眼睛往天上看了,開始目空一切起來,以為自己什麼都可以做了,什麼都懂了,經常在網路上亂砸板磚是這個群體的最好寫照。由此也看出,國內的牛人數量仍然眾多,遠多於西方的牛人數量,在這層上仍然是領先的。
也有不少謙虛的"牛人",知道自己現在還不到半桶水階段。他們深知爬樓的遊戲就像猴子上樹一樣,往下看是笑臉,往上看是屁股。為了多看笑臉,少看屁股,他們並沒有在此停步不前,而是繼續尋找到更上一層的樓梯,以便繼續往上爬。
第4層 大牛
從第3層爬到第4層可不像上面說過的那幾層一樣容易,要成為大牛的話,你必須要能做牛人們做不了的事情,解決牛人們解決不了問題。比如牛人們通常都不懂寫作業系統,不會寫編譯器,不懂得TCP/IP協議的底層實現,如果你有能力將其中的任何一個實現得象模象樣的話,那麼你就從牛人升級為"大牛"了。
當然,由於各個專業領域的差別,這裡舉作業系統、編譯器、TCP/IP協議只是作為例子,並不代表成為"大牛"一定需要掌握這些知識,以時下熱門的多核程式設計來說,如果你能比牛人們更深入地掌握其中的各種思想原理,能更加自如的運用,並有能力去實現一個象開源專案TBB 庫一樣的東西,也可以成為"大牛",又或者你能寫出一個類似Apache一樣的伺服器,或者寫出一個資料庫,都可以成為"大牛"。
要成為"大牛"並不是一件簡單的事情,需要付出比牛人們多得多的努力,一般來說,至少要看過200~400本左右的專業書籍並好好掌握它,除此之外,還得經常關注網路和期刊雜誌上的各種最新資訊。
當"牛人"晉升為"大牛",讓"牛人們"發現有比他們更牛的人時,對"牛人"們的心靈的震撼是可想而知的。由於牛人們的數量龐大,並且牛人對大蝦和菜鳥階層有言傳身教的影響,所以大牛們通常能獲得非常高的社會知名度,幾乎可以用"引無數菜鳥、大蝦、牛人競折腰"來形容,看看前面提過的Linus Torvalds等大牛,應該知道此言不虛。
雖然成為"大牛"的條件看起來似乎很高似的,但是這層樓並不是很難爬的一層,只要透過一定的努力,素質不是很差,還是有許多"牛人"可以爬到這一層的。由此可知,"大牛"這個樓層的人數其實並不像想像的那麼少,例如比爾·蓋茨之類的人好像也是屬於這一層的。
由於"大牛"這層的人數不少,所以也很難統計除到底是中國的"大牛"數量多還是西方的大牛數量多?我估計應該是個旗鼓相當的數量,或者中國的"大牛"們會更多一些。
看到這裡,可能會有很多人會以為我在這裡說瞎話,Linus Torvalds寫出了著名的Linux作業系統,我國並沒有人寫出過類似的東西啊,我國的"大牛"怎麼能和西方的比呢? 不知大家注意到沒有,Linus Torvalds只是寫出了一個"象模象樣"的作業系統雛形,Linux後來真正發展成聞名全球的開源作業系統期間,完全是因為許多支援開源的商業公司如 IBM等,派出了許多比Linus Torvalds更高樓層的幕後英雄在裡面把它開發出來的。
可能有些菜鳥認為Linus Torvalds是程式設計師中的上帝,不妨說個小故事:
Linus,Richard Stallman和Don Knuth(高德納)一同參加一個會議。
Linus 說:"上帝說我創造了世界上最優秀的作業系統。"
Richard Stallman自然不甘示弱地說:"上帝說我創造了世界上最好用的編譯器。"
Don Knuth一臉疑惑的說:"等等,等等,我什麼時候說過這些話?"
由此可以看出,Linus Torvalds的技術水平並不像想像中那麼高,只是"牛人"和"大蝦"覺得"大牛"比他們更牛吧了。在我國,有一些當時還處於"大蝦"層的人物,也能寫出介紹如何寫作業系統的書,並且書寫得非常出色,而且寫出了一個有那麼一點點象模象樣的作業系統來。我想中國的"大牛"們是不會比西方差的,之所以沒有人寫出類似的商業產品來,完全是社會環境的原因,並不是技術能力達不到的原因。
"大牛"們之所以成為大牛,主要的原因是因為把"牛人"給蓋了下去,並不是他們自己覺得如何牛。也許有很多菜鳥、大蝦甚至牛人覺得"大牛"這層已經到頂了,但大多數"大牛"估計應該是有自知之明的,他們知道自己現在還沒有爬到半山腰,也就勉強能算個半桶水的水平,其中有些爬到這層沒有累趴下,仍然能量充沛,並且又有志者,還是會繼續往更上一層樓爬的。
看到這裡,也許有些菜鳥、大蝦、牛人想不明白了,還有比"大牛"們更高的樓層,那會是什麼樣的樓層?下面就來看看第5層樓的奧妙。
第5層 專家
當大牛們真正動手做一個作業系統或者類似的其他軟體時,他們就會發現自己的基本功仍然有很多的不足。以記憶體管理為例,如果直接抄襲Linux或者其他開源作業系統的記憶體管理演算法,會被人看不起的,如果自動動手實現一個記憶體管理演算法,他會發現現在有關記憶體管理方法的演算法數量眾多,自己並沒有全部學過和實踐過,不知道到底該用那種記憶體管理演算法。
看到這裡,可能有些人已經明白第5層樓的奧妙了,那就是需要做基礎研究,當然在計算機裡,最重要的就是"計算"二字,程式設計師要做基礎研究,主要的內容就是研究非數值"計算"。
非數值計算可是一個非常龐大的領域,不僅時下熱門的"多核計算"與"雲端計算"屬於非數值計算範疇,就是軟體需求、設計、測試、除錯、評估、質量控制、軟體工程等本質上也屬於非數值計算的範疇,甚至晶片硬體設計也同樣牽涉到非數值計算。如果你還沒有真正領悟"計算"二字的含義,那麼你就沒有機會進到這層樓來。
可能有人仍然沒有明白為什麼比爾·蓋茨被劃在了大牛層,沒有進到這層來。雖然比爾·蓋茨大學未畢業,學歷不夠,但是家有藏書2萬餘冊,進入軟體這個行業比絕大部分人都早,撇開他的商業才能不談,即使只看他的技術水平,也可以算得上是學富五車,頂上幾個普通的計算機軟體博士之和是沒有問題的,比起Linus Torvalds之類的"大牛"們應該技高一籌才對,怎麼還進不了這層樓呢?
非常遺憾的是,從Windows作業系統的實現來看,其對計算的理解是很膚淺的,如果把Google對計算方面的理解比做大學生,比爾·蓋茨只能算做一個初中生,所以比爾·蓋茨永遠只能做個大牛人,成不了"專家"。
看到這裡,也許國內的大牛們要高興起來了,原來比爾·蓋茨也只和我等在同一個層次,只要再升一層就可以超越比爾·蓋茨了。不過爬到這層可沒有從"牛人"升為"大牛"那麼簡單,人家比爾·蓋茨都家有2萬多冊書,讓你看個500~1000本以上的專業書籍並掌握好它應該要求不高吧。當然,這並不是主要的條件,更重要的是,需要到專業的學術站點去學習了,到 ACM,IEEE,Elsevier,SpringerLink,SIAM等地方去下載論文應該成為你的定期功課,使用Google搜尋引擎中的學術搜尋更是應該成為你的日常必修課。此外,你還得經常關注是否有與你研究相關的開源專案冒出來,例如當聽到有TBB這樣針對多核的開源專案時,你應該第一時間到 Google裡輸入"TBB"搜尋一下,將其原始碼下載下來好好研究一番,這樣也許你的一隻腳已經快邁進了這層樓的門檻。
當你象我上面說的那樣去做了以後,隨著時間的推移,總會有某天,你發現,在很多小的領域裡,你已經學不到什麼新東西了,所有最新出來的研究成果你幾乎都知道。此時你會發現你比在做"牛人"和"大牛"時的水平不知高出了多少,但是你一點也"牛"不起來,因為你學的知識和思想都是別人提出來的,你自己並沒有多少自己的知識和思想分享給別人,所以你還得繼續往樓上爬才行。
我不知道國內的"專家"到底有多少,不過有一點可以肯定的是,如果把那些專門蒙大家的"磚家"也算上的話,我們的磚家比西方的要多得多。
第6層 學者
當"專家"們想繼續往上一層樓爬時,他們幾乎一眼就可以看到樓梯的入口,不過令他們吃驚的是,樓梯入口處豎了一道高高的門檻,上面寫著"創新"二字。不幸的是,大多數人在爬到第5層樓時已經體能消耗過度,無力翻過這道門檻。
有少數體能充足者,可以輕易翻越這道門檻,但是並不意味著體力消耗過度者就無法翻越,因為你只是暫時還沒有掌握恢復體能的方法而已,當掌握了恢復體能的方法,將體能恢復後,你就可以輕易地翻越這道門檻了。
怎麼才能將體能恢復呢?我們的老祖宗"孔子"早就教導過我們"溫故而知新",在英文裡,研究的單詞是"research",其字首"re"和"search"分別是什麼意思不用我解釋吧。或許有些人覺得"溫故而知新"和"research"有些抽象,不好理解,我再給打個簡單的比方,比如你在爬一座高山,爬了半天,中途體力不支,怎麼恢復體力呢?自然是休息一下,重新進食一些食物,體力很快就可以得到恢復。
由此可知,對體能消耗過度者,休息+重新進食通常是恢復體能的最佳選擇。可惜的是,國內的老闆們並不懂得這點,他們的公司裡不僅連正常國家規定的休息時間都不給足,有些公司甚至有員工"過勞死"出現。所以國內能翻越"創新"這道門檻的人是"少之又少",和西方比起來估計是數量級的差別。
再說說重新進食的問題,這個重新進食是有講究的,需要進食一些基礎性易消化的簡單食物,不能進食山珍海味級的複雜食物,否則很難快速吸收。以查詢為例,並不是去天天盯著那些複雜的查詢結構和演算法進行研究,你需要做的是將二分查詢、雜湊查詢、普通二叉樹查詢等基礎性的知識好好地複習幾遍。
以雜湊查詢為例,首先你需要去將各種衝突解決方法如鏈式結構、二次雜湊等編寫一遍,再試試不同種類的雜湊函式,然後還需要試試在硬碟中如何實現雜湊查詢,並考慮資料從硬碟讀到記憶體後,如何組織硬碟中的資料才能快速地在記憶體中構建出雜湊表來,...,這樣你可能需要將一個雜湊表寫上十幾個不同的版本,並比較各個版本的效能、功能方面的區別和適用範圍。
總之,對任何一種簡單的東西,你需要考慮各種各樣的需求,以需求來驅動研究。最後你將各種最基礎性的查詢結構和演算法都瞭然於胸後,或許某天你再看其他更復雜的查詢演算法,或者你在散步時,腦袋裡靈光一現,突然間就發現了更好的方法,也就從專家晉升為"學者"了。
學者所做的事情,通常都是在前人的基礎上,進行一些小的最佳化和改進,例如別人發明了鏈式基數排序的方法,你第1個發現使用一定的方法,可以用陣列替代連結串列進行基數排序,效能還能得到進一步提高。
由於學者需要的只是一些小的最佳化改進,因此中國還是有一定數量的學者。不過和國外的數量比起來,估計少了一個數量級而已。
也許有人會覺得現在中國許多公司申請專利的數量達到甚至超過西方已開發國家了,我們的學者數量應該不會比他們少多少。因此,有必要把專利和這裡說的創新的區別解釋一下。
所謂專利者,只要是以前沒有的,新的東西,都可以申請專利;甚至是以前有的東西,你把他用到了一個新的領域的產品裡去,也可以申請專利。比如你在房子裡造一個水泥柱子,只要以前沒有人就這件事申請專利,那麼你就可以申請專利,並且下次你把水泥柱子挪一個位置,又可以申請一個新的專利;或者你在一個櫃子上打上幾個孔,下次又把孔的位置改一改,...,均可申請專利。
這層樓裡所說的創新,是指學術層面的創新,是基礎研究方面的創新,和專利的概念是完全不同的,難度也是完全不同的。你即使申請了一萬個象那種打孔一類的專利,加起來也夠不到這層樓裡的一個創新。
當你爬到第6層樓時,你也許會有一種突破極限的快感,因為你終於把那道高高的寫著"創新"二字的門檻給翻過去了,實現了"0"的突破。這時,你也許有一種"獨上高樓,慾望盡天涯路"的感覺,但是很快你會發現看到的都是比較近的路,遠處的路根本看不清楚。如果你還有足夠的體力的話,你會想爬到更高一層的樓層去。
第7層 大師
從第6層樓爬到第7層樓,並沒有多少捷徑可走,主要看你有沒有足夠的能量。你如果能象Hoare一樣設計出一個快速排序的演算法;或者象Eugene W. Myers一樣設計出了一個用編輯圖的最短路徑模型來解決diff問題的演算法;或者象M.J.D. Powell一樣提出了一個能夠處理非線性規劃問題的SQP方法;或者你發現基於比較的排序演算法,它的複雜度下界為O(NLogN);或者你發現用棧可以將遞迴的演算法變成非遞迴的;或者你設計出一個紅黑樹或者AVL樹之類的查詢結構;或者你設計出一個象C++或Java一樣的語言;或者你發明了 UML;...,你就爬到了第7層,晉升為"大師"了。
上面舉的這些例子中,其中有些人站的樓層比這層高,這裡只是為了形象說明而舉例他們的某個成就。從上面列出的一些大師的貢獻可以看出,成為大師必須要有較大的貢獻。首先解決問題必須是比較重要的,其次你要比前輩們在某方面有一個較大的提高,或者你解決的是一個全新的以前沒有解決過的問題;最重要的是,主要的思路和方法必須是你自己提供的,不再是在別人的思路基礎上進行的最佳化和改進。
看了上面這些要求,如果能量不夠的話,你也許會覺得有些困難,所以不是每個人都能成為"大師"的。中國軟體業裡能稱得上是"大師"的人,用屈指可數來形容,估計是綽綽有餘。值得一提得是,國外的"大師"就象我們的"大牛"一樣滿天飛的多。
我把我猜測本國有可能進到這層樓的大師列一下,以起個拋磚引玉的作用。漢王的"手寫識別"技術由於是完全保密的,不知道它裡面用了什麼思想,原創思想佔的比重有多少,因此不知道該把它劃到這層樓還是更高一層樓去。原山東大學王小云教授破解DES和MD5演算法時,用到的方法不知道是不是完全原創的,如果是的話也可進到這層樓來。
陳景潤雖然沒有徹底解決哥德巴赫猜想,但他在解決問題時所用的方法是創新的,因此也可以進到這層樓來。當然,如果能徹底解決哥德巴赫猜想,那麼可以算到更高的樓層去。
求伯君和王志東等大牛們,他們在做WPS和表格處理之類的軟體時,不知是否有較大的原創演算法在裡面,如果有的話就算我錯把他們劃到了大牛層。由於所學有限,不知道國內還有那些人能夠得上"大師"的級別,或許有少量做研究的教授、院士們,可以達到這個級別,有知道的不妨回個帖子晾一晾。
鑑於"大師"這個稱號的光環效應,相信有不少人夢想著成為"大師"。或許你看了前面舉的一些大師的例子,你會覺得要成為大師非常困難。不妨說一下,現在有一條通往"大師"之路的捷徑開啟了,那就是多核計算領域,有大量的處女地等待大家去挖掘。
以前在單核時代開發的各種演算法,現在都需要改寫成並行的。資料結構與演算法、影像處理、數值計算、作業系統、編譯器、測試除錯等各個領域,都存在大量的機會,可以讓你進到這層樓來,甚至有可能讓你進到更高一層樓去。
第8層 科學家
科學家向來都是一個神聖的稱號,因此我把他放在了“大師”之上。要成為科學家,你的貢獻必須超越大師,不妨隨便舉一些例子。
如果你象Dijkstra一樣設計了ALGOL語言,提出了程式設計的三種基本結構:順序、選擇、迴圈,那麼你可以爬到第8層樓來。順便說一下,即使拋開這個成果,Dijkstra憑他的PV操作和訊號量概念的提出,同樣可以進到這層樓。
如果你象Don Knuth一樣,是資料結構與演算法這門學科的重要奠基者,你也可以進到這層樓來。當然,資料結構和演算法這門學科不是某個人開創的,是許多大師和科學家集體開創的。
如果你象巴科斯一樣發明了Fortran語言,並提出了巴科斯正規化,對高階程式語言的發展起了重要作用,你也可以進到這層樓來。
或者你象Ken Thompson、Dennis Ritchie一樣發明了Unix作業系統和功能強大、高效、靈活、表達力強的C語言,對作業系統理論和高階程式語言均作出重大貢獻,那麼你也可以進到這層樓來。
或者你有Frederick P. Brooks一樣機會,可以去領導開發IBM的大型計算機System/360和OS/360作業系統,並在失敗後反思總結,寫出《人月神話》,對軟體工程作出里程碑式的貢獻,你也可以進到這層來。
或者你提出了物件導向設計的基本思想,或者你設計了網際網路的TCP/IP協議,或者你象Steven A.Cook一樣奠定NP完全性的理論基礎,或者你象Frances Allen一樣專注於平行計算來實現編譯技術,在編譯最佳化理論和技術取得基礎性的成就,…,均可進入這層。
當然,如果你發明了C++語言或者Java語言,你進不到這層來,因為你用到的主要思想都是這層樓中的科學家提出的,你自己並沒有沒有多少原創思想在裡面。
看了上面列出的科學家的成就,你會發現,要成為“科學家”,通常要開創一門分支學科,或者是這個分支學科的奠基者,或者在某個分支學科裡作出里程碑式的重大貢獻。如果做不到這些的話,那麼你能象Andrew C. Yao(姚期智)一樣在對計算理論的多個方向如偽隨機數生成,密碼學與通訊複雜度等各個方向上作出重要貢獻,成為集大成者,也可以進入這層樓。
成為“科學家”後,如果你有幸象Dijkstra一樣,出現在一個非常重視科學的國度。當你去世時,你家鄉滿城的人都會自動地去為你送葬。不過如果不幸生錯地方的話,能不挨“板磚”估計就算萬幸了。
從上面隨便舉的一些例子中,你可能能猜到,西方科學家的數量是非常多的,於是你會想中國應該也有少量的科學家吧?我可以很負責任地告訴你一個不幸的結果,中國本土產生的科學家的數量為0。目前在國內,軟體領域的唯一的科學家就是上面提過的姚期智,還是國外請回來的,並不是本土產生的。
可能你不同意我說的本土科學家數量為0的結論,因為你經常看到有許多公司裡都有所謂“首席XX科學家”的頭銜。我想說的是,這些所謂的“首席XX科學家”都是遠遠夠不到這層樓的級別的,有些人的水平估計也就是一個“牛人”或“大牛”的級別,好一點的最多也就一個“學者”的級別。尤其是那些被稱作“首席經X學家”的,基本上可以把稱號改為“首席坑大家”。
雖然我國沒有人能爬到這層樓上來,但是西方國家仍然有許多人爬到了比這層更高的樓上。如果要問我們比西方落後多少?那麼可以簡單地回答為:“落後了三層樓”。下面就來看看我們做夢都沒有到過的更高一層樓的秘密。
第9層 大科學家
進入這層樓的門檻通常需要一些運氣,比如某天有個蘋果砸到你頭上時,你碰巧發現了萬有引力,那麼你可以進到這層樓來。當然,萬有引力幾百年前就被人發現了,如果你現在到處嚷嚷著說你發現了萬有引力,恐怕馬上會有人打110,然後警察會把你送到不正常人類的聚集地去。因此,這裡舉萬有引力的例子,只是說你要有類似的成就才能進到這層樓來。
牛頓發現萬有引力定律開創了經典物理運動力學這門學科,如果你也能開創一門大的學科,那麼你就從科學家晉升為“大科學家”。比如愛因斯坦建立了相對論,從一個小職員變成了大科學家。當然大科學家可遠不止這兩人,數學界裡比物理學界更是多得多,如歐幾里得建立了平面幾何,笛卡爾開創解析幾何,還有尤拉、高斯、萊布尼茨等數不清的人物,跟計算相關的大科學家則有圖靈等人。
從上面列出的一些大科學家可以發現,他們的成就不僅是開創了一個大的學科,更重要的是他們的成就上升到了“公理”的層面。發現公理通常是需要一點運氣的,如果你的運氣不夠好的話,另外還有一個笨辦法也可以進到這層樓來,那就是成為集大成者。例如馮·諾伊曼,對數學的所有分支都非常瞭解,許多領域都有較大的貢獻,即使撇開他對計算機的開創貢獻,成為大科學家照樣綽綽有餘。
當然,程式設計師們最關心的是自己有沒有機會變成大科學家。既然計算機這門大學科的開創性成果早就被馮·諾伊曼、圖靈等人摘走了,那麼程式設計師們是不是沒有機會變成大科學家了呢?我們的古人說得好:“江山代有才人出,各領風騷數百年”,現在在計算機這門學科下面誕生了許多非常重要的大的分支,所以你還是有足夠的機會進到這層樓的。
如果你能夠徹底解決自然語言理解(機器翻譯)這門學科中的核心問題,或者你在人工智慧或者機器視覺(影像識別)方面有突破性的發現,那麼你同樣可以輕易地晉升為“大科學家”。這樣當某天你老了去世時,或許那天國人已經覺醒,你也能享受到如Dijkstra一樣的待遇,有滿城甚至全國的人去為你送葬。
現在還剩下另外一個大家感興趣的問題沒有討論,那就是這層中已經出現了牛頓、愛因斯坦、高斯等我們平常人都認為是頂級的科學家,是不是這層已經是樓頂了呢?相信還記得本文標題的人應該知道現在僅僅是第9層,還有第10層沒有到達呢。可能不少人現在要感到困惑了,難道還有人站在比牛頓、愛因斯坦、高斯等人更高的樓層上?
這個世界上確實存在可以用一隻手的手指數得清的那麼幾個人,他們爬到了第10層樓上。因此,第10層樓不是虛構的,而是確實存在的。如果對此有疑惑或者認為我在胡謅一番的話,那麼不妨繼續往下看下去,窺一下第10層樓的秘密。
第10層 大哲
看了這層樓的名字“大哲”,可能不少人已經猜到了這層樓的秘密,那就是你的成果必須要上升到哲學的高度,你才有機會能進到這層來。
當然,上升到哲學高度只是一個必要條件,牛頓的萬有引力似乎也上升到了哲學的高度,因為不知道引力到底是怎麼來的,但是牛頓沒有被劃到這一層,因為進到這層還有另外的條件,那就是你的成果必須引起了哲學上的深度思考,並能讓人們的世界觀向前跨進一大步。竊以為牛頓、愛因斯坦等人的成就還達不到讓人們世界觀向前跨進一大步的程度。
所以,這層樓中的人的成就對我們普通人認識世界非常重要,你可以不學相對論,但是你不可以不對這層樓的人所作出的成就不瞭解,否則你的世界觀就是極其不完整的,會犯許多認識上的錯誤。不幸的是,中國的科普知識普及還不夠到位,知道這層樓成就的人好像並不多,程式設計師中恐怕更少。下面就來看看這些用一隻手的手指數得清的大哲們,到底有什麼成就,能比萬有引力定律和相對論還重要。
1、希爾伯特 (1862~1943)
第1位進到此樓層是一位名叫“希爾伯特”的大數學家,如果你學過《泛函分析》,那麼你在學習希爾伯特空間時可能已經對這位大數學家有所瞭解;如果你不是學數學出身的,又對數學史不感興趣的話,恐怕你從來沒有聽說過這個名字。不過如果我問一下,知不知道二次世界大戰前世界數學中心在那裡,你肯定會有興趣想知道。
不妨說一下,二戰前整個世界的數學中心就在德國的哥廷根,而我們這位大數學家希爾伯特便是它的統帥和靈魂人物。即使在二戰期間,希特勒和丘吉爾也有協定,德國不轟炸牛津和劍橋,作為回報,英國不轟炸海德堡和哥廷根。
整個二十世紀上半期的超一流數學家,幾乎都出自其門下。這裡不妨舉幾個我們熟悉的人物,例如馮·諾伊曼就曾受到他和他的學生施密特和外爾的思想影響,還到哥廷根大學任過希爾伯特的助手,錢學森的老師馮·卡門是在哥廷根取得博士學位的。順便提一下,這位大數學家發現當時物理學上出了很多大的成果如相對論和量子力學,但是這些物理學家的數學功力明顯不足,因此有一段時間帶領他的學生們研究過物理學,並獨立發現了廣義相對論,只是不好意思和物理學家爭功勞,將廣義相對論的功勞全部讓給了愛因斯坦。
廣義相對論相對於這位大數學家在數學上的貢獻,其實是算不了什麼的,只是由此可看出這位大數學家品格的高尚之處。如果再去看看牛頓之流的人物的品行,整天和萊布尼茨、虎克等人爭功勞,利用自己的優勢地位打壓他人,甚至鬧得上法庭,和這位希爾伯特先生比起來,簡直就是個小丑。
說到這裡,你可能對這位大數學家“希爾伯特”有了一些初步映象,感覺到了他的重要性,不過他在數學上的主要成就可不是幾句話說得清楚的。首先,他是一位集大成者,精通當時數學所有分支領域,在數學的各個領域都有較大的貢獻,當然這些成就只能讓他成為一個大科學家,不能帶他進入這層樓。事實上這位“希爾伯特”解決的任何一個數學問題都夠不到這層樓的高度,那麼他怎麼混到這層樓來了呢?
話得從1900年說起,當時還很年輕的希爾伯特在當時的世界數學大會上做了一個報告,高屋建甌地提出了著名的23個未解決的數學問題,然後整個二十世紀上半期,全世界的數學家們都在這23個問題的指導下展開研究,直到現在仍然有許多數學家受這23個問題的指導在進行研究。例如我們熟知的哥德巴赫猜想,就屬於其中第8個問題素數分佈的一個子問題。
如果用“高瞻遠矚”來形容這位大數學家的話,那麼這個世界上恐怕沒有第二個人再配得上“高瞻遠矚”這四個字,不論是尤拉、高斯、牛頓、愛因斯坦還是被譽為最有才華的數學家伽羅華,概不例外。
雖然那23個問題是歸納總結出來的,並不全是原創,但是其中有不少問題是可以上升到哲學的高度,引起深度思考的。可能大多數人都會覺得希爾伯特是進不到這層樓的,我們知道提出問題的人和解決問題的人是一樣偉大的,何況他提出的問題是如此之多,基於這點,個人覺得應該讓希爾伯特跨進這層樓的門檻裡。
看完這位希爾伯特的成就,你可能會覺得對你的世界觀並沒有產生任何影響。確實如此,他提出的問題不是用來影響你的,而是用來影響其他大科學家和大哲的,下面再來說說另一位對他提出的23個問題中的第2個問題有傑出貢獻的大哲,你就會感覺到大哲們的成果的威力了。
2、哥德爾 (1906~1978)
這位大哲的名字叫“哥德爾 (G??del) ”,你可能從來也沒有聽說過這個名字,即使你讀了一個數學系的博士學位,如果你的研究方向不和這位大哲對口的話,你也不一定了解這位大哲的成就,更不知道他的成果對我們這個世界有何意義。
簡單地說,這位大哲20多歲時就證明了兩個定理,一個叫做“哥德爾完全性定理”,另一個更重要的叫做“哥德爾不完全性定理”。你也許會覺得奇怪,第9層樓的成就就已經上升到了公理的高度,這種證明定理的事情不是學者和大師們做的事情嗎?怎麼能比第9層樓的成就還高呢?下面就來簡單說一下這兩個定理的含義,你就會明白這屬於系統級的定理,絕不是普通的定理和公理所能比擬的。
“哥德爾完全性定理”證明了邏輯學的幾條公理是完備的,即任何一個由這些公理所產生出的問題,在這個公理系統內可以判定它是真的還是假的,這個結論表明了我們人類所擁有的邏輯思維能力是完備的。這條定理並不能將其帶入這層樓來,帶其進入這層樓的是另一條定理。
“哥德爾不完全性定理”是在1930年證明的,它證明了現有數學的幾條公理(ZF公理系統)是不完備的,即由這些公理產生出的問題,無法由這幾條公理判斷它是真的還是假的。例如希爾伯特23個問題中的第1個問題,也就是著名的康托爾連續統假設,哥德爾在1938年證明了現有公理系統中不能證明它是“假”的,科恩(Cohen,或許也可以稱得上是“半”個大哲)在1963年證明了現有公理系統不能證明它是“真”的。最有趣的是,即使你將某個不可判定的問題,作為一條新的公理加入進去,所組成的新的公理系統仍然是不完備的,即你無法構造一個有限條公理的系統,讓這個公理系統是完備的。
也許你仍然無法理解上面這段話的含義,不妨先說一下它對我們現實世界的影響。你可能知道1936年出現的圖靈機是現代計算機的理論模型,如果沒有哥德爾不完全性定理的思想,圖靈機什麼時候能出來是很難說的,所以這位哥德爾可以算作計算機理論的奠基者的奠基者。計算機對我們這個世界產生的影響比原子彈大了多少,我想不用我說大家也都清楚。當然,對現實世界的影響只能把哥德爾同圖靈等人一樣劃到大科學家那一層去,能進入這層乃是另有原因。
可能你看過《未來戰士》、《駭客帝國》、《I,Robot》之類的科幻電影,於是你產生製造一個和人一樣或者比人更高一級的智慧機器人的想法,這就引入了一個達到哲學高度的問題,“人到底能不能製造出具有和人一樣的思維能力的機器來?”。
我只能告訴你,“你的願望是良好的,但現實是殘酷的”。如果你仔細思考一下不完全性定理的含義,並結合現代計算機所具有的能力分析一下,你會發現這個問題的答案暫時是否定的。如果你想造出和人一樣思維能力的機器,那麼你需要去好好學習這位大哲及其後續研究者的成果,並在他們的基礎上有新的突破才行。
為了說明這位大哲所研究領域的重要性,這裡順便再討論一個我們日常爭議不休的問題,那就是孔夫子的“人之初、性本善 ”以及西方認為“人之初、性本惡”的觀點孰優孰劣的問題。可能有許多人發現西方社會現在領先我們,於是就認為“性本惡”是對的,“性本善”是錯的,中國應該拋棄以前的舊思想,改用西方的思想。當然也有一些老學究們,認為中國的人文思想是領先於西方的,自然而然地認為“性本善”是對的,“性本惡”是錯的。
如果你學過大哲用過的公理化的分析方法,你就知道一套系統的多條公理間只要不會推匯出矛盾的地方,即可以自圓其說,那麼它可以看作是對的。這樣你可以很輕易地給這個問題下一個結論,即“性本善”和“性本惡”是對等的,不存在孰優孰劣的問題,更不存在誰對誰錯的問題。只要你不同時將“性本善”和“性本惡”放入一個系統內,那麼是不會有問題的,甚至你也可以認為“人之初、既無善、亦無惡”,或者認為“人之初、部分善、部分惡”,都是可以自圓其說的,所以我們的老祖宗提出的思想並沒有問題,之所以落後乃是其他原因造成的。這個問題其實在高斯所處的時代就有了結論,那時有人提出了非歐幾何,即平行線公理問題,有人認為過一點可以作多條平行線,還有人認為平行線在無窮遠點是相交的,和歐氏幾何關於過一點只能作一條平行線的公理都是矛盾的,但是他們各自的系統內推匯出的結論都是正確的。
上面說的只是對哥德爾不完全性定理的一些粗淺解析,實際上如果深入思考一下它的含義的話,你會發現它對物理學等許多學科有重大影響,包含的道理實在是深刻,遠非一般的思想所能比擬,有興趣者不妨“google”或“百度”一下“哥德爾”。或許只有我們的老祖宗“老子” 提出的哲學思想,深度可以有得一比。
哥德爾不完全性定理也給那些認為科學是嚴謹的人當頭一棒,原來連數學這樣的純理論學科都是不嚴謹的,其他學科就更不用說了。
至此,已經說完數學上的大哲,下面不妨再看看物理學上的大哲,物理學上好像只出過一位叫“海森堡”的大哲(注:由於本人對物理學不甚瞭解,不知道“霍金”夠不夠得上大哲的稱號)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/6517/viewspace-611506/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 程式設計師的十層樓(轉)程式設計師
- 程式設計師的十層樓程式設計師
- 程式設計師的十層樓(3)程式設計師
- 程式設計師的十層樓(2)程式設計師
- 程式設計師的十層樓(1)程式設計師
- 程式設計師的十層樓(0)程式設計師
- 程式設計師的十層樓(11)程式設計師
- 程式設計師的十層樓(10)程式設計師
- 程式設計師的十層樓(9)程式設計師
- 程式設計師的十層樓(8)程式設計師
- 程式設計師的十層樓(7)程式設計師
- 程式設計師的十層樓(6)程式設計師
- 程式設計師的十層樓(5)程式設計師
- 程式設計師的十層樓(4)程式設計師
- 程式設計師的十種級別[轉載]程式設計師
- 遊戲設計師的5層境界遊戲設計師
- 程式設計師必看的書(十)程式設計師
- 偷懶是程式設計師的一種至高境界程式設計師
- 多核程式設計的四層境界薦程式設計
- 程式設計能力的 4 種境界程式設計
- 程式設計能力的四種境界程式設計
- 程式設計師職業發展道路的十種級別程式設計師
- 程式設計師達到高效率的一種境界程式設計師
- 我的十年程式設計師之路程式設計師
- 程式設計師的十年之癢程式設計師
- 有關程式設計師的十個預言程式設計師
- 程式設計師的十大無奈程式設計師
- 程式設計師的十大煩惱程式設計師
- 程式設計師的十大謊言程式設計師
- 程式設計師使用Node的十個技巧程式設計師
- 【IT雜談】十年程式設計師程式設計師
- 程式設計師如何讓自己的工作更上一層樓程式設計師
- 優秀的程式設計師該如何更上一層樓程式設計師
- 程式設計師的十大經驗和十大教訓程式設計師
- 程式設計師必須克服的十大程式設計禁忌程式設計師
- 程式設計師需要立刻突破的十大程式設計禁忌程式設計師
- 程式設計師必看的十大電影程式設計師
- 偉大程式設計師的十個特質程式設計師