當前位置:首頁 » 編程語言 » 最好的c語言教材
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

最好的c語言教材

發布時間: 2023-06-14 20:36:26

Ⅰ 學習c語言看什麼書好

最近很多人都在問如何學習編程。我覺得學習編程最重要的是入門,如果你入門的時候有一個好的方法和思路,打下比較扎實的基礎,對今後的編程工作是很有益處的。即使在學習新的編程語言也無所謂,因為它們有很多相通之處,可以相互借鑒。
我認為可以先學習一下pascal,這個語言比較嚴謹,適合初學者。pascal它被稱為教學語言,結構嚴謹,不像C語言那麼靈活,易於理解和學習。
然後可以繼續學習C語言,這個語言比較靈活。有了pascal的基礎,在進行C語言編程就不會因為C語言的靈活而有問題
。後面的就可以學習VC什麼的了。
C語言的書推薦譚浩強的,比較好。
我當時學習pascal和C語言的時候是將書後的習題都做了一遍,感覺效果很好。
當然了,學習什麼語言也要看你具體准備從事什麼行業。例如你要進行嵌入式開發,C就是很好的選擇,如果是Windows開發,那麼VC就不錯。還有資料庫方面的開發、網路開發等等。不同的語言適合不同的方面。要看自己的選擇的,呵呵

還有很多人說自己的基礎很差,甚至中學畢業什麼的。其實這個並不重要,比較說英語,在計算機語言里所用到的單詞量很少,而且都是常用詞,經常使用就記住了。當然,如果你要看原文資料或者幫助的話,專業詞彙比較多,不過在金山詞霸的幫助下,經常看,也是沒什麼大的問題的。至於數學什麼的,其實數學只是培養你一個邏輯思維能力,在初學編程的時候影響不是很大。況且,作為一個基礎編程人員來說,上面還有系統分析師、項目經理,他們會把需求分析、概要設計和詳細設計做好的,你只要按照文檔寫代碼就OK了。不過,要上更上一步的話,其他基礎知識就非常重要了,畢竟你不能寫一輩子代碼。
在你學習好C語言以後,個人建議好好學習一下數據結構和軟體工程。這兩門對你的水平提高都是很有幫助的。特別是軟體工程,它能夠使你按照科學的工程方法進行軟體開發,對今後的發展很有好處。
只是一家之言,有不到之處,還望見諒

Ⅱ 學習c語言有哪些好教材,清教下前輩們

別人的帖子推薦給你
和其他語言相比(例如C++),C語言是一門比較「小」的語言,可以在較短的時間內入門,但是由於C的很強的表達能力和太多的細枝末節,要想精通比較困難。想精通有3種途徑:1)閱讀經典書籍,只讀經典。2)多看優良的源代碼。3)學習軟體設計,並應用於日常編程。C語言比較經典的書也就那麼幾本,全部看下來也花不了很多時間。語言的優劣問題更像是一個信仰的問題,沒有太多討論的必要,而且大多編程原則適用於任何語言。在這里只討論我視野所及的C語言書籍。

8人推薦 推薦
全部圖書(8)

2009-10-19 07:44:50添加 1. C語言程序設計
作者 : 譚浩強
出版社 : 清華大學出版社
評語 : 第0本 《C語言程序設計》譚浩強我們很少有學C語言的啟蒙書不是用這本的。如果你從來沒接觸過C語言,這本書還是適合作為入門的。盡管大學畢業之後就不再碰這本書,但是還記得當初這本書看了3遍、指針那部分看了至少5遍的那種心情。以後看了其它的書,才對C語言中的一些內容有更深的理解。相信大多數第一次接觸C語言的人都有類似的感覺。不要期望一本啟蒙的書帶給你想要的一切,一切才剛剛開始。
加入購書單

2009-10-19 07:48:08添加 2. C程序設計語言(第二版)影印
作者 : Brian W.Kernighan,Dennis Ritchie作者:(美)克尼漢 等著

出版社 : 清華大學出版社
評語 : 第1本 《C程序設計語言》 Brian W. Kernighan / Dennis M. Ritchie 這本書又稱為 R&K C,還有誰能比C語言之父對C語言更有發言權的呢?推薦看英文版。你會驚訝於在短短不到200頁的篇幅內,這兩位牛人將C語言描述的這么清晰。即使不專門學C語言的人也可以拿出來翻翻
加入購書單

2009-10-19 07:44:50添加 3. C 陷阱與缺陷
作者 : (美)凱尼格 著,高巍 譯
出版社 : 人民郵電出版社
評語 : 第2本 《C陷阱與缺陷》Andrew Koenig Andrew Koenig的成名作,能幫助初學者減少90%的錯誤。一些錯誤(比如賦值符、運算符優先順序等)還是不時的會在自己的程序里出現,只是已經打過預防針了,很容易發現。另外作者寫了一本《Accelerated C++》,據說是C++的最佳入門書,狠贊!!
加入購書單

2009-10-19 07:44:50添加 4. C專家編程
作者 : (美)林登(LinDen.P.V.D) 著,徐波 譯
出版社 : 人民郵電出版社
評語 : 第3本 《C專家編程》(LinDen,P.V.D)一看書名就知道這丫不能拿來入門用的,第一次看的時候夠折磨大腦的。作者聲稱,編程的唯一原因是因為樂趣。相比之前的幾本書,這本書還介紹C語言運行的環境,更全面地考察了C語言。深入分析了C語言中一些容易混淆的概念,如復雜的聲明和定義、數組和指針、鏈接和運行時庫、內存等。很值得一讀。順便一提:鏈接庫可參考《深入理解計算機系統》的動態鏈接庫一章,寫得更易讀
加入購書單

2009-10-19 07:44:50添加 5. 編程精粹:編寫高質量C語言代碼(英文影印版)
作者 : Steve Maguire
出版社 : 人民郵電出版社
評語 : 第4本 《編程精粹:編寫高質量C語言代碼》 《Writing Solid Code》 Steve Maguire 這是我讀到C語言書中最驚嘆的一本,盡管寫出沒有bug的程序不太可能,但按照作者提供的方法,可以離這個目標很近。本書關注的更多是怎麼使用C語言開發工業級產品的問題。這本書源自作者十幾年不斷的追問自己兩個簡單的問題: 1)怎樣才能自動地查出這個錯誤? 2)怎樣才能避免這個錯誤? 「他的另一部名著Debugging the Development Process(中文版《微軟
加入購書單

2009-10-19 07:44:50添加 6. C Interfaces and Implementations
作者 : David R. Hanson
出版社 : Addison-Wesley Professional
評語 : 第5本 《C Interfaces and Implementations》 David R. Hanson 這本據說為唯一一本能和R&K C並駕齊驅的書,可惜中文版眾口一致說太爛,無處可載電子版,影印版跳票多年,原版USD 54.99實在承受不起,囊中羞澀,奈何奈何。想念多年,至今不能一睹芳容,深以為憾。
加入購書單

2009-10-19 07:44:50添加 7. C標准庫\圖靈程序設計叢書
作者 : P. J. Plauger
出版社 : 人民郵電出版社
評語 : 前面5本差不多夠了,另外推薦兩本,精力過剩的可以翻翻第6本 《C標准庫》P. J. Plauger 本書介紹C標准庫的實現,書中有較為詳盡的代碼。雖然這本書年代久遠,現在的實現肯定和以前也有差別,但是還是很有參考價值,特別是對C標准庫的實現有興趣的人。中文版太貴,英文電子版看得太累,還是以後有地方借的時候再繼續看。
加入購書單

2009-10-19 07:44:50添加 8. C語言參考手冊(原書第5版) 缺貨
作者 : (美)哈比森(Harbisom.S.P.)著
出版社 : 機械工業出版社
評語 : 第7本 《C語言參考手冊》拿來備查的,C語言的任何細節幾乎都能在其中找到借到。書的第一部分介紹C語言語法細節。第二部分介紹運行時庫,可以和《C標准庫》參考閱讀。
加入購書單

Ⅲ C語言哪本書最好

潭浩強
清華大學出版社
學C語言的99%都用他的書
以下在網路上看到對他的書的評價
按∶
譚浩強
教授編寫的
《C程序設計
》一書受到廣泛的歡迎和高度評價。下面刊登幾所大學講授C語言
課程
的老師對《C程序設計》一書的評價意見。
清華大學計算機與信息管理中心
承擔著清華大學非
計算機專業
的「計算機軟體技術基礎」課,自1994年起選用清華大學出版的譚浩強教授編寫的《C程序設計》一書作為本課程教材,取得了很好的教學效果,深受師生們的歡迎,現正使用第二版作為
教材
。此書的特點及對教學的
促進作用
主要表現在以下幾方面:
1.內容全面,實用性強
此書涵蓋了程序設計
基礎知識
及C語言程序設計的全部內容,並介紹了大量常用
演算法
。通過學習此教材,初學程序設計的學生可以達到熟練運用C語言進行小規模應用開發的能力。
2.講解透徹,深入淺出
此書對
概念
講解透徹,使初學
計算機程序設計
的學生不僅學習了一種
高級語言
,而且能夠對相關基礎知識有準確深入的理解,例如在介紹
變數
存儲類型時、介紹指針時都對
計算機

存儲管理
做了清楚的論述,使讀者知其然也知期所以然。廣大非計算機專業的學生學習
計算機課程
的學時很少,沒有足夠的
時間系統
地學習計算機專業基礎知識。因此像這樣將必要的基礎知識融會貫通到程序設計課程中,對學生的
知識結構
建設以及今後的深造和提高都大有裨益。
3.通俗易懂,易於自學
此書的一個突出優點就是,語言優美、舉例生動、
淺顯易懂
。學生在學習C語言之前,普遍有些畏難情緒,因為聽說C語言比較難學。的確C語言最初是面向專業
開發人員
的。但是讀了
這本書
之後,學生們不再懼怕C語言。很多學生說,讀這本書不僅
學會
了C語言,而且讀的
過程
本身就是一種享受,不像有些專業書籍,堆砌大量技術
名詞
,艱澀難懂。由於這本書易於自學,給我們的教學工作帶來很大幫助,使我們可以達到精講多練,逐步實現教師指導下的學生自主式
學習模式

4.結構清晰,循序漸進
由於本書結構清晰,
知識點
明確,循序漸進的內容組織方式非常符合
初學者
的認知
規律
,因此給教師組織
課堂教學
提供了很好的指導。我們按照這本書的內容結構組織教學,取得了學生和
教務處
的一致好評。
5.習題豐富,利於復習
計算機程序設計是一門實踐性很強的課程,因此僅僅通過閱讀教科書或聽課是不可能掌握的,學習程序設計的最重要環節就是實踐。本書每章都附有大量習題,並且有配套的習題解答,非常有利於學生復習鞏固課上所學的知識。也便於教師設計
實驗課

教學內容

Ⅳ 初學c語言用什麼教材好,求推薦

想看國內的還是國外的?
國內的看譚浩強的《c語言程序設計》,雖然褒貶不一,不過依然是本很好的教材。國外的就選《C Primer Plus》,C語言的入門經典,很厚的一本書(初學者千萬別被嚇到……),課後習題一定要都自己做了,這本書會讓你打下很牢的基礎。
綜合來說,畢竟是國人,先看看譚浩強的吧,《C Primer Plus》對初學者來說啃起來很難,看完譚的再看《C Primer Plus》會好很多。
註:另外也可以看《Head First C》,雖然我沒看過,但Head First 系列評價一直不錯,我看的是這系列中的Python教程,編書的風格很好,如果不喜歡教科書式的枯燥內容,Head First系列就是不錯的選擇,讓你的學習不那麼枯燥並且快速入門。看完後再看《C Primer Plus》(當然其他c語言基礎教程書也行),絕對可以事半功倍。
看到別的評論說到指針,雖說對初學者來說有點早,不過我也補充一下(不知道指針的話可以先略過下面這段話):對於指針,記住一句話:「指針中存的是地址。」這也是指針的定義,永遠不要忘了這句話,萬變不離其宗,指針函數、函數指針、數組指針、指針數組、常量指針、指針常量、指向常量的常量指針……很頭疼的東西,但不要覺得它難,覺得難只會讓它越來越難,第一次學學不透不要緊,知道基本概念即可。學完了c再回頭來看指針,抓住它定義的那句話,無非就是一個存地址的。以前我也混亂過,然後清晰了,然後又混亂……周而復始,混亂的時候無一例外都是被指針指來指去搞暈了,而忘記了它的定義——一個存地址的。後來看了一本書,名字我忘了,好像是C和指針,很薄的一本書,很經典的教材,這才算徹底理清了指針,也把指針中存的是地址這句話真正記在了心上,然後任何復雜的例子都是一眼明了,當同學還在為指針困惑時,我也在為他困惑:這么簡單的例子有什麼好睏惑的?(哈哈,當時確實被同學們奉為大神了,允許我裝一下)。所以對於指針不要怕,記住它的本意,再復雜的例子也可以由里到外慢慢肢解,第一遍看不透不要急眼,過後再看,有了基礎可以再找一找c和指針這本書,它會讓你豁然開朗。

Ⅳ 學習c語言哪個書比較好些

1.C語言入門經典

《C語言入門經典》例子簡單生活化,而且每個例子分析很細。章節安排合理,章末的例子還特別注重思路的引導,而且分析起來特別有成就感。

這本書是自學過程的一本好書。

2.C primer plus

這本書很適合希望系統學習C語言的讀者,正如他的名字,是一本不錯的入門和進階的書。書中的每一個知識點都有皮拍瞎很多生動簡單的示例,並給出了相應的運行結果。總之,在看這本書的過程中,有一種一氣呵成的感覺。

3.C和指針

這本書和《專家編程》《C缺陷和陷阱》可以並稱C語言(進階書)三傑。本書的部分內容更適合有C基礎的人看。如ADT、遞歸、指針和數組的部分,書中所述的思想是國內教材所缺乏的。看完本書,能得到一個正確的C語言觀。

4.C程序設計語言

難以置信的是,這樣一本C語言的入門書籍,從hello world開始講起,卻在短小的篇幅里,手把手教你寫了stdio.h stdlib.h string.h當中大部分常式,實現了二分查找、快速排序、二叉樹、哈希表這些重要的數據結構和演算法。這本書傳遞著一種簡單、優雅、平實和閑適。

5.C專家編程

Ⅵ 有什麼學C語言的好書

你好,很高興回答您的問題。個人建議看《C primer plus》、《寫給大家的C語言書》、《C語言解惑》、《你必須知道的495個C語言問題》、《編程精粹》、《C標准庫》等國外優秀著作。 還有一個 ::C語言入門經典(第4版) 作者: 出版:清華大學 出版日期:2008年04月 本書是編程語言先驅者Ivor Horton的經典之作,是C語言方面最暢銷的圖書品種之一。本書集綜合性、實用性為一體,是學習C語言的優秀入門教材,在世界范圍內廣受歡迎,口碑極佳。書中除了講解C程序設計語言,還廣泛介紹了作為一名C程序設計人員應該掌握的必要知識,並提供了大量的實用性很強的編程實例。本書的目標是使你在C語言程序設計方面由一位初學者成為一位稱職的程序員。讀者基本不需要具備任何編程知識,即可通過本書從頭開始編寫自己的C程序。 新華書店網店新華文軒有賣的 謝謝採納。

Ⅶ 我想學c語言編程,請給我推薦些教材

您好 ,很高興回答您的問題。
就我個人而言,也接觸了很多版本的C語言的教材,基本上很多都差不多,都是圍繞發展史、數據類型和運演算法則、三種基本結構(順序、選擇、循環)、數組、函數、預處理命令、指針等等順序來講解的。個人建議您可以參考一下清華大學譚浩強教授的教材,這本教材被印刷了很多版,確實是很不錯的教材。另外您也可以在網上找一些比較好的網路視頻課進行學習,相關的軟體一般都是使用的VISUAL STUDIO C++這個軟體,您可以去試試哦。有不懂的也可以相互討論。
以上就是我的回答,希望能幫助到您。不當之處,敬請批評指正。

Ⅷ 學習c語言看什麼書好

重點推薦C語言四大聖經:《C語言程序設計》、《C和指針》、《C陷阱與缺陷》、《C作家編程》。其中C語言的發明者K&R的《C程序設計語言》更是重中之重,此書是C語言的第一秘典。所有優秀程序員的必經之路。

四大聖經及其他優秀書籍的信息:
1.《C語言程序設計》
K&R
清華大學出版社

2.《C和指針》
POINTERS ON C Kenneth A.Reek、
徐波 人民郵電出版社

3.《C陷阱與缺陷》
Andrew Koenig、 高巍
人民郵電出版社

4.《C專家編程》
Expert C Programming Deep C Secrets Peter Van
Der Linden 人民郵電出版社 (2008-02出版)

5.《清華大學計算機系列教材•數據結構(C語言版)(附光碟1張)》
吳偉民、 嚴蔚敏
清華大學出版社

6.《計算機演算法設計與分析(第3版)》
王曉東
電子工業出版社

7.《演算法藝術與信息學競賽•演算法競賽入門經典》
劉汝佳
清華大學出版社

8.《演算法導論(原書第2版)》
科曼(Cormen T.H.)、等、 潘金貴
機械工業出版社 (2006-09出版)

9.《編程之美:微軟技術面試心得 》
《編程之美》小組
電子工業出版社

10.《編程珠璣(第2版)》
Jon Bentley、黃倩、 錢麗艷
人民郵電出版社

11.《演算法藝術與信息學競賽》
劉汝佳
清華大學出版社

12.《程序員面試寶典(第3版)》
歐立奇、劉洋、 段韜
電子工業出版社

13.《數學之美》
(《浪潮之巔》作者吳軍最新力作,李開復作序推薦,Google黑板報百萬點擊)

Ⅸ 有什麼好的C語言教材

程序員》推薦C++ 圖書三人談

主持人:熊節(透明),《程序員》雜志編輯,C-View成員
嘉 賓:孟岩(夢魘),聯想公司掌上設備事業部應用開發處任職,C-View成員。與侯捷先生合譯《C++ Standard Library》一書
金尹(惡魔),上海天宇公司CTO,在《程序員》連載有「自由與繁榮的國度」系列文章

透明:「學C++用哪本書入門」,這是被問得最多的一個問題。但是哪一本書是最好的入門書?似乎很難找到答案。《C++ Primer》太厚,《Effective C++》對讀者要求比較高,《Essential C++》又常常被批評為「太淺」。
其實說穿了:no silver bullet。想從一本書學會C++,那是不可能的。有朋友問我如何學C++,我會建議他先去找本數據結構書,把裡面的習題全部用C++做一遍,然後再去看《Effective C++》。myan經常說「要在學習初期養成好習慣」,我對此頗不以為然。
個人認為,《Essential C++》適合作教材,《C++ Primer》適合作參考書,《Effective C++》適合作課外讀物。

惡魔:很後悔當初買了《C++ Primer》。因為從我個人角度來看,它的功能效用基本是和《The C++ Programming Language》重合。當然對於入門來說,它還是很不錯的。但是《C++ Primer》太厚,一來導致看書極其不方便,二來系統學習需要花比較長的時間。對於目前這個越來越快餐化的時代來說,的確有很多不適合的地方,不過可以作為初學者的參考書。現在我以一塊K3 CPU的代價把它借給了別人,希望我那位同事能夠從中得到一些益處。
如果已經具備了C基礎,我建議看國內的書,例如錢能的《 C++大學教程(第二版) 》。(如果沒有C的基礎還是看譚浩強的C語言)。這本書對C講得還算比較清晰,有很多習題值得一做,特別是最後的struct和union兩個部分。其中的一些演算法比較拖沓和繁瑣(比如樹和鏈表的遍歷演算法),讀者可以嘗試修改這些例子,作為最後對C語言的一些總結測試。

夢魘:這個問題讓我想起四五年前的情形。今天對於C++有一點認識的人,多半是從那幾年就開始學C++了。那時根本沒有品牌觀念。從書店裡找一本C++書,如果看著還算明白,就買下來。我記得那時候宛延闓、張國鋒、麥中凡教授的書都受到很高的贊譽。我個人最早的一本C++書是Greg Perry的一本書,今天想起來,其實是一本打著C++旗號的C語言教程。對我作用最大的一本書是國防科技出版社出版的一本書,書名記不得了,作者叫斯蒂芬·布萊哈。
透明:還記得以前曾批評過一本C++書,是北航出的,整本書就沒有出現過class關鍵字。那本書,說穿了其實只是介紹了C語言和iostream庫的用法,根本不能算C++。而當時我常常推薦的一本書是電子科技大學張松梅老師的C++教程。那本書,直到今天來看也沒有太大的問題,唯一的缺憾就是由於年代久遠,許多東西已經過時了。而對於一本技術書籍來說,「過時」是最不可接受的。
總體來說,那時使用C++的人真是在「盲人摸象」。不過這也有好處,就是對C++的很多細節能搞清楚,以後看到經典好書時比較容易理解;當然壞處就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什麼不一樣。

夢魘:整個90年代,其實大部分人對於C++的認識都似是而非。一開始是等同於Borland C++,後來是等同於Visual C++和MFC。所以一般來說,打著BC和VC旗號的書賣得很好,人們覺得這就是C++。而我比較幸運,布萊哈的那本書雖然從現在的眼光來看談不上高超,但基本路子是對的。可能是因為原書是給UNIX程序員的培訓教材,所以沒有讓我一開始就形成「C++ == VC++」的認識。
其實一直到1996年,我們那裡搞計算機的都是唯Borland C++馬首是瞻的,到了VC 4.0出來,一下子格局全變了。1997年VC5推出之後,書店裡MFC書鋪天蓋地,學MFC的人,頭抬得都比別人高一些。不過現在看來,那時候大部分的MFC書都是三流貨色。我曾經有一段時間認為,那一批程序員中間有不少被誤導了。根本原因就是相對的封閉。

透明:我覺得一本書的價值有兩方面:第一,教給你實用的技術;第二,促使你去思考。對於一本介紹VC(或者說MFC)使用方法的書,我根本不希望它能促使我有什麼思考,所以我就一定要求它在技術上精益求精完美無瑕。我剛開始用VC的時候,買的第一本書就是潘愛民老師翻譯的《VC技術內幕》(第四版),沒有受到那些「三流貨色」的誤導,應該說是很幸運的。

夢魘:1999年機械工業出版社開始出版「計算機科學叢書」,其中的《Thinking in C++》第一版受到了廣泛的歡迎。其實我一直不認為這本書很出色,雖然拿過一次大獎。然而我們都得承認,這本書在C++書籍領域里第一次建立了品牌觀念,很多初學者開始知道,不是隨便買哪一本都一樣的。再往後就是2000年的《 深入淺出MFC(第二版) 》第二版,以及侯先生在《程序員》上發表的那一篇《C++/OOP大系》,加上整個大環境的變化,品牌觀念深入人心,C++書籍市場終於開始逐漸與世界同步。
回想往事,我的感覺是,那個需要戰戰兢兢選擇入門書的時代已經過去,今天的C++初學者,大可以放心地買口碑好、自己讀起來思路順暢的書,入門不再是太大的問題。還有一些程序員已經學了幾年C++,但看到今天出版的一些新書,感覺比較陌生,這也不是什麼問題。侯先生經常說「凡走過必留下足跡」,所謂「走彎路」,未必不是一件好事。
至於具體的推薦表,就不好一概而論了。總之在我的印象里,《Essential C++》、《C++ Primer》、錢能教授的C++教程,都不錯。甚至有人一上來就看Bjarne Stroustrup的《The C++ Programming Language》,只要他喜歡,也沒什麼不可以。

透明:我同意你的觀點。不管怎麼說,編程是門實踐性非常強的學問。要想對C++對象模型有深入的了解,最好的辦法就是寫一串程序去看結果;要想學會OOP,也只能從項目中學。對於初學者,最好的學習方法就是不停地寫程序,寫真正有用的程序,寫到有問題的時候就去查書,於是自然就會知道哪本書好哪本書不好。不過我們的教育制度能不能讓大學里的學生們有這樣的學習機會,我表示懷疑。
以我的經驗,學C++有兩個門檻:入門和使用。完全看不懂C++,這是一個門檻,但是只要有一本合適的入門書,很快就能跨過。要想真正用上C++,卻不是件很容易的事情。尤其對於學生來說,接觸到的東西多是「玩具」,很難有實戰的機會。所以經常看見有人問「C++到底能做什麼」,這是C++學習中一個比較麻煩的問題。我們都是做了相當長時間的C++程序之後才看到一些真正經典的書,也正是因為走了相當長的彎路之後才知道這些書的經典之所在。所謂彎路,我想也是一種必須的積累。就算一開始就看《Essential C++》和《C++ Primer》,沒有兩三年的時間恐怕還是難有所得。

惡魔:有兩句十分有道理的話,一是我大學的C語言老師說的「寫程序不如說是抄程序」,另一句是一網友說的「好的設計來自借鑒,天才的設計來自剽竊」。對於我這個理性批判主義者來說,這兩句話的確不太適合。但是無論從哪個角度來講,對於初學者來說,剽竊大師的作品是通向成功的最快捷徑。
我個人認為,對於C++的初學者來說,首先要確定自己專業領域內主要使用的特性的方向。因為C++的特性如此眾多,初學者想貪多基本是不可能成功的。C++的編程範式基本可以分為ADT+PP、GP和OO三個方向。對於ADT+PP範式來說,初學者的主要問題不是學習C++,而是學習C的使用。對於這樣的初學者,國內的幾本書還是寫得比較清楚,符合中國人的習慣,比如譚浩強的《C語言教程》、錢能的《C++語言大學教程》。這兩本書我首推第一本,因為這一本我潛心研究了一年,這本書當中很多程序是可以剽竊的,而且可以對這些程序進行加工和提升。比如結構這一章中,它所給出的用struct來實現鏈表、二叉樹的演算法是相當蹩腳的。學習ADT+PP的初學者將這本書揣摩透以後可以嘗試修改這兩個程序。另外這本書的第二版稍微涉及了一些關於「類」的內容。學習ADT+PP的初學者,可以不被OO中的一些專有特性擾亂自己的思路,對於類層次扁平、無繼承、無多態的程序編寫是有很大好處的。

透明:你好象比較推崇國內教授寫的書。現在社會上有種不好的風氣:一捧就捧上天,一貶就貶下地。就好象對待譚教授的書,前幾年是奉為經典,這幾年又有很多人使勁批評。學C++更是有點「崇洋媚外」,總是覺得初學就應該看《Essential C++》。我看這種觀點也是片面的。

惡魔:當然《Essential C++》也值得看看。但是我個人覺得這本書沒有譚浩強的《C語言教程》來得好。主要原因是:第一,C++的所有特性都點到了,但是不深,看了以後會三心二意沒有方向;第二,可以抄襲借鑒的例子太少。《C語言教程》中有很多有趣的問題,比如猴子吃桃、漢諾塔等等,這些例子對於剛剛涉及C/C++語言編程的人來說是學習編程很好的例子。《Essential C++》只能是前兩本書看透以後,作為學習C++特性的一個過渡性的書籍。讓讀者真正領略到什麼是C++的編程、和C編程的不同點在哪裡。

透明:我發現一個很有趣的現象:初學者往往喜歡問「哪本書比較好」,這讓我很是不解。這有點像一個剛學打籃球的人問「王治郅和科比誰比較厲害」。當然科比更厲害一些。但如果你是想學打籃球,這兩個人都非常非常有資格教你,你跟誰學都能學得很強——關鍵不是在於你選哪個老師,而是在於你自己用多少功夫去學。

透明:回到原來話題。學會了C++的語法,能看懂C++代碼之後,必須有些書來指導進階(或者叫指點迷津)。我覺得《設計模式》很好,能夠讓讀者看到一些精妙的用法。不過正如我經常說的,模式帶來的麻煩和好處一樣多,甚至麻煩還要更多。而且,C++本身的問題使得在C++中使用GoF模式愈加麻煩。

夢魘:《Design Patterns》這本書絕對是不可以沒有的,而且中英文版都不可少。最初我看中文版,說實話看不懂,但是也不覺得人家翻譯得不好,所以就想,大概是原文就很難懂,加上自己水平有限。於是總是想著再找幾本patterns的書來看。後來找到幾本書,口碑還不錯,不過水平高下,一比就出來了,還是那本《Design Patterns》最經典,最耐看。英文版出來之後,兩個版本對照看,明白多了。現在覺得,其實就設計模式來講,把這本看明白了就很不錯了,不用再花費很多心思找其他的書。我現在的包里始終夾著這本書,隨身攜帶,有備無患。
至於說設計模式的副作用,和可能帶來的弊端,我的體會也挺多。不過是這樣,我們想一想,究竟什麼情況下設計模式可以用得很好呢?一種是有經驗豐富的人引導,比如要是Robert Martin帶隊,你在某個地方用錯了設計模式,他就會指出來,說這里不對,將來會產生什麼樣的弊端。對於他來說,豐富的實踐經驗足以支持他進行「預測型」設計。但是大部分人沒這個能力,因此我們只好走第二條路和第三條路,就是「試探型」設計和「重構型」設計。遇到一個問題,你覺得用某種模式挺合適的,就大膽地用了,成功是積累經驗,發現不好,出了問題了,只好改回來,那也是積累教訓。這叫做「試探型」。至於重構,應該算是最有組織、成功率最高的工程化方法。先把問題「quick and dirty」地解決了,所有的暗礁都暴露出來,然後再根據實際情況採用合適的模式優化設計。現在XP和UP都高度重視refactory,UP在Elaboration和Construction階段都鼓勵抽出專門的iterations進行重構。所以說如果組織快速的軟體開發,當然比較傾向於這條路——打成功率嘛。

透明:講到重構,我順便說說《Refactoring》這本書的影響。從工程本身的角度來說,你所謂的「重構型設計」是沒有什麼問題的。但中國的開發者(也包括我在內)往往比較沖動,比較容易相信銀彈的存在。曾經有那麼一段時間,我在Java中嘗試過了重構的方法之後,又拿到C++中去嘗試。結果發現,在Java中速度非常快的重構過程,到C++中就被減慢了。究其原因,就是因為C++和Java的約束條件不同。拿著Java中成功的案例直接套C++,不失敗才怪。
所以,我必須說:《Refactoring》這本書很有價值。但對於C++程序員來說,它的價值是讓你思考,思考這種方法的可行性。如果一個C++程序員沒有打算遷移到Java,那麼我必須告訴他:《Refactoring》這本書不是讓你照著它用的,甚至不是讓你去相信它的。對於C++程序員,《Refactoring》全書可以放心相信的只有第13章,其他的部分,都必須非常謹慎地對待。

夢魘:我還要就「試探型」的方法多說兩句,我覺得對於個人發展來講,「試探」也是必不可少的,撞牆不可怕,高水平的人不都是撞出來的嗎?你失敗了一次,就知道這個模式有什麼潛在的問題,下次再用,就會多看幾步,像下棋似的。撞的多了,路數就出來了。
我不知道你們是否有這個感覺:用錯了模式,吃了虧,再回過頭去翻翻《Design Patterns》,看到人家早就指出來這個問題,不過就是那麼幾句話,原來看上去乾巴巴的,現在覺得句句都講到心坎上,GoF的形象馬上就高大起來,還帶著光環,感覺是既興奮又懊悔。

透明:現在回頭來看,我更欣賞myan推薦給我的《Designing Object-Oriented C++ Applications Using Booch Method》。這本書能夠幫助C++程序員理清思路培養習慣,可惜國內沒有引進。相比後來商業味濃厚的UML系列書籍,我覺得這本書對於面向對象的闡釋精闢獨到,至今未有能出其右者。

夢魘:剛才我們兩人都說到Robert Martin,他可是我的榜樣。那本1995年的《Designing Object Oriented C++ Application》,我覺得是每一個C++軟體工程師都應該反復研讀的書。可惜不僅國內沒有引進,在國外的名氣也不大。如果你覺得面向對象的那些道理你好像都明白,可就是一遇到實際問題就使不上勁,那這本書就是你的最佳導師。
提到理清思路,還有一本書不得不提,就是Andrew Koenig的《Ruminations On C++》。每個人都應該問自己,我學了這么多年的C++,究竟什麼是C++最基本的設計理念?遇到問題我第一個直覺是什麼?第一個試探型的解決方案應該具有那些特點?如果你不能給出明確的答案,就應該認真地去讀這本書,讀完了你就有了「主心骨」。

透明:插一句話,談談「推薦書」的問題。入門書基本上是放之四海而皆準的,所以推薦的意義也不大。而入門後的發展方向,每個人不同,這個時候就需要「高人」的指點。舉個例子:我學C++的時候,myan還不認識我,所以也沒有給我推薦書,我還是學過來了,所以即使你當時向我推薦了《Essential C++》或者《C++ Primer》,我也不會太感謝你;但在我認真研究OO的時候,你推薦Robert Martin那本書給我,對我幫助就特別大,而且我從別的地方也很難找到類似的推薦,所以我就很感謝你。
一個程序員,必須有framework的意識,要學會用framework,還要主動去分析framework(在這方面,《Design Patterns》能有一定的幫助)。但是,真正高質量、成氣候的framework的書恐怕也就只有針對MFC的。從這個角度來說,MFC縱有千般不是,C++程序員都非常有必要先去用它、熟悉它、研究它,甚至藉助《深入淺出MFC》這樣的書來剖析它。不然,很難有framework的意識和感覺。
當然,另一個framework也很好,那就是STL。不管用不用MFC、STL,對這兩個東西的掌握和理解都是極有幫助的。最近我又在看《深入淺出MFC》,雖然已經不用MFC編程了,但幫助是一定有的。

夢魘:MFC和STL方面,我還是比較推崇侯先生的兩本書《深入淺出MFC》和《STL源碼解析》。
《深入淺出MFC》這本書,名氣自然是大得不得了,不過也有不少人批評。其實書也沒有十全十美的,批評當然是少不了的,不過有的時候我看到有人評論這本書,把它跟Inside VC相比,真的是牛頭不對馬嘴。
你剛才其實說得很對,程序員應該有一點framework意識。而這本《深入淺出MFC》與其說是在講MFC編程,不如說通篇是在拿MFC為例分析Application Framework的架構和脈絡。所以無論你對於MFC本身是什麼態度,這本書對每一個C++程序員都有很大的益處。

透明:是的。《VC技術內幕》會告訴你「DYNAMIC_CREATE這個宏怎麼用」,《深入淺出MFC》則告訴你「DYNAMIC_CREATE這個宏是怎麼實現的」。所以,如果你只需要在VC下寫一些小應用程序,《深入淺出MFC》的價值並不太大;但是,如果你需要設計一個稍微大一點的東西(不一定是framework),MFC的設計思想就會有所幫助。

夢魘:另外,我覺得對於MFC也應該有一個公允的評價。過去是吹捧得天上有地下無,書店裡鋪天蓋地都是MFC的書,搞得大家只知有MFC,不知有C++,甚至直到現在還有人問:「我是學MFC呢,還是學C++?VC++是不是比C++更高級的語言?」MFC成了一尊神像,阻礙了人們的視線。所以得把它從神壇上拉下來。這就是過去一兩年有很多人,包括我在內批評MFC的一個目的。可是現在大家視野開闊了,.NET也出來了,MFC不再是神像了,少數人就開始以貶損MFC為樂了。我覺得這種態度是不對的。
什麼叫好的框架?我覺得在十幾年的時間能夠象MFC這樣保持穩定並且不斷進步的框架就是好的框架。可能我們在一些具體的設計問題上有不同看法,覺得「這個地方這么設計不是更漂亮嗎?」很多時候是的,但是這不重要,重要的是MFC成熟穩定、有十幾年的成功經驗,這是最了不起的東西。
另外一點,MFC中間包括著學習Win32 API編程的最佳資料。這是除了其framework方面之外的另一個亮點。我現在使用Win32 API開發,但是經常參考MFC的源代碼,收獲很大。

透明:STL方面,我對於剖析它的源代碼興趣並不大,畢竟裡面源代碼多是演算法問題。所以,《STL源碼剖析》我也只是隨便翻翻就束之高閣了。我覺得這本書用來做計算機系的數據結構和演算法教材不錯,不知道有沒有老師樂意這樣做。
對於STL,我的態度一向都是「應用至上」。不過,我一直認為SGI STL本身就是一本精彩的書,一本數據結構和演算法的經典參考書,同時也是泛型技術的參考書。想知道一個演算法是如何實現的,看看STL源代碼就行;想知道如何使用type traits,STL源代碼裡面也有例子。看別人寫的書,總覺得隔著一層紗,有點撓不到癢處的感覺。SGI STL的代碼寫得非常漂亮,一個C++程序員如果不看看這本書,實在是可惜。

夢魘:至於STL,除了《STL源碼解析》之外,我舉賢不避親,強烈推薦侯先生與我合譯的那本《The C++ Standard Library》。這本書質量之高是無需懷疑的。我現在手邊常備此書,隨時查閱,對我幫助很大。

透明:C++和Java相比,最大的優勢就是它沒有一個專門的公司來管它,最大的弱點也是它沒有一個專門的公司來管它。Java程序員在學會簡單的語法之後,立刻進入SUN提供的framework,一邊用這個現成的framework做實際開發,一邊在開發過程中繼續學習Java一些幽深的特性。而這個時候,C++程序員恐怕還在問「VC和BCB哪個好」呢。這無疑是浪費時間。

夢魘:剛才你說Java和C++的優劣,這個話題已經成了我們這個年代永不消失的聲波了。我也不想再談這個。不過有一點我得說清楚:現在我們很多用C++的人吃了不少苦頭,探過脖子去看看Java,覺得它真是太可愛了,這種印象是不準確的。另外,Java也不簡單,而且會越來越龐大復雜。在很多場合,Java還不具有競爭力。至於將來如何,我看有些Java愛好者也過分樂觀了,似乎計算機科學界幾十年解決不了的問題都可以借著Java的東風解決掉,恐怕沒那麼容易。

透明:那當然。我再次強調:No Silver Bullet。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。

Ⅹ 學習C語言哪種教材最好

我們這學期學完了,昨天剛考完試,教材就是用的譚浩強主編的《C語言程序設計》(第二版),清華大學出版社出版的,你們學校沒給你們發課本嗎??