在確定學習哪種程式語言後,接下來總算要進入正式的學習了......(´・ω・`)吧?
按照慣例,在搜尋引擎裡輸入 "xxxx(語言) 教學" ,一樣跳出各種琳瑯滿目的選擇,首先前兩個一定是某些電腦補習班的廣告(不信去試),再來有YT教學影片、實體參考書、IT鐵人賽教學文、網路課程等等等等。如果你跟我一樣有選擇困難症,應該跟我一樣開始頭昏眼花、焦慮不已吧。・゚・(つд`゚)・゚・。
這個章節就稍微總結整理一下,身為程式小白,你會碰到的幾種學習資源,以及該如何妥善選擇才能有最大的學習成效吧(ゝ∀・)b!
(文章末尾也會推薦幾個優質的教學資源給大家~)
文件 (Document)
程式是一門充滿細節且極度繁瑣的知識領域,因此不論是最基本的程式語言、或者是進階的模組套件、應用程式,都有相應的文件提供開發者參考,包括語法、函數、參數、組態設定等等,是所有資源裡面資料最完整的。
既然是最完整的,那新手是不是應該從文件入手,以獲得最全面的知識學習呢?
答案是,千萬不要。
文件的腳色其實更像是「字典」,在你可能需要一些比較特殊的用法、或是細節的操作時,才會去翻閱的資源。即使是程式高手,也絕不是靠著死啃文件來進步的,而是在有需要的時候才去查詢。
就像在學習寫作文,沒有人是靠生啃一整本字典,把裡面所有的單字、例句死背,就能夠寫出流暢優美的文章;相對的,都是先從閱讀小短文開始,慢慢認識生字、練習造樣造句、理解段落設計,久而久之培養出一定的語感,再練習寫出順暢的文章。
而字典,就只是你在忘記某個字的寫法的時候,拿起來翻的工具書而已,絕對不是什麼學習資源。
參考書(實體/電子書)
身為一個書呆子(✺ω✺),講到「學習」,直覺想到的就是「讀書」,因此入門的第一個學習資源,就是到天瓏書局(專門賣電腦參考書的書店)買回來的一本磚頭書。
直接講結論:讀得很痛苦,整本嗑完後不明所以,完全沒有「啊~我學會了XXXX」 的感覺。
(詳情可參考
EP0.)
回頭檢視當初的過程,以及後來陸陸續續接觸到的其他參考書後,我認為可能是囿於文字與圖片的呈現方式,讓這些參考書的「腳色定位」非常不明。
以初學者來說,不論學哪個語言,做重要的都是「培養程式思維」,因此在學會基本語法,如變數宣告、迴圈、判斷式、函式後,其實最需要的是大量的練習,在過程中熟悉這些工具的運用,漸漸掌握「設計程式」的訣竅。
而市面上大部分的參考書,一樣都會有上述基本語法的教學,帶你認識程式運作的基礎;然而,再帶過這些內容後,很多參考書就開始教你「進階模組運用」,一個章節教一個模組,以及該模組的範例應用程式碼,直到最後一章。
上述並非表示模組不重要,但這樣的章節安排非常破碎,彼此之間沒有任何知識節點,而且在沒有專案概念的情況下,大部分的模組教學對於初學者來說根本「沒有使用情境」,簡單來說就是「學了也不知道幹嘛」( º﹃º )。
這樣的結果就是讓參考書的定位非常尷尬:前半部講語法的部分確實非常新手友善,讓你慢慢熟悉一個語言的語法規則,然而後半部又突然變得像介紹模組的「字典」,頂多比文件多一兩個示範的程式碼罷了。
(也不是不能理解這樣的章節設計,畢竟這樣寫書最快,找幾個模組、稍微補一些自己的程式碼就可以出書,不用花太多心力在設計章節架構上。)
除非你是已經有一定程度的 Coder,清楚知道程式架構與模組運用的概念,看參考書來按圖索驥,可能比較有幫助;反之,如果你是「完全的小白」,或是「稍微熟悉語法運用」的新手,都強烈勸退你想靠書籍來學程式的想法(๑•́ ₃ •̀๑)。
(註:這邊說明的情境是「給初學者的學習參考書」,並非只所有程式相關的參考書,如果往資料結構、演算法等更精深的領域學習的話,書籍仍是一個詳盡、優質的學習資源)
網路影片/教學課程
來到本章節的重點,也是我最推薦大家學習的方式ヽ(●´∀`●)ノ!
在我崎嶇的學習過程中,接觸各種不同媒介的學習資源後,我認為影片是最適合新手學習的資源選擇,理由如下:
- 有聲音配合畫面,比較不容易睡著(我一直看字會愛睏XD)
- 跟著教師 Live Coding 的畫面,可以逐步理解解題過程的邏輯,學習從無到有建構程式碼,建立程式思維;同時也可以觀察教師遇到 BUG 時,是如何透過排除法測試一步步問題、下關鍵字查詢答案等等技巧。
- 觀察教師的程式碼,參考教師的命名習慣、排版習慣、函式設計技巧、物件設計邏輯等等,來內化成自己的 Coding 哲學,學習如何提升程式可讀性與維護性。
- 專案導向的學習路徑:在初學者已經熟悉基本的程式語言運用後,下一步要挑戰的便是如何將程式碼從「單純解題」,晉升到「服務功能」的程度,也就是完成一個完整的專案(Project)。
依據你想精進的領域不同,專案的方向也會不同,以我自己的後端領域來說,初學者的專案大概就是先完成在雲端上啟動一個小網站的程度。
很多網路教學課程都會在教學內容中從無到有製作一個簡易的專案,這個部分也是我認為網路教學資源相對比書本豐富優質的一個原因:在建立專案的過程中,初學者可以從「需求」層面來出發,思考專案的建構邏輯,包含模組設計、程式碼優化、版本控制等等的概念。
如果你需要存取資料,則可使用 SQL 或 NoSQL 等資料庫來協助高效存取;
如果你需要登入功能,則可使用 Bcrypt 相關模組建立密碼驗證系統;
如果你需要快取功能,則可使用 Redis 或是 memcached 等應用程式;
如果你需要 AWS 相關服務,則可使用 AWS 提供的 SDK 模組進行串接......
從上述敘述可以看出,所有學習內容都是根據「需求」,來決定要學習使用什麼工具來解決,以及需要使用到多深的程度,而不是像參考書,將模組條列式的詳細攤開來介紹。
除了漸漸熟悉越來越多的應用與細節外,我覺得這樣的過程也有助於初學者建立「工程師思維」:程式碼的目的,就是為了要解決需求或問題。
遇到問題,尋找辦法,代入程式,解決問題,就是工程師的核心精神。
除了上述優點外,我也推薦大家盡量服用英文的教學資源,畢竟在程式世界,不管是教學資源還是交流論壇,大部分還是以英文作為溝通渠道,因此越讓自己習慣閱讀、理解英文,熟悉相關領域的關鍵字,在學習或是尋找問題的效率都會越高(゚3゚)~♪。
坊間補習班
拜託不要。
......
好啦,這樣講不免有些一竿子打翻一條船的嫌疑,但我自己的親身經驗是真的不划算,補習班套課的價格可以在 Udemy 上買好幾百堂優質課程,而且課程內容、品質也不一定比較好。
如果你是剛入坑的新手,絕對不建議你馬上就腦衝花錢報名補習班,起碼去 Udemy 上個幾堂課後,如果真的還是覺得沒有方向、想要有個完整的學習課程與助教協助,
「請多上網爬詢相關課程評價後」,再決定是否要報名。
(悲慘經驗一樣參考
EP0.)
結語:除了媒介外,你還應該注意的事情
走筆至此,無論你未來是要選擇書、教學影片、課程來學習程式,除了考慮上述提及的優缺點外,還有一個更重要的關鍵,那就是
用「日新月異」四個字來形容程式碼的更新速度完全不為過,去年的教學影片可能今年就有一些函式規則的變動,更別提更久以前的教學資源,與現今的版本一定差異更大(´_ゝ`)。
雖然在大多數情況下,短時間的版本差異不太會造成惡性 Bug ,但我個人還是建議對於這種程式實作教學,盡量挑選較新的、或是教師也持續更新的教學資源,不要選五年以前的課程(除非是概念解析、非實作的課程,比如解釋 API、MVC、CSRF 之類的短影片)。
(實際上我自己偏好三年以內的教學資源(ノ>ω<)ノ)
同時也要注意版本號,版本號的第一個數字是版本差異最大的,比如說 Python2 跟 Python3 看起來只差一號,但兩者基本上可說是不同的語言了,相對可使用的模組與應用也完全不同,務必在開始學習前注意這些細節。
文章的最後也不藏私(*´∀`)~♥,分享幾個我個人推薦的優質課程內容給大家參考(偏網頁開發領域),也歡迎大家留言分享自己上過的優質學習資源交流一下歐~
ccClub 讀書會
身為讀書會助教,當然要自肥一下自己家的教學資源啦~
AppWorks School
AS 是 for 轉職者的實體培訓班,在
EP0. 有相關介紹,在這邊就簡單給大家參考。
FreeCodeCamp
FreeCodeCamp 分為兩部分,一是
學習網站,提供各種類型的初學者教學系列,每個概念配合一個簡單的情境題,讓你在解題過程中逐漸熟悉與法規則;
(我自己的 HTML, CSS, JavsScript 的基本觀念是在這裡學的)
另外則是
YT 頻道,在這裡他們跟多位程式教學創作者合作,上傳各種不同領域的教學影片,從初階的語法教學到各種不同的應用實作,簡直是學習資源的寶庫,有什麼好奇想學的領域都可以先來這裡挖挖看~
TreeHouse
TreeHouse 是程式教學線上套課,採訂閱制付費,比較特別的是回提供課程路徑(Road Map)給學習者,比如說後端開發課程、前端開發課程、資料庫開發課程等等,會包含該領域所需的技術課程章節,適合想要有系統的學習開發技能的朋友。
Udemy
Udemy 也是蠻老牌的線上課程平台,包含各種知識的影片課程,費用也不貴,而且時不時會有特價,你可以先把喜歡的課程存起來,等到打折的時候在購買。
我個人非常推薦
John Smilga 這位老師的課程,在 JS 裡他有提供很多迷你專案的練習,讓你可以循序漸進的理解各種情境的使用技巧。另外 HTML 跟 CSS 的課程也非常推。
(你可以先在 FreeCodeCamp 的 YT 影片裡找他的影片試聽看看)
YouTube
附上幾個我覺得很棒的頻道,就不細講了,提供給大家參考。
祝大家都能找到自己喜歡的學習資源,我們下一章再見ε٩(๑> ₃ <)۶з~