推介:| 網頁寄存 | 網頁設計 | 開網店 | 電郵申請 | Wordpress Hosting | 外賣平台 | 英語課程推薦 | 風水屋 | 房間風水懷孕 | Timway Testimonial | Wedding Planner | Wedding MC |

發新話題
打印

[檔案] 《轉載》初學者學習C++的50條忠告 (GQYSimon )

《轉載》初學者學習C++的50條忠告 (GQYSimon )

1.把C++當成一門新的語言學習(和C沒啥關系﹗真的。)

2.看《Thinking In C++》,不要看《C++變成死相》

3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因為他們很難而我們自己是初學者所以就不看

4.不要被VC、BCB、BC、MC、TC等詞匯所迷惑──他們都是集成開發環境,而我們要學的是一門語言

5.不要放過任何一個看上去很簡洙的小編程問題──他們往往並不那么簡洙,或者可以引伸出很多知識點

6.會用Visual C++,並不說明你會C++

7.學class並不難,template、STL、generic programming也不過如此──難的是長期堅持實踐和不遺余力的博覽群書

8.如果不是天才的話,想學編程就不要想玩游戲──你以為你做到了,其實你的C++水平並沒有和你通關的能力一起變高──其實可以時刻記住︰學C++是為了編游戲的

9.看Visual C++的書,是學不了C++語言的

10.浮躁的人容易說︰XX語言不行了,應該學YY──是你自己不行了吧﹗?

11.浮躁的人容易問︰我到底該學什么──別問,學就對了

12.浮躁的人容易問︰XX有錢途嗎──建议你去搶銀行

13.浮躁的人容易說︰我要中文版﹗我英文不行﹗──不行?學呀﹗

14.浮躁的人容易問︰XX和YY哪個好──告訴你吧,都好──只要你學就行

15.浮躁的人分兩种︰a)只觀望而不學的人 b)只學而不堅持的人

16.把時髦的技朮掛在嘴邊,還不如把過時的技朮記在心里

17.C++不僅僅是支持面向對象的程序設計語言

18.學習編程最好的方法之一就是閱讀源代碼

19.在任何時刻都不要認為自己手中的書已經足夠了

20.請閱讀《The Standard C++ Bible》(中文版︰標準C++寶典),掌握C++標準

21.看得懂的書,請仔細看看不懂的書,請硬著頭皮看

22.別指望看第一遍書就能記住和掌握什么──請看第二遍、第三遍

23.請看《Effective C++》和《More Effective C++》以及《Exceptional C++》

24.不要停留在集成開發環境的搖籃上,要學會控制集成開發環境,還要學會用命令行方式處理程序

25.和別人一起討論有意義的C++知識點,而不是爭吵XX行不行或者YY与ZZ哪個好

26.請看《程序設計實踐》,並嚴格的按照其要求去做

27.不要因為C和C++中有一些語法和關鍵字看上去相同,就認為它們的意義和作用完全一樣

28.C++絕不是所謂的C的“擴充”──如果C++一開始就起名叫Z語言,你一定不會把C和Z語言聯系得那么緊密

29.請不要認為學過XX語言再改學C++會有什么問題──你只不過又在學一門全新的語言而已

30.讀完了《Inside The C++ Object Model》以后再来认定自己是不是已經學會了C++

31.學習編程的秘訣是︰編程,編程,再編程

32.請留意下列書籍︰《C++面向對象高效編程(C++ Effective Object-Oriented Software Construction)》《面向對象軟件構造(Object-Oriented Software Construction)》《設計模式(Design Patterns)》《The Art of Computer Programming》

33.記住︰面向對象技朮不只是C++專有的

34.請把書上的程序例子親手輸入到電腦上實踐,即使配套光盤中有源代碼

35.把在書中看到的有意義的例子擴充

36.請重視C++中的异常處理技朮,並將其切實的運用到自己的程序中

37.經常回顧自己以前寫過的程序,並嘗試重寫,把自己學到的新知識運用進去

38.不要漏掉書中任何一個練習題──請全部葭完並記錄下解題思路

39.C++語言和C++的集成開發環境要同時學習和掌握

40.既然決定了學C++,就請堅持學下去,因為學習程序設計語言的目的是掌握程序設計技朮,而程序設計技朮是跨語言的

41.就讓C++語言的各种平台和開發環境去激烈的競爭吧,我們要以學習C++語言本身為主

42.當你寫C++程序寫到一半卻發現自己用的方法很拙劣時,請不要馬上停手;請盡快將余下的部分粗略的完成以保証這個設計的完整性,然后分析自己的錯誤並重新設計和編寫(參見43)

43.別心急,設計C++的class确實不容易;自己程序中的class和自己的class設計水平是在不斷的編程實踐中完善和發展的

44.決不要因為程序“很小”就不遵循某些你不熟練的規則──好習慣是培養出來的,而不是一次記住的

45.每學到一個C++難點的時候,嘗試著對別人講解這個知識點並讓他理解──你能講清楚才說明你真的理解了

46.記錄下在和別人交流時發現的自己忽視或不理解的知識點

47.請不斷的對自己寫的程序提出更高的要求,哪怕你的程序版本號會變成Version 100.XX

48.保存好你寫過的所有的程序──那是你最好的積累之一

49.請不要做浮躁的人

50.請熱愛C++!


相關搜索目錄: 電腦 銀行 語言

TOP

困難度之一

“C++ 是個難學易用的語言”,這句話相信很多人都心有戚戚。C++的學習難度,一在于語言本身太多的“幕”,另一個就在于 "paradigm shift" (思考模式的移轉)。

傳統語言如 C, Pascal, Basic, Fortran...,除了模樣看起來稍有不同,基本上都是函式 call 來 call 去,大同小异,很容易掌握。你想做的動作,在 code 中都看得一清二楚。你所看不到的,也不過就是編譯器為你的函式加上用以處理堆疊的一小段碼(prologue 和 epilogue),這一小段碼基本上做的是 housekeeping 工作,你沒看到也沒有關系,并不影響你對程式邏輯的思考。

C++ 不一樣,C++ 有太多和程式邏輯息息相關的動作是編譯器為我們加上去的。換句話說 C++ 編譯器為我們“加碼”。如果不識清這一節,學習C++ 有如霧里看花,霧非霧,花非花。

編譯器為我們的 C++ 程式加了什么碼呢?很多﹗物件誕生時 ctor 會被喚起,物件死亡時 dtor 會被喚起,這都是加碼的結果。ctor 中設定vtpr 和 vtbl,這也是加碼的結果。new 單一物件時會產生 memory block cookie,new 物件陣列時會產生一個內部結構記錄著 object size 和 class ctor...,這也都是布幕后的工作。可以說,程式碼中看不到而卻必須完成的所有与程式邏輯有關的動作,統統都是 C++ 編譯器加碼后的結果。

當“繼承”發生,整個情況變得稍微复雜起來。“多重繼承”又更复雜一些,“虛擬繼承”又再更复雜一些。

這些布幕后的主題,統可歸類為所謂的 C++ object model(物件模型)。如果不知道這些底層机制,你就只能夠把 "make destructors virtual in base classes"或 "never treat arrays polymorphically"這類規則硬背下來,卻不明白它的道理。用一樣東西,卻不明白它的道理,林語堂如是說︰“不高明”。只知道 how,不知道 why。

困難度之二

C++ 的第二個學習難度在于 "paradigm shift"(思考模式的移轉)。別說自己設計classes 了,光使用別人的classes,就都是一种思考模式和行為模式的移轉。MFC(或 OWL 或 VCL)programmer 必然能夠領略并体會其中的意思。

使用所謂的 application framework(一种大型的、凝聚性強的、有著物件導向公共基礎建設的 class library),你的碼和 framework 之間究竟是怎樣的關系呢?framework 提供的一大堆可改寫的虛擬函式的意義与價值究竟在哪里呢?為什么 framework 所設計的种种美好性質以及各式各樣的演算法竟然可以施行于我們自己設計的 class types 身上呢?framework 被設計時,也并不知道我們的存在。這正是物件導向中的多型(polymorphism)的威力。

稍早所說的 C++ 物件模型,偏屬程式設計的低層面;這里所說的思考模式移轉,則是程式設計的高層面。能夠把新思維模式的威力發揮得最淋漓盡致的,當推物件導向的 polymorphism(多型)和 generalization(泛型)。如果你沒有使用這兩項特性,等于入 C++ 寶山卻空手而歸。

反覆磨煉,循環震蕩

想像 C++ 是一把用來解決程式問題的刀,要它堅軔,要它鋒利,就必須經過多次的回火,在高熱和驟冷之間──煉。

初學 C++ 語法(syntax)之后,你應該盡快嘗試体驗 polymorphism(大致而言也就是虛擬函式的運用)。等到對 OOP 的精神有了大局掌控的能力,但對 C++ 的許多小細節不甚清楚,就是回到C++ 物件模型 煉的時机。

成長,是在高階(polymorphism)和低階(object model)之間反覆震蕩,才能夠震蕩到更高的位階,而不是平平庸庸于中階(C++ syntax)的一灘死水。


相關搜索目錄: 模型 語言

TOP

睇嚟都有d用,吾該!

TOP

一篇有共鳴的文章

TOP

Thank for your advice

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

發新話題


重要聲明:本討論區是以即時上載留言的方式運作,本網站對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。本討論區有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿撰寫粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。


Copyright 1997- Xocat. All Right Reserved.