學寫程式要如何避免半途而廢?我的程式學習經驗與心得

Dennis Tseng
DD Story Hub
Published in
Feb 3, 2023

註:本文為人文社會學科背景學生與程式相關的經驗分享,因在學時期的老師所負責的教育部「UFO 人文社會與科技前瞻人才培育」撰稿計畫所寫。

學寫程式要如何避免半途而廢?三個要:要知道動機、要適度休息、要找好環境;三個不:不要只看不寫、不要把自己逼太緊、不要太過仰賴課程或老師。

我從大學二年級的下學期第一次認識程式,而後經過多次半途而廢、重新開始的生死輪迴,最後總算脫離苦海,成功上岸。後來在新聞所不同課程擔任助教,有機會以同學為鏡,反思自己的程式學習經驗。

在這篇文章中,我想回顧自己的程式學習歷程,除了分享自己的血淚以外,也從中歸結幾個重點,算是這幾年經驗的積累,希望也讓他人借鑑,不要再走冤枉路。

學習歷程

從總是學不會到我懂了他

大學時讀企管系,程式設計不是系上必修,入學時也沒有學程式的動機。開始實習之後處理資料都用Excel,同事們有感於大數據興起,舉辦R的讀書會,我也參加。但當時的情況慘烈,記得第一次去,我連R和RStudio的差異都不知道,也根本不會執行程式碼,挫折很深。

後來斷斷續續的學程式,老師用R講解統計、朋友分享怎麼用程式取代Excel,每次產生興趣都會回去翻課本,但又總是複習到上次學的進度後又停止。再後來東碰一下Python、西學一下C++。失敗的學習經驗都是相似,我沒有一次能學好。

改變的契機是另一份實習工作,需要時常跟人溝通交際,也要創意發想,兩者我都不擅長。急於找到自己的生涯定位,想要有個紮實的技能可以安生立命,這次立定志向,必須學好程式。我找了兩本教科書,先讀第一本,讀完後再讀第二本,每本都是一頁一頁的讀,不放過任何程式碼,一定要實際執行,並且嘗試各種變換,雖然兩本的內容很像,但我不想再重來。

畢竟是真的書本,讀完之後頓覺功力大增,但也花費好幾個月的時間。接著,我又跑去線上課程平台修課,因為平台把課程影片切得較細,在教學間穿插程式碼練習,若寫錯就會有提示訊息,我覺得看書可以練習,但相對枯燥,因此想換點方式。有了教科書的打底,再加上線上課程,這次我不再因循苟且,修完幾堂課後算是小有所成。

最一開始讀的書借給朋友了,右邊兩本是後來買的,數據分析則是一位超用心的主管/朋友所贈。

從第一次到相見恨晚

看書加上線上課程,算是走過兩輪學習歷程,新的學期,我在學校同時修了三堂跟程式有關的課。因為老師是從零開始教起,我已經有前面幾個月的準備,上課內容基本上是駕輕就熟。

那時的我發現,自己並不排斥程式、甚至有點享受寫程式的時光。遇到難以解決的錯誤,不會心煩意亂的想要放棄,又因為掌握到一定程度,開始更有自信的尋找程式能派上用場的地方,不再視其為畏途。確信有辦法自律後,我決定不去學校上那三堂課,把上課時間拿來自己讀書或上線上課程,但還是有交作業跟報告,這樣才能拿到學分。

那個學期結束後,沒有意外的在新學期又修了比較進階,以及專攻特定領域的課。我同樣把上課模式調整成遠距教學,在家讀教材並且出延伸練習給自己。中間其實有去上過課,老師上課比自學還有效率的多,但我太嚮往後者的自由,即使要多花時間也無妨。

有明確動機、從學習中找到樂趣、進一步想尋找新目標,而後我的程式學習歷程就在這樣的正向循環中不斷成長,咖波越吃越可愛、我也越學越有愛,後來因緣際會就當上程式課程的助教了。

體悟

談完自己的經驗後,想分享一些體悟。

三個要

第一點,也是最重要的一點,要知道自己為何而學。確認好動機,才能夠踏實地往前走,無論是什麼領域都一樣。為了避免太空泛,有一個實際的建議,就是事前先找好自己想透過程式做到的事情,最好是現實生活中的任務,不是學程式的特定內容,前者例如想畫山脊圖、想爬Dcard資料,而後者例如掌握迴圈的用法。當你有動機、又有強烈想實現的渴望,而且又能引起共鳴,就會學得很快。跟朋友分享自己爬下的資料絕對比分享迴圈用法有趣。

第二點,學習的路很長,所以要在學習過程中創造留白空間。刻意放空和留白能夠增加效率,這點同樣借鑑於其他領域,我建議在程式學習的計畫中,可以加入無所事事的區段,因為學程式不是單純背誦,它牽涉到邏輯和架構能力,若是一味填鴨很難走得長。可以適度獎勵自己漫無目的的閒晃。以我自己為例,在資料分析章節加入找有趣資料的環節,視覺化部分則是閒逛線上圖表分享區。

像是利用生活中數據畫圖的Instagram帳號 @ddplot

第三,單打獨鬥很累,所以要尋找能夠成長的環境可以是彼此鼓勵的人,或者是值得託付的幫手,朋友(我認識的文組學生在學習寫程式時,通常背後都有那麼一位資工/資管系的朋友)、教師、甚至是社群皆可。對初學者來說,卡關時的挫折感會扼殺初萌芽的好奇心,若身邊有人可以討論或者請教,至少不會深陷於錯誤訊息而無法脫身。

三個不要

第一,不要只看不寫。學習歷程中,我常常因為外部限制,例如電腦沒有安裝軟體、電腦已經過載,或是當時沒有心情動手寫,改採冥想學習法,都不實際操作。之後遇到相關課題時,感受到實務上不同情境的諸多變化,就嘗到苦果。數學科要推導公式、歷史科的知識要放在具體脈絡下回望,學習程式也得要在每次嘗試中尋求進步,不能偷懶。

第二,不要把自己逼太緊,尤其你是文組學生。我自己覺得學習程式的挫折感比其他科目還重,因此更容易放棄,所以特別提。我常常一頭熱的告訴自己,這個月要讀完這本書!但到最後陡峭的學習曲線加上過重的進度壓力,往往讓人放棄。回顧過往,若當時有更多時間、不被進度追趕,有閒探索,必定增加學習的樂趣。

以週為單位定期紀錄進度,中間曾經落下一段時間,不過整體來說習慣有維持!

第三,不要太過仰賴課程或者老師。程式語言的世界同時殘酷又寬容,它的更迭永無止境,技術隨時都有被淘汰的一天,又有無數競爭者隨時踏入;但只要你願意投資時間與金錢,相對於其他產業,它的大門永遠敞開、也有豐厚回報。因此,學寫程式的人不能想著,我只要靠著老師就能夠有很好的成就,老師只能領你進門,但在這個廣袤的世界中,能走得多遠還得要看自己。

以上,就是我的經驗分享!

我的學習夥伴哪有那麼可愛。就是超可愛的啦!

延伸閱讀:純文組學生該投資時間在學習寫程式上嗎?一文釐清

--

--

Dennis Tseng
DD Story Hub

現在不是新聞所學生也不算資料分析師了,變成記者。對商業分析、統計、資料視覺化、資料新聞都很有興趣,喜歡寫 R!