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