A. C\C++程序員需要掌握什麼書籍
c/c++程序員需要掌握的書籍大概可以分成幾個方面:
計算機基礎類書籍,這類書籍包括計算機組成原理、計算機網路、資料庫、操作系統、數據結構與演算法。
c/c++類專業書籍,這類書籍包括基礎的C語言程序設計、C++primer。
擴展類書籍,c/c++相關擴展類,推薦的有C陷阱與缺陷、深度探索C++對象模型、effective C++。
平台擴展類書籍,這類就要看你在哪類系統下做開發,一般常用的系統平台是嵌入式、windows、Unix及ios(object C++),這類書籍就比較多了,可以按照個人需求選擇。
按照上述推薦的理由是:
學習計算機語言需要一定的基礎,這類基礎是非常重要但是很無聊的,後續在做開發的時候會覺得非常實用。
學好語言其實不是非常麻煩的部分,一般的教材類書籍即可,重要而麻煩的是在敲代碼的過程中去熟練掌握、運用和創新。
擴展類書籍3可以幫助你更深入的理解你所學到的東西,而深入理解是程序員進階的必經之路。
平台類書籍略有區別,但是標准C++是一樣的,只是針對各自平台做了相應擴展(objectc++除外)。如果需要在某個平台下做開發,或者學習再去學習使用即可。
B. 學習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語言、數據結構、演算法、計算機網路、計算機系統等。
這些書籍是程序員必須掌握的基礎知識,小白應該先看這些書籍。
專業書籍包括:
微服務架構、高性能網站架構、大數據架構、雲計算架構、大型網站架構等。
這些書籍是程序員必須掌握的專業知識,小白應該後看這些書籍。
當然,如果有興趣,還可以看一碼枝些Web前端開發、Android開發、iOS開發、資料庫開發等書籍。
D. 有經驗的程序員來看:C\C++程序員需要掌握什麼書籍
CC++與數據結構 ¥33.25元
本教材是計算機基礎教學改革實踐4年的總結,它將C語言、數據結構和C++綜合為一門程序設計基礎課程,可以不分專業,在大學一年級完成(授課80學時,實驗80學時)。 本書可以作為各類人員學習C、數據結構和C++的綜合教材。 ...
CC++程序設計入門與提高 ¥27.55元
精選著名流行軟體,緊跟版本更新,連續推出配套圖書;由「入門」起步,注重「提高」,使新霰手老手都能成為行家裡手;根據用戶實際使用的需要取材謀篇,著重技術精華的剖析和操作技巧的指點;明晰精練的風格、醒目的步驟提示和生動的屏幕畫面使您如臨操作現場。 ...
數據結構(C語言版) ¥21.85元
數據結構是計算機及相關專業的核心課程,是計算機程序設計的基礎,是程序員和許多高校研究生入學考試的必考科目。本書共分10章,第1章是數據結構的概述;後9章分別介紹了線性表、棧、隊列、串、數組、廣義表、樹、二叉樹、圖、查找、內部排序、外部排序、動態存儲管理?...
C語言程序設計實踐教程 ¥23.75元
本書是以C語言的入門級讀者作為主要對象,根據C語言程序設計課程的特點,用編排獨特、形式新穎、通俗易懂的方法編寫的一本教材。全書包括3大部分。第1部分(第1章和第2章)介紹了C語言的基本框架、C語言的基本概念、函數的定義和使用、常量與變數的概念、C語言數據類型?...
C語言基礎教程——基礎理論與案例 ¥27.55元
本書全面系統地講述了C語言的基本語法以及它們在編程中的應用,同時又介紹了編寫C語言程序的一些方法和技巧。本書內容包含有C語言的詞法、常量和變數、運算符和表達式、預處理功能、語句、函數和存儲類、指針、結構和聯合以及文件操作等內容。本書語言通俗,由淺入深?...
AVR 單片機C語言開發應用實例——TCP/IP篇 ¥53.20元
Ethernut是第一個推出的基於8位單片機的嵌入式乙太網解決方案,並且公開了該方案的硬體電路和全部源代碼,因此用戶可以很方便地對Ethernut方案進行剪裁,定製出適合自己的乙太網解決方案,在該方案的基礎上進行二次開發,可以大大提高開發進度和降低出錯概率。本書共?...
C語言程序設計應試輔導(二級) ¥34.20元
本書是根據教育部考試中心最新的全國計算機等級考試大綱(2004)編寫的。本書共分為11章。主要內容有:二級公共基礎,C程序設計的基礎知識和簡單語句,C程序中的控制結構,指針和函數的基本概念,數組,字元串,函數的進一步討論,結構體、共用體和用戶定義類型,文件, ...
嵌入式C語言編程與Microchip PIC ¥46.55元
本書全面系統地介紹了C語言編程技術及其在嵌入式微控制器中的應用,其中包括嵌入式C語言、PIC微控制器的硬體、標准I/O和處理器指令、CCSPICC C編譯器和IDE、項目開發等各種技術,並在附錄中扼要介紹了庫函數和PIC微控制器編程。全書內容翔實、結構清晰、技術准確?...
程序設計抽象思想——C語言描述 ¥74.10元
本書全面介紹了數據結構的基礎內容,幫助學生深入了解軟體工程的思想和技術。學生還可以通過對一些高級編程概念(如介面、抽象和封裝)的了解,為進一步深入學習高級編程知識打下堅實的基礎。本書觀點清晰明了、語言風格鮮明獨特,深入淺出地介紹了一些高級主題。 ...
三級C語言上機指導 ¥20.90元
本書是依據教育部考試中心最新推出的《全國計算機等級考試三級考試大綱》關於上機考試的內容和要求編寫的。全書共分為三章,主要包括三級上機考試應試技巧概述、上機考試題庫分類解析和上機考試環境及程序調試等內容。本書結構清晰,內容詳實,對三級C語言上機試題題?...
QBASIC語言程序設計 ¥20.90元
本書是根據教育部最新頒布的中等職業學校計算機及應用專業《QBASIC編程語言》基礎教學基本要求編寫,同時參考了教育部考試中心制定的計算機等級考試大綱。本書主要內容包括QBASIC語言的基礎知識、基本概念、程序結構及程序設計方法、數組、函數和子程序、字元串、文件 ...
C語言真題分析與實戰訓練(二級) ¥20.90元
本書是根據2004年教育部考試中心對二級C語言程序設計考試內容調整後的新大綱要求而編寫的,書中分為「應試策略」、「真題攻關」、「強化制勝」和「上機指導」4個部分。本書對2003年4月至2004年4月3套全國計算機等級考試的筆試真題試卷的題型、考點、分值比例等情況進行?...
AVR 單片機BASIC語言編程及開發 ¥21.85元
作為一種16/32位的高性能、低成本、低功耗的嵌入式RISC微處理器,ARM微處理器目前已經成為應用最為廣泛的嵌入式微處理器。本書在全面介紹ARM處理器的體系結構、編程模型、指令系統和開發工具的同時,以Samsung公司的一款基於乙太網系統的ARM處理器——S3C4510B為核心?...
全國計算機等級考試真題(筆試+上機)詳解與樣題精選(二級C語言) ¥30.40元
本書對近5年來全國計算機等級考試二級基礎知識和C語言程序設計的真題進行了深入的分析,本書內容按教育部考試中心指定教程的章節分類編排,並按考試大綱的要求逐考點地對真題進行詳細的分析,對相關知識點進行詳盡的介紹。通過對真題的分類、分析和相關考點的理論鏈 ...
計算機圖形學C語言版(第2版) ¥65.55元
本書介紹了設計與使用計算機圖形學系統所必須的基本原理,討論了圖形學系統硬、軟體及其應用,列舉了C語言描述了編程實例以展示圖形學演算法的實現及應用,探討了PHIGS、PHIGS+、GKS以及其他圖珍庫的特徵。與第1版相比,在反走樣、分形及其他物體表示法、光線跟蹤、樣 ...
三級C語言上機考試試題與題解 ¥19.95元
本書提供了30套最具典型性的全國三級C語言程序設計(信息管理技術、資料庫技術、網路技術)上機考試過關試題,並給出與其配套的典型題解。主要內容包括:三級C語言上機考試概要,三級C語言上機考試基本導航,三級C語言上機過關試題與題解。本書深入淺出、簡明扼要地 ...
C語言習題與解析(第2版) ¥23.75元
C語言是一種結構化、模塊化、可編譯的主流程序設計語言。作者編寫的《C語言與習題解答》一書自1999年出版以來,受到了廣大讀者的關愛與好評。由於技術的發展和讀者反饋的意見,本書作者對該書內容進行了擴充與修訂。本書分為13章,分別介紹了C語言的基本概念、基?...
QBASIC語言(二級)難點、錯點解析 ¥21.85元
本書根據教育部考試中心最新發布的《全國計算機等級考試大綱》的要求,由計算機等級考試考前培訓班教師根據實際教學經驗,專門為大、中專學生參加全國計算機等級考試而編寫的考前輔導參考書。本書以對本課程有一定基礎的讀者為主,介紹有關的知識要點,並分別對筆 ...
程序設計基礎(C語言) ¥27.55元
C語言是現代最流行的通用程序設計語言之一,它的簡潔、緊湊、靈活、實用、高效、可移植性好等優點深受廣大用戶歡迎。C語言的數據類型豐富,它既具有高級程序設計語言的優點,又具有低級程序設計語言的特點;既可以用來編寫系統程序,又可以用來編寫應用程序。因此, ...
全國計算機等級考試系列輔導教材(二級)——C語言 ¥46.55元
本書共16章,其中第1章為學前自測與指導,從2-14章均包括「知識點講析」、「補充與擴展」、「典型例題」和「本章練習」4部分,內容涉及計算機等級考試二級C語言的各個方面。第15章提供了3套筆試模擬試卷,第16章是上機指導。書後提供了各章練習題的參考答案。本書 ...
AVR系列單片機C語言編程與應用實例 ¥28.50元
本書針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有13章,其內容既涉及到了單片機的結構原理、指令系統、內容資源和外部功能擴展,又包含了單片機的編程工具——ICC AVR C編程器的數據類型、控?...
全國計算機等級考試系列輔導教材(二級)——Visual Basic語言 ¥46.55元
本書共15章,其中第2章-第13章均包括「知識點講析」、「補充與擴展」、「典型例題」和「本章練習」4部分,第15章為上機考試指導。附錄中提供了各章練習題的參考答案。本書針對性強,內容深入淺出,實例豐富,適用於報告計算機等級考試二級Visual Basic語言的讀者:?...
二級C語言學與練 ¥20.90元
本書根據國家教育部考試中心 2002 年最新頒布的「全國計算機等級考試二級考試大綱(二級C語言)編寫,書中以通俗易懂的語言全面詳實地介紹 C 語言二級等級考試的重點和難點,從等級考試的角度精心設計出一系列富有代表性的例題和習題,其中包含了大量的等級考試試題 ...
中學生學C語言 ¥18.05元
本書包括入門篇、提高篇和應用篇3部分,通過對典型例題的分析和解答,以生動有趣而又科學准確的語言,講述C語言的程序設計方法和語法現象,注重實用,突出重點,是一本專門為中學生編寫的C程序設計教程。 ...
嵌入式處理器原理及應用——Nios 系統設計和C語言編程 ¥24.70元
本書以Altera工公司開發的Nios嵌入式處理器軟核為例,介紹了嵌入式處理器的組成原理和開發應用。全書分為6章:第1、2章介紹嵌入式處理器的組成原理,主要介紹嵌入式處理器的系統組件;第3、4章介紹嵌入式處理器的開發環境,包括硬體開發環境和軟體開發工具SOPC Buil ...
MPI 與 OpenMP 並行程序設計:C語言版 ¥48.45元
本書是美國Oregon州立大學的Michael J.Quinn教授在多年講授「並行程序設計」課程的基礎上編寫而成的,主要介紹用C語言,並結合使用MPI和OpenMP進行並行程序設計,內容包括並行體系結構、並行演算法設計、消息傳遞編程、Eratosthenes 篩法、Floyd 演算法、性能分析、矩陣 ...
C語言程序設計教程 ¥18.05元
本書是為初學計算機程序設計的讀者而寫的,通過大量的實例較全面地介紹C語言的基本概念、語法和程序設計方法。全書共分9章。結構簡潔明快:重點突出,通俗易懂;實例講解條理清晰,邏輯性強;始終以程序設計為主線,注重培養學生程序設計的思維方式和技術;每章配以 ...
E. 有什麼學C語言的好書
你好,很高興回答您的問題。個人建議看《C primer plus》、《寫給大家的C語言書》、《C語言解惑》、《你必須知道的495個C語言問題》、《編程精粹》、《C標准庫》等國外優秀著作。 還有一個 ::C語言入門經典(第4版) 作者: 出版:清華大學 出版日期:2008年04月 本書是編程語言先驅者Ivor Horton的經典之作,是C語言方面最暢銷的圖書品種之一。本書集綜合性、實用性為一體,是學習C語言的優秀入門教材,在世界范圍內廣受歡迎,口碑極佳。書中除了講解C程序設計語言,還廣泛介紹了作為一名C程序設計人員應該掌握的必要知識,並提供了大量的實用性很強的編程實例。本書的目標是使你在C語言程序設計方面由一位初學者成為一位稱職的程序員。讀者基本不需要具備任何編程知識,即可通過本書從頭開始編寫自己的C程序。 新華書店網店新華文軒有賣的 謝謝採納。
F. 《狂人C程序員入門必備》epub下載在線閱讀全文,求百度網盤雲資源
《狂人C》(鍵盤農夫)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1qsqb3Cce39tqAz81itIf5w
書名:狂人C
作者:鍵盤農夫
豆瓣評分:7.3
出版社:人民郵電出版社
出版年份:2010-10
頁數:482
內容簡介:
《狂人C:程序員入門必備》以獨特的方式全面地講述了C語言(C89和C99)的基本概念和編程知識。面向初學孫迅者,對基本概念詳盡透徹的剖析,嫌游強調良好的編程習則者此慣和風格,結合軟體工程、軟體測試的基本理念介紹編程知識,是《狂人C:程序員入門必備》的主要特色。
G. 《狂人C程序員入門必備》epub下載在線閱讀,求百度網盤雲資源
《狂人C》(鍵盤農夫)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:https://pan..com/s/19pdIWJg_QxlmKpSqgR-40Q
書名:狂人C
作者:鍵盤農夫
豆瓣評分:7.3
出版社:人民郵電出版社
出版年份:2010-10
頁數:482
內容簡介:
《狂人C:程序員入門必備》以獨特的方式全面地講述了C語言(C89和C99)的基本概念和編程知識。面向初學者,對基本概念詳盡透徹的剖析,強調良好的編程習慣和風格,結合軟體工程、軟體測試的基本理念介紹編程知識,是《狂人C:程序員入門必備》的主要特色。
全書分為3個部分:理解程序設計,結構化程序設計與數據的組織和C語言的高級話題。體現了從零基礎到C編程高手層次遞進的特點。
全書貫穿大量生動實例,講述從問題的提出、問題的分析、代碼的核游編寫到程序測試的全部過程,並對C語言學習者和使用者中常見但容易忽視的問題進行了剖析。仔氏睜
《狂人C:程序員入門必備》適合C語言念歲初學者參考和使用,也適合高等院校計算機專業選為教材使用。
H. 程序員經典的書籍有哪些C/C++ 數據結構之類的求指導
c++基礎:
《C++ primer》必看,現在到第五弊鉛版了把。
《Accelerated C++》看2本基礎書還是很有必要的。
c++晉級:
《深入探索c++對象模型》講的是編譯器如果構造c++對象,必看,好書不解釋
《Effective C++》
《More Effective C++》
《c++必知必會》
以上三本教你如何更好,更高效的編寫c++代碼。
程序庫
《泛型編程與STL》必看,泛型編程很重要啊
《STL源碼剖析》這書比較難,沒有扎實的基礎不建議看。
演算法和數據結構
最經典書籍租游好當屬《計算機程序設計藝術》,但是我不推薦,如果你非得看,而且看完了,記得給比爾蓋茨發簡歷磨畢。
我只推薦兩本《演算法導論》和《演算法藝術與信息學競賽》,尤其是《演算法導論》大師之作,裡面的代碼都是權威,非常值得學習
I. 學習C語言要些什麼基礎
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種殲培能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
由於C語言簡單易學,已經成為學習編程的入門語言之一。在大學一年級,已經安排C語言相關的學習課程。由此可見,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程序員所使用的編碼技巧,並專門開辟了一章對C++的基礎知識進行了介紹。書中C的歷史、語言特性、聲明、數組、指針、鏈接、運行時、內存以及如何進一步學習C++等問題進行了細致的講解和深入的分析。
J. 剛開始學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。讀書很重要,但古人說「行萬里路,讀萬卷書」,還是把「行路」放在「讀書」前面。尤其對於技術書籍,如果它不能幫我解決問題、不能給我帶來非常實際的利益,那麼我是不會去讀它的。惡魔說得對,我們這個社會很快餐,我們這個行業尤其很快餐,我們也只能努力適應它。