C++學(xué)習(xí)路線
一些同學(xué)問我,如何學(xué)好C++,我沒有別的辦法給你們,唯一的辦法就是讀書,讀大量的書,就可以解決。要把C++作為日常語言,而不是一種程序語言,這樣就好辦了。
有人又要問我,那么我應(yīng)該讀什么書才好?沒有時間怎么辦?我只能對你們說,沒時間的話,就別學(xué)C++了,做你們喜歡做的事。生活中沒有C++,也同樣美好。如果你準(zhǔn)備學(xué),一定要學(xué)好,那么我開個書單,應(yīng)該問題不是甚大。
首先肯定要讀一讀Bjarne Stroustrup的《The Design and Evolution of C++》(下載鏈接:https://pan.baidu.com/s/168A00),了解一下這個語言的歷史。接下來就可以看別的書了,但要不停地回頭看這本書,看到你不斷地學(xué)到的新技術(shù)是怎么樣一點點地被接納到這個語言中去的。
第一本書因人而異,基礎(chǔ)好一些的,可以看Stanley B. Lippman的《C++ Primer》,這本書非常地巨大,你打星號的部分可以不要看。基礎(chǔ)不太好的,可以看Stanley B.Lippman的《Essential C++》(下載鏈接:https://pan.baidu.com/share/link?shareid=3986950065&uk=1194945869&fid=944008967995153),這本書份量要輕得多,不過四個C++的范型都講了,而且講得非常清楚。
第二本應(yīng)該停止技術(shù)層面的東西,靜下心來看看Pike和Kernighan的《The Practice of Programming》,好好地整理一下,在程序設(shè)計中應(yīng)該有哪些注意的事項。這本非常薄的booklet,可以說是程序員必讀的指南。
第三本書,就應(yīng)該是Bruce Eckel寫的、候捷譯的《Thinking in C++》(下載鏈接:https://pan.baidu.com/s/1iPhB),這本書每過半年我就要重讀一遍??梢哉f每一章都是寫得發(fā)人深省的,這本書讓我感覺到了技術(shù)運用的非常高的境界,但是語言非常平實,只要認(rèn)真地讀,即使基礎(chǔ)不行,也一定可以懂。我在教課的時候,就是用這本書(面對的學(xué)生是零基礎(chǔ))。
要更上一層的話,就要慢一步,先要把握C++設(shè)計習(xí)慣的良好。這是Scott Meyers的《Effective C++》和《More Effective C++》(下載鏈接:https://pan.baidu.com/s/1ntsYJMT)帶給我們的無盡收益。我More Effective C++買不起,只好花了10塊錢復(fù)印裝訂了一本"線裝本",看起來像葵花寶典。這兩本書是真正的經(jīng)典,作者對C++的純熟,使得語言的風(fēng)格讀起來簡直是如飴甘甜,就像他站在對面在講課。如果你已經(jīng)深刻地理解了Effective C++和More EffectiveC++,那你可以發(fā)現(xiàn),你在眾人中已經(jīng)是雞群之鶴。可以指導(dǎo)項目運作了,可以編寫一切你想做的程序了,可以指出別人看起來不錯的代碼的大小問題了。如果你能一眼看出有人的代碼是對應(yīng)于"條款27"或"條款M6",那你可真是讓本人刮目了。
我已經(jīng)講了,如果要寫程序,EC++和MEC++的境界已經(jīng)足以使你自如應(yīng)付,可是如果你還不滿足,想關(guān)注一些理論層面的問題,或是想看看實現(xiàn)的代碼,你就不應(yīng)該錯過這幾本好極了的書。我是說Herb Sutter的《Exceptional C++》(下載鏈接:https://pan.baidu.com/s/1dEqzypz)和《More Exceptional C++》(下載鏈接:https://pan.baidu.com/s/1jGPkQEy),這兩本書的難度是非常大的,我對每一條的閱讀筆記都是十多頁。特別是泛型程序設(shè)計的部分,這兩本書旁征博引,極盡深入探討之能事,每每看懂一條,都抹汗一次,大感酣暢淋漓;還有侯捷的 STL源碼剖析,以實際的例子一點點地講解一個STL是怎么樣實現(xiàn)的,我是剛開始讀,不發(fā)表評論;而Stanley B. Lippman,Cfront的實現(xiàn)者之一,執(zhí)筆寫出《Inside the C++ Object Model》(下載鏈接:https://pan.baidu.com/share/link?shareid=1721241618&uk=1614005835&fid=4001717482),我只有一個字,就是基本帥呆了。我從中了解了無數(shù)的編譯器解釋源代碼的細節(jié),以及記憶體分配的細節(jié),呵呵,這些都知道了,我還怕什么呢?最近得到了另一Cfront實現(xiàn)者、C++標(biāo)準(zhǔn)委員會Koenig的《C++沉思錄》,看起來非常不錯,這里也推薦給大家,但我也沒看完,亦無發(fā)言權(quán)。
最后最后,你們,未來的C++理論家們,可要記住,Bjarne Stroustrup的《The C++ Programming Language》無論如何也應(yīng)該讀個四五遍!這是一切C++的書本的源泉。
如果還覺得不夠,就向C++標(biāo)準(zhǔn)委員會訂購一本《C++標(biāo)準(zhǔn)》。
最后幾點建議(僅供參考)
一切中國大陸作者的書,盡量不要看(@譚*強),因為國內(nèi)大部分書是填鴨式教育,內(nèi)容太全了會一下子讓初學(xué)者望而卻步。
一切VC++或講特定的編譯器的書,一概不要看。如果需要補C語言的課,買一本非常小的K&R的《The C Programming Language》足矣,其它的書一概不要看。
不要先學(xué)C,再學(xué)C++,而要直接學(xué)C++。你不是先學(xué)古文,再學(xué)白話的,對不對?所以相信我,直接來更容易。
