DEV Community

Neil
Neil

Posted on • Edited on

[觀念] 大量練習寫 Python 程式可能是進步最緩慢的一種方法

Image description
大多數人都認為要學會一個程式語言就是要大量的練習寫程式,但是這種做法可能不僅對功力的累積沒有幫助,甚至會拖累你的學習進度。因為這會讓你產生有在學習的幻覺之中,但一到實戰卻腦袋空空,不知該從何著手。

我完全能理解你為什麼會這麼想,因為老手們的建議都是練習、練習、再練習,他們也都是這樣熬過來才學會的。甚至有人成立像 LeetCode 這種網站,提供龐大的題庫來供人訓練程式解題能力。這也難怪在書本上、網站上、論壇上、教學影片裡都一再的提到要不停的練習來累積經驗。

但是我要請你稍微深入思考一下,為什麼你在實戰時老是卡關?盯著螢幕發呆許久才能勉強擠出一行 code? 是不是很像我們在學英語時,背了很多單字、讀了許多文法,但是一站在外國人面前就支支吾吾的,連說聲 hello 都怯生生的?即使我們很努力地啟動腦內那個不太靈光的搜尋引擎,試圖把所有學過的句子都掃過一遍,看看是否有哪一句最符合當下的情境,但往往只能呆站在那裡十幾秒都無法有任何回應。最糟糕的是,為了避免尷尬,對方又開始下一段新的對話、新的主題,你只能不停傻笑點頭,表示你很積極參與,直到對話結束。

事後你總是非常懊惱地認為是自己學的還不夠多,所以才無法流利的對談。但事實並非如此,若你仔細觀察小小孩們,他們會的單字、片語和文法也都還不夠多,但卻能和大人們對談如流,那就肯定不是「量」的因素,而是他們知道在什麼情境下要使用哪些句子,並依當下的場合來抽換其中的單字片語即可。

學習程式語言也有點類似,只是過程略有不同。首先要理解的是我們人類語言和程式語言之間還存在一層隱晦的「邏輯語言」,這個邏輯語言長的跟我們人類語言一樣,不過它有特定的撰寫規則,也就是需要用「數據」、「邏輯」和「操作」這三種元素來組合成一個句子。我認為一直卡關的 Python 新手就是因為搞不定這層語言而停滯不前。

舉例來說,假如我們人類給個指令「熱的話就開個冷氣」,轉成邏輯語言就變成了「如果室溫高於26度,那麼就開啟冷氣」。其中的「26度」就是數據,「如果⋯⋯那麼⋯⋯」就是邏輯,而「開啟冷氣」就是操作。再轉成 Python 則是 “if temperature > 26: cooler = True”

再舉個例子,當我們說「反轉這個字串」,以邏輯語言來寫的話就是「依序取出 input_string 裡的字元,將其放在 reversed_string 的前方,成為新的字串,再將 reversed_string 設定為該新字串」。其中「字元」、「新字串」、”input_string”, “reversed_string” 都是「數據」,而「依序取出」、「放在⋯⋯的前方」、「成為新的字串」和「設定為該新字串」則都是「操作」。最後轉成 Python 則是 “for char in input_string: new_string = char + reversed_string; reversed_string = new_string”

有沒有發現人類語言和程式語言之間的鴻溝有多大!當差異過大而無法一次跨越時,我們就必需建立中繼站,以漸進式的方式來抵達終點。

當你能把含糊不清的人類語言轉換成邏輯清晰的步驟時,剩下就是從已知的 Python 知識庫裡挑出可以實現那些步驟的語法即可。隨著知識和經驗的累積,你可以使用的工具就愈多,挑選的速度也愈快,也就不覺得寫程式是件難事了。

既然你現在對寫程式的方式有了新的認知,你還會想要靠大量練習寫 Python 程式來累積功力,結果卻進度緩慢,遲遲無法實戰?還是你會開始熟悉如何寫下邏輯清晰的步驟,以相對簡單的方式來一步步把腦內的想法變成程式碼,進而有更多的時間來學習新的技術,成為不斷進化的程式老手?

如果你覺得這個觀念對你有幫助,並且還想獲得更多更即時的觀念與方法,請追蹤我的 Instagram: https://www.instagram.com/neil.skilltree/

Top comments (0)