近日踱入書店,驚訝的發現國內又出了一本C++教材.紅色封面,厚重莊嚴,書脊上印有“國家XXX優秀教材”等熟悉字樣,拿起來一翻,作者竟是如雷貫耳的譚浩強老先生.這位出生C語言的老教授在C領域的貢獻可以說是“地球人都知道”(連我這個不學C的都知道^_^).
但是,令我驚訝的事情來了:
翻開目錄,從頭到尾瀏覽了一遍...
嗯,不錯,中規中矩,有條有理,井然有序,巨細靡遺(還有什麼成語來著?^_^!)
但是,(咦,我為什麼要說“但是”呢?),我驚訝的discover:居然整個目錄沒有任何地方提及template,或模板字樣,更不用說GP了(哦,你說STL?好像也沒有).彷彿C++中從來沒有GP似的(:$),一時間我對自己的認識產生了懷疑:)
我當時就繼續往後翻,想看看是不是目錄的後半部分被撕掉了(^o^),但是很顯然,頁碼是連續的,我錯了(:$)
當然,這是一本教材,教材是學生入門最重要的工具,應當給予十分的重視,就象啟蒙教育一樣.
不能不說譚浩強老先生不重視,翻開他的這本書,仍然是到處可見實踐中的真知,但是Bjarne Stroustrup早就說過,C++並非一個better C.C++是一門全新的語言,C++中的一個最重要的範式就是GP,通用(general purpose)的編程思想是C++中最為優雅而強大的範式.怎能忘了GP?
無論是<Essential C++>還是<Accelerated C++>(它們都是極為經典的入門教材,特別是後者,作者Andrew Koenig是C++社區中最有發言權的人之一,也是最善長深入淺出的長者,還是唯一一個名字出現在ISO.C++標準中的人(見koenig lookup) ),他們都把STL,GP放到顯眼的位置,教育程式員一開始就有generic programming的思想,把這種思想融入到日常的設計和編碼中--從它們那裡,我們看到C++的教育正走上真正意義上的正軌.
但是,(咦,我為什麼又要說“但是”呢?^_^!),作為國內知名度如此之高的譚先生,出了這麼一本<C++程式設計>本來是件好事,雖然C++經典入門教程已經出世,但是有”原汁原味”符合國人習慣的書總是好事吧,然而譚教授的教育方式卻是史前時代的“C++ as a better C”,這就有點那什麼了.現在國內的C++應用仍然停留在較淺的層次和教育可以說是分不開的,教育是至關重要的一環,但是我們的譚教授儘力了嗎?
雖然譚教授的書中可能並沒有錯誤,並沒有誤導學生,可以說是 “do things right”,然而,譚教授卻沒有“do the right thing”.
所以說,譚教授的書真的沒有誤導學生嗎?
或者,思想上的誤導才是最可怕的誤導.
[BTW.後來我忍不住又把書翻了一下,這下不只翻目錄了,我翻看了關於類的部分,總算在一個“角落”翻到了關於模板文法的講解,聊聊幾行,“言簡意賅”,對應一下目錄,原來位於一個類似“擴充講解”的部分(具體目錄名不記得了).而函數模板,我也就沒有心思再找了,模板偏特化,函數模板重載...關於模板的設計,通用(或稱泛型)編程思想的介紹,反正我沒有看到,或許會在那個角落再次“言簡意賅”的提一下吧,我已經沒有興趣了]