許多人都想學程式,這是一個時代趨勢,但該從哪裡學?第一個目標訂在哪裡?一般人並不是太有概念。
這樣的人有許多不同的背景,也有不同的動機,我比較常遇到的是以下幾種
- 大學非資工系學生,想開發新技能
- 社會新鮮人,期待未來可以轉職
- 心中有一個Project,想要靠寫程式來達成的人。譬如很多人就想打造自己的股票分析程式
- 純粹探索興趣
有些人已經有明確的目標,更多人是探索性質的,沒有非達到不可的目標。若有極明確目標的,建議就直接朝著目標去,譬如網路上就有專教打造股票分析程式的課程。如果是探索的人,大致上是想搞清楚以下幾個問題
- 我適合寫程式嗎?
- 我要投入多少時間成本才有所成?
- 我該學哪種程式好?網頁、App、遊戲?
- 寫程式的出路好嗎?
先回答第4個問題,寫程式的出路很好,以台灣來說,普遍認為電、資、醫、牙是最好的出路,工作機會跟待遇都相對高。如果寫程式的出路算不好的話,台灣八成以上的工作都算不好了。第2跟第3個問題跟第1個高度相關,所以我們來看第1題就可以了。
學APCS是一個不錯的進入點,拿來探索自己適不適合寫程式
先定義一下"學APCS"是什麼意思,"寫程式"又是什麼意思。
寫程式是一個廣泛的領域,寫一個網頁是寫程式、寫一個App是寫程式、寫一個商業後台是寫程式、寫一個遊戲是寫程式...有太多不同應用領域,而大部分的程式設計師都只專精少數應用領域。
但寫程式有共通點,就是需要高度的邏輯力,並了解電腦運作的概念。因此先學習程式共通邏輯,後續再鑽研感興趣的應用領域是合理的,大部分大學資工系也是這樣安排課程。
學APCS其實就是學習用程式解數學,也就是學習程式的共通邏輯。這樣的數學不是三角函數、線性代數那種純數學,而是偏應用性質。譬如給定地圖上的一些座標點,要求走過所有點的最短路徑;譬如給定一場棒球比賽的攻守紀錄,要求算出得分等等。這樣的題目型態,在許多的刷題網站都有,國內較有名如ZeroJudge。許多大公司如Google、Facebook等,招募工程師時會考程式,應徵者也會先練刷題,國外較著名的刷題網站如LeetCode。而各種的程式設計比賽、程式檢定,多是比用程式解數學的題型,而非比誰寫的網頁比較好看、誰寫的遊戲比較好玩。
用程式解數學的形式,單獨存在的作用不大,必須要跟領域應用譬如網站、App結合,才能處理真實生活的需求,但它是所有領域應用的基礎,不管是業界或學界,也普遍認為,如果用程式解數學都做不好的話,也寫不出像樣的實用程式。
以APCS的難度,至少要能考到實作三級,才有往程式領域發展的可能性。實作三級大約是,可以寫出比較複雜的實作、有足夠嚴謹的邏輯力、但對於演算法尚未熟悉。到這樣的程度,就足夠往應用領域學習,譬如依興趣往網頁、遊戲、App等方向鑽研。
而,學多久達到實作三級,才叫做有天份呢? 總不能學個十年吧! 我的觀察是,若每周花3hr,半年內達到實作三級算是合適;如果達不到,後續的程式路會走得很辛苦,另外探索其他方向或許會更適合。