如何教自己寫程式 - 為什麼寫食譜比寫程式容易?

食譜跟程式碼很像,都是一份「讓讀者能夠照著指示達成特定目的」的資料。食譜,是給人看的,目的是讓執行者能照著指示夠做出一道菜。程式,是給電腦看的,目的是讓電腦照著指示做出各種運算及輸出。

很多人認為寫程式是一件不容易的事情,但一件事情之所以難,一定有原因。我就用「食譜」為例子,解釋一下:為什麼學程式對一些人來說很困難。

 

你會寫食譜或看食譜嗎?

就算你不會寫食譜,大概也看得懂食譜。為什麼呢?因為裡面的每一字、每一句你大概都看得懂,腦中也有畫面,因為你即便沒親自煮過菜、大概也看過別人煮菜。

食譜跟程式碼很像,都是一份「讓讀者能夠照著指示達成特定目的」的資料。

食譜,是給人看的,目的是讓執行者能照著指示夠做出一道菜。

程式,是給電腦看的,目的是讓電腦照著指示做出各種運算及輸出。

如果你會做菜、有語言能力,基本上就具備了寫食譜的能力。那麼既然程式和食譜這麼像,為什麼對很多人來說,寫程式還是一件有點困難的事情呢?接下來,我們分兩點來探討。

 

困難點1: 能下哪些指令?

試著思考一下:如果今天要你寫一份食譜,而讀這份食譜的「人」是一個外星人,事情會有什麼不一樣?

首先,你可能會面臨一個問題:外星人用的是什麼語言?為了不讓事情複雜化,我們假設這個外星人看得懂英文好了,那麼下一個你會面臨的問題就是:外星人能夠執行「打蛋」、「攪拌」、「判斷是否呈現黏著狀」等指令嗎?因為我們並不知道這個外星人是否具有肢體,並且對「黏著狀」的定義是否與地球人一樣。

怎麼樣?有沒有發現問題瞬間困難了不少?提升的難度其實就來自於:我們並不知道這個外星人到底能夠幹嘛、具有什麼器官。

有沒有覺得似曾相似?

沒錯,很多人剛接觸程式設計時並不知道電腦具體能夠執行什麼指令。這邊的「指令」是很細膩、明確的,例如「舉起鍋鏟」就是一個明確的指令 (如果一份意大利麵食譜的內容是:1. 煮一份意大利麵 2. 端上桌。我想你應該會想把它燒掉)。具體來說是在特定環境下,你能操控電腦進行怎樣的指令。

舉例來說,我們要寫一個猜數字的遊戲程式前,或許就得知道:

1. 電腦(使用特定程式語言) 如何產生特定範圍內的隨機數字
2. 電腦(使用特定程式語言) 如何記住數字
3. 電腦(使用特定程式語言) 如何提供界面讓使用者輸入數字
4. 電腦(使用特定程式語言) 如何比較數字
5. 電腦(使用特定程式語言) 如何在螢幕上顯示訊息

如果在了解電腦(程式語言)大致能做什麼事情之前,就想寫出一個程式,你將會同時面臨「學習程式語言的指令/語法」以及「邏輯組合」等問題,自然會舉步維艱。

 

困難點2: 表達夠清楚嗎?

接下來要面對的問題就有點殘忍了:你能夠進行有效的表達嗎?

信不信由你,就算你會做菜、會寫字,也不代表你一定能寫出一份人人看得懂、而且能夠正確無誤照做的食譜。因為你很可能:錯字連篇、文法怪異、順序錯亂、敘述不明確....等等。

「這個人表達能力真差,根本聽不懂他在說什麼!」雖然當事者可能不是你,但相信你在生活中多少會聽到這類抱怨。

跟電腦溝通的時候,你得把他想成一個「小孩子」(只是這個孩子運算能力比你強很多),盡可能讓指令明確、可以在無歧義的情況下被執行,舉例來說:「稍微移動一下」、以及「顯示一下就消失」都是不夠明確的指令。如果你看到以下的食譜,恐怕也會吐血:

1. 把一些蛋、麵粉、牛奶、糖,放在一起攪一攪
2. 放到容器裡面,再放進烤箱裡面烤一陣子
3. 從烤箱拿出來就完成了

為什麼你會吐血?因為你不知道「一些」是多少,「一陣子」是多久,照著這種食譜做出來的蛋糕,恐怕會是個災難吧。

即便如此,我們在生活中還是會不自覺做出一些不夠明確的表達,所以表達並不是一件很簡單的事情,對人表達都這麼困難了,更何況電腦又比人類龜毛一百倍。

程式語言也是一種語言,只是溝通的對象是電腦,請別忘了這點。所以要寫好程式以前,也練練自己的表達能力吧。(當然,我認為寫程式的過程本身就是在訓練表達能力了,這麼棒的技能,不學可惜呀~)
 

小結

寫這篇文章的目的不是只要告訴你「學程式很困難」,而是為了指出學程式的路上會遇到的最主要問題,讓你知道學/教程式路上要克服的癥結點為何,對症下藥、才能一帆風順。(問題真的不是「指令背不起來」、或是「自己不夠聰明」啦!)

 

Photo:Startup Stock Photos,CCLicensed.
數位編輯:陳玉玲

本站提供網路意見交流,以上文章屬作者個人意見,不代表未來親子學習平台立場
成為未來親子 Line好友,看更多教養好文及最新教育資訊喔!


未來親子六星會員超回饋 立即加入