來到最後一天,我們已經了解了很多程式的相關概念,因此今天想跟大家討論的是在學習了基礎概念後可以考慮的學習方向。在開始之前,先讓我們來簡單的回顧一下本系列中介紹的程式概念吧。
在第一週中,我們了解了程式中最基本的構成部分,包括有程式中使用的資料與變數,和作為程式指令執行的運算式。在這個階段中,我們的目的是簡單了解一個程式可以做什麼事和一些基本的用語。
在這個階段中,我們開始接觸程式中經常被使用的架構 (陳述式、陣列等),並了解這些這些架構背後的目的與概念。在這個階段的最後,我們也可以透過函式來組合不同的陳述式來編寫出新的程式架構。當這個階段結束後,我們已經有足夠的知識可以嘗試使用程式來解決一部分問題。
這個部分是上一個階段的小補充,如果我們只是想要使用程式來解決問題,它們並不是必須要知道的知識。不過,這些概念可以讓我們在編程的時候多思考一些,也讓我們對以後的發展,例如與他人的合作跟學習進階的程式概念,可以有一些相關的想法與認知。
這個部分是有關物件導向的介紹,透過物件導向輔助我們去組合變數與函式,我們可以更有系統地解決較複雜的問題。同時,物件導向也是讓我們可以邁向更進階的程式概念的重要基礎。當這個階段結束後,我們已經有足夠的知識可以嘗試使用程式來解決大部分的問題。
在了解了程式中主要的基礎概念後,在這最後的部分中,挑選了兩個筆者比較常用且偏概念性的程式功能作為本系列的額外內容來進行介紹。同時,它們的概念也介紹了一些我們在實際編程時會遇到的問題及它們的解決思維。
以上是大部分程式語言都會需要學習的基礎概念,因此當我們把上述的內容都了解過後,相信也到了大部分的新手所遇到的最具疑慮的時間點:既然現在我們已經學會了足夠的知識可以使用程式來解決大部分的問題了,那我們還需要學習更多嗎?下一步要學習的又是什麼呢?
對於第一個問題,我們必須要了解到一個事實,那就是做得到跟做得好是完全不一樣的。在學會了一個程式語言的基本語法及操作跟它的基礎概念後,我們便跨越了做得到的基本門檻,甚至已經可以到業界開始我們的第一份工作了。可是,只靠基礎概念來處理問題的話,我們不一定能做得好,那是什麼意思呢?舉例來說,今天我們要開發一個手機的應用程式,在學會基本語法後,我們便具備了把它開發出來的能力,可是別人開發的版本卻比我們的版本的運行速度更快、使用的記憶體也更少,而這些差別便是來自於有沒有進階的程式概念的想法與知識。
那我們下一步要學習的是什麼呢? 這個問題我認為可以從幾個方向發展:
1. 程式功能
在本系列中,我們省略了很多程式的功能沒有介紹,例如網路連線 (Networking)、檔案與資料流 (File IO) 等,它們都是一些為了達成某種目的或解決某些問題而設計的功能。每一種程式語言所提供的功能都有所不同,大家通常會在學習程式語言時便會在教學了解到大部分的功能。不過有部分的進階功能,例如 C# 的 LINQ 或 Java 的 Lambda 運算式,則可能會需要大家去另外查詢後才會知道,這些功能通常都是跟該程式語言的一些核心想法或特質有關。因此,大家在使用程式語言時可以多查詢及學習別人的做法,來更深入地了解使用的程式語言。
2. 資料架構 Data Structure
資料架構是一些在特定的狀況下用來處理大量資料的方式,學習它們後,我們可以以更快的速度或更少的記憶體來處理大量的資料。
3. 演算法 Algorithm
演算法是一些解決問題的思維方式,本系列中的 [DAY 19] 分治法:學會把問題拆開 便是其中一個例子。學習它們後,我們除了學會在特定的狀況下可以更快的解決問題的方法外,更重要的是,在學習演算法的過程中我們可以學到很多解決問題時可能考慮的要素與方向。
4. 設計模式 Design Pattern
設計模式可以說是程式架構的模版,它介紹了一些我們使用物件導向來設計系統去解決問題時的一些解決方案。學習它們後,我們的程式會變得更有系統,也會更容易進行後續的維護與更新。