就不少程式人而言,在任何技術上,自學似乎是很熟悉的一條管道,甚至某些程度上,自學也被看成是最好的一條管道,然而,程式設計相關的教育訓練,並沒有因此逐漸消失,相反地,還大行其道,哪些情況下可以自學?哪些情況下又適合報名教育訓練呢?

來自小提琴教師的提問

在程式設計這條路上,我幾乎都是自學,然而在相隔十多年之後,我又在實體課程中跟著一名教師學習,這門課不是程式設計領域,而是音樂領域,一門小提琴課。實際上,在這之前,我已經在自學烏克麗麗,過程中,不斷地遇到一些瓶頸與調整,因同為弦樂器,我偶而會跟小提琴教師聊到在烏克麗麗上彈奏方式的調整,小提琴教師有一次問道:「既然你遇到這麼多問題與調整,為什麼不乾脆先跟著一位老師上課呢?」這問題一時之間讓我語塞了!

後來我想了很久,為什麼同為音樂領域,小提琴我選擇跟著教師學習,而烏克麗麗卻選擇自學?自學這方面的決定,一開始來自我更多年前接觸過吉他的經驗,認為這經驗可以轉換到烏克麗麗上;再來,烏克麗麗這樂器的自由性,造就了它並沒有一定得遵循的學習路徑,網路上有各式各樣的學習影片可以參考;最後,如果自學烏克麗麗有無法突破的瓶頸,我確實有著再跟著教師學習的盤算。

小提琴這樂器的特性,正好與烏克麗麗相反,數百年的歷史造就了它有著幾派必須遵循的學習路徑;網路上的學習影片不多,且不夠有系統性;如果養成了不好的演奏習慣,對後續進步會有很大的妨礙,壞習慣也不容易忘卻或修正。如果你試著在一些談論小提琴的論壇上發問:「小提琴是否能自學?」包準引來一大堆討論,多半是力勸不要自學,偶而有主張可自學之人出現,十之八九會被圍剿。

這些結論仔細思考了一下,跟我在課程上與學員討論到是否自學或參加教育訓練,要做的考量是類似的:「有無相關經驗、有無一定的學習路徑、可取得的資源是否豐富、課程有沒有系統性、有無人可發問或現場糾錯,而最重要的是,你有沒有用金錢換時間的準備!」

用金錢換時間的準備

在沒有相關經驗之下,自行摸索出完整、具系統性的學習路徑,也確實是件耗時的工作,因為你沒有經驗,很難辨識哪些元素該屬於路徑的一部份,哪些元素屬於打底,而這些元素的順序又當如何安排,如果無從辨別或光是理出這類路徑,就會耗費掉你極大的心力與時間,那麼自學或許就不是個好的管道,就我而言,這是一開始我不選擇自學小提琴的主因之一。

當然,並不是所有教育訓練課程都是得付出學費,有些教育訓練是公司出資或是社群推廣提供,不過,用金錢換時間是個容易理解的比擬。在執行教育訓練時,我總是會說:「其實我講的東西書上都有,而且還更詳細,連笑話也都寫進去了,為什麼你們不花幾百塊買書就好,而要花更多錢來上課?」

實際上,身為一位作者,都會假設並盡量提示讀者,如何建置與作者一模一樣的環境,並期待讀者能藉由書上的步驟提示或程式示範,進行相同的實作,然而實際上,這是不可能完全做到的事情,也因此,看著書自學,總會遇到許多奇怪的問題。

一個問題,你可能摸索了一、兩星期,在網路上搜尋答案、在論壇上發問都還得不到解答,或者找到一個可運作的設定,但不明白設定的真正意義,如果在課程上遇到問題能有教師讓你立即提問,也許教師三、五分鐘就能清楚解答你的問題。一個問題若能節省你一到兩星期的摸索,一天課程你能問教師五個問題,五天課程你就能問教師25個問題,也就等同於節省了你25到50星期的時間!我總是對學員說:「如果你是花錢來上課的,請記得,將金錢換回等價的時間!」

不過,想將金錢換回等價的時間,並不只是人到教室上課就可以了,認真聽講是一回事,得自問課前你是否打算預習,課中按步實作,課後持續練習,如果都沒有,我想是不會產生能發問的主題,也不會有更多的收穫。

用金錢換時間是希望的結果,要達到這結果,視你有沒有做好準備,就像在小提琴的學習上,我總是對自己說:「到教室作練習太浪費錢了,練習是要在家做的,課堂上是拿來發問與讓教師糾錯的」。

程式語言界的小提琴

就小提琴這樂器來說,有些錯誤初期雖不妨礙拉琴,然而若不在一開始加以糾正,想讓身體忘了它,就異常地困難,後續也會容易因此遇到瓶頸,因而需要有可以在課堂上糾正錯誤的教師,這是我不選擇自學的另一原因。

在程式設計界其實也不乏這類例子,舉物件導向來說,在某些錯誤觀念下寫出來的程式,照樣能動,只是,錯誤的觀念與方向,卻會妨礙後續更多進階觀念的理解,想重新獲得正確的觀念,往往得花不少時間去驗證與改正。

不會小提琴的人,就單只是要用全弓拉出好聽的空弦,也是異常困難。程式語言界有沒有類似小提琴這種東西?Haskell也許是其中之一,如果沒有適當的訓練,想寫個接受輸入、計算清單長度且顯示結果的程式,對不少程式人就難如登天了。小提琴入門的高難度,令多數學習者不得不重視每一步基礎的奠定,同樣地,Haskell的高難度,強制開發者不得不在每一步,謹慎地思考型態、資料分解、演算等步驟。來思考一個問題,如果你真的得在有限時間學會Haskell並應用,你會不會選擇自學?

現在越來越多文章或宣傳品,都在傳達一件事:程式設計越來越簡單,你完全可以靠自學,在程式設計界取得一技之長。就工具而言,像是程式語言,確實是越來越簡單,然而就現在與未來而言,程式設計的觀念卻越來越難。

語言越來越簡單,有利於程式設計的普及,就像烏克麗麗有助於音樂學習的普及,然而,除非你想一直停留在兒歌階段的演奏,當你想突破瓶頸達到某個程度以上時,要付出的努力,無論是烏克麗麗或小提琴都是一樣的。

回過頭來用JavaScript比喻好了,它入門是很簡單,不過,你想用它做到什麼程度呢?

經驗、時間與目的之權衡

就我來看,任何一種技藝都有自學的可能性,畢竟人類的技藝本來就是從無到有累積而來,只是這個累積的時間,是幾年、幾十年或幾百年甚至更久。相對地,是否想自學一門技藝,就看你原本是否有相關經驗基礎,以及想花費多久時間來達到什麼目的。

即使小提琴被公認是世界上最難學的樂器,也有人認為是可自學,只不過也承認會遇到許多問題,想克服必須花更多時間。

然而,如果經驗、時間與目的沒有權衡好,就算是報名課程,也不見得是個好的途徑。三個月的XX課程,完成後就可以寫出個App或Web應用並取得工作,聽來很誘人,但你是否想過一個問題,如果你三個月之後可以取得一個工作,也代表再過三個月,就會有人能來取代你這份工作。

如果你能多想清楚經驗、時間與目的之權衡,自然就會去多做相關的調查,那麼有一天就會發現,自己不再會去問「XX是否可自學」這類膚淺問題!

專欄作者

熱門新聞

Advertisement