我為什么在乎這一個A+
我知道有些人至今仍然嘲笑和鄙視我,因為我曾經說過,我在 Dan Friedman 的兩門課程 B521(程序語言理論)和 B621(高級程序語言理論)都得了A+。只要提到我,他們就會拿出這個把柄來,好像我是一個只在乎分數的膚淺的人。實際上我覺得這些人只是心理變態,為 了鄙視而鄙視,所以他們發現貌似一個把柄,也不搞清楚 Dan Friedman 是誰,也不搞清楚這個A+ 的分量,拿著半截就開跑,抓住不放了。所以即使我沒提過這分數的事情,他們一樣會找到其它話題來損我。我一直都懶得回應這些人的言論,不過今天我有興致, 所以想花點時間告訴你,這個A+ 到底意味著什么。
從我的人生歷史里 面,你應該很明顯的看出來,課程,考試,分數,名校,權威,事業,成就,貢獻,以至于圖靈獎,諾貝爾獎,對于我來說真的什么都不是。你覺得一個在乎這些東 西的人,會以優秀的成績從清華,Cornell,Indiana 三所大學退學嗎?在漫長的學術生涯中,我上過許多的課程,很多最后結果都是A或者A+,也有幾門課的分數低到C。因為我從來不覺得任何人有資格出題來考 我,所以自上大學以來,我給自己定的標準就是“及格萬歲”。我是一個非常不喜歡上課的人,我覺得普通的課堂講座本身就是一種極其落后的教學方式,所以一旦 覺得老師水平不夠或者不懂教學就開始翹課,自己看書自學。所以,最后無論什么分數都不能衡量我的價值,反而有時候覺得高分是對我價值的侮辱。然而,我為什 么唯獨在乎在一個非名校,“非名師”手里上的這門課程,并且愿意告訴你我在里面的成績呢?
其實,這個分數的意義遠遠不止是一個A+,它涵蓋的內容可能超乎你的想象。也許你可以從一個很小的例子看出它到底意味著什么。在課程進行到一半 的時候,我花了一個星期的時間,獨立解決了曾經困擾程序語言領域十多年的難題——CPS 變換。在這十幾年里面,有眾多的世界級專家參與過這個問題的研究,包括非常強悍的丹麥 Aarhus 大學教授 Olivier Danvy,Andrzej Filinski,Dan Friedman 本人以及他的得意門生 Matthias Felleisen,Felleisen 的得意門生 Amr Sabry,普林斯頓大學著名教授 Andrew Appel(編譯器教材“虎書”的作者)。這些人為這個話題發表了不知道多少論文,Appel 還為此專門寫了一本書。 我之所以會去解決這個問題,是因為 Friedman 別出心裁,把這個問題作為了一道附加題目放進了 B521 的作業里。我不知道這個問題有如此之難,所以愣頭愣腦,真把它當成作業題給解決了。按照作業的“道德規范”,完全從問題出發,不看書不看論文不查網絡,全 憑自己的頭腦,在一個星期之內得到了最優的結果。這就是所謂“王垠 40 行代碼”的含義。一個人七天,一群人十年,我想你應該知道這是什么概念。
我的名字叫做王垠(父親起名含義是諧音“亡垠”,無邊無垠的意思),所以我將會永不停息的完善自己,永遠不會拿某一個東西自居。解決這個難題只 是對我這個人內在品質的一種反映而已,而且它只是我在 B521 做出的好幾個“課外練習”的其中一個。在短短一學期的時間里,我還進行了其它幾個重量級的練習,包括重新實現 miniKanren 語言,加入 constraint logic programming 功能和一種非常強大的邏輯逆(negation)操作符,等等。這些練習,全都是獨立依靠自己領悟摸索完成,沒有查閱任何書籍和論文資料。從這些練習里 面,我獲得了讓我受益終生的獨立思考能力。也就是這種能力,讓我可以在 Google,Coverity 之類的公司,輕松解決其他人咋咋呼呼,認為不可能完成的任務。這就是為什么我會講這個課程的故事,并且告訴你我得了A+。
有趣的是,學期結束的時候,成績單上出現的分數其實是I(Incomplete)。這種成績表示有課程任務沒有完成,如果在一年之內不彌補,就 會變成F(不及格)。我很納悶,發信去問 Friedman。他回答說:“對不起,是秘書搞錯了!” 然后急忙發信給秘書說:“這個人的分數應該是A+!實際上如果可能的話,我希望給他A+++++++!”
現在你還覺得我是因為膚淺才告訴你這個A+ 分數嗎?B521 教會我的,是一生最重要的東西,它讓我真正的理解了什么叫做“簡單”,它使得我去追尋它。它賦予我的獨立思考能力,繼續在幫助我用巧妙簡單的方法解決其他 人望而卻步的問題。這不是一個普通的A+,這是一個把我送上世界巔峰,給予我勇氣和自由思想的A+。
就像愛因斯坦說的,任何一個傻瓜都可以把問題搞復雜,你需要一點天才,還有很多勇氣,才能達到簡單。很多牛人用“簡單”來標榜自己設計的東西, 然而我發現他們對簡單的理解其實很膚淺。大部分時候他們用一種類似“皇帝的新裝”的心理技巧——你如果不能理解他的東西,他就說你是傻瓜或者菜鳥,不能理 解這種簡單。所以沒有人敢說他們設計的東西太復雜。
你覺得世界上有幾個人能夠在 B521 上得A+ 呢?謙虛是一種美德,不要隨便評判別人,然而當看到這么多“大牛”都那么不謙虛,耀武揚威的,很多人用他們作為評判其他人的依據,所以我只好冒著評判他們 的風險,告訴你一些事實。其實 Donald Knuth, Dennis Ritchie, Bjarne Stroustrup, Guido van Rossum, Brendan Eich, Linus Torvalds, Rob Pike, ... 這些很多人仰慕的大牛,如果上 B521 肯定是連A都拿不到的。有些甚至不能及格,因為有些人根本不知道他們在干什么,設計出一堆復雜的垃圾,然后仗著自己的威望和強權迫使你去“學習”。其實我 對計算機的理解跟這些大牛們,早就不在一個數量級上了。我心里有數他們該得什么分數,你們自己猜猜吧。
也許我現在可以毫不擔心的告訴你了,我在 Kent Dybvig 的編譯器課程上得的也是A+。Kent 恐怕是世界上最厲害的編譯器作者,他幾乎從來不給人A+,而我恐怕是他 20 多年來最厲害的一個學生。我們做了一個 Scheme 編譯器,它的難度和工作量,是C語言編譯器的兩倍以上。這下某些人又有另一個把柄和八卦話題了吧,不過要記住,每一天我都在超越昨天的自己……