♥ 學習筆記Learning 程式語言 Coding

[C++程式設計] 《C++ Primer》- 從目錄開始學習的讀書方法

為了克服對程式的障礙,一本、不、幾本好書是少不了的,從知道→了解→練習→大量的練習,更是不可或缺的過程,寫程式卡住了,我就會回到書裡,重新面對那些最基本的觀念,讓自己能夠找到一點出路,在閱讀一本書的時候,或者說,在精讀一本書的時候,我會簡略的看過序,了解作者寫書的動機;接著看過導讀與前言,然後停下來,在目錄那幾頁至少花了幾天的時間,了解清楚整個書本的知識架構,然後去猜測或推測每一個章節「必要」的學習重點,確定我能夠大略掌握一本書的架構以後,我才會開始細細閱讀,並在細讀的過程中,將裡頭內容歸納在我腦海中的目錄裡面。

以這本書為例,總共分為五大篇,加上附錄。

第一篇:C++概觀 (我猜:應該只是大略解釋C++是什麼樣的東西?)
第二篇:C++語言基本要素 (我猜:可能是解釋一個能夠運作C++程式需要什麼東西,不用很高超XD)
第三篇:以程序為基礎的程式設計 (這裡,我的內心就會產生疑惑,什麼是程序的定義?)
第四篇:以物件為基礎的程式設計 (看到這,不免就會思考,物件與程序的差別是什麼?)
第五篇:物件導向程式設計 (所謂的物件導向,又與程序基礎和物件基礎有什麼關係呢?)
附錄:泛形演算法 (稍微瞄了一下,應該是可以直接使用的一些演算法功能)

我跟你們一樣是C++的初學者,我對C++有許多似是而非的觀念,更對物件導向有許多奇怪的理解。
唯一值得慶幸的是,我確定自己有足夠的自我學習能力,重新開始,把一些舊有的模糊錯誤觀念捨棄掉,並重新建立起新的觀念,老實說,也許我應該後悔在大學期間學習程式語言的過程中,不夠全然的用心,導致我必須重新打基礎,但是或許有許多人跟我是一樣的,而我們可以一起成長。

然後針對這五大篇,我們在往下一層看。
在往下一層級看之前,先確保當我突然很白目的問你說,請問這本書裡面寫了什麼的時候,你可以很快的回答「喔!這本書分為五大部分,第一部分簡要的介紹C++、第二部分講一些基本的要素、第三部分與第四部分 分別探討程序為基礎和物件為基礎的程式設計,最後第五部份則是融合前面的重要觀念,具體的解釋物件導向程式設計。」

噓…就是這招念書方法,讓我可以花三週下班以後的時間去圖書館念書,而且不熬夜,然後還考上研究所的。要注意的是,程式語言不是知識而已,他是技能與工具,因此除了了解以外,還需要大量的應用與練習。

往目錄的下一層來看。^_____________^”
第一篇:
第1章:起步走 
(所以是說開始寫C++必要的東西嗎?)
    第2章:縱覽C++  (聽起來像是整個C++的概述…)

Fine~我們知道原來第一篇只有兩章,重點是這兩章的名字還真不知道她「真正」在講什麼。
因此,在往下一層偷看一點點。@@” (並且腦袋要記得,第一篇的目的是讓你對C++有個概念)

噗噗 這本書正好在前言當中,提供了一篇《本書架構》去描述每個章節的架構,但是,在沒有提供書本架構說明的書籍,同樣也可以透過目錄的每一行去了解一本書的完整架構,可以幫助學習上的記憶與理解。

往更下一層呢?
第一篇:
第1章:
1.1 問題的解決
  (程式的存在,就是為了解決問題。)  雖然我老是覺得不太會寫程式就是我的一大問題:P
        1.2 C++程式
1.3 前置處理器指令
1.4 關於註解
1.5 初嚐輸入與輸出
第2章:
2.1 語言內建的陣列型別
2.2 動態記憶體配置與指標
2.3 以物件為基礎的設計
2.4 物件導向設計
2.5 泛型設計
2.6 以「異常處理」為基礎的設計
2.7 以任何其他名稱對Array命名
2.8 標準Array其實就是Vector
不要被目錄騙到了,其實這部分的篇幅非常的小,而第一篇的重點,感覺比較像是「整本書的縮小版」,對許多觀念還模糊不清的新手,可能會在閱讀這篇時產生非常多的疑惑,好吧!至少我就是這樣。

所以,我們大概看完第一章了解C++這個東西。Why?因為要解決問題!What?由一堆述句組成的函式,在組成主程式。How?應用已知的功能、撰寫幫助記憶與溝通的註解、讓要處理的資料能夠輸入處理然後輸出。

其中,1.2稍微簡要的解釋了函式,舉例說明:

   1:  int AddNumber (int a, int b) {
   2:      int c;
   3:      c = a+b;
   4:      return c;
   5:  }

函式包含四部分,回返值型別(return type)、函式名稱、參數列(paramter list)、函式本體(function body)。
分別是我們上例的,回返值型別(return type) = int 、函式名稱 = AddNumber、參數列(paramter list) = (int a, int b) 、而大括號{…}之中的就是函式本體(function body)

事實上,我們需要一個main()來執行動作。

   1:  int main(){
   2:  
   3:      cout << AddNumber(10,20) << endl;
   4:  
   5:      return 0;
   6:      }//end main

 

這樣簡單的程式會列印出30的字樣,1.2解釋完函式(function),之後第2章便開始解釋類別(class)。

等等,拉回我們整體的重點,我們終於可以大約的了解每一篇的重點。
第二篇:C++語言基本要素 (原來是要讓我們了解每種基本功能的特性,藉以讓未來擴充。)
第三篇:以程序為基礎的程式設計 (所謂的程序,指的是函式(funciton)各種應用的規則。)
第四篇:以物件為基礎的程式設計 (所謂的物件,指的是類別(class)各種應用的規則。)
第五篇:物件導向程式設計  (這個概念我還有點模糊不清啊啊啊~~~T口T” 什麼繼承東東的~)

於是,Google大哥介紹了我兩個網址,讓我除了書本以外的說明,能對「物件導向」這個神秘的字眼,有多一點的了解,分別是 維基大姊路人大哥的網誌,為什麼往外尋求是因為書裡的解釋我一時間無法體會。

http://zh.wikipedia.org/wiki/物件導向程式設計 (那個狗的例子還算不錯XDDD)
http://m955.com/wp/archives/163 (那個正妹的例子也不錯~)

當然,我們念書可以一股腦的拿到書,就從第一頁拼到最後一頁。XDrz
不過,其實閱讀「目錄」本身就是一種「預習」,當你的內在對目錄陌生的字眼感到疑惑時,會驅使你去從書裡找到正確的答案,而獲得解答的過程會比單純的讀到這行更有印象。

讀完了不同角度的說明,稍微思考一下,畢竟我們不是天才,沒辦法一讀就懂T口T”,但幸好我們還有思考與理解的能力,慢慢來,沒有關係。

可以確定的是,讀完第一篇,你有能力寫出小程式,讀完第二篇,你有能力寫出可支援絕大部分功能的程式,只是也許還不夠簡潔,甚至在面對大型程式時,會顯得繁雜並不容易維護;到了第三篇,當你對函式有更多一點的理解以後,你懂得將主程式裡頭許多重複使用到的功能分工出去並重複使用;而到了第四篇,除了預設的一些型別以外,你應該要有能力自創各式各樣的型別,來符合自己的需求來跟那些函式互動。

至於第五篇是我沒有學的很懂的繼承(T口T”)O,為了避免誤導,等到我更懂了一點以後再來談。
在細讀過程中,不要忘記你是為了什麼而學習這一章的,這會幫助你比較容易掌握整個架構。

本篇的學習方法重點仍然可以用到不同的科目上。
例如,我當初在念邏輯設計時,好好的讀完目錄,只掌握兩個大重點,就是Sequential Logic與Combinational Logic這兩個東西的Why、What、When、Where、How,4W1H不只可以用在文法,也可以用在學習的。


一起加油吧!^^

About the author

蕾咪

蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:) 合作邀稿請聯繫:ramihaha@gmail.com

Leave a Comment