飛沙走石解《編程之美》
這幾天稍微清閑一點,就翻看了一下《編程之美》,從序言看起。我看書其實很喜歡看序言和後記。一本好書的序言和後記中覺得凝結著作者的心血。從序言和後記的內容和品質也能看出一本書到底是純粹拼湊的商業作品,還是一本值得細讀的佳作。《編程之美》顯然屬於後者。從調侃一些找工作和面試的基本情況,到介紹微軟招人的方式,都寫得很真實。不過整本書中最具價值的還是那些面試題目和對題目的分析。
跟鄰座的同學約定,隨便從書中選一個題目,看誰的解法最好。抽中的題目是294頁的4.6,一個從桶中取球的題目。如果能充分的理解題目,其實很容易。但是題目中在提問時卻設了一個巧妙的陷阱,一下子就將同學套進去了。來看看這個題目的問題:“問:最後桶裡面只剩下一個黑球的機率是多少?”。一看到問題中的“機率”二字,同學在草稿紙上寫下的就是一堆諸如貝葉斯公式之類的東西。一陣天昏地暗的運算之後,告訴我:算不出具體的機率,但應該有很大的機率是黑球。我要他將一步步的推斷過程講給我聽。一堆公式,逐步地展開,最後的結果就是他自己也不知道自己在算什麼了,完全迷失了……
這個問題中的“機率”二字對於學過機率論的理工科學生來說太有誘騙性了。其實這個題目與機率論完全無關,一道純粹的離散數學題,或者可以說是適合給沒學過機率論的中小學生做的智力題。如果將問題改成“最後桶裡面剩下的一個球是黑球還是白球?”,或許這道題目的難度就能減去大半。不知道鄒欣老師在寫這個題目的時候是否做了這方面的考量。
我又給同學談起我的想法,一陣飛沙走石,雙方都算是理解了對方的想法。然後再翻開書看看微軟牛人們的分析和解答,順便研究一下擴充問題。兩人恍然大悟之時再去看電腦上的時間,已經過去將近兩個小時了。
很久沒有這種感覺了,兩個人能為了一個問題一起埋頭苦想。如果沒有《編程之美》這種牛書,估計也沒人有興趣跟我一起研究問題,這種問題也不會引起我的興趣。買一本書,可以跟好友一起研讀,很愜意的事情。還約定一起實現書中的演算法——或許我又能回到中學那種以解題為樂趣的年代。
中南大學陳鋼