為什麼這麼多人黑譚浩強的c語言教材?

大一考計算機二級就只看了這本書,然後很愉快的過了。現在看過一些其他c語言的書,發現還是這本書更適合初學者,很有幫助的一本書,為什麼這麼多人黑譚浩強和他的書呢?

如果覺得譚的書不好,你覺得最好的C語言教程又是哪一本呢?


基於譚C第四版。

- 存在大量錯誤,其中有相當的低級錯誤。

· 校對極其不負責任。

* 29個字元居然只給出了28個。

* 107頁程序4,ture和flase各亮相一次。

* 「後輟」。

* rintf。

* 153=13+53+33,沒有上標。

· 無視事實,特別在宣稱按照C99講解的情況下。

* 關於「究竟在哪裡可以定義(聲明)變數」完全不清楚。

* 「C99中把字元型算作整型」拖了十年。

· 邏輯錯誤。

* 「整型,實型,字元型」 char屬於整數類型。

* 「分號是語句的必要組成部分」。

* 「函數調用語句,表達式語句,空語句」。

· 愛下斷言,可惜常常是錯的。

* 「凡是二元運算符都可以與賦值符組合成複合賦值符」。

· 臆測。

* 「先定義,後使用」。

* 「實數」。

* 「C的實數常量都是雙精度型」,接著在後面提到「添加f來強制指定類型」。

* 「把除了控制語句和輸入輸出以外的幾乎所有基本操作都作為運算符處理」。輸入輸出調用的stdio.h中的函數需要函數調用表達式。

* 「++只能用於變數,不能用於常量和表達式」 重定義變數。

* 「按優先順序別順序執行」。

* 「結合性的概念在其它一些高級語言中沒有」。

* 「while語句的範圍只到while後的第一個分號處」。

* 「for(a,b,c)s和a;while(b){s c;}無條件等價」。

* 「根據常識,偶數不是素數。」無故省略前提。

* 「int a[n];是不合法的」。

- 惡劣的習慣。

· VC6。

· 不使用等寬字體,不使用可正常閱讀的代碼風格。

· 教導匪夷所思的解決問題的方式。例如「編譯不通過就改成.cpp繼續運行」。

· 在函數體中聲明其它函數。

· scanf中使用逗號。

· 建議忽略警告。

· 使用加減32進行大小寫轉換。

- C語言水平問題,這單獨挑出來。

· 類型不清,給出的類型的表居然有七八處錯誤。完全無法區分int和整型,即整數類型。

· 對「未定義行為」及類似行為的不了解。

* 利用未定義行為檢測實現特性,例如使用溢出檢測char是否有符號。

· 指針地址不分;數組指針不分。

· 不能區分「函數的返回值類型」以及「函數的類型」。

· 對含有多個字元的character-constant的否認。

· 源字符集和執行字符集合二為一。

· 對自增自減的計算方式的臆測。

· 「四則運算中只要有一個是float或者double,結果就是double」。

· 不知道character-constant的類型是int。

· 格式化輸入輸出的部分大量缺失。

· 臆造的「真」「假」。

· %o,%x輸出指針。

- 冗餘

· 「賦值語句」從「表達式語句」中挑出來。不過這未必不行。

· 多餘的變數,典例是flag。

· 演算法一章與C關係不大。

· 「if (a==trueb==true)」。

累了,不找了。。


好書一籮筐,他寫那本坑錢害人,看了他那本書還覺得好那俺現在真的好擔心樓主你了。。

不說別的,樓主的代碼一定很醜 -_- 審美也有差。。。

樓主有沒有想過,如果當初看的是更好的書,現在是不是會有更好的成就呢?

好書隨便舉一例:

C語言編程:一本全面的C語言入門教程(第三版) (豆瓣)

俺覺得教書育人排第一,名利應該往後靠,故而非常厭惡譚、嚴這樣的人

——補充——

俺其實並不黑譚浩強,因為俺心裡空間有限,有很多重要的人需要俺去關心愛護,再也沒有多餘的角落留給這種人了,這題是邀請俺俺才說的。

說到書,譚、嚴錯誤很多,代碼極其不規範,這會給新手帶來極其惡劣的影響,這是一點,並且是非常重要的一點

加之,嚴蔚敏的書根本不是自己寫的,是學生寫的,不對,是學生抄的,還是不對,是她指揮學生抄的。對於此條,俺根本懶得列出證據,因為俺沒空!歡迎好同學在評論中補充

當然這種事情在俺朝實屬司空見慣,無數大學的院長副院長自編教材都是指揮研究生抄出來的。。。

所以抄襲俺就不追究了,可是嚴的書語言晦澀故弄玄虛生怕你看懂了,實在非常不適合學習

俺純粹是本著關懷新手的目的來說這些話,俺只是無名之輩,譚嚴乃至很多大學的正副院長之流勢力廣大觸手眾多,俺說話做事只是費力不討好還會被噴,您說呢?

——————

額外的,俺近期會開始寫一系列數據結構的入門文章,如果覺得俺對嚴書評價苛刻,可以關注俺寫的數據結構系列文章,計劃是基本概念+應用+練習題模式

俺構思的目錄如下:

  • 數組
  • 鏈表(包括雙鏈表、循環鏈表)
  • 隊列

  • 遞歸演算法(樹的遍歷需要用到)

  • 二叉樹(包括二叉搜索樹)

  • 常用平衡樹(AVL樹與紅黑樹)

  • 哈希表

歡迎補充,也歡迎到時候指正俺的不足之處


薛非在他的書里說到,很多人明明寫的是C但源文件卻是CPP,這樣一來有的時候他們寫的代碼在C語法里根本是錯的,但卻能通過編譯,因為C++里正巧允許這麼寫。而譚浩強的書里就出現了這種想法,甚至告訴人*.c編譯不過時就改成*.cpp試試。這是什麼鬼?

另外譚浩強的書號稱符合C99標準,但稍有常識就會明白,這是個笑話。VC++ 6.0跟Windows 98同年發布,怎麼可能支持C99?

更可怕的是書里很早就出現說編譯器報warning可以無視,這個想法太危險了。會明顯給人一種很敷衍的感覺,就是這本書根本不像是在教人學C語言,而像是教人怎麼應付考試。


我經常有這種錯覺:這個世界上有2種C語言。


因為學老譚的這本書,考試比較好考。

中國的這種應試教育,考卷出題除了要設置一些難題,還要在看似簡單的題里設置一些陷阱題……

出類似 i = ++i--; (x-y)*(x-y)&<100;ch&>=』A』ch,=』Z』; 這種比繞口令還繞的噁心題目,可以用來區分那些誰上課認真聽課、認真聽老師講題、考試時候認真審題的孩子。

這種題目對出題者能力要求低,易判卷,易設置陷阱。

但實際工作中,把一個表達式寫得如此繞的是要遭雷劈的。


我當了9年多的碼農,想來也有資格回答這個問題。我當年大一學C語言用的是影印的外文教材,我們學校非CS專業的就是用的譚浩強的書。當時聽其他專業的學生說那本書寫得多麼易懂易讀,於是我們專業一些英文不太好的同學也去買了那本書。當時我也拿來看了一下,不出兩章我就看不下去了,因為錯誤實在太明顯了。不僅概念錯誤,連示例代碼好多根本就無法運行或者運行結果跟它書上說的是不一致的。後來,高年級後由於所學的課程更加深入經常需要查閱很多資料發現,國內學者出版的這類書籍幾乎全都是一個尿性。其實都是讓他們帶的學生做的,甚至我們學校有留校干管理崗位的老師博士論文都讓研究生做槍手。然後這些老師有資格帶學生之後會怎樣想也想得出來。

國內現在覺得碼農好像是個入門門檻很低的職業。各種培訓機構層出不窮,相關的出版書籍也非常多。其實基本上就是騙錢的,那些書的作者很多對自己寫的東西都沒全面了解,翻譯的作品連術語都會解釋錯。培訓機構的話就更呵呵了,進去10個,有1個能有較好的動手能力就不錯了。最重要的是,培訓機構根本就不可能對學生進行系統化的培訓,基礎非常差。就像我們公司的那些外包人員,有時候給他說一個基本上算是常識的東西都要解釋半天。

現在有互聯網很方便,遇到不懂的問題就問度娘。那些外包就是這樣,拷貝一些代碼來他根本就不知道為什麼會這樣。而且還把原來的代碼結構搞亂了,這些都是隱患。

真正的技術問題還是要用英文檢索才能較準確的找到答案。當然大部分的問題其實在開發具體項目使用的API的官方網站上都能找到答案,只是大多數都很懶或者覺得英文看起來很累而已。

又回到樓主的問題,如果你只是過二級那麼譚的書影響不大,反正你以後基本上也用不上這個技能。但是對於靠編程這個技能吃飯的人來說,那本書不管是從思維模式還是編碼習慣都是誤人子弟。我認為這真的不叫做黑。


因為這些書都過時了,譚浩強不僅不撤下來,也不修改修改趕上時代,還在繼續賣過時的東西。


舉個小例子吧,他書里說等號左邊不能出現表達式,我暫且不糾結他有沒有左值和右值的概念,也不糾結單個變數就構成表達式,簡單的一個p[0]=0就能看出來他這句有問題。

由此可見,譚書的問題不僅僅是過時。就算放到c89那個標準下,他書裡面的一些概念還是錯誤的(比如i++ + i++)。最可氣的是,老譚不懂標準還故弄玄虛,你說你不懂就算了,不寫不就完了么,自己編一些莫名其妙的概念坑人算怎麼回事?

讓我推書的話,《k r》、《c語言的科學的藝術》、《c與指針》三本。如果我生在那個時代,我會選擇翻譯國外的東西,而不是自己胡編亂造整出一本書。


薛非正在趕來的路上


當初學的時候看的Brain和Dennis的那本The C programming language,中文翻譯版,薄薄一本,兩個禮拜看完,從pascal成功轉c。

第一次看到譚的書就被它的錯誤和厚度深深折服。有各種不科學的地方,並且還拿個坑爹的不標準的vc6來說事…擺明了是坑。


因為一大堆前自增後自增讓你算,機器運行出來結果還不一樣!!!

關鍵是,,他媽的考試還要考!!!

鬧哪樣???


譚浩強還是有很大作用的。。可以讓很多人發現自己連什麼是閏年都不知道。。


各個國家,各個領域,都有一堆渣書,你渣就自己靜悄悄的渣唄,用這混個職稱沒人管你,但你亂用自己的影響力(職權),進行推廣,禍害他人,這就是你的不對了。再說清華也不用他的書啊,利用新手的無知進行欺詐,很不道德。


譚浩強的書最大的問題,其實不是質量低錯誤多,而是誤導了無數人用學理論性學科的方法來學這個工程性學科。

個人認為,作為大部分人接觸到的第一本編程書。首要任務是「教人寫程序」,而不是「教人c語言」,應該是後者為前者服務,而不是前者為後者服務。本來充滿樂趣的學習過程,讓譚書毀了。

也別再說什麼「譚書適合應試」了,好多人聽了這話還以為吃透了這本書就能考高了呢。以我見過的這麼乾的都跪了。挺多人花了無數時間在這本書上,去研究a++*a++的值,去研究二維指針和二維數組的區別,卻從來不知道怎麼寫程序去解決實際的問題,不知道怎麼組織自己的代碼讓自己寫著舒服讓別人看著也舒服,不知道程序寫完了怎麼測試。

編程在工科和理科專業里,都已經是基礎性的學科了,這本書不僅危害了大家在這一個學科的學習,還讓大家在面對後續學科時手足無措。這就是大家討厭這本書的原因。


呵老子當年自學C

呵老子選擇支持國貨

呵老子現在用python

你問我問什麼啊

呵老子看他的書差點放棄編程這條道路


哈哈哈哈。

當然要黑譚浩強了。

因為明明是一本科普讀物,非要當教材出版。

也怪那些不明就裡就使用這本書進行教學的老師們,和編輯組設計的熱銷xxxx萬冊(我學的時候是800萬冊,但是我大學室友買的都是1000萬)的封皮兒。

裡面的程序很多都是C89的標準,在VC++ 6.0上還勉強能跑過,VS 2015根本就是一球錯誤,更別說有一些代碼上的硬傷了。

譚浩強的C語言和C++是科普讀物,想要好好學,就要避開。


老梗了,忘了他吧,沒必要糾結他,


個人感覺你應該沒有讀過其他講c語言的書,或者沒有發現其他好書。當年學校學c語言的時候,發的教材也是他那本破書,在前言介紹裡面居然還恬不知恥的寫到"本書敘述簡潔,思路清晰,語言詼諧幽默"。後來學期末的時候我在這句話的旁邊自己寫到"好好的一本講解編程的書,就不能用人話來寫么,非要把語言組織得跟個機器人一樣。你他媽到底是寫給你看的還是寫給機器看的啊!!"。 看到這個問題,勾起了我不好回憶,有點激動(≧▽≦)/,見諒!


就從沒用等寬字元排版代碼這一點而言,我討厭幾乎所有國內的C語言教材

用20分鐘的時間大概翻了一下前幾章,主要關注代碼部分

我覺得國內的C語言教材基本也就都是這種水平了(看完浙大的C程教材,和譚浩強的教材

水平都不夠,講得不系統,畢竟這些C Primer Plus 1/4體積的書怎麼講也不可講清楚明白

因為書本的容量擺在那,作者水平擺在那,不管是譚浩強的書還是浙大的書

但是大致上還是能看,夠入門了,但是不要想用這些書深入學習

列幾個截圖

「採取一些小技巧,以體現程序的專業性」

我記得C Primer Plus在講到自增運算符時明確指出「不要太聰明」,然後列出了各種未定義情況的危害

畢竟這是教材,不是專業書籍反人類的寫法

這是一個解二元一次方程的程序

毫無代碼風格,兩個include對空格的控制都不統一

配合傻逼的非等寬字體,誇張大的字元

簡直沒法閱讀

畢竟這是教材,不僅僅是計算機語言,其他科目的教材(初高中理化生)也存在教學內容與實際不符的情況,中國特色嘛


風格太不正常忍了,習慣不好忍了,把簡單的問題講複雜也忍了,概念和常識錯了也忍了。但是連例題里的代碼都無法編譯通過 或者 和例題完全一樣的代碼輸出結果實際與書上不一樣 這讓新人怎麼學?


推薦閱讀:

有沒有必要學C++?
把編程語言娘化,做成氪金手游,可以怎麼做?
你用c++做過哪些意思的事?
OC 和 C++ 中聲明和實現文件分開的寫法有哪些利弊?
現在的編譯前端技術還是用NFA和遞歸下降實現lexer和parser嗎?

TAG:編程語言 | C編程語言 | CC | 譚浩強 |