因《C程式設計伴侶》的爭執,談譚浩強《C程式設計》的批評

魔力貓發表於2012-08-17

前幾天在網上看到一篇《C語言與C++不得不說的那點事》的博文http://blog.csdn.net/turingbooks/article/details/7860153#comments。發現是圖靈的一本新書《C程式設計伴侶》的片段,故去圖靈網站轉轉。發現這書的爭議很大,我也發表了一些自己的見解。我的觀點是這回弄不好圖靈要出本糟書。我認為截止到今天(2012-08-17),按已放出的樣章的水平,程式設計師們是不會掏銀子的。有位言辭激烈的同學,連這本帶著《C程式設計》,是狠批到底,不留餘地呀。不像我,總覺得要給人家留點面子,斟酌一下詞句。

《C程式設計伴侶》到底如何,因為還沒有最後定稿,故此不好品評。今天打算談談譚浩強的《C程式設計》的事情。畢竟這本《伴侶》之所以爭執優劣,很大程度上是因為譚浩強的《C程式設計》。《C程式設計》這本書從91年出版,到今天為止已經4次改版,號稱印刷量高達1100萬冊。平均下來150多箇中國人就能有1冊。一本書20餘年能夠到這個地步,無論是因為什麼,都是難能可貴的。

但是你去互動等網上書店,看到《C程式設計》的書評,各種批評車載斗量。給予正面力挺的,也多是打感情牌。意思就是這本書總體上還是有功的,不能這麼罵。怪哉,這本書既然持續出版20年,發行量1100萬。為什麼這麼多的批評?

我真正開始學習程式設計是在97年,當時學校給的C語言教材是什麼樣子,十多年過去已經記不得了。加上工作後並沒有使用過C,故此C的水平只能說平平,看到C程式能基本通讀一下,好壞只能說說程式碼風格如何,沒法從C本身的角度評價。這次因為這場爭論需要看看原書,特意從找了《C程式設計》第三和第四版來了解。 因為時間有限,我只是簡單的讀了一遍。我覺得我找到了網上為什麼那麼評價的原因。這本書的核心問題,其實就是國內計算機院校教材的通病,沒有適應時代發展,躺在原來的成績上面睡覺。

《C程式設計》之所以能夠取得這麼大的印量,20年來長盛不衰。其第一版應該居功至偉。當時我還是小學生呢,平時最多玩玩紅白機,最多會在學習機上跑個Basic。還是Helloworld水平的。上了初中,才開始接觸電腦。不過也多是在玩兒遊戲和少量文書處理。這個時期,普遍的就是缺。會用電腦的缺,程式設計師更缺。很多人開始考計算機等級考試。一級和二級的報名考證很火。就類似於改革開放剛開始的幾年,什麼方面都缺,只要有就是好東西,根本不吝好壞,起碼比沒有好。《C程式設計》在國內院校教材裡面,還是水平線以上的,可以算是一本好書了。那麼在這種市場環境下,《C程式設計》取得成功很正常。大量的學生通過這本書入門,自然對這本書有了感情。但是也要看到,這本書的定位也就是讓你能夠寫些最簡單的程式,能夠期末考試通過,最多考個二級證。不能讓你真正能夠用C去吃飯。

我在學校裡面學程式設計是97年開始的。學校先是QB(QuickBasic,不是某傳銷魔獸),然後是Pascal,接著是C和8086彙編。感覺就是學了一大堆,寫的程式碼最大的也沒500行。出來的東西和市場上面的軟體一比,連個玩具也算不上。後來3年級開VisualBasic和VisualFoxpro,才算能做出個玩具了。《C程式設計》就是為這種教學環境編寫的。讓你知道C語言,但是沒法實用化。當時也沒人說什麼軟體工程,瀑布模型學校裡面好像都沒怎麼說。根本就不像這些年,敏捷啦、重構啦、程式碼的可讀性啦這些全出來了。這些東西當時想學都沒得找資料。連老師帶學生,程式碼都是義大利麵條。

前幾年上電大,成人再教育。老師教程式設計,我發現雖然語言變了,用Java了。但是整體水平仍然和10年前差不多。目標是讓你能夠期末考試通過,而不是能做出可用的程式來。架構、程式碼重用、封裝、程式碼可讀性這些就沒人提過。老師寫程式碼,基本上都是

int a,b;

這種水平的。根本沒有程式碼可讀性的概念。

C語言在現在的實際工作中,一般只有兩種地方用。一個是作業系統核心、編譯器、驅動程式這樣的底層。非大牛不能操刀。一個是嵌入式、微控制器,因為資源太少,只能用C。就是嵌入式市場,因為這些年硬體的發展,C的圈子也在縮小,大量高階語言隨著硬體水平的提高而進入這個圈子。C很多時候只是一個教學語言了。TOIBE排行榜上C常年位居第一,其實倒不是其日常用的這麼多,而是學生學習程式設計佔了很大一塊。《C程式設計》紮根學校,服務目標明確,自然訂單源源不斷。

但是,最近幾年,C在應用開發中也有回暖的趨勢。隨著Python、Lua等膠水語言開始在國內普及。原來已經在日常開發中不太使用的C開始用於編寫對效能有較高要求的模組。編寫好後,由指令碼語言呼叫。這種混合程式設計方式開始流行起來。很多程式設計師需要重新學習C語言。那麼自然,印刷量巨大的《C程式設計》被不少人選擇。也許是因為前輩當年就是通過這本書入門的,向後輩推薦。或者因為自己當年讀的就是這本,因為它領著自己第一次學會了程式設計,出於這種感情又去讀這本書。但是這本書雖然在院校教材裡面算不錯的,但是仍然沾染了國內院校教材的很多壞毛病。最主要的問題就是書的目的是為了C語言期末考試或者考二級,而不是讓學生能夠在實際生產生活中使用C語言程式設計。內容和習題都是考試型的。其次就是內容陳舊,更新緩慢。即使是最新的第四版,還用VC6作為程式設計環境。甚至還嫌VC不夠老,連Turbo C++都拿出來了。這都哪年的產品了!Borland都被收購多少年了!Turbo C++ 3.0可是92年的產品,今年是2012年。編譯器又是不斷髮展的,不是一個多少年不變的東西。拿20年前的老古董來,真的大丈夫?第四版號稱基於C99規範,我想問問,92年的C++編譯器支援C99嗎?C99新添的特性怎麼能編譯得過去呀。起碼您也安個mingw,用gcc怎麼也比TC、VC好吧。而且沒盜版問題。支援最新的規範。

而且市場上這些年來引進的國外頂級大牛執筆的經典越來越多。人家的目標不是讓你期末考試通過,而是讓你能真正用來幹活。大家讀書,不免拿來比一比,可這一比就壞了。《C程式設計》是大家本來心目中的經典,把它的地位給拔高了。結果和國外的經典一比,差距出來了。要是這本書是現在哪個沒名學校的三腳貓教授編的用來賺學生錢的破書,大家理都不理。互動上這種書很多。VFP6都多少年沒人用了,還有人出它的新書呢。為什麼呢?學校還在教,二級考試裡面還有它。有這個市場,自然就有新書出來。我看了幾本的介紹,這類書除了學校和考級的買,根本沒人要。賣出去多少本我不知道。但是書評是一個也沒有。大家根本懶得寫書評。甚至不但書評沒有,電商也知道這些書零售基本沒人要,連介紹都不寫。但是 《C程式設計》 是自己心裡本來的經典呀,和國外經典比出失落感來了。常言道愛之深責之切,自然是破口大罵。

所以就出現了這種現象。《C程式設計》銷量一直不少,但是書評裡面的罵聲也越來越高。我認為大家還是對這本書更加客觀一些比較好。對這本書的感激和懷念之情沒錯,91年的第一版當得起。但是對於現在的第三第四版,就不要再期盼其能夠做到第一版的地步。因為它就是一本國內院校的教材,就是比較好的院校教材,那也是院校教材。院校教材裡面可以矮子裡面拔將軍,不代表其可以去和國際經典比肩。大家還是讓它迴歸自己的合理地位,做一本合格的院校教材好了。不要給與超過其承受度的期望。如果有後輩詢問如何學習C語言時,一定要問清楚其目的。如果只是期末考試或者二級證,以後不大可能做程式設計,那麼推薦這本書還是可以的。如果是真心想要學習C語言,日後吃IT這碗飯的。還是建議其購買真正的經典比較好。既不用誤人子弟,讓後輩日後抱怨。也讓這本《C程式設計》繼續在我們的記憶裡面保留美好的印象,少挨幾句。

相關文章