第一篇
一些同學(xué)問我,如何學(xué)好C++,我沒有別的辦法給你們,唯一的辦法就是讀書,讀大
量的書,就可以解決。要把C++作為日常語言,而不是一種程序語言,這樣就好辦了。
有人又要問我,那么我應(yīng)該讀什么書才好?沒有時(shí)間怎么辦?
我只能對(duì)你們說,沒時(shí)間的話,就別學(xué)C++了,做你們喜歡做的事。生活中沒有
C++,也同樣美好。
如果你準(zhǔn)備學(xué),一定要學(xué)好,那么我開個(gè)書單,應(yīng)該問題不是甚大。
首先肯定要讀一讀Bjarne Stroustrup的The Design and Evolution of C++,了解
一下這個(gè)語言的歷史。接下來就可以看別的書了,但要不停地回頭看這本書,看到
你不斷地學(xué)到的新技術(shù)是怎么樣一點(diǎn)點(diǎn)地被接納到這個(gè)語言中去的。
第一本書因人而異,基礎(chǔ)好一些的,可以看Stanley B. Lippman的C++ Primer,這
本書非常地巨大,你打星號(hào)的部分可以不要看。基礎(chǔ)不太好的,可以看Stanley B.
Lippman的Essential C++,這本書份量要輕得多,不過四個(gè)C++的范型都講了,而
且講得非常清楚。
第二本應(yīng)該停止技術(shù)層面的東西,靜下心來看看Pike和Kernighan的The Practice
of Programming,好好地整理一下,在程序設(shè)計(jì)中應(yīng)該有哪些注意的事項(xiàng)。這本
非常薄的booklet,可以說是程序員必讀的指南。
第三本書,就應(yīng)該是Bruce Eckel寫的、候捷譯的Thinking in C++,這本書每過
半年我就要重讀一遍。可以說每一章都是寫得發(fā)人深省的,這本書讓我感覺到了
技術(shù)運(yùn)用的非常高的境界,但是語言非常平實(shí),只要認(rèn)真地讀,即使基礎(chǔ)不行,
也一定可以懂。我在教課的時(shí)候,就是用這本書(面對(duì)的學(xué)生是零基礎(chǔ))。
要更上一層的話,就要慢一步,先要把握C++設(shè)計(jì)習(xí)慣的良好。這是Scott
Meyers的Effective C++和More Effective C++帶給我們的無盡收益。我More
Effective C++買不起,只好花了10塊錢復(fù)印裝訂了一本"線裝本",看起來像葵花
寶典(;-))。這兩本書是真正的經(jīng)典,作者對(duì)C++的純熟,使得語言的風(fēng)格讀起來
簡直是如飴甘甜,就像他站在對(duì)面在講課。我手中有這兩本書的原版CD,如果有興
趣,可以發(fā)E-mail到sjtu@263.net或在飲水思源投條兒給gaobo索要,只要您提供
光盤我就給免費(fèi)燒。如果你已經(jīng)深刻地理解了Effective C++和More Effective
C++,那你可以發(fā)現(xiàn),你在眾人中已經(jīng)是雞群之鶴。可以指導(dǎo)項(xiàng)目運(yùn)作了,可以編
寫一切你想做的程序了,可以指出別人看起來不錯(cuò)的代碼的大小問題了。如果你能
一眼看出有人的代碼是對(duì)應(yīng)于"條款27"或"條款M6",那你可真是讓本人刮目了。
我已經(jīng)講了,如果要寫程序,EC++和MEC++的境界已經(jīng)足以使你自如應(yīng)付,可是如
果你還不滿足,想關(guān)注一些理論層面的問題,或是想看看實(shí)現(xiàn)的代碼,你就不應(yīng)該
錯(cuò)過這幾本好極了的書。我是說Herb Sutter的Exceptional C++和More
Exceptional C++,這兩本書的難度是非常大的,我對(duì)每一條的閱讀筆記都是十多
頁。特別是泛型程序設(shè)計(jì)的部分,這兩本書旁征博引,極盡深入探討之能事,每每
看懂一條,都抹汗一次,大感酣暢淋漓;還有侯捷的 STL源碼剖析 ,以實(shí)際的
例子一點(diǎn)點(diǎn)地講解一個(gè)STL是怎么樣實(shí)現(xiàn)的,我是剛開始讀,不發(fā)表評(píng)論;而
Stanley B. Lippman,Cfront的實(shí)現(xiàn)者之一,執(zhí)筆寫出Inside the C++ Object
Model,我只有一個(gè)字,就是基本帥呆了。我從中了解了無數(shù)的編譯器解釋源代碼
的細(xì)節(jié),以及記憶體分配的細(xì)節(jié),呵呵,這些都知道了,我還怕什么呢?最近得到
了另一Cfront實(shí)現(xiàn)者、C++標(biāo)準(zhǔn)委員會(huì)Koenig的 C++沉思錄,看起來非常不錯(cuò),這
里也推薦給大家,但我也沒看完,亦無發(fā)言權(quán)。
最后最后,你們,未來的C++理論家們,可要記住,Bjarne Stroustrup的The C++
Programming Language無論如何也應(yīng)該讀個(gè)四五遍!這是一切C++的書本的源泉。
如果還覺得不夠,就向C++標(biāo)準(zhǔn)委員會(huì)訂購一本C++標(biāo)準(zhǔn)。
一切中國大陸作者的書,一概不要看(包括我的)。一切VC++或講特定的編譯器的
書,一概不要看。如果需要補(bǔ)C語言的課,買一本非常小的K&R的The C
Programming Language足矣,其它的書一概不要看。不要先學(xué)C,再學(xué)C++,而要直
接學(xué)C++。你不是先學(xué)古文,再學(xué)白話的,對(duì)不對(duì)?所以相信我,直接來更容易。
以上文字,皆為原創(chuàng),本人愿意為每個(gè)字負(fù)責(zé)。
第二篇
好久未來C板了,原因這段時(shí)間一直在研究兩本書,看得自己不敢多說一句話。
1、《Effective STL》
訂購:
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8537作者:Scott Meyers
出版社:中國電力出版社
一開始欺負(fù)這本書比較薄,想快點(diǎn)看完,但不久就發(fā)現(xiàn)自己已經(jīng)翻不動(dòng)了。直
到看完最后一個(gè)字,才發(fā)現(xiàn)一個(gè)基本的事實(shí):薄的不是這本書,而是自己的見識(shí)。
有關(guān)STL的書也讀了不少,正如讀《Effective C++》以前,有關(guān)C++的書也讀了
不少。Meyers的書總是給人一種脫胎換骨的提升感覺,他總能在大家以為老生常談
的地方挖出意想不到的新意,并指出一些一般人習(xí)以為常的東西其實(shí)存在種種危機(jī),
或是在一些看來完全等價(jià)的選擇中,為特定的場合選擇最有效的(Most
Effective)那一種。而且他的切入口總是讓人看得懂的(不像Stroustrup的書,
第一句話就要琢磨半天),但是他總是會(huì)選擇幾個(gè)拓展點(diǎn),并把它們分析得淋漓盡
致,這時(shí)候就需要一段代碼一段代碼甚至是語句粒度地閱讀了——當(dāng)然,最后總是
看得懂,這和讀者的閱讀程度總是正比,這會(huì)給人極大的成就感。可以說,在STL
實(shí)踐的書籍,無書可出其右(當(dāng)然在STL實(shí)作方面,我還是要向大家推薦侯捷的
《STL源碼剖析》)。
讀完這本書后,和Pascal就產(chǎn)生明顯的距離感了。這里我仍然要說:請(qǐng)熱愛
Delphi!我還是更愿意寫“var s:set of char;”而不是
“set <char*, less<char*>, allocator<char*> > s”,;-)。
2、《Modern C++ Design》
訂購(中文):
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8184訂購(影印):
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8319作者:Andrei Alexandrescu
譯者:侯捷、於春景
出版社:華中科技大學(xué)出版社(中文)
中國電力出版社(影印)
讀完這本書的第一頁,我就知道自己放不下它了,但我也知道,我的苦難經(jīng)歷
又要多上一筆了。用C++實(shí)作設(shè)計(jì)模式,已經(jīng)是骨灰級(jí)的難度,但這本書明顯還在講
一個(gè)template的對(duì)象模型的問題,這在我讀《Inside the C++ Object Model》時(shí)是
屢攻不下的難點(diǎn)。不過,出乎意料的是這本書居然使我具有一些概念了,而且動(dòng)手寫
出了一個(gè)SmartPointer。
這本書我還遠(yuǎn)不能說我讀懂了,但是確乎是讀完了。如果你還沒有讀過對(duì)象模型
和設(shè)計(jì)模式的書,我認(rèn)為需要讀一讀。否則,直接看這本書根本就是受罪。最近,有
一些朋友也注意到設(shè)計(jì)模式的重要性了,可能從明年起我在《電腦報(bào)》上要發(fā)表一些
文章,屆時(shí)請(qǐng)朋友們指教吧。
另外就是Effective C++點(diǎn)評(píng)繼續(xù)寫,我現(xiàn)在覺得更惶恐,但是信心也更足了。
--
La cinquième planète était très curieuse.
C'était la plus petite de toutes.
Il y avait là juste assez de place pour loger un réverbère et un allumeur de
réverbères. le petit prince ne parvenait pas à s'expliquer à quoi pouvaient
servir, quelque part dans le ciel, sur une planète sans maison, ni population,
un réverbère et un allumeur de réverbères.