孟巖談《C++程式設計原理與實踐》
孟巖談《C++程式設計原理與實踐》
十年以來,Bjarne Stroustrup在不同的場合多次表示過,C++最大的弱點就是它的教學,因此,他許諾要親自寫一本教授C++的書——不同於The C++ Programming Language那樣的、真正面向學習者的教程,來正本清源,以一種他認為正確的方式來教C++。 這本書就是他實現諾言的作品。
這本書並非零起點,對於完全沒有程式設計基礎的人來說,恐怕並不適合。從技術點的組織來看,也是一如Bjarne Stroustrup一直以來的風格,以一種娓娓道來的方式分佈在書中各個地方。光看目錄,你很難知道他會在哪裡講到什麼技術點。但如果讀者有一定基礎,知道程式設計是怎麼回事,然後願意以從頭到尾細細品讀的方式來學習C++,那麼這本書應該是不錯的選擇。但知識點的分散也有很大問題,也不是所有人都有那個耐心從頭到尾精讀,所以這本書也不能取代其他一些經典的C++書,比如可以當字典查的C++ Primer和The C++ Standard Library,比如可以當部落格讀的Effective C++。但是有了這本書以後,學習C++的時候確實可以拿它當主幹,其他的作參考和補充。
為什麼這麼說呢?因為C++這個語言有個大陷阱,就是存在很多誘惑和可能性,很容易讓學習者早早就走到那些有趣的底層細節和奇技淫巧上,只見樹木不見森林。比如你在一個類的設計階段就在考慮是否要讓它的某個成員函式內聯,或者本來要設計一個類,然後動手時成了一個模板類,重構時變成了一個多引數模板類,這都是疑似墜井的訊號。實際上以今天C++語言的成熟程度來講,絕大多數情況下,程式設計師可以依賴高階的基礎設施完成工作,只在非常罕見的地方需要用到高度技巧化和底層化的技術。因此,按理來說,一個C++學習者也應該是先掌握這個語言的主體部分,然後才在必要的情況下進入細節的學習。這個應該是正途,也是這本書採取的思路。這本書講授C++的最大特色,就是把C++當做一個真正高階的語言去講,從頭至尾充分調動了C++標準庫以及其他高階的基礎設施。全書處理的非常平和,看不到技巧的炫耀和故作高深的叫賣,一切看上去都挺自然的。從C++自身的發展來講,這本書的出版,標誌著C++教學度過了長達20年的青春期,進入了成熟期。
然而,就現實而言,這本書恐怕是來得太晚了。且不說C++的應用領域較之十年前已經大幅度萎縮了,即使是仍然在使用 C++的領域裡,也早就充斥了大量的傳統遺留程式碼。這些傳統的存在,強迫你必須按照奇技淫巧的方式來撰寫你自己的程式碼,無論你多麼不情願。所以我不認為這本書,以及C++0X的標準能夠總體上改變C++應用的現狀。悲觀點的說法是,C++到死,也就是這個樣了,難以有大的改觀。但是如果有人還是以很認真很嚴肅的態度來學習C++,也能夠有機會在一些領域來做一些全新的工作,這本書應該是可以好好讀一下的。
很多人可能覺得C++不行了,我相信在未來一段時間裡,C++還有一定的用武之地。雲端計算興起之後,服務端的競爭可能還會使得C++在某些領域復興,所以C++還是可以學一學的。C++這個語言最好也是最差的地方,就是它萬金油,怎麼寫都能工作,好多種風格都支援,你用著用著總會有個好惡。比如對我來說,C++這個語言最強的地方在於它的模板技術提供了足夠複雜的程式庫開發機制,可以把複雜性高度集中在程式庫裡。做得好的話,在應用程式碼部分我連一個for迴圈都不用寫,犯錯誤的機會就少,效率還不打折扣,關鍵是看著程式碼心裡爽。那麼它最爛的地方是物件導向基礎設施,簡直不入流,根本不配稱為面嚮物件語言。從高的層面來講,C++可以寫元件,但是想做周全了挺麻煩的,算不上好的元件語言。從底層來說,C++跟C差不多是完全相容,狗急跳牆了,我可以回去寫C程式碼。別人可能有不同的看法,不過有一點經驗的人,對於C++的長長短短多少都會有個感覺、有個偏愛。但是我現在覺得,用C++,最重要的一條,就是心態平和,別較勁,別非要讓程式統一到某個你最信仰的風格下,更不用為此花一大堆精力去攢包裝(wrapper),什麼直接就用什麼。你寫程式時第一個想到的路子,也就是你讀程式時最容易理解的路子。用始皇帝張藝謀的話說,就是手中無劍,心中也無劍,就是不殺,就是和平。以前的C++程式設計師們,多少都有些殺氣,有嗔念,要走過很久才回得來。也許這本書能夠幫助後來者比較快地獲得一顆平常心?沒準兒。至少我希望是這樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16502878/viewspace-669571/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 線下活動:與孟巖、左輕侯、陳梓瀚、李建忠暢談C++C++
- C#非同步程式設計:原理與實踐C#非同步程式設計
- 深入實踐c++模板程式設計C++程式設計
- C++程式設計最佳實踐(轉)C++程式設計
- C++非同步程式設計最佳實踐C++非同步程式設計
- 漫談 C++:良好的程式設計習慣與程式設計要點C++程式設計
- 漫談C++:良好的程式設計習慣與程式設計要點C++程式設計
- 圖片管理系統:原理、設計與實踐
- 淺談Swift網路程式設計最佳實踐Swift程式設計
- 孟巖:編譯領域裡程碑之作 龍書《編譯原理》編譯原理
- C++高階語言程式設計案例與實踐輔導pdfC++程式設計
- 基於WinSNMP的網路管理程式設計----原理與實踐(摘要) (轉)程式設計
- 網路程式設計原理與UDP實現程式設計UDP
- 基於WinSNMP的網路管理程式設計----原理與實踐(目錄) (轉)程式設計
- Go程式設計實踐Go程式設計
- 淺談C++物理設計:實用巨集C++
- angr原理與實踐(一)——原理
- Webpack原理與實踐Web
- C++程式設計實現C++程式設計
- 《機器學習:演算法原理和程式設計實踐》4:推薦系統原理機器學習演算法程式設計
- C++程式設計雜談:物件導向 (轉)C++程式設計物件
- 漫談哲學與程式設計程式設計
- FFT原理及C++與MATLAB混合程式設計詳細介紹FFTC++Matlab程式設計
- 談理論與實踐
- 高效前端程式設計實踐前端程式設計
- 淺談VueUse設計與實現Vue
- 談談依賴注入與面向介面程式設計依賴注入程式設計
- Socket原理與程式設計基礎程式設計
- 後端技術雜談3:Lucene基礎原理與實踐後端
- MelGan原理與實踐篇
- Vue CLI 原理與實踐Vue
- RocketMQ的原理與實踐MQ
- 《C++程式設計實踐與技巧:測試驅動開發》 環境搭建遇到的坑C++程式設計
- C++——談談你對物件導向程式設計的認識C++物件程式設計
- react 設計模式與最佳實踐React設計模式
- C++與物件導向程式設計C++物件程式設計
- udp程式設計的那些事與golang udp的實踐UDP程式設計Golang
- [技術討論]交換程式設計實踐與延續程式設計