『壹』 推薦幾本好的c語言方面的書
1.《The C Programming Language》(《C程序設計語言》) ¥30
(美)Brian W.Kernighan,Dennis M.Ritchie (K&R)著 機械工業出版社
http://www.china-pub.com/computers/common/info.asp?id=14975
2.《C Primer Plus》(中文版) ¥60
(美)Stephen Prata 著 人民郵電出版社
3.《C語言入門經典》 ¥55
(美)霍頓(Horton,I.)著
4.《Programming in C》(《C語言編程》) ¥59
(美)Stephen Kochan 著 電子工業出版社
5.《Pointers On C》(《C指針》)
6.《Expert C Programming》(《C專家編程》)
7.《C Traps and Pitfalls》(《C缺陷和陷阱》)
第一本絕對是學習C語言必看的書,而且相對來說比較便宜,當然如果買英文版的就更好了(我在書店看的英文版是35RMB)
『貳』 求C++ 網路編程最好的書籍 謝謝了
C++程序設計之四書五經(上篇)
C++是一門廣薯芹閉泛用於工業軟體研發的大型語言。它自身的復雜性和解決現實問題的能力,使
其極具學術研究價值和工業價值。和C語言一樣,C++已經在許多重要的領域大獲成功。
然而,一個不可否認的現實是,在低階程序設計領域,C++擠壓著C同時也在承受著C的強烈
反彈,而在高階程序設計領域,Java和C#正在不斷蠶食著C++的地盤。也許C++與C合為一體
永遠都是一個夢想,也許Java和C#的狂潮終將迫使C++回歸本位 — 回到它有著根本性優勢
的開發領域:低級系統程序設計、高級大規模高性能應用設計、嵌入式程序設計以及數值
科學計算等。果真如此,我認為這未嘗不是一件好事。
C++吸引如此之多的智力投入,以至於這個領域的優秀作品,包括重量級的軟體產品、程序
庫以及書籍等,數不勝數。文題「C++程序設計之四書五經」一個不太嚴格的含義是:C++
程序設計之四書 ⅹ 五經。是的,在本文(及其下篇)中,我將分門別類推薦20多本C++好
書,你可以根據自己的需要選讀。
TCPL和D&E
TCPL和D&E分別是《The C++ Programming Language》和《The Design and Evolution of
C++》的簡稱,均出自Bjarne Stroustrup之手。我將它們單列出來,首先是因為Bjarne是
C++語言的創建者,然後是因為數裂比「首先」那個原因更重要的原因:這兩本書是C++領域毋
庸置疑的傑作。說它們是C++語言聖經,並不為過。
Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)
《C++程序設計語言(特別版)》,機械工業出版社
《C++程序設計語言(特別版)(英文影印版)》,高等教育出版社
迄今為止,TCPL是除了C++標准文獻之外最權威的C++參考手冊。和大多數人的看法不大一
樣,我認為Bjarne的文字語言並不遜色於他所創建的程序語言,至少我喜歡這種學院氣息
濃厚的作品。本書對C++語言的描述輪廓鮮明、直截了當。它從C++語言創建者的角度來觀
察C++,這是任何別的作者和書籍做不到的 — 沒有任何人比Bjarne自己更清楚該怎麼來使
用C++。
這是一本嚴肅的著作,以中、高級C++開發人員為目標讀者。如果你是一名有經驗的C++程
序員,需要了解更加本質的C++知識,本書正是為你而寫。它不是那種讓你看了會不斷竊喜
的小書,需要用心體會,反復咀嚼。在閱讀過程中,請特別留心Bjarne先生強調了什麼,
又對什麼一語帶過。我個人比較喜歡這本書的第四部分「使用C++做設計」,這樣的內容在
類似的程序設計語言書籍中很難看到 — 我甚至認為Bjarne應該將這部分獨立出來單獨寫
一本書。
Bjarne Stroustrup, The Design and Evolution of C++
《C++語言的設計和演化》,機械工業出版社
《C++語言的設計和演化(英文版)》,機械工業出版社
D&E是一本關於C++語言設計原理、設計決策和設計哲學的專著。它清晰地回答了C++為什麼
會成為今天這個樣子而沒有變成另外一種語言。作為C++語言的創建者,Bjarne淋漓盡致地
展示了他獨到而深刻的見解。除了廣受贊譽的語言特性外,Bjarne沒有迴避那些引起爭議
的甚至被拒絕的C++特性,他一一給出了邏輯嚴密、令人信服的解釋。內容首賣涵蓋C++的史前
時代、帶類的C、C++的設計規則、標准化、庫、內存管理、多重繼承、模板等,對包括異
常機制、運行時類型信息和名字空間在內的重要的新特性都分別進行了深入探討。每一名
C++程序員都應該可以從Bjarne的闡釋中加深對手中這門語言的認識。
需要再次提醒的是,這兩本書知識濃縮,信息量極大,請不要錯過Bjarne每一句看似漫不
經意的話。
入門教程
學習任何一門語言都需要一個從入門到精通、從新手到高手循序漸進的過程。不過,對於
一個所謂的新手而言,究竟是一個完完全全的新手,還是一個熟悉某種別的語言的「新手
」,甚至是在某種語言程序設計領域已經頗有建樹的高手,很難一概而論?不同的C++新手
需要不同的入門書籍。
Andrew Koenig, Barbara E. Moo, Accelerated C++: Practical Programming by Examp
le
《Accelerated C++中文版》,中國電力出版社
和市面上大多數C++教程不同,本書不是從「C++中的C」開始講解,而是始於地道的C++特
性。從一開始就使用標准庫來寫程序,隨著講述的逐漸深入,又一一解釋這些標准庫組件
所依賴的基礎概念。另外,和其他C++教材不同的是,這本書以實例拉動語言和標准庫的講
解,對後兩者的講解是為了給實常式序提供支持,而不是像絕大多數C++教材那樣,例子只
是用作演示語言特性和標准庫用法的輔助工具。
作者在C++領域的編程實踐、教育培訓以及技術寫作方面都是世界一流水準。我喜歡這種大
量使用標准庫和C++語言原生特性的清新的寫作風格。在這本教材面前,幾乎迄今為止的所
有C++教材都黯然失色或顯得過時。盡管這本教材也許對於國內的高校教育來說有些前衛,
不過我仍然極力向我的同行們推薦。順帶一提,在Bjarne和我最近的一封通信里,他這樣
評價本書:對於有經驗的程序員學習C++而言,這本書可能是世界上最好的一本。
Stanley B.Lippman, Josee Lajoie, C++ Primer (3rd Edition)
《C++ Primer (3RD)中文版》,中國電力出版社
這本書的名字多少有點讓人誤解。盡管作者聲稱這本書是為C++新手而寫,但無論是它的厚
度還是講解的深度都暴露了似乎並非如此。也許說它是一本「從入門到精通」的C++教程會
更合適一些。我個人認為它並不適合完全不懂C++的初學者 — 在閱讀這本書之前,你至少
應該先有那麼一點C或C++的背景知識,或者至少要具有一些其他語言的編程經驗。
盡管這本書省略了一些高級C++特性的討論,但仍然可以稱得上是迄今為止最全面的C++學
習教程。事實上,如果一名C++初學者能夠扎扎實實地讀完本書並對照《C++ Primer Answ
er Book》完成全部習題的話,他的水平肯定可以進入職業C++程序員的行列。我個人認為
,即使你已經擁有了TCPL,這本書依然有擁有的價值,因為在許多方面它比TCPL來得更詳
細、更易懂。
Stanley B. Lippman, Essential C++
《Essential C++中文版》,華中科技大學出版社
《Essential C++(影印版)》,中國電力出版社
可以不太嚴格地認為這本書是《C++ Primer》的精簡版。本書一一講述了C++中最具代表性
的主題,包括過程式編程、泛型編程、基於對象編程、面向對象編程、模板編程以及異常
處理等。Stanley將門檻調低到「具有其他語言程序設計經驗」的C++新手所能接受的最基
本的層次,使他們能夠迅速開始使用C++編程而又免於閱讀《C++ Primer》那樣的大部頭。
它以實例引導學習,力圖使讀者在最短的時間內把握C++的精粹。
也許換一個人來概述C++編程范型(paradigm)的方方面面需要好幾百頁才能說清楚,但這
本小書不可思議地做到了這一點。我個人非常喜歡這種滿是技術、簡明扼要並且「有話好
好說」的書。這本書同樣具有一個明顯的風格:所有程序例子全部採用標准庫組件,讓人
耳目一新。
以上三本書都不是為了完完全全的編程新手而寫。完全的C++編程新手可以閱讀Francis G
lassborow的新書(尚未出版):《A Beginners Introction to Computer Programmin
g : You Can Do It!》。這也是Bjarne的推薦。Francis Glassborow是ACCU主席,多年來
他對幾乎每一本C++經典名著評頭論足,他自己的這一本自然會引起C++社群的極大興趣。
高效、健壯編程
兩年前我在負責一個省級電力調度系統項目時編寫了一個網關程序,它從SCADA系統獲取電
力實時信息。通訊介面採用了不常用的資料庫直連方式(這個網關程序一端連接SQL Serv
er 6.5,另一端連接Oralce 8.1.6)。由於實時測點近萬,每次將全部取樣更新或插入一
遍顯然是低效的。我在網關程序里建了一個內存庫,獲取到的數據首先在其中進行比較,
然後決定是否更新物理資料庫(同時還做了別的更復雜的事情……),從而在效率和資源
佔用兩方面達到了預期效果。
這個程序一直運行得很好,但在離開現場之後的某一天,系統管理員打來電話,說大概因
為網路故障等原因,有時這個網關程序會崩潰掉 — 它自己崩掉也就罷了,問題是它還會
把Windows 2000 Advanced Server搞成「藍屏」!坦白地說,我還從來沒看過哪個非蓄意
的程序有這個「能耐」。由於當時正忙於另外一個大項目,無法去現場調試,最後只有憑
經驗對內存庫代碼小心翼翼地封裝以異常處理代碼(同時也做了一些別的修改……)。這
樣,雖然沒有徹底解決問題,但程序終究不再死得那麼難看了。
在這兒講這么一段花絮有什麼意思呢(當初為那個可怕的bug朝思暮想時我可不認為這是一
個「花絮」)?我想說的是,對於任何軟體而言,離開強健,效率也就無從談起。而對於
C++程序員來說,也許編寫一個高效的程序並不難,但要編寫一個需要7 ⅹ 24小時持續運
行的服務端軟體就不是那麼容易了,需要考慮許多因素,有時這些因素甚至遠遠超出C++語
言和開發工具的本身。作為一名開發實際項目軟體的程序員,並非非得自己碰釘子才能積
累經驗,只要我們足夠虛心,別人的經驗往往都是我們很好的借鑒。鑒於此,我推薦以下
幾本書供你選讀,它們可以讓你從強健和效率兩方面受益(當然了,它們涵蓋的內容遠不
限於異常處理J)。
Scott Meyers, Effective C++: 50 Specific Ways to Improve Your Programs and Des
ign (2nd Edition)
Scott Meyers, More Effective C++: 35 New Ways to Improve Your Programs and Des
igns
《Effective C++中文版》,華中科技大學出版社
《More Effective C++中文版》,中國電力出版社
《Effective C++(影印版)》,中國電力出版社
如果說《Effective C++》主要討論C++中一些相對基礎的概念和技巧的話,那麼《More E
ffective C++》則著重探討了包括異常處理在內的一系列高級技術。與前者相比,後者具
有兩大主要區別:其一,它包含很多時新的標准C++的內容;第二,它討論的主題傾向於「
戰略化」而非「戰術化」,並且討論得更深入、更徹底。尤其是對虛析構函數、智能指針
、引用計數以及代理類(proxy classe)等技術和模式論述的深入程度,讓人很難想像是
出現於這樣的一本小書之中。
游刃有餘的技術,高超的寫作技巧,Scott無疑是世界上最優秀的C++技術作家之一。在簡
潔、清晰、易讀等方面,這兩本書都卓爾不群。總之,Scott提供的這85個可以改善編程技
術和設計思維的方法,都是中、高級C++程序員必備的技能。我強烈推薦這兩本書(實際上
還有一本,稍後就會看到)。
Herb Sutter, Exceptional C++: 47 Engineering Puzzles, Programming Problems, an
d Solutions
Herb Sutter, More Exceptional C++: 40 New Engineering Puzzles, Programming Pro
blems, and Solutions
《Exceptional C++中文版》,中國電力出版社
《More Exceptional C++中文版》,華中科技大學出版社
你自認為是一名C++語言專家嗎?讀一讀ISO C++標准委員會秘書長的這兩本書再回答。在
這兩本書中,Herb採用了「問答」的方式指導你學習C++語言特性。對於每一個專題,Her
b首先合理地設想出你的疑問和困惑,接著又猜測出你十有八九是錯誤的解答,然後給你以
指點並提出最佳解決方案,最後還歸納出解決類似問題的普適性原則。
這兩本書是典型的深究C++語言細節的著作,很薄,但內容密集,遠遠超過Scott的那兩本
書,讀起來很費腦筋 — 我個人認為它們要比Scott的書難懂得多。若要研習這薄薄的兩本
書所包含的知識,至少需要花費數月的時間!(在Scott的薦序中,他坦陳不止一次陷入G
otW問題的陷阱,你應該知道這意味著什麼)對於語言細節的深究有什麼好處呢?盡管在大
多數情況下,我們不必關心C++代碼幕後的動作,然而當我們不得不關心時,這兩本書可以
為我們提供很好的線索,因為它們揭示了C++語言中微妙而又至關重要的東西。
Stephen C. Dewhurst, C++ Gotchas: Avoiding Common Problems in Coding and Desig
n
《C++程序設計陷阱》,中國青年出版社
Stephen的理論素養和實踐經驗註定這是一本值得一讀的好書。Stephen曾經是貝爾實驗室
中第一批C++使用者。他已經使用C++成功解決了包括編譯器、證券交易、電子商務以及嵌
入式系統等領域中的問題。本書匯集了作者來自開發一線的99條編程真知灼見,洞悉它們
,你可以避免幾乎所有常見的C++設計和編程問題。
我甚至認為,對於C++編程菜鳥而言,閱讀這本書會比閱讀Scott和Herb的書更能輕松而立
竿見影地獲得更大的提高。我個人很喜歡這本書的寫作風格 — Stephen的許多觀點看似極
端卻無可辯駁。當然了,這種自信(以及冷幽默)來自於作者深厚的技術素養,而非自大
的偏執。
除了上面推薦的書籍外,Dov Bulka和 David Mayhew合著的《Efficient C++: Performan
ce Programming Techniques》(《提高C++性能的編程技術》,清華大學出版社)也值得
一看。這本超薄小書聚焦於高性能C++應用程序開發。兩位作者都是IBM軟體專家,都工作
於對性能要求極高的系統構建領域,本書是他們的經驗之談。也有人不喜歡這本書,因為
它花了不少的篇幅講述和C++無關的東西,我卻恰恰因為這一點而對這本書產生好感,正是
這些東西讓我開闊了眼界。
模板和泛型編程
模板和基於模板的泛型編程無疑是當今發展最活躍的C++程序設計技術。模板的第一個革命
性的應用是STL,它將模板技術在泛型容器和演算法領域的運用展現得淋漓盡致,而Boost、
Loki等現代程序庫則將模板技術的潛能不斷發揮到極致。在模板和泛型編程領域,我推薦
以下兩本重量級著作:
David Vandevoorde, Nicolai M. Josuttis, C++ Templates: The Complete Guide
《C++ Templates全覽(繁體版)》,台灣碁峰資訊股份有限公司
《C++ Templates全覽(簡體版)》,人民郵電出版社
有一種老套的贊美一本書的手法,大致是「沒有看過這本書,你就怎麼怎麼地」,這裡面
往往誇張的成分居多。不過,倘若說「沒有看過《C++ Templates: The Complete Guide》
,你就不可能精通C++模板編程」,那麼這個論斷對於世界上絕大多數C++程序員來說是成
立的。
這本書填補了C++模板書籍領域由來已久的空白。此前,上有《Modern C++ Design》這樣
的專注於模板高級編程技術和泛型模式的著作,下有《The C++ Standard Library》這樣
的針對特定模板框架和組件的使用指南。然而,假如對模板機制缺乏深入的理解,你就很
難「上下」自如。鑒於此,我向每一位渴望透徹理解C++模板技術的朋友推薦這本書。
這本書在內地、台灣各有一個譯本,但出自不同的譯者之手。當你看到這篇文章時,兩個
譯本應該都已經上市,對於讀者來說當然也就多了一種選擇。侯捷先生個人網站上開放了
繁體譯本大部分章節,不妨先睹為快。
Andrei Alexandrescu, Modern C++ Design: Generic Programming and Design Pattern
s Applied
《C++設計新思維:泛型編程與設計模式之應用》,華中科技大學出版社
《C++設計新思維(影印版)》,中國電力出版社
你自認為是C++模板編程高手嗎?請看過這本書再回答J 這是一本出自天才之手令人敬畏的
傑作。泛型模式,無限延伸你的視野,足以挑戰任何一名C++程序員的思維極限。
這本書共分為兩大部分,第一部分討論了 Loki程序庫採用的基礎技術以及一些高級語言特
性,包括基於策略的類設計、模板局部特化、編譯期斷言、Typelist以及小型對象分配技
術等。第二部分則著重介紹了Loki中的重要組件和泛型模式技術,包括泛化仿函數(Gene
ralization Functor)、單件(Singleton)、智能指針、對象工廠(Object Factory)、
抽象工廠(Abstract Factory)、訪問者(Visitor)以及多方法(Multimethods)等。每
一種技術都讓人大開眼界,嘆為觀止。
在C++的學習方面,過猶不及往往成了不求甚解的借口。然而,面向對象並非C++的全部,
模板和泛型編程亦佔半壁江山。對於「嚴肅」的C++程序員而言,及時跟進這項早經例證的
成功技術,不失為明智之舉。
結語
這些著作是如此大名鼎鼎,也許根本不缺我一個推薦。然而,縱然C++程序員隊伍的發展壯
大速度不像其他更時髦的語言那樣迅速,新人進總是多於舊人出。除了熱忱地歡迎新人,
我個人認為到了對C++書籍進行「盤點」的時候了,並且希望這樣的「盤點」有益於感興趣
的讀者。請保持耐心和寬厚。在下篇中,我將繼續介紹標准庫、網路編程以及其他方面的
C++好書。有好書相伴,這個冬天不會冷。
C++程序設計之四書五經(下篇)
我在上篇中「盤點」了TCPL和D&E以及入門教程、高效和健壯編程、模板和泛型編程等方面
共十幾本C++好書。冬去春來,讓我們繼續C++書籍精彩之旅J
標准庫
當我還在研究院工作時,與同院另外兩家研究所合作開發過一個大型水利樞紐調度集成項
目。我們三家軟體系統之間都要相互通信。在調試通訊模塊時,細心的客戶(一名好學的
系統管理員)發現對於同一通信規約的解釋代碼,我的不超過30行,而對方的則超過了15
0行且很難看懂。這位系統管理員很納悶,我說大家編程風格和習慣不一樣,我使用了標准
庫,而他使用了傳統C編程風格以及他所習慣的另外一些技術。
別誤會!我絕無貶低這位合作夥伴的意思。事實上,我對那些真正有著深厚的C編程功力的
程序員常常懷有欽佩之心。畢竟,C++能有今天的成功在很大程度上緣於它深深地植根於C
。作為一名C++程序員,倘若不熟悉C++中的C,我往往會認為他的基本功是不扎實的,他的
技術底氣是不足的。
不過話又說回來,C++是一種多范型(paradigm)編程語言,具體採用哪種編程風格,專業
程序員應該知道視具體情況而定。作為一名經常需要在現場做即興開發的項目負責人,為
了短平快地解決當務之急,我習慣盡量採用現有的庫(和組件)。效率(以及強健性)久
經驗證的C++標准庫已經擺在那兒了,何樂而不用呢?
Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference
《C++標准程序庫:自修教程與參考手冊》,華中科技大學出版社
這是一本網路全書式的C++標准庫著作,是一本需要一再查閱的參考大全。它在完備性、細
致性以及精確性方面都是無與倫比的。本書詳細介紹了每一標准庫組件的規格和用法,內
容涵蓋包括流和本地化在內的整個標准庫而不僅僅是STL。正如本書副標題所示,它首先適
合作為教程閱讀,爾後又可用作參考手冊。
淺顯易懂的寫作風格使得這本書非常易讀。如果你希望學習標准庫的用法並盡可能地發揮
其潛能,那你必須擁有這本書。正如網路上所言,這本書不僅僅應該擺在你的書櫥中,更
應該放到你的電腦桌上。我向每一位職業C++程序員強烈推薦。
Angelika Langer, Klaus Kreft, Standard C++ IOStreams and Locales: Advanced Pro
grammer's Guide and Reference
《標准C++輸入輸出流與本地化》,人民郵電出版社
C++標准庫由STL、流和本地化三部分構成。關於STL的書市面上已經有不少,但罕見流和本
地化方面的專著。本書是這兩個領域中最優秀的一本,迄今為止沒有任何一本書比這一本
更全面詳盡地討論了流和本地化。如果你不滿足於停留在「會用」流庫的層面,千萬不要
錯過它。
2001年夏天,我草草翻閱過這本書的中文版,從內容到包裝都給我留下了比較深刻的印象
— 不過負面的居多一些。2003年秋天,無意中得知某網路書店正以超低價格甩賣這本書
的中譯本,情不自禁,一陣唏噓。
Scott Meyers, Effective STL: 50 Specific Ways to Improve Your Use of the Stand
ard Template Library
《Effective STL(影印版)》,中國電力出版社
讀完Scott 的《Effective C++》和《More Effective C++》的中譯本之後,我一直期待這
本書的中文版。我從潘愛民先生的個人主頁上了解到,他和他的合作夥伴似乎早已完成了
這本書的翻譯工作,可惜至今市面上仍不得見。幸運的是,我們可以看到它的原版。
本書是使用STL的程序員必讀之作。在這本書中,Scott向我們講述STL容器和演算法的工作機
制以及如何以最佳方式使用它們。和Scott的其他作品一樣,這本書的寫作風格清晰、精確
,具有極佳的可讀性。看過這本書以後,我想你也許會和我以及其他C++程序員一樣產生這
樣的想法:Scott什麼時候會寫出一本「More Effective STL」?
關於STL,我還提醒你留心Matthew H. Austern的《Generic Programming and the STL:
Using and Extending the C++ Standard Template Library》(《泛型編程與STL》,中
國電力出版社)。這本書散發著濃厚的學院氣息。Andrew Koenig和Barbara Moo在《Acce
lerated C++: Practical Programming by Example》一書末尾鄭重推薦另外兩本進階好書
(除了他們自己的《Ruminations on C++》外),其中一本是TCPL,另外一本就是本書!
網路編程
在網路編程時代,C++應該扮演著怎樣的角色,讓ACE(Adaptive Communications Enviro
nment)來告訴你。
Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 1: Mast
ering Complexity with ACE and Patterns
Douglas C. Schmidt, Stephen D. Huston, C++ Network Programming, Volume 2: Syst
ematic Reuse with ACE and Frameworks
《C++網路編程,卷1:運用ACE和模式消除復雜性》,華中科技大學出版社
《C++網路編程,卷2:基於 ACE 和框架的系統化復用》,電子工業出版社
採用C++進行企業級網路編程,目前ACE(以及這兩本書)是一個值得考慮的選擇。ACE是一
個面向對象、跨平台、開放源碼的網路編程框架,目標在於構建高性能網路應用和中間件
。Douglas是ACE的創始人,Stephen則已為ACE提供了數年的技術支持和顧問服務,兩位都
是ACE社群(是的,ACE的影響和實際應用的程度已經形成了一個社群)的專家。
ACE並不單單被大學和研究所追捧,它已經被成功地應用於世界上成千上萬個商業應用中。
在電信、宇航、醫葯和財經領域的網路系統中,ACE已經並繼續發揮著重要的作用。如果你
准備開發高性能通訊系統,你應該考慮考慮這一匯集世界頂尖專家智慧的成果。
除了使用C++面向對象設計技術和模板等高級語言特性外,ACE還運用了大量的模式。《C+
+網路編程》卷1和卷2並不僅僅教你關於ACE的方方面面,它還會教給你模式和通用框架設
計等高級技術等。所以,作為一名中、高級C++程序員,即使你很少進行正兒八經的C++網
絡程序設計,閱讀這兩本書同樣可以從中受益。
是的,並非所有網路應用都要使用Web伺服器(以及其他應用伺服器)和重量級組件模型,
換個思路,它們或許也可以從輕量級的ACE組件中獲益。
雜項
以下這幾本書之所以被列入「雜項」單元,只是因為我沒有考慮出更合適的歸類方法,它
們和上面的書籍一樣,值得一讀。
Bruce Eckel, Thinking in C++, Volume 1: Introction to Standard C++ (2nd Edit
ion)
Bruce Eckel, Thinking in C++, Volume 2: Practical Programming (Second Edition)
《C++編程思想(第2版)第1卷:標准C++導引》,機械工業出版社
《C++編程思想(英文版 第2版)》,機械工業出版社
《Thinking in C++》的第1版於1996年榮獲「軟體研發」雜志評選的圖書震撼大獎。最新
推出的第2版對內容進行了大幅改寫和調整,以反映C++標准化帶來的影響以及近幾年面向
對象領域最新研究和實踐成果。「輸入輸入流」、「多重繼承」、「異常處理」和「運行
時類型識別」等高級主題連同C++標准化以後增加的一些內容則被放入第二卷中。Bruce是
一名經驗豐富的C++講師和顧問,其培訓和寫作經驗都是世界一流水準,他的作品比那些「
玩票」的技術人員寫的東西更能吸引讀者。事實上,在同類圖書中,對於大多數讀者而言
,這本書的可讀性要超過TCPL和《C++ Primer》。順帶一提,訪問作者的站點,你可以先
睹第二卷的風采。
Andrew Koenig, Barbara E. Moo, Ruminations on C++: A Decade of Programming Ins
ight and Experience
《C++沉思錄》,人民郵電出版社
Andrew是世界上屈指可數的C++專家。這是一本關於C++編程思想和程序設計技術而非語言
細節的著作。如果你已經具有一定的基礎,這本書將教你在進行C++編程時應該怎樣思考,
應該如何表達解決方案。整本書技術表達透徹,文字通俗易懂。Bjarne這樣評價這本書:
本書遍布「C++是什麼、C++能夠做什麼」的真知灼見。
Stanley B. Lippman, Inside The C++ Object Model
《深度探索C++對象模型》,華中科技大學出版社
《深度探索C++對象模型(影印版)》,中國電力出版社
從編譯器的角度觀察C++可以使你知其然並知其所以然。本書探討了大量的C++面向對象程
序設計的底層運作機制,包括構造函數、函數、臨時對象、繼承、虛擬、模板的實例化、
異常處理、運行期類型識別等,另外還介紹了一些在實現C++對象模型過程中做出的權衡折
衷。喜
『叄』 C\C++程序員需要掌握什麼書籍
c/c++程序員需要掌握的書籍大概可以分成幾個方面:
計算機基礎類書籍,這類書籍包括計算機組成原理、計算機網路、資料庫、操作系統、數據結構與演算法。
c/c++類專業書籍,這類書籍包括基礎的C語言程序設計、C++primer。
擴展類書籍,c/c++相關擴展類,推薦的有C陷阱與缺陷、深度探索C++對象模型、effective C++。
平台擴展類書籍,這類就要看你在哪類系統下做開發,一般常用的系統平台是嵌入式、windows、Unix及ios(object C++),這類書籍就比較多了,可以按照個人需求選擇。
按照上述推薦的理由是:
學習計算機語言需要一定的基礎,這類基礎是非常重要但是很無聊的,後續在做開發的時候會覺得非常實用。
學好語言其實不是非塌散常麻煩的部分,一般的教材類書籍即可,重要而麻煩的是在敲代裂斗碼的過程中去熟練掌握、運用和創新。
擴展類書籍3可以幫助你更深入的理解你所學到的東西,而深入理解是程序員進階的必經之路。
平台類書籍略有區別,但是標准C++是一樣的,只是針對各自平台做了相應擴展(objectc++除外團源氏)。如果需要在某個平台下做開發,或者學習再去學習使用即可。
『肆』 C語言程序設計實訓教程的中國鐵道出版社出版圖書
書名:C語言程序設計實訓教程(第二版)
套系名稱:高職高專計算機系列規劃教材
書號:978-7-113-13740-3
版次:2-3
開本:16開
頁碼:216頁
作者:宋海民 賈學斌
出版時間:2011-12-01
定價:25 元
適用專業:計算機專業
出版社:中國鐵道出版社 本書是《C語言程序設計(第二版)》的配套實訓教材。全書共分5章,包括Visual C++ 6.0集成開發環境、C程序設計上機實訓、二級C語言等級考試輔導、二級C語言等級考試模擬試題精選、習題與解答等內容。
本書是一本實用性較強的C語言程序設計實訓教程和二級C語言等級考試輔導教材。本書適合作為高職高專各專業學生學習C語言程序設計的實訓教材,也可供在校教師以及相關專業工程技術人員參考使用,對於參加全國計算機等級考試二級C語言考試的讀者也具有一定的輔導價值。 第1章 Visual C++ 6.0集成開發環境 1
1-1 Visual C++ 6.0集成開發
環境的使用 1
1-1-1 C++ 6.0開發
環境概述 1
1-1-2 建立控制台應用程序 10
1-1-3 多文件C程序的開發 14
1-1-4 項目中文件的刪除和
插入 15
第2章 C語言程序設計上機實訓 17
2-1 上機實訓的指導思想和要求 17
2-1-1 上機實訓的目的 17
2-1-2 上機實訓前的
准備工作 18
2-1-3 C語言程序的建立、
編譯、連接及執行 18
2-1-4 上機實訓的要求 18
2-1-5 實訓內容的安排 18
2-2 C語言程序設計實訓內容 19
實訓1 C語言程序的運行環境
和運行方法 19
實訓2 簡單C語言程序設計 22
實訓3 選擇結構程序設計 27
實訓4 循環程序設計 29
實訓5 數組 30
實訓6 函數、變數的作用域
和存儲類型 35
實訓7 指針 40
實訓8 構造數據類型 44
實訓9 文件 50
實訓10 編譯預處理 55
實訓11 位運算 58
實訓12 C語言程序設計項目
開發 60
實訓13 C語言程序課程設計 74
第3章 二級C語言等級考試輔導 76
3-1 C語言概述輔導 76
3-1-1 常見錯誤分析 76
3-1-2 筆試知識重點
難點分析 76
3-2 基本數據類型、運算符及
表達式輔導 77
3-2-1 常見錯誤分析 77
3-2-2 筆試知識重點
難點分析 78
3-3 數據的輸入輸出輔導 81
3-3-1 常見錯誤分析 81
3-3-2 筆試知識重點
難點分析 82
3-4 結構化程序設計輔導 85
3-4-1 常見錯誤分析 85
3-4-2 筆試知識重點
難點分析 86
3-5 數組輔導 92
3-5-1 常見錯誤分析 92
3-5-2 筆試知識重點
難點分析 95
3-6 函數輔導 96
3-6-1 常見錯誤分析 96
3-6-2 筆試知識重點
難點分析 99
3-7 指針輔導 101
3-7-1 常見錯誤分析 101
3-7-2 筆試知識重點
難點分析 102
3-8 構造數據類型輔導 103
3-8-1 常見錯誤及應用技巧 103
3-8-2 筆試知識重點難點
分析 104
3-9 文件輔導 109
3-9-1 常見問題及易犯的
錯誤 109
3-9-2 筆試知識重點
難點分析 110
3-10 編譯預處理輔導 112
3-10-1 常見問題及易犯的
錯誤分析 112
3-10-2 筆試知識重點
難點分析 112
3-11 位運算輔導 114
3-11-1 常見錯誤分析 114
3-11-2 筆試知識重點
難點分析 114
第4章 二級C語言等級考試
模擬試題精選 116
4-1 筆試模擬試題及參考答案 116
4-1-1 筆試模擬試題一 116
4-1-2 筆試模擬試題一
參考答案 127
4-1-3 筆試模擬試題二 127
4-1-4 筆試模擬試題二
參考答案 137
4-1-5 筆試模擬試題三 138
4-1-6 筆試模擬試題三
參考答案 149
4-1-7 筆試模擬試題四 150
4-1-8 筆試模擬試題四
參考答案 160
4-2 上機模擬試題及參考答案 160
4-2-1 上機模擬試題一 160
4-2-2 上機模擬試題一
參考答案 162
4-2-3 上機模擬試題二 163
4-2-4 上機模擬試題二
參考答案 164
4-2-5 上機模擬試題三 165
4-2-6 上機模擬試題三
參考答案 166
4-2-7 上機模擬試題四 166
4-2-8 上機模擬試題四
參考答案 168
第5章 習題與解答 169
附錄A 全國計算機等級考試二級C語言
考試大綱 195
附錄B 全國計算機等級考試公共基礎
知識考試大綱 198
附錄C 全國計算機等級考試二級C語言
應試技巧 200
附錄D 實訓報告書寫參考格式 205
參考文獻 206
『伍』 剛開始學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語言,java,自學看哪些書比較淺顯易懂
加入不是想直接找工作的話建議從c語言學起,入門推薦C primer plus第六版,雖然有些厚,但是比起國內的一些書好了很多,入門後看c和指針以及一些數據結構的書。java的話可以看java核心技術。最好邊看書邊看看講解視頻。
『柒』 學習c語言看什麼書好
最近很多人都在問如何學習編程。我覺得學習編程最重要的是入門,如果你入門的時候有一個好的方法和思路,打下比較扎實的基礎,對今後的編程工作是很有益處的。即使在學習新的編程語言也無所謂,因為它們有很多相通之處,可以相互借鑒。
我認為可以先學習一下pascal,這個語言比較嚴謹,適合初學者。pascal它被稱為教學語言,結構嚴謹,不像C語言那麼靈活,易於理解和學習。
然後可以繼續學習C語言,這個語言比較靈活。有了pascal的基礎,在進行C語言編程就不會因為C語言的靈活而有問題
。後面的就可以學習VC什麼的了。
C語言的書推薦譚浩強的,比較好。
我當時學習pascal和C語言的時候是將書後的習題都做了一遍,感覺效果很好。
當然了,學習什麼語言也要看你具體准備從事什麼行業。例如你要進行嵌入式開發,C就是很好的選擇,如果是Windows開發,那麼VC就不錯。還有資料庫方面的開發、網路開發等等。不同的語言適合不同的方面。要看自己的選擇的,呵呵
。
還有很多人說自己的基礎很差,甚至中學畢業什麼的。其實這個並不重要,比較說英語,在計算機語言里所用到的單詞量很少,而且都是常用詞,經常使用就記住了。當然,如果你要看原文資料或者幫助的話,專業詞彙比較多,不過在金山詞霸的幫助下,經常看,也是沒什麼大的問題的。至於數學什麼的,其實數學只是培養你一個邏輯思維能力,在初學編程的時候影響不是很大。況且,作為一個基礎編程人員來說,上面還有系統分析師、項目經理,他們會把需求分析、概要設計和詳細設計做好的,你只要按照文檔寫代碼就OK了。不過,要上更上一步的話,其他基礎知識就非常重要了,畢竟你不能寫一輩子代碼。
在你學習好C語言以後,個人建議好好學習一下數據結構和軟體工程。這兩門對你的水平提高都是很有幫助的。特別是軟體工程,它能夠使你按照科學的工程方法進行軟體開發,對今後的發展很有好處。
只是一家之言,有不到之處,還望見諒