Re: [問題] c程式學習步驟

作者: Feis (永遠睡不著 @@)   2015-05-15 18:56:18
之前從事了 C/C++ 相關基礎課程的教學大概有五六年,
接觸到大部分都是有心想學但是非本科系的學生。
如果你只是想學一個程式語言,我覺得 C/C++ 不是個好選擇。
如果你不知道為什麼想徹底的學會 C/C++,建議的曲線大概是:
[C 語言]
* 計算機概論
- 基礎知識, 主要是對於電腦結構運作抽象化、資料數位化以及運算有基礎認識
- 通常會帶一點編譯器和作業系統的觀念
* C 語言程式基礎
- 學會自己看懂標準函式庫的文件並可自由應用為目標
* C 語言程式進階
- 這階段就是學習怎麼學會使用第三方函式庫, 例如 SDL, OpenGL, OpenCV, GTK+
之類, 應該牽涉到比較進階的概念跟使用慣例, 例如 C 風格封裝、函式指標與位
元運算
* 演算法和資料結構以 C 語言實作
- 我覺得演算法不太應該跟資料結構分開學
- 語言方面主要是加強遞迴使用、指標和動態記憶體配置的概念
[C++ 語言]
* 計算機概論
- 所需要的基礎可以比 C 語言再少一點,因為有更強大的標準庫。
* C++ 語言中與 C 較接近的部分
- 雖然我相信很多人會覺得應該直接學 C++ 風格的設計,
但是教學實務上我還是覺得有很大的困難。
同時我也信奉 C 風格設計是 C++ 使用上的一種可能,
要透徹了解 C++ 在 "目前" 我覺得了解 C 跟 C++ 的差異還是有必要。
* 基於物件的 C++ 程式設計
- 主要學 C++ 風格封裝。
* C++ 與物件導向
- 主要學物件導向的語法,建議是實作某些大型系統,例如 GUI。
* 設計模式與 C++ 程式設計
- 主要學物件導向在實務系統上的應用
* C++ 泛型程式設計
- 用 C++ 實作資料結構 (泛型容器) 跟泛型演算法
- 之前的教學經驗就是直接自己實作 STL
* 其他學不完的東西
- 例如例外之類的,但是實務上重要性目前還是不夠高,這類的東西在
之後的 C++ 可能又會有些改動,因此重要性就往後一點。
作者: johnpage (johnpage)   2015-05-15 23:31:00
寫程式是需要毅力與耐心
作者: Bencrie   2015-05-16 15:26:00
OpenGL 拿來練 C ... 好像有點怪吧 XD
作者: Feis (永遠睡不著 @@)   2015-05-16 15:40:00
怎麼說? 我覺得 OpenGL 是蠻標準的 C 風格函式庫設計神秘的全域函數, callback, 霧一般的記憶體配置, 猜不透的堆疊實作. 各種 MACRO真的通透的話, 以後用其他函式庫應該都不會怕 xD
作者: EdisonX (卡卡獸)   2015-05-16 22:31:00
!! @Feis , 言下之意 , 您是否認為 global variable 是種C++ 使用 C 的風格之一?
作者: Bencrie   2015-05-16 23:44:00
OpenGL 沒有 callback,glut 不能算
作者: Feis (永遠睡不著 @@)   2015-05-16 23:44:00
EdisonX: 有點難回答. 這問題是同等於 C++ 用 globalvariable 是否萬惡嗎 ?Bencrie: 抱歉. 也許我該嚴格定義他也許我們應該先定義好甚麼是 OpenGL XD
作者: Bencrie   2015-05-16 23:53:00
我發現我好像會錯意 ... 以為是要拿他當 API 設計參考
作者: Feis (永遠睡不著 @@)   2015-05-16 23:54:00
Bencrie: 我不想再學一個像 OpenGL 家族的東西了 Orz..
作者: Bencrie   2015-05-16 23:55:00
OpenAL 跟 libdevil XD
作者: Feis (永遠睡不著 @@)   2015-05-16 23:58:00
感謝. 我會記得離他們遠點的 (握拳)
作者: Bencrie   2015-05-17 00:01:00
這兩個其實沒那麼複雜,只是寫起來很像(命各種名也是各種命名
作者: Feis (永遠睡不著 @@)   2015-05-17 00:04:00
樓上這是個 1A3B 阿.
作者: Killercat (殺人貓™)   2015-05-18 14:02:00
OpenGL跟DX都是同一個設計風格啦... XD真的要說完全C++風格的 只有在wrap一層 比方說Ogre但是事實是這就是紅不起來...
作者: gary841208   2015-05-18 17:53:00
推 演算法跟資料結構是一體的 不該分開學

Links booklink

Contact Us: admin [ a t ] ucptt.com