身為一名程序員是不是教孩子編程的時候會得心應手?大錯特錯!
以下來自一位程序員父親的自述:
我是一個收入可觀卻頭發(fā)茂密的程序員,在我們這行比較稀缺。同時,我又是一個8歲孩子的爸爸。相對而言,這層身份更加不易,所以即便我很忙,也愿意擠出時間教授他人生必學之事。唯獨有一件事我不會教孩子,就是編程。因為孩子要學的編程,一般人真的教不來。要是剛好你也懂點編程,我勸你也別教。
學編程,也分優(yōu)生差生?
不可否認,編程這門技術(shù)活,創(chuàng)造了太多的商業(yè)奇跡,會編程的人也會越來越吃香。我雖不提倡以后人人以后都去當程序員,但我希望人人都能學點編程。正如我們讓孩子學數(shù)學,也不是為了當數(shù)學家,學習編程也是時代所驅(qū),宜早不宜遲。但只要是學習,就會有成績的好壞,編程者也分“優(yōu)差生”。一個普通的編程者,只會埋頭寫代碼,按部就班地開發(fā)軟件。而一個優(yōu)秀的編程者,他希望開發(fā)的是有價值的軟件,做每一步都會“帶腦子”。
從他剛拿到需求時,就懂得思考數(shù)據(jù)庫上會有哪些改動,對現(xiàn)有的邏輯有什么影響,存在哪些可能的風險,以及需要多久的開發(fā)周期...
要是不巧出了bug(漏洞),還得思考如何修bug。
這就要求他擁有極為縝密的分析能力,在其他成員遇到困境之時,快速定位解決問題。在技術(shù)團隊中擔任骨干的,往往都是這種人。但以上這些,其實都是思維能力的差距。所以,教孩子學好編程,也絕不是寫代碼這么簡單,就如同教孩子寫作表達,并非只是教他認認字。一堂適合孩子的編程課,一定是啟發(fā)思維能力的興趣課。
程序員解讀編程思維
其實學習編程的過程中,給孩子帶來的思維啟發(fā)有很多,比如創(chuàng)新性思維、發(fā)散思維、邏輯思維等等。但我認為,特別重要的是編程思維,這是別的興趣課很難培養(yǎng)的一種思維。所謂編程思維,是“理解問題——找出路徑”的高效思維過程。
簡單說,就是一種幫孩子解決問題的好思維。
用這幾個步驟,怎么就能解決問題呢?
拆:化繁為簡
化繁為簡,這四個字很容易理解,不過不容易做到。
很多時候我們看到一個難題的反應會是:
天啊,這么大的事情我一個人怎么完成哦。我不知道我不行我做不到。卻不知道將問題分成一個個能力之內(nèi)、力所能及的小事情。這一點很多人都需要跟愚公學習。
愚公移山的故事大家肯定都知道,一個想依靠人力將王屋、太行兩座大山搬移開來的老頭,在很多人看來愚公是十分的癡心妄想。
就像隔壁家另一個老頭所說,這是非常愚蠢的做法。
甚矣,汝之不惠。以殘年余力,曾不能毀山之一毛?!队薰粕健分芹牛Z
但是換個角度來看,愚公其實是一個很懂得編程“化繁為簡”的思路。
他并不把王屋太行當做兩座難以逾越的大山,而是把他們看成一筐筐的土石,一點一點的搬移,總能清除掉的。
雖我之死,有子存焉;子又生孫,孫又生子;子又有子,子又有孫;子子孫孫無窮匱也,而山不加增,何苦而不平?——《愚公移山》愚公,語
以游戲編寫為例,對于新手來說哪怕是特別簡單的游戲貪吃蛇,想要編寫成功也是件不小的難題,可是如果將這個問題拆解開來,我們需要做的事情是,設(shè)定輸入方式和反應方式。
根據(jù)游戲特性,貪吃蛇沒吃到食物時繼續(xù)游動,吃到食物后會變大,撞到墻會死,撞到自己沒事。
然后我們在設(shè)計程序時將這四種分開,針對一種情況設(shè)定游戲,比如“貪吃蛇吃到食物”:
貪吃蛇張開嘴巴→食物被吃掉→貪吃蛇閉上嘴巴→貪吃蛇身體長大一截。
另外幾種情況也依次分解,那么這個復雜的問題看起來也就沒那么麻煩了,不是么?
同時,在這個過程中,孩子能親身到“條分縷析”“有條不紊”的真正含義。
整:發(fā)現(xiàn)整合
任何一個程序中都不是相互分割無關(guān)的數(shù)據(jù)組成,相反,一個程序中會存在很多“重復”內(nèi)容。
比如,貪吃蛇中的“吃食物”動作,一個游戲中貪吃蛇會吃到很多次食物,這也就是前面說到的“重復”。
編程過程中,孩子需要一直做這樣的訓練,發(fā)現(xiàn)程序中會一直持續(xù)的動作,然后將它打包起來,讓計算機自己重復,以提高編寫效率。
這一點,類似于數(shù)學中的“合并同類項”計算題。
3ab-4ab+8ab-7ab+ab=(3-4+8-7+1)ab
只不過相對于數(shù)學的單一,編程的趣味性更強。學會利用這一點,孩子就能學會整合訊息的能力。
因為整合并不是簡單相加,而是對現(xiàn)狀的優(yōu)化,也是推陳出新的方式之一。
析:邏輯解讀
其實編程也是 一種語言,只不過和人與人之間溝通不同的是,這種語言是人與計算機的溝通。
理性、嚴謹是計算機的特性,所以與它對話的語言也必須是理性的,嚴謹?shù)?,不能出半點偏差的。
仍舊以貪吃蛇游戲程序為例,如果某處思考出現(xiàn)漏洞,游戲過程中就可能會出現(xiàn)“貪吃蛇撞了墻沒死”或者“貪吃蛇吃到食物沒有變大”等bug,那么這就是一個失敗的游戲程序。
學習編程,其實就是在對孩子的邏輯思維和邏輯判斷能力進行訓練。
編程是一堂興趣課
前面說的這些,都是編程的好處。但還是有人會問:“就算是啟發(fā)思維,你這個程序員老爸也能教孩子吧?”說句實話,我也不是沒試過。在我孩子6歲那年,我就開始嘗試教他編程了。那天我滿懷期待跟他嘮叨了半小時「輸入、輸出」等長篇大論后,他似懂非懂地眨巴著眼睛,點點頭,然后說了句:“爸爸,我一會可以再看10分鐘小豬佩奇嗎?”
行吧,看來我這是“對牛彈琴”。
但打那以后,我也意識到一個問題,給孩子上的編程課需要非常用心的教育設(shè)計,你得抓住這個年齡段的心理,得懂得他們的興趣點,得用有趣的方式教學。這對一個沒有教育行業(yè)經(jīng)驗的家長來說,幾乎不可能。
如果僅僅灌輸編程知識,搞不好還弄巧成拙,敗了孩子的學習興趣。所以,我也不糾結(jié)了,把這項任務交給專業(yè)的人。
關(guān)于如何挑選少兒編程課,我心里其實只有三點要求:
▲,編程知識是否專業(yè)。我作為程序員,一眼就能看出來。
▲第二,課程是否有趣。主要看孩子體驗后,是否還有持續(xù)的學習動力。
▲第三,服務是否到位。
作為家長,我得知道我家孩子學習的情況,這就要求老師的能和我進行有效的溝通。
滿足這三點要求的編程課,真不多,魔扣少兒編程是一個。從我孩子學習了三年的情況來看,這是句良心話。
我講講孩子的變化吧。首先,是學習。他學編程很有勁,但他不沉迷,也沒耽誤學習。成績反而還提升了,以前是班級前十的排名,現(xiàn)在大考小考都能挺進前三。就拿學英語單詞舉例,以前他背單詞純靠記憶力,但記憶力總是容易出錯。比如他背Apple這個單詞,經(jīng)常拼成Appel。學上編程后,他歸納能力悄悄發(fā)生了變化。有一天,他突然和我說:“爸爸,我發(fā)現(xiàn)Apple和Simple都是同樣的結(jié)尾,都是ple!”之后蘋果這個單詞,他再也沒拼錯過。其次,是他的邏輯能力。
他現(xiàn)在有個新愛好,就是迷上了哈利波特。目前8歲的他,已經(jīng)看完三部《哈利波特》的系列小說了,而且看得不迷糊。
想當年我大學看這電影,看了好幾遍才捋清楚人物關(guān)系,他的邏輯思維比我強多了。另外,他的數(shù)學成績從沒下過98分,感覺也是得益于此。