在這個資訊爆炸的時代,想學東西其實不必出門。
有很多種方式,看書、看影片、找老師、上實體班、上線上課程………
我覺得每個人都有適合自己的方式,所以一開始除了實體班你可以每種方式都試試看。
為什麼撇除掉實體班呢?因為我印象中的程式實體班,除了工作坊形式的都很花錢,而且需要加上通勤時間、等開班等等…….實在不太好找,那接下來我會先推薦一下好用的線上資源以及我的學習過程,最後比較不同方式的優缺(純粹個人意見,參考即可)
第一步:看學程式心得、看工程師的工作影片
我覺得不管學任何東西,只要是你有興趣的,先不要馬上把頭洗下去,而是上網看看別人的學習心得、找所謂的「學習地圖」來看,那看這些心得對我們有什麼幫助呢?
第一個:動力
看著別人的成長過程,是不是也很心動?覺得自己可以試試看的樣子,所以我覺得看心得或多或少都會讓自己的學習動力更強烈一點。至少這條路上有人成功過,降低自己對寫程式這件事情的畏懼很重要,這邊我們也不能停留太久,只是看看別人的學習過程,讓我們對自己的規劃有個底罷了。
第二個:安排
在你還沒開始寫程式之前,你不了解自己可以投入的時間、自己要從哪裡下手、有哪些推薦的書等等……..既然網路上的資訊那麼雜,我建議先比較一些其他人大致上用了哪些資源,花了多久時間來安排自己的學習規劃,也好讓自己有個底跟停損點,比如「三個月能不能寫出網站?」、「這個月能不能看完開放式課程?」參考別人的學習路徑可以對自己的時間安排有個大致的掌握,也降低學習時間的不確定性。
第二步:設定自己的學習時間
我們要先思考自己可以抽出多少時間來學習寫程式,一個禮拜你願意花幾小時?當然這不用很精確,先簡單盤算一下自己願意花多少時間來做練習、學習,以及思考如果這些時間突然被佔據掉該怎麼辦,我看過很多人都是因為一次被打斷,之後就放棄學習或者怠惰下來的,跑步也是,第一次停下來走之後就很難再往前跑了。確保我們的學習計畫有所進度是一件非常重要的事情,而且是不可取代的。時間安排我建議至少要有三個時段,分別是「學習、練習、做專案」。學習的時候就「認識那些自己不了解的、知道有這些語法、功能,並時時歸納、總結自己學了什麼,可以用在什麼地方」,練習則是「實作學過的東西、複習上一次學習的東西」尤其寫程式剛開始是很吃練習的,learning by doing非常重要,確保每一行code都是我們自己打的,一開始會寫得很慢很正常,重點是讓自己真正在coding,只用看的不行,一定一定要親手去打過,最好多練習個幾遍、寫一些註解在code旁邊以便熟悉這一行是做什麼的。
最後專案則是複習的概念,練習能夠幫助我們複習剛學過的東西,但很早以前學過的東西呢?就需要用專案來實作,我們可以臨摹別人的程式碼自己一步一步打造一個,專案也可以組織我們學過的東西,讓自己真的深刻了解到「我為什麼要學這個?」
第三步:開學囉
在對應的時間做該做的事情,我們不用每天都練習(當然可以的話最好)但是務必要在自己安排的學習時間做練習以及複習。我自己會空出一個時間來學習新的東西,思考演算法,複習則是每天晚上都會做的,日常等待時間則會逛逛應用面的東西(數據分析),順帶一提,我的數據分析能力以及寫網頁的能力,全部、都是自己學的!那有哪些學習資源呢?我們會在下面分享~
第四部:打造自己的作品集
把作品當作自己的里程碑,一開始可以很簡單,但我希望你是真的獨立完成你的作品,就算實作最簡單的排序演算法也好,「自己親手做一個」比什麼都來得重要。在實作的過程中你也可以回頭檢查自己學得紮不紮實、有沒有不清楚的地方,也就是說,學習只是幫你搭了樹幹,但是這些知識體系的枝葉必須透過自己做專案才能展開,有些工程師真的很厲害,但技術其實都是自己摸索出來的,這個階段你已經看完自己的教材、有自己的筆記,是該脫離老師的帶領做一些作品出來了。
其實差不多就是這樣,畢竟軟體界要學的東西實在太多了,技術要一直更新,看我講得很簡單,其實每一步都是漫長的過程,重點是自己有沒有決心學。
我自己學一項新技術,都是照著上面的步驟,而學習階段則是先上網看一些技術文章,確保自己會不會真的投資這塊(商學院學生的毛病XD)簡單練習一下範例跟術語之後,上網買一本書當作架構,然後先找開放式課程來看。
我會先看書畫重點、注意知識點跟練習一下書中的範例,然後才開始上課。這樣的形式就很像預習一樣,每個人的狀況不同,對我來說這是最有效的方式。
都看過書了為什麼還要上課?因為層次不同,書礙於篇幅很多時候都是梳理過的脈絡,但是不會講得很細,上課的話老師能夠提醒容易犯錯的地方以及補充,方便我組織書上看過的內容,那這樣書可以當作一個提醒自己重點的幫手,老師則是協助你探索每一塊知識區。而上課的聽覺、視覺也幫助我吸收內容,否則有時候書上的東西太難懂了XD(尤其是可怕的演算法們)學完之後一定要歸納自己的想法、思考剛剛學了什麼,看到了什麼,幫自己爬梳思路,以免吸收不到資訊。
接下來我們比較一下各個學習方式:
1.看書
- 優點:便宜、講解清楚、架構完整
- 缺點:除非電子書,不然一邊看書一邊寫code會很累(手在那邊一直壓XD)缺乏實務經驗、範例過於簡單(X
- 推薦:歐萊禮系列(可是以書來講不便宜,但真的好有質感內容也夠深)
我個人很喜歡看書,尤其時不時拿出來翻閱書是最方便的,也可以直接在上面做筆記,但就是閱讀跟實作起來比較累人,建議如果對程式有經驗再讀書會比較好,否則很容易失去動力(書太厚根本不想看),新手可以先看點技術文章打打程式碼再開始看書會覺得比較親切(?
2.看技術文章
- 優點:通常都比書好懂很多(用詞淺白)、可以當作書的補給品、內容大多很豐富、有作者的實務經驗
- 缺點:太零散,不適合作為主要學習路線
- 推薦:CSDN、infoQ、IT邦邦忙、Medium、W3C
看技術文章其實比較偏向「完全不會」跟「開始做自己的範例」時候用的,也就是兩個學習階段的極端值,因為技術文章都是很多工程師的熱忱跟心血,能夠學到很多新穎的東西。
3.開放式課程
優點:免費又很多好課可以聽、爽修一堆國外名校課
- 缺點:容易被其他課程吸引(X、因為沒功課壓力容易懈怠
- 推薦:
- Youtube:彭彭的課程、ProgressBar進度條、六角學院、freecodecamp、CS dojo……..太多啦!
- coursera(用旁聽的是免費噢!) ,可以找到很新的課,但需要一點英文能力
- 網易公開課,都是中文翻譯的
所以其實開放式課程真的是一個最棒的學習方式,建議大家可以找找有興趣的課還有願意聽下去的老師好好學習,能利用的免費資源真的很多。而且想要練好一項技術,就我所知許多人都只靠免費資源就培養出來了,
4.線上網站
優點:互動式教學、真的做到learning by doing、教材規劃我認為非常棒、協助鋪好學習路線。
缺點:一直跳廣告很煩、有些進階課程要付費(等於只能學到基礎)
推薦:freecodecamp、codecademy、datacamp、R語言翻轉教室、菜鳥教程
我覺得互動設計是很大一個特色,邊做邊學還能夠立即獲得反饋,等於你的學習、練習是完全包在一起的,最大的缺點是進階一點的課程通常都要帳戶升級,適合當個新手練功廠,但是想要做範例之類的除了freecodecamp基本上都還是要尋找額外資源。
5.線上課程
優點:課程品質高、能找到帶領你的老師
缺點:有點小花錢、遇到雷的老師會覺得很哀怨
推薦:Hahow、六角學院(偏網頁)、udemy(要有一點英文能力)、Udacity
上過Hahow的兩門課,真心覺得Hahow的課程品質很高,推推。六角學院老師們很認真,而且有很多資源可以利用,不過小缺點是課程缺乏架構,內容流水,作業跟教學之間也有蠻大的程度落差,這部分自己要花很多時間去找額外的資源來學習,以資源庫跟範例實作來講是真的很不錯(有可以問的老師跟助教),算是一個強迫成長的地方。
udemy則是蠻便宜(一門課大概360台幣),可惜品質有點參叉不齊,但課程類型應該是我看過最多的,每堂課內容也都蠻豐富的(一門課大多10小時左右)Udacity我沒用過,聽說可以學到很深很專業(求職導向?),還有快速的真人回覆、程式碼修改等等…….但是很貴,一門起碼要台幣一萬塊左右。
6.實體課程
優點:應該可以學得很紮實
缺點:貴到爆、配合上課時間
沒上過,優點是有人親自帶領與請教。明顯的缺點是必須配合上課時間以及交通,算是很多人的痛點,不過有些訓練下來其實能做出一個完整的作品集跟額外資源,總結來說只要挑對實體課老師而且經濟許可,應該是最佳的學習方式。
那麼以上就是我比較各個學習方式做的歸納,基本上我都親自體驗過了。
其實有些學習方式會依據現有資源跟語言的生態系而有所差異,比如Python其實靠免費資源就很夠了,但是Javascript就未必………重點是自己願不願意下手練習、不怕把手弄髒,透過實踐來學習coding,而不能只有吸收資訊而已。
那大學的資訊課程可以幫到什麼嗎?我覺得可以打好理論基礎,但是光就「coding」這件事情,很多老師不能教給你,你必須自己學自己摸,甚至很多教授也只鑽研理論,程式的實作都交給研究助理進行,教授自己都不太會coding了:
不能以他們沒教,就把自己的不會視為理所當然。
準備好自己的教材!我會往下繼續帶你做一張完整的學習地圖。
好文來自:Dennis Dsh