寫了20年程序後,我推薦兒童編程應該這樣學
周一發的文章里,有媽媽請我寫個編程的專題,
昨天為這篇文章我醞釀了一天,終於幸不辱命,今天就給大家捋一捋,編程到底是否值得給孩子學?又該怎麼學?
一、編程值得學嗎?
很多父母對編程有誤解,她們認為給孩子學編程,將來就是讓孩子做一個程序員,可如果不想讓孩子做程序員的話,那麼學習編程也沒啥必要了?
這個理論其實是不對的,學編程和當一名程序員沒有任何關係,編程學的是一種思維方式,它對孩子的學習以及創造力幫助都很大。
舉個簡單的例子,比如我們編個程序計算「1+2+3+…+100」。這個程序有兩種設計方法:
一種是通過循環,讓計算機先計算1+2,然後計算+3,接著+4、+5 … 就這樣一直到 +100,這樣做99次加法就能得到結果了,這是一種思路。
但是還有另外一種思路,這是利用高斯演算法,因為1+100 = 2+99 = 3+98,這些結果都等於101,總共有50對101,那麼計算機只需要計算50x101就能得到最後的結果。
我們比較一下兩者的過程,第一種方法要計算99次,而第二種方法只需要計算1次,你覺得哪個方法更快更好呢?顯然是後者。
因此,學編程的目的,不是讓你計算出結果,而是要你用最優的方法得到結果。這才是學習編程的精髓,要知道我們計算機的處理能力是有限的,而數據是海量的,我們需要把計算機的時間節省下來,做更多的事情。所以我說,學編程的核心是演算法,是孩子的編程思維。你會發現,其實編程和數學是息息相關的,想要編程學得好,一定得有很好的數學功底才行,就像上面舉例的那個高斯演算法,這本身就是數學裡面的一個經典應用。
這就是我一定要給憨憨學編程的原因,會編程的孩子,他們的思維都很嚴謹、有條理,而且能找到最優的解決方法,這對孩子未來學業、工作幫助都是很大的!
前幾天同學聚會,大家討論到當年所選專業的時候,我就說,我很慶幸當年報了計算機這個專業,這麼多年工作下來,我就能感覺到我的思維能力比很多人要強。像我寫公號,某種意義上就是用編程思維來寫的,一步一步層層遞進,雖然文筆一般,但勝在條理很清晰,這就是源於編程對我的幫助!
二、怎麼學編程呢?
現在市面上的編程語言那麼多,什麼C/C++、Java、Python、Perl等等,孩子該從何入手呢?
其實編程語言是其次,編程思維是關鍵,所有的語言都只是一個外殼,也就是每種語言的語法有點不同,但骨子裡的編程思維都是一樣一樣的!
舉個簡單例子,比如說用編程來解決「1個蘋果加上2個蘋果等於幾個蘋果」的問題。
用C/C++或者Java的話,它的格式是:
apple_num = 1 + 2;
用Python的話,它的格式是:
apple_num = 1 + 2
乍一看兩段編程語句是一樣的,但細看之下兩個程序設計語言的語法還是有所不同,前者後面要有一個「;」,後者卻沒有,但是兩者骨子裡的邏輯是一樣的。這就是我說的編程語言的語法會有所不同,但是程序背後的思維邏輯才是關鍵,孩子得知道把實際的應用用程序的方式給展現出來。
所以學編程,語言是其次,首先需要掌握的是編程思維。這就是為什麼斯坦福天才兒童計劃里的數學課程,從一年級開始就教孩子編程思維,他們的學習界面就是下面這張圖,需要在右邊方框里定義車子的行動路線,然後左邊的車子就會根據孩子制定的行動路線來行動。
關於編程思維,這個很複雜,我以後要詳細說說,它的基本思想就是孩子得學會編寫程序的執行路線,上面斯坦福天才計劃的那個程序很簡答,就是一些順序執行,但實際遇到的問題會複雜許多,還會夾雜很多條件語句、循環語句等等複雜的邏輯。但是當孩子學會編程思維後,那麼他們將來無論用什麼編程語言,比如C、Python之類的就特別簡單,相當於骨架已經有了,只是外面套一件什麼樣的衣服問題。
三、兒童怎麼學編程?
現在主流的兒童學編程的方法是用一種拖拽式的編程語言。什麼是拖拽式呢?就是操作界面有很多指令的方框,只要將這些指令框拖到主界面就好,並且對指令框做一些參數設置,那麼一個程序就編好了。這種拖拽式的編程語言有很多種,比如Scratch、Hopscotch以及國內的編程貓等等,包括LEGO的高端機器人EV3所用的LabView也是基於這種拖拽式的編程語言。
下面這張圖就是Scratch的一個編程界面,你看屏幕的左邊沒有什麼編程語句,都是拖拽的一個個方框,用這些方框堆砌成一個完整的程序邏輯,而屏幕的右邊就是程序的運行結果。
下面這張圖是我給憨憨玩的Hopscotch的編程界面,也是拖拽的一個個方框,
而下面這張圖是我教憨憨的LEGO EV3編程界面,也是拖拽式的!
程序編好後可以傳入樂高機器人的控制器,這樣下圖的機器人就能按照你程序的指示來行動了,
Scratch這類拖拽式編程語言的好處就是孩子不需要背誦程序的各種命令,不需要糾結於程序的語法,只需要在方框里設置邏輯和參數就好了,對孩子來說超級簡單。
你看下面這個小遊戲,這是憨憨第一次玩Hopscotch的時候,我教他做的一個Pokemon(寵物精靈)的小遊戲,可以通過扔球來抓住小精靈,
所以你可以看到,這種拖拽式的遊戲對孩子上手很快的,第一次接觸就能編寫一個小遊戲出來了!
但是它們也有一個很大的缺陷,就是沒法編寫很複雜的程序,如果程序一複雜,滿屏拖拽的方框看起來會很頭暈。因此當孩子Scratch學到一定程度,就可以轉為專業的編程語言了,這時候首推Python語言。
下面這張圖就是Python的運行界面,
你看Python都是一條條需要手動輸入的語句,整個程序就會複雜許多,但很多專業的程序,上至網站,下至機器人都可以用Python來編寫。而且Python的語法格式相對於C/C++/Java來說會簡單不少,孩子入門起來也比較方便的!
一般來說,Scratch適合5~12歲的孩子,而Python適合12歲以上的孩子。
上面這些就是我對編程的一些理解,以我20年的編程經驗來看,編程對開拓孩子思維是非常非常有好處的,而且很鍛煉他們的創造力,也是玩機器人的基礎,如果條件允許的情況下,強烈建議帶孩子玩一玩的!
憨爸在美國
矽谷工程師爸爸,分享美式教育理念和資源,專註於英語、數學、科學啟蒙,一定讓你腦洞大開喲!
公號ID:hanhanusa
微博:@憨爸在美國


TAG:憨爸在美國 |