2016 年 12 月,我寫了一篇關(guān)于教 10 歲的兒子編程經(jīng)歷的文章[1]。 一年半之后,他的編程之旅仍在繼續(xù),且伴隨著許多起伏和曲折的劇情。
“爸爸……我很無(wú)聊!”
身為家長(zhǎng)或老師,我們可能經(jīng)常聽孩子這樣抱怨。 與大多數(shù)人一樣,兒童的注意力很短暫,所以往往對(duì)新玩具、游戲或活動(dòng)高度感興趣一段時(shí)間后,就會(huì)失去興趣。 一旦新奇勁兒消失,他們便會(huì)感到無(wú)聊,繼而尋找新的東西。這實(shí)際上聽起來(lái)與前端 Web 開發(fā)人員很類似。
我的兒子也不例外。
2016 年底,在我發(fā)布了第一篇文章以后,我兒子對(duì)編程的熱情便很快消退了。到 2017 年初時(shí),他進(jìn)入了學(xué)習(xí) Web 開發(fā)的艱難期。
如果你不了解 Web 開發(fā)對(duì)于初學(xué)者有多嚇人的話,請(qǐng)打開 freeCodeCamp 的課程(CSDN 編者注:國(guó)外在線學(xué)習(xí)編程網(wǎng)站),然后看下預(yù)計(jì)完成時(shí)間(300 個(gè)小時(shí)),而且這僅僅是前端 Web 開發(fā)哦!這就像你爬到山頂卻發(fā)現(xiàn)自己站在另一座山的山腳下。
對(duì)一個(gè) 11 歲的孩子來(lái)說(shuō),面對(duì)這種情況并不是很有動(dòng)力。
你可能在想……“我為什么讓他從 Web 開發(fā)開始學(xué)呢?”
在簡(jiǎn)單介紹了 Scratch(CSDN 編者注:MIT 設(shè)計(jì)開發(fā)的少兒編程工具)和 Python 之后,我最終選擇了 JavaScript 和 HTML,因?yàn)槲沂且幻?Web 開發(fā)者,這是我所擅長(zhǎng)的領(lǐng)域。當(dāng)時(shí)我就想,“還有什么比 24 小時(shí)貼身老師更好的呢?”事實(shí)證明,還是有很多的。
Web 開發(fā)對(duì)孩子來(lái)說(shuō)并不是很好
事后看來(lái),我認(rèn)為 Web 開發(fā)對(duì)于孩子過(guò)渡到基于文本的編程不是一個(gè)很理想的起點(diǎn)。孩子天生在逆向工程方面很出色,但是現(xiàn)代的 Web 開發(fā)中,看到一個(gè)你喜歡的網(wǎng)站,然后照樣建一個(gè)比看起來(lái)困難得多。從頭開始復(fù)制現(xiàn)代網(wǎng)站需要很多 JavaScript 和 HTML 之外的技能,包括 CSS、JS 框架、開發(fā)工具、數(shù)據(jù)庫(kù)、服務(wù)器端語(yǔ)言等等。
現(xiàn)代 Web 開發(fā)的復(fù)雜性對(duì)初學(xué)者來(lái)說(shuō)太難了,更不用說(shuō)對(duì)一個(gè)年僅 11 歲且時(shí)間有限的孩子了。總有一些東西需要不斷學(xué)習(xí),很難跟得上。
那么,我是如何參與的
“學(xué)習(xí)編程”不應(yīng)該感覺像一份工作。我從不強(qiáng)迫孩子編程。我是一名有工作的家長(zhǎng),沒(méi)興趣管理一家編程學(xué)校。對(duì)于盡情玩耍、讀書、學(xué)校的作業(yè),或有時(shí)什么也不做(孩子嘛,偶爾什么也不做也是可以的)來(lái)說(shuō),學(xué)習(xí)編程永遠(yuǎn)是次要的。
學(xué)習(xí)編程需要一種內(nèi)在的動(dòng)力,否則就無(wú)法堅(jiān)持下去。這個(gè)過(guò)程中,我的角色已經(jīng)發(fā)展成了管理、教導(dǎo)和鼓勵(lì)。
一個(gè)新的機(jī)會(huì)
到 2017 年 1 月的時(shí)候,我兒子的學(xué)習(xí)編程之路止步了。在學(xué)習(xí)了大量的 HTML 并學(xué)習(xí)了 JavaScript 之旅第三部分之后,似乎前途茫茫永無(wú)止境。他放棄了編程,跑去讀小說(shuō)了——特別是 Rick Riordan 系列叢書。對(duì)我來(lái)說(shuō),這也不錯(cuò)。
直到 2017 年 7 月,在一次偶然的關(guān)于棒球統(tǒng)計(jì)的討論中,事情又出現(xiàn)了轉(zhuǎn)機(jī)……
“擊打率是多少?”他問(wèn)道。
“命中次數(shù)數(shù)除以擊打次數(shù)。”
“什么意思?”
我的兒子不玩也不看棒球,但他喜歡籃球。所以我開始用籃球做例子解釋……
“這與籃球投籃命中率相似,總命中次數(shù)除以總投籃次數(shù)。這是對(duì)球員投籃能力的簡(jiǎn)單衡量?!?/p>
我看到事情出現(xiàn)了轉(zhuǎn)機(jī),我想,“也許我們可以干點(diǎn)什么?!?/p>
接下來(lái)幾個(gè)星期里,但凡遇到統(tǒng)計(jì)數(shù)據(jù)的例子我就會(huì)指出來(lái),同時(shí)觀察我兒子是否感興趣。電視廣告、YouTube 廣告、廣告牌、圖書等等,統(tǒng)計(jì)無(wú)處不在!我扮演著鼓勵(lì)兒子的角色,并最終買下了《漫畫解讀統(tǒng)計(jì)學(xué)》(Cartoon Introduction to Statistics,作者:Grady Klein / Alan Dabney),也因此激發(fā)了我兒子的學(xué)習(xí)興趣。
2017 年 8 月左右,我兒子讀完了這本書,我開始尋找下一個(gè)學(xué)習(xí)資源。
作為孩子自發(fā)學(xué)習(xí)的倡導(dǎo)者,我需要謹(jǐn)慎地管理學(xué)習(xí)內(nèi)容。無(wú)論學(xué)什么網(wǎng)上都有海量的學(xué)習(xí)資源。我們需要做的是找到適合自己的孩子學(xué)習(xí)風(fēng)格的優(yōu)質(zhì)資源。我建議你首先自己試試看這些材料(觀看一些視頻課程,閱讀幾章書),從而避免選擇的東西過(guò)于枯燥、過(guò)快、過(guò)慢或制作不佳。不良的學(xué)習(xí)材料可能會(huì)對(duì)孩子對(duì)整個(gè)主題的看法產(chǎn)生負(fù)面影響。所以一定要明智地選擇。
回到 Python
2016 年 12 月,數(shù)據(jù)科學(xué)是科技媒體中的熱門話題,而且作為 Web 開發(fā)我想擴(kuò)展一下自己的知識(shí),于是加入了一個(gè)專門學(xué)習(xí)數(shù)據(jù)科學(xué)、R、Python 的網(wǎng)站。我瀏覽了一些課程,和我的兒子聊起了這點(diǎn)。
“還記得 Python 嗎?”我問(wèn)他。
“記得一點(diǎn),”他臉上帶著多疑的表情回答道。
“你知道世界各地的統(tǒng)計(jì)學(xué)家,甚至 Google(我不得不提到 Google)的數(shù)據(jù)和統(tǒng)計(jì)科學(xué)家都在用 Python 嗎?而且你不需要再敲括號(hào)和分號(hào)。你想試試看嗎?”我問(wèn)道。
“不學(xué) JavaScript 了?”他問(wèn)道。
“暫時(shí)不學(xué)了?!蔽一卮鹫f(shuō)。
“好的。”他答應(yīng)了。
于是,我兒子從 2017 年 8 月開始參加了 Python 數(shù)據(jù)科學(xué)入門的課程,并取得了很大進(jìn)展(主要是在周末學(xué)習(xí)幾個(gè)小時(shí))。
一個(gè)月后,他完成了第一門課程。在課程結(jié)束時(shí),我兒子已經(jīng)掌握了 Python 的語(yǔ)法、列表、函數(shù)、包和 NumPy。
再攀高峰
隨后,兒子繼續(xù)開始學(xué)習(xí)中級(jí) Python 數(shù)據(jù)科學(xué),但是在 10 月的時(shí)候中斷了,他很少登錄學(xué)習(xí),并最終放棄了。
我只好介入了……
“課程怎么樣了?你遇到什么困難了嗎?“我問(wèn)道。
“我很喜歡,但我真的不知道如何使用。”
兒子如是說(shuō)。
編程的上下文環(huán)境
我們倆進(jìn)行了很長(zhǎng)一段談話,但是主要內(nèi)容是“怎樣(How)”。我經(jīng)常注意到孩子學(xué)編程的一個(gè)問(wèn)題是:缺乏上下文環(huán)境。
學(xué)習(xí)編程結(jié)構(gòu)和算法沒(méi)問(wèn)題,但是孩子無(wú)法領(lǐng)會(huì)抽象概念,除非與他們現(xiàn)實(shí)世界的某些東西相關(guān)聯(lián)。
Scratch 之所以在孩子中間這么流行,不僅是因?yàn)樗谩斑B接塊”形象地比喻了編程語(yǔ)句,而是因?yàn)樗脑O(shè)計(jì)僅僅圍繞創(chuàng)建和共享故事、游戲以及動(dòng)畫。這很有趣,而且目的明確:即為孩子們帶來(lái)雙贏。
從 Scratch 過(guò)渡到基于文本的編程時(shí),最難的障礙之一就是喪失了這種背景。你無(wú)法再為社區(qū)創(chuàng)建有趣的東西,你在純文本、代碼編輯器和“Hello World!”世界里寫自己的代碼。
這是一個(gè)很大的轉(zhuǎn)變。
所以,我兒子真正的問(wèn)題是:“這對(duì)我有什么用?Python 怎樣才能賦予我超級(jí)力量?”
尋找新的機(jī)遇
我需要一些可以激起兒子好奇心的東西。 一種可以讓他回到編程之旅的方法。
人工智能和機(jī)器學(xué)習(xí)在 2017 年主導(dǎo)了科技媒體,我跟兒子分享了許多那一年的有趣的新聞。他對(duì)大部分并不感興趣(孩子們似乎不喜歡讀郵件),但是根據(jù)與學(xué)校的來(lái)回討論,以下是一些他覺得有意思的故事:
發(fā)現(xiàn)問(wèn)題了嗎?
所有上述故事都是機(jī)器學(xué)習(xí)代碼完成人類工作的例子。它們賦予了我們超級(jí)力量!
“如果你能寫一個(gè)程序來(lái)幫助你做作業(yè),所有那些閱讀摘要和日記,怎么樣?”我說(shuō)。
“真的嗎?怎么做?”兒子的臉上閃著亮光。
“你可以用 Python 學(xué)習(xí)人工智能和機(jī)器學(xué)習(xí)?!?/p>
孩子真的可以理解機(jī)器學(xué)習(xí)嗎?
坦白來(lái)說(shuō),很少有為孩子設(shè)計(jì)的機(jī)器學(xué)習(xí)。孩子喜歡鉆研事物,但是真正了解機(jī)器學(xué)習(xí)需要很多數(shù)學(xué)和統(tǒng)計(jì)學(xué)方面的前提知識(shí)。
作為一名 Web 開發(fā)者,我的線性代數(shù)和統(tǒng)計(jì)學(xué)知識(shí)都有點(diǎn)生疏了,這讓我很難規(guī)劃內(nèi)容并提出有趣的代碼來(lái)做比喻。所以我潛心研究了幾周,盡可能地學(xué)習(xí)機(jī)器學(xué)習(xí)方面的基礎(chǔ)知識(shí)。
機(jī)器學(xué)習(xí)方面的資源量非常龐大:視頻、博客、數(shù)據(jù)、研討會(huì)、課程等等。經(jīng)過(guò)一些測(cè)試后,基于結(jié)構(gòu)化的學(xué)習(xí)和好的實(shí)踐環(huán)境(在開始像機(jī)器學(xué)習(xí)這樣大型的主題的時(shí)候,這尤為重要)的考慮。在對(duì)主流在線學(xué)習(xí)網(wǎng)站的課程進(jìn)行了最后的審查之后,我選擇了其中具有高度針對(duì)性的微型學(xué)位,并明確定義了前提條件,而且還未深度學(xué)習(xí)微型學(xué)位設(shè)定了長(zhǎng)期目標(biāo)的一個(gè),因?yàn)橹纼鹤釉陂_始這門課程之前可能需要幾年的準(zhǔn)備時(shí)間。
重中之重……回到統(tǒng)計(jì)
深度學(xué)習(xí)的微型學(xué)位的課程甚至超過(guò)了我的水平(更別說(shuō)我兒子了),所以我利用前提條件和要求建立了一個(gè)課程地圖。這是第一個(gè)周期:
圖:機(jī)器學(xué)習(xí)課程地圖的第一個(gè)周期
因?yàn)閮鹤油瓿闪?Python 數(shù)據(jù)科學(xué)的入門課程,所以達(dá)成了對(duì) Python 的要求。他立即開始了統(tǒng)計(jì)課程。
一個(gè)重要的里程碑
我兒子真的很喜歡統(tǒng)計(jì)。 2017 年 9 月他完成了網(wǎng)站提供的描述性統(tǒng)計(jì)課程,并開始了推理統(tǒng)計(jì)學(xué)課程。
這是一個(gè)重要的時(shí)刻。這是第一次,他獨(dú)自闖入了一個(gè)超出我的水平的學(xué)科領(lǐng)域。我在大學(xué)里只上過(guò)一門統(tǒng)計(jì)學(xué)的課程,而且那都是很多年前的事兒了。我無(wú)法再立即回答他的問(wèn)題,它必須自己尋求答案。這一刻,我這個(gè)編程老師的角色徹底淡出了。
正如我所料,兒子與這些課程愛得癡纏,他很努力的學(xué)習(xí),比我預(yù)期的還要努力。2018 年 1 月,他完成了推理統(tǒng)計(jì)課大約三分之二的課程。然后,他心滿意足地暫停休息了一下,一直到 2018 年 4 月。
一個(gè)新的機(jī)會(huì)
2018 年 4 月,我看到了新一期的用 Python 進(jìn)行人工智能編程的微型學(xué)位課程。此時(shí)距離我兒子編程已經(jīng)有幾個(gè)月了,這個(gè)課程對(duì)他來(lái)說(shuō)是一個(gè)很好的回顧 Python(NumPy、Pandas、Matplotlib)概念的方式,課程還需要一些額外的機(jī)器學(xué)習(xí)的知識(shí)的條件(線性代數(shù)和神經(jīng)網(wǎng)絡(luò))。而且想到可以拿到結(jié)業(yè)證書的時(shí)候,我兒子也非常積極,于是我們那天就注冊(cè)學(xué)習(xí)該課程了。
圖:2018 年 6 月重寫編寫的課程地圖,并更新了進(jìn)度
接受現(xiàn)實(shí)
但是,因?yàn)檎n程和實(shí)驗(yàn)非常嚴(yán)格,兒子很快就落后于推薦的完成期限了。因?yàn)樵瓌t上每周需要花費(fèi) 10 小時(shí)才能按時(shí)完成課程,所以我并不感到驚訝,但我不想遏制兒子的熱情。由于學(xué)習(xí)量非常大,兒子一整學(xué)年每周都需要花費(fèi) 2-4 小時(shí)學(xué)習(xí)。
圖:兒子在學(xué)習(xí)的用 Python 進(jìn)行人工智能編程的微型學(xué)位課程中使用 Jupyter notebook
現(xiàn)實(shí)的期望
對(duì)于那些剛開始向孩子介紹編程的父母,請(qǐng)將其視為附加的課外活動(dòng)。編程不應(yīng)優(yōu)先于其他活動(dòng),如學(xué)校作業(yè)、自由玩?;虬舶察o靜做小朋友。編程有點(diǎn)抽象,而且并不總是那么有趣,但從長(zhǎng)遠(yuǎn)看來(lái)非常有益。
就個(gè)人而言,我兒子愿意學(xué)習(xí)編程讓我感覺很自豪。我并沒(méi)有期望他會(huì)很快就會(huì)成為超級(jí)明星程序員。我希望他能夠建立新的心理模型,幫助他從不同角度來(lái)處理將來(lái)的問(wèn)題。
我們這代人大多是在命令式編程的世界里長(zhǎng)大的,解決問(wèn)題時(shí)需要按順序定義每個(gè)步驟。孩子的世界是不同的。無(wú)處不在的人工智能和機(jī)器學(xué)習(xí)能夠讓計(jì)算機(jī)根據(jù)適當(dāng)?shù)臄?shù)據(jù)和算法定義這些步驟。希望我兒子能為此做好準(zhǔn)備。
前方的路
對(duì)于那些感興趣的人,我計(jì)劃在大約六個(gè)月內(nèi)再發(fā)表一篇文章,總結(jié)我兒子的最新進(jìn)展和問(wèn)題。誰(shuí)知道呢,也許屆時(shí)他已經(jīng)轉(zhuǎn)戰(zhàn)其他新東西了……如今的孩子們啊。
我還計(jì)劃寫一寫教我的小女兒寫代碼(6 歲和 9 歲)的經(jīng)歷。我的大女兒目前在玩 Scratch,是 Scratch 年輕一代中最小的一個(gè)。
參考資源:
[1] https://hackernoon.com/how-my-10-year-old-learned-javascript-d8782b586db7
[2] https://www.theverge.com/2017/9/10/16276528/ai-video-games-game-engine
[3] https://gizmodo.com/this-artificially-intelligent-speech-generator-can-fake-1794839913
[4] https://futurism.com/a-new-ai-can-write-music-as-well-as-a-human-composer/
[5] https://www.digitaltrends.com/cool-tech/japanese-ai-writes-novel-passes-first-round-nationanl-literary-prize/
英文:Why My 11-Year Old Stopped Coding . . . Then Switched to Python
鏈接:https://hackernoon.com/why-my-11-year-old-stopped-coding-then-started-again-ccc259f2f1a5
聯(lián)系客服