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