怎樣讀《C++ 編程思想》?
這學期在學面向對象編程,讀這本書感覺很抽象,不容易懂,而且讀了之後感覺很快就忘了,怎樣才能把這本書讀好?
看一眼上面的回答,總覺得自己的臉被糊了一臉屎,滿滿的浮躁。
正如我在另一個怎樣才能算精通C++還是什麼的類似的問題的回答所說的,C++他爹B.S.因為不想把自己的信念強加到你們的身上,於是他給C++加入了幾個範式。範式是用來解決一類問題的,所以C++可以解決幾乎所有種類的問題,就跟F#和Scala所做的一樣,而且所用的方法還不一樣。
譬如說做圖形圖像這種並行計算的,譬如說做編譯器的類型推導這種遞歸計算的,譬如說做GUI框架這種響應式計算的,我還真沒見過除了C++、Scala和F#以外的語言,可以針對每一類計算都有完全不同的、幾乎最好的方法、並且還能在一門語言裡面用上。
當然這也導致了很多人的感覺,特別是像 @陳碩 那種精通於幾個相似度高的領域的那樣的,C++有大量的東西用不上。這不是廢話嘛。做圖像處理不做編譯器的人,都會說什麼【虛函數是傻逼,虛繼承更煞筆,能不用就不用】。做編譯器不做GUI的,都會說【介面就是攪屎棍】。做GUI不做圖形的,都會說【瞧你那寫的程序,不僅看不懂,可擴展性還巨差】。一個語言設計來解決10個問題,然後你明白了3個,你自然會覺得【為什麼C++要有那些用來解決其他的7個問題的feature?】還有些人可能會說,【為什麼不幹脆用10種語言來解決10個問題,儘管他們都存在於同一個系統上?】
這簡直就是開玩笑。 C++比Scala和F#強的一點在於,你不要的feature你不用,就不會讓你在運行時產生額外的負擔。多麼難得啊。你用Scala的Monad和F#的Computation Expression做東西的時候,還在擔心我的程序他媽那麼複雜編譯器到底能不能優化啊,C++完全沒這種問題。
所以如果你要全面的了解C++的編程思想,那你就等於要讓自己全面的了解各種技巧,那你就等於要求讓自己能夠全面的解決幾乎所有種類的問題。這當然是很難得,人總有擅長和不擅長的地方。
所以你不要急於求成,等到你解決的問題覆蓋面足夠廣之後,你自然越來越熟悉C++的編程思想了。因此你不要介懷什麼看了就忘了,看不進去什麼的,這是正常的。
誰跟你說過這本書是用來讀的?學計算機不下手寫代碼靠讀書p用都沒的。
這樣,每讀一頁,寫200行代碼,包你讀完成神
太多人回答文不對題了
就事論事
首先,這本書的名字不太對,名稱和內容不符。應該叫《C++編程心得》或《C++編程感悟》更加準確。
其次,作者有嵌入式背景,這對於底層內容和很多語言細節講解的不錯,但是作者的毛病是有些賣弄,學院派作者難免如此,印象非常深刻的是作者自己寫了一個抓取原稿中的代碼內容生成代碼文件的程序,那個程序代碼講了一大篇,占篇幅啊,為什麼不放到附錄里
最後,這本書,如果你看的是上下冊,精華主要都在上冊,下冊流於API手冊的水平了,而且關於API有更好的書的個人覺得這本書不好看,很多時候只說語法以及這些語法的效果,卻沒說清楚為什麼要有這些語法以及什麼情況下要用這些語法。所以不容易記住。個人還是推薦看《The C++ Programming Language》
另外,再好的書,光看不寫也是肯定記不住的。The C++ Programming Languange裡面有些習題還是不錯的。或者自己寫一些小程序玩玩也好。
Thinking in C++ ?不用讀。
邊做邊讀會不一樣。
不過真心不推薦用C++,高不成低不就的一門語言,連微軟都想拋棄他。蘋果則乾脆自己又搞了個object C。
當然,用來學習面向對象編程還是可以的。
做的多了,看起書來才有意義。
看到跟C++有關的問題就想插插嘴,畢竟我曾經對它狂熱過。可能不是對題主問題的直接回答,我就以自己作為一個學習者和閱讀者的角度談談自己的感受。摺疊吧。
人的感覺向來是很奇怪的,對人,對事。我不知道怎麼就有種錯覺,C++就是好大上的,對Java就有種莫名的偏見。因為性能問題?不得而知。那時很想系統的學習C++,在網上看了很多學習指導教程,給自己列了一個書單。c++primer,c++沉思錄,effective c++……基本上那些跟C++有關的經典書我都買了。那時我的想法是一定要吃透這門語言。感覺C++的學習曲線真的很曲折。花了蠻多時間,但是並沒有達到預想的掌握程度。去年實習還用C++做過開發,現在發現自己又忘了很多特性……
以前心裡很掙扎過,是不是天資不夠,怎麼學的慢忘的快?現在我坦然了,因為我並不像以前那樣死摳一門語言了。因為很多項目我都繞不過Java,我也開始用他了,也不再有偏見了。
現在回想當然的學習歷程,發現兩個大問題。一是實踐太少。C++的語言特性真的很繁雜,你不可能去背誦一門編程語言。最好的方法就是使用,可惜可以接觸到的實際項目太少。自己又沒有做些練手的。編程真的必須在做中學。二是關於看書的問題了。當時列了那麼個書單,我只是想著我應該要看這些,但是我並不是很清楚我應該是要從這些書分別獲得什麼。所以很被動,很盲目。老實說,C++primer我看的很掙扎,太厚,太難啃,真有點像巨大號的語法手冊。但是不可否認它是經典著作。我對此懷疑過,也聽一些牛人說這書不好。
現在我對於書好不好的認識是,如果它對大多數人產生了價值,就是好書。但不代表對任何人都是好書,書對一個人而言,好不好,是看你能從中獲取多少價值。我思考過C++primer的問題。我覺得要理解它為什麼是一本經典著作,還要了解它的背景。因為那時很多人都是用C++寫C風格的代碼(這個問題很多學生也存在。也正是因為這個原因譚浩強的書被噴吧。),這本書就是教會我們寫」真正的C++代碼」。
說上面一個例子,我就是想說,我們必須先認識到一本書本身的價值所在,然後了解自己需要獲取什麼。接著就是在對應的書中淘寶了,而不是從頭到尾啃書了。
一本書的價值在哪呢?最直接的就是看前言了。看書一定要看前言,它會告訴你這本書要告訴你什麼,你要怎麼看。
隨手寫的,邏輯有點亂,摺疊吧。
好像我是跑的有點偏,再回來點個題。
要怎麼看編程思想,就要看樓主想要了解什麼知識了。你為什麼想到看這本書?這本書主要講什麼?經典在哪裡?
記得認識的一位荷蘭飛利浦回來的大牛曾經說過,thinking in C++是把他帶入較高編程境界的一本書。推薦看英文原版的第一卷,然後結合幾個一定體量的項目,有時間就回頭再讀再理解,收穫一定會很大。
自己動手多練比看書強,教材比較僵化,多看大神的代碼,好的用法不練的話會忘。
先知道它有這玩意,等你用到這些有關的東西的時候再去找有關的材料,就不抽象了。
當年我的計算機老師給我們推薦這本書,我以弄清楚這本書為目標,搞得我現在技術搓死了。
如果你只是想學面向對象,還是看Thinking in Java吧。
prime入門不錯,沉思錄可以跟著去思考。
think好像名號大是因為java.
學oo別用c++。看看python簡單易學。然後看看c再看看c++吧。
模版的東西用的不多,看erlang可以看一種思路,像當年上數學課
推薦閱讀:
※本人從事前端,想學習一門後端語言,求大神推薦?
※學習經濟學需要熟悉哪些編程語言?
※哪些 Python 庫讓你相見恨晚?
※哪些語言特性,有助於開發大型系統?
※微軟當年的 J++ 究竟是什麼?為什麼 Sun 要告它?