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