C++程序設(shè)計(jì)之四書五經(jīng)

字號:

C++是一門廣泛用于工業(yè)軟件研發(fā)的大型語言。它自身的復(fù)雜性和解決現(xiàn)實(shí)問題的能力,使其極具學(xué)術(shù)研究價(jià)值和工業(yè)價(jià)值。和C語言一樣,C++已經(jīng)在許多重要的領(lǐng)域大獲成功。
    然而,一個(gè)不可否認(rèn)的現(xiàn)實(shí)是,在低階程序設(shè)計(jì)領(lǐng)域,C++擠壓著C同時(shí)也在承受著C的強(qiáng)烈反彈,而在高階程序設(shè)計(jì)領(lǐng)域,Java和C#正在不斷蠶食著C++的地盤。也許C++與C合為一體永遠(yuǎn)都是一
    個(gè)夢想,也許Java和C#的狂潮終將迫使C++回歸本位 — 回到它有著根本性優(yōu)勢的開發(fā)領(lǐng)域:低級系統(tǒng)程序設(shè)計(jì)、高級大規(guī)模高性能應(yīng)用設(shè)計(jì)、嵌入式程序設(shè)計(jì)以及數(shù)值科學(xué)計(jì)算等。果真如此,我認(rèn)為這未嘗不是一件好事。
    C++吸引如此之多的智力投入,以至于這個(gè)領(lǐng)域的優(yōu)秀作品,包括重量級的軟件產(chǎn)品、程序庫以及書籍等,數(shù)不勝數(shù)。文題“C++程序設(shè)計(jì)之四書五經(jīng)”一個(gè)不太嚴(yán)格的含義是:C++程序設(shè)計(jì)之四書 五經(jīng)。是的,在本文(及其下篇)中,我將分門別類推薦20多本C++好書,你可以根據(jù)自己的需要選讀。
    TCPL和D&E
    TCPL和D&E分別是《The C++ Programming Language》和《The Design and Evolution of C++》的簡稱,均出自Bjarne Stroustrup之手。我將它們單列出來,首先是因?yàn)锽jarne是C++語言的創(chuàng)建者,然后是因?yàn)楸取笆紫取蹦莻€(gè)原因更重要的原因:這兩本書是C++領(lǐng)域毋庸置疑的杰作。說它們是C++語言圣經(jīng),并不為過。
    Bjarne Stroustrup, The C++ Programming Language (Special 3rd Edition)
    《C++程序設(shè)計(jì)語言(特別版)》,機(jī)械工業(yè)出版社
    《C++程序設(shè)計(jì)語言(特別版)(英文影印版)》,高等教育出版社
    迄今為止,TCPL是除了C++標(biāo)準(zhǔn)文獻(xiàn)之外權(quán)威的C++參考手冊。和大多數(shù)人的看法不大一樣,我認(rèn)為Bjarne的文字語言并不遜色于他所創(chuàng)建的程序語言,至少我喜歡這種學(xué)院氣息濃厚的作品。本書對C++語言的描述輪廓鮮明、直截了當(dāng)。它從C++語言創(chuàng)建者的角度來觀察C++,這是任何別的作者和書籍做不到的 — 沒有任何人比Bjarne自己更清楚該怎么來使用C++。
    這是一本嚴(yán)肅的著作,以中、高級C++開發(fā)人員為目標(biāo)讀者。如果你是一名有經(jīng)驗(yàn)的C++程序員,需要了解更加本質(zhì)的C++知識,本書正是為你而寫。它不是那種讓你看了會不斷竊喜的小書,需要用心體會,反復(fù)咀嚼。在閱讀過程中,請?zhí)貏e留心Bjarne先生強(qiáng)調(diào)了什么,又對什么一語帶過。我個(gè)人比較喜歡這本書的第四部分“使用C++做設(shè)計(jì)”,這樣的內(nèi)容在類似的程序設(shè)計(jì)語言書籍中很難看到 — 我甚至認(rèn)為Bjarne應(yīng)該將這部分獨(dú)立出來單獨(dú)寫一本書。
    Bjarne Stroustrup, The Design and Evolution of C++
    《C++語言的設(shè)計(jì)和演化》,機(jī)械工業(yè)出版社
    《C++語言的設(shè)計(jì)和演化(英文版)》,機(jī)械工業(yè)出版社
    D&E是一本關(guān)于C++語言設(shè)計(jì)原理、設(shè)計(jì)決策和設(shè)計(jì)哲學(xué)的專著。它清晰地回答了C++為什么會成為今天這個(gè)樣子而沒有變成另外一種語言。作為C++語言的創(chuàng)建者,Bjarne淋漓盡致地展示了他獨(dú)到而深刻的見解。除了廣受贊譽(yù)的語言特性外,Bjarne沒有回避那些引起爭議的甚至被拒絕的C++特性,他一一給出了邏輯嚴(yán)密、令人信服的解釋。內(nèi)容涵蓋C++的史前時(shí)代、帶類的C、C++的設(shè)計(jì)規(guī)則、標(biāo)準(zhǔn)化、庫、內(nèi)存管理、多重繼承、模板等,對包括異常機(jī)制、運(yùn)行時(shí)類型信息和名字空間在內(nèi)的重要的新特性都分別進(jìn)行了深入探討。每一名C++程序員都應(yīng)該可以從Bjarne的闡釋中加深對手中這門語言的認(rèn)識。
    需要再次提醒的是,這兩本書知識濃縮,信息量極大,請不要錯(cuò)過Bjarne每一句看似漫不經(jīng)意的話。
    入門教程
    學(xué)習(xí)任何一門語言都需要一個(gè)從入門到精通、從新手到高手循序漸進(jìn)的過程。不過,對于一個(gè)所謂的新手而言,究竟是一個(gè)完完全全的新手,還是一個(gè)熟悉某種別的語言的“新手”,甚至是在某種語言程序設(shè)計(jì)領(lǐng)域已經(jīng)頗有建樹的高手,很 難一概而論?不同的C++新手需要不同的入門書籍。
    Andrew Koenig, Barbara E. Moo, Accelerated C++: Practical Programming by Example
    《Accelerated C++中文版》,中國電力出版社
    和市面上大多數(shù)C++教程不同,本書不是從“C++中的C”開始講解,而是始于地道的C++特性。從一開始就使用標(biāo)準(zhǔn)庫來寫程序,隨著講述的逐漸深入,又一一解釋這些標(biāo)準(zhǔn)庫組件所依賴的基礎(chǔ)概念。另外,和其他C++教材不同的是,這本書以實(shí)例拉動語言和標(biāo)準(zhǔn)庫的講解,對后兩者的講解是為了給實(shí)例程序提供支持,而不是像絕大多數(shù)C++教材那樣,例子只是用作演示語言特性和標(biāo)準(zhǔn)庫用法的輔助工具。
    作者在C++領(lǐng)域的編程實(shí)踐、教育培訓(xùn)以及技術(shù)寫作方面都是世界一流水準(zhǔn)。我喜歡這種大量使用標(biāo)準(zhǔn)庫和C++語言原生特性的清新的寫作風(fēng)格。在這本教材面前,幾乎迄今為止的所有C++教材都黯然失色或顯得過時(shí)。盡管這本教材也許對于國內(nèi)的高校教育來說有些前衛(wèi),不過我仍然極力向我的同行們推薦。順帶一提,在Bjarne和我近的一封通信里,他這樣評價(jià)本書:對于有經(jīng)驗(yàn)的程序員學(xué)習(xí)C++而言,這本書可能是世界上好的一本。