Enid Tian, Head of AppWorks School (田育欣 / 之初學校校長)
Team AppWorks 原生成員,2011 年起以實習身份加入,畢業後升格為投資分析師,而後轉任 AppWorks School 校長。台大財金系畢,輔 AIESEC & 國標系。
近年來線上課程蓬勃發展,不少學習平台如 Udemy、Udaciy、Khan Academy 等,都提供多元豐富的軟體開發課程,引領「自學程式」風潮。若是應用得當,半年以內就可以學有所成,讓沒有相關背景的新手,踏上軟體開發之路,現在,想要轉職到程式開發相關的工作,其實不需要再念四年大學或兩年研究所。
儘管如此,在 AppWorks School 過去三年多來,輔導上百人轉職成軟體工程師,其中有不少申請者都是在自學途中,遇到難以獨自突破的瓶頸,所以選擇報名參加 AppWorks School 為期 16 週的免費程式課程 (目前有 Android、iOS、Web 專班)。因此,我們想從實際的觀察中,分享我們認為程式自學者應該校正的三個心態,希望能幫助更多人跨過學習障礙,早日成為心目中的軟體工程師:
一、釐清學習目標,先專注在一個領域上
首先,軟體開發新手在一開始接觸程式開發時,很容易迷失在廣大的 CS 知識中,不知道該從哪裡下手。也經常會有各種道聽途說:「聽說 Python 很適合新手」、「聽說前端比較好入門」、「聽說 Java 的工作機會最多」,在各種資訊轟炸之下,許多初心者經常會一下學 Python,一下學 JavaScript,但都侷限在很初階的程度,且往往學到一半,才發現跟自己預設的目標沒有直接相關,花費了大把的時間跟精力,卻徒勞無功。
我們建議,新手在程式開發上可以採取「目標導向式學習」,先設定一個清楚的目標,再去安排自學計畫與步驟。例如,如果想要做網頁應用,那麼應該直接從 HTML / CSS / JavaScript 入門;如果想要開發手機 App,則依開發的平台 iOS 或 Android 來選擇學習 Swift 或 Kotlin,減少繞遠路的時間成本。
如何安排自學路徑?實際上,網路上已經有不少軟體工程師的過來人,分享從事各種工作應學習的技能樹 (如下圖),新手在學習的過程中,可不時確認自己正在學習的內容,是否與目標相關,若發現偏離目標,才能即時喊停,將學習的效益發揮到最大。
二、檢視學習瓶頸,增加時數或深度
選擇要專注的領域後,另一個新手常見的誤區,就是經常反覆學習「已知的知識」。變成一直在新手圈裡跨不出去,我稱之為「新手舒適圈」。舉例來說,許多 Web 開發新手,經常反覆學習各種 HTML 標籤,卻遲遲做不出想要的網頁畫面;Android 開發新手,則持續練習處理靜態的畫面、簡單的按鈕互動,卻不知道怎麼串接後端資料、處理用戶的網路行為。
之所以會有這個現象,背後通常來自兩個原因。第一,許多新手都是透過影片或短期課程兼職學習,若投入練習的時數不夠,很容易學了就忘,可能前一晚看了影片,隔天有事情沒練習,後天就忘記了,只好重看一次複習,若這次又來不及複習,過幾天可能又得重來一次,就這樣無限循環,卻遲遲無法突破。
這種情形通常是練習與實作的時間不足,必須重新安排學習計畫。我們建議,若想兼職學習有成,每週至少需花 15-20 小時,一次至少安排連續兩小時的時段,例如,平日晚上需有 2-3 天晚上,投入 2-3 小時,週末兩天則需各投入 6-8 小時,才能有所累積。
第二個原因,則是當新手想挑戰較進階的題目、感到困難時,很容易會想「一定是我的基礎不夠好,才會不知道要怎麼做」。所以會反覆的觀看已經看過的影片,花時間重複學習基礎知識,但往往只能加深原有的記憶,對眼前的問題仍然一籌莫展。
在實務上,進階的問題,很可能需要進階的知識才能解決,原本的學習資源或許未能涵蓋。因此,建議這時新手該做的事情,是搜集、閱讀更多「進階知識」,甚至在這個階段,還需要觀摩前人的做法,先模仿、再理解,才有機會突破瓶頸,讓自己更上一層樓。
這不代表基礎不重要。而是要提醒,如果發現自己總是一樣的東西學了又學,或同樣的影片看了三次,卻說不出自己的成長、做不出想要的東西時,就該檢視到底是投入的時間不足,或者該學習更深入、更進階的內容。
三、多開口請教,從別人的經驗中學習
通常初心者都有 1-2 個工程師朋友,當初也可能是受到他們的啟發所以想學習程式。但是在自學的過程中,卻往往不敢開口請教,以為是自己讀得還不夠多,所以不好意思麻煩別人,卻導致在一個問題上花費了過多的時間,累積不必要的挫折感,終至放棄學習。
舉例來說,許多開發環境都有系統 Bug,若待機久了運作上會失常,即使是沒有缺失的程式碼,也有可能跑不出應有的結果。此時有經驗的工程師,會試著「重新開機」或著手解決系統的問題,不到 10 分鐘問題就解決了,但缺乏實務經驗的初心者,通常不會想到原來不是程式碼的問題,糾結許久卻苦無頭緒,可能要等到兩、三天後,意外將開發環境關掉重開,問題才突然解決。
這種心態,與其說是「怕麻煩別人」,通常往往是「怕自己問了笨問題」。但問題本身其實是中性的,越是去評價問題的優劣好壞,越容易讓自己陷入不敢提問的困境。反之,若能將每一個問題單純視為學習的機會,越快解決問題,就越快累積經驗值,才越有機會成為合格的軟體工程師。
當然,靠自己的能力解決問題,會有很大的成就感,但若發現自己已經困在同一個問題好幾個小時了,不妨開口向工程師朋友請教,透過他們的經驗,幫助自己更快速成長。如果真的覺得朋友很忙,網路上的技術討論社群如 Front-End Developers Taiwan、Android Taipei、iOS@Taipei 等,都很歡迎新手張貼問題,也會有熱心的工程師前輩幫忙解答。
總結來說,拜網路產業開源風氣之賜,程式開發相比於其他技能,有非常多的網路學習資源,卻也容易讓新手迷失,希望以上三點提醒,能夠幫助初心者檢視自己的學習問題,進而有所突破。
【如果你希望透過高效、密集的學習環境來幫助你,也歡迎你申請加入 AppWorks School】
Photo by Free-Photos on Pixbay