2006年12月26日 星期二

How Do I Learn Programming(C/C++ as example)

最近為了幫助學弟們學習C++,我整理了一些東西在這
現在已經要2007了,雖然說書還是要K,不過網路可以變成一種方便補助學習
根據C++的學習路徑,而分類幾個主題來列出相關網路資源

學習程式設計


必要條件:

  • 自我學習

  • 記住正確的詞彙

  • 善用搜尋

  • 分享及討論

  • 學好英文


學習程式設計大概會遵照這個流程,從12開始之後因為所有的語言都一樣,所以只要學一次。接著你就會從1~11學習各種不同的語言:



  1. 資料型態(Data Type):該語言能宣告什麼樣的變數於程式中使用?如int, float。Script語言如PHP通常只會學到純量(var),array,hash的用法。

  2. 基本輸出入(Standard I/O):如何從鍵盤讀取?如何從螢幕輸出?STDIO的觀念。

  3. 流程/迴圈控制(Branch/Loop Control):if...else/switch...case, for/while
    如果有特殊的語法(syntax)也通常在此會學到

  4. 函式(Function):function要怎樣宣告?呼叫?傳遞參數?

  5. 特殊用法:如C++通常會學習到指標,Template。而PHP通常會學習到HTML或Javascript

  6. 函式庫(Library):C/C++你應該學習Standard Template Library(STL)

  7. 到這一階段你已經可以撰寫基本的演算法,如此你便能夠進行結構化程式設計(Structural Programming)

  8. 類別(Class):學習宣告類別並初始化物件,和物件的存取子(accessor)

  9. 例外處理(Exception handling):程式一定會出錯,可是如何去拯救?

  10. 視窗程式設計:利用視窗元件重新撰寫以前的程式,並學習IDE的使用

  11. 到這一階段你已經可以撰寫物件程式,如此你便能夠進行以物件為基礎的程式設計(Object-based Programming)

  12. 繼承(Inheritance):繼承的觀念,以及如何利用繼承來設計及減少你的程式碼

  13. 多型(Polymorphism):如何利用多型在多個類別/物件之間讓他們互動,也會提到一點設計樣式

  14. 到這一階段你已經可以撰寫小型的應用程式,學校作業大多都沒問題,如此你便能進行物件導向程式設計(Object Oriented Programming)。到這裡你應該已經有可以打工的水準。

  15. 資料庫系統(Database):你會學習如何使用資料庫儲存你的應用程式資料

  16. 軟體工程(Software Enginnering):軟體設計的巨觀,從大的流程瞭解一套「軟體系統」是如何完成的,而程式的實做只是其一小部分。在此你會學習到UML等軟體設計中相關的文字,圖形,及術語。你也會學到傳統的Waterfall Model,有這些主題:


    • 需求分析(Requirement Analysis):如何瞭解一個軟體他究竟要完成什麼,並確實地的記錄它

    • 軟體架構(Software Architecture):在進行實做之前,先要進行設計

    • 專案管理(Project Management):一套軟體要如期完成要有很好的時程控管,也會學到利用工具來管理你的軟體狀態(SCM)。

    • 軟體測試及品質:這裡你會學到利用單元測試等方法來保障你的軟體品質


  17. 設計樣式(Design Pattern):軟體設計的微觀,是前人將經常出現的軟體實做方式集合起來成為一個個「樣式」,讓你知道如何利用OOP來有規劃地撰寫你的程式。

  18. 領域相關(Domain Specific):有許多不同的領域需要不同的知識,才能撰寫出不同的程式,你想要走哪個方向?目前熱門的有,


    • OpenSource(開放原碼,需要瞭解社群精神,也需要熟悉Linux,C++)

    • Web(要熟悉HTML,CSS,JS...以及多種Script語言)

    • Microsoft(熟悉撰寫.Net並瞭解微軟產品架構及商業模式)

    • 韌體/硬體相關(熟悉C及x86組合語言)

    • 學術研究/升學(通常開放原碼的領域都會接觸,Java是主流。多練習ACM題目也有幫助)


  19. 至此你可以有能力開發一套完整的軟體,如果你累積了許多程式實做經驗,畢業後就可以去找該領域的軟體工程師職位了。


幾個你總是得思考的問題:

  • 我在哪裡?

  • 我想要往哪去?


C/C++語言核心


什麼是C/C++?

C++是Bjarne Stroustrup於1983年於貝爾實驗室發明的 ,雖然是高階語言,確有低階語言的特性,所以也有人稱作他是中階語言。(參考C++)

書籍

http://caterpillar.onlyfun.net/Gossip/CppGossip/CppGossip.html

http://squall.cs.ntou.edu.tw/cpp/index.html

http://www.books.com.tw/exep/prod/booksfile.php?item=0010178918

http://www.books.com.tw/exep/prod/booksfile.php?item=0010226566
http://www.books.com.tw/exep/prod/booksfile.php?item=0010264537

http://www.books.com.tw/exep/prod/booksfile.php?item=0010264536
參考

http://www.cplusplus.com/

http://www.cppreference.com/

http://www.msoe.edu/eecs/ce/courseinfo/stl/index.htm

物件導向程式設計(OOP)


什麼是Object Oriented Programming?

物件導向的觀念約在1960年發明,大概在1990年代成為主流。目的是以系統設計的角度或是真實情境來對應到程式設計上,幫助人去思考及撰寫。相關主題是UML。

http://www.books.com.tw/exep/prod/booksfile.php?item=0010189568

http://www.books.com.tw/exep/prod/booksfile.php?item=0010331221

視窗程式設計


目前視窗程式的作法有三種:

  • 使用原生或衍生視窗函示庫撰寫。MS Windows上是Win32API, MFC。Linux上有Xlib, Qt, Gtk+。

  • 使用Java或是.Net撰寫,這些是類似VM的作法(跨平台)

  • 使用連結至tk的函示庫撰寫:PHP-Gtk,Perl-tk等,很多script語言都有支援(部分跨平台)


Java Swing:

http://www.oreilly.com.tw/product_java.php?id=a099

.Net(C#):

http://msdn.microsoft.com/library/cht/

2 則留言 :

  1. 謝謝,寫的好詳細唷!!

    回覆刪除
  2. 虽然你写的很清楚明了,但是学下来还是要花很大时间跟精力的.

    回覆刪除