可計算的未來
█ 本文Wolfram官方譯自2016年9月7日的 Stephen Wolfram 博文 How to Teach Computational Thinking, 由微信公眾號WolframMathematica(ID:WolframChina)授權發(fā)布 .
點擊最下閱讀原文查看英文原文. 轉發(fā)并在[遇見數(shù)學]后臺留言""計算思維"可獲得文中所示源代碼下載鏈接.
可計算的未來
計算思維將會是未來的一個標志性特征,讓孩子們認識到這一點非常重要。一直以來,社會各界對如何訓練孩子們的數(shù)學思維有廣泛關注(和擔心)。但是放眼未來,對孩子們計算思維的教育,其重要性和影響則更為深遠。在日常生活和許多職業(yè)中,的確需要一些傳統(tǒng)的數(shù)學思維,但計算思維將被用于方方面面,擅長于此將是幾乎所有未來職業(yè)成功的關鍵。
醫(yī)生、律師、教師、農民……各行各業(yè)都將需要計算思維。無論是基于傳感器的醫(yī)學、計算型合同、教育分析或計算型農業(yè),成功與否將取決于是否善于運用計算思維。
我注意到了一種有趣的趨勢。從考古學到動物學的各個領域中選擇任意一個領域 X。"計算型 X"要么正在流行,要么就是即將流行。這已被廣泛視為很多領域的未來。
那么,我們怎樣做才能使得孩子們?yōu)檫@種未來做好準備呢?我自己已經(jīng)在此領域潛心研究了將近 40 年(致力于構建計算思維技術,并將其應用于方方面面,同時對它的基本原理進行研究),試圖理解它的原理。至此,我想我弄明白了需要什么來進行計算思維。現(xiàn)在的問題是怎樣把它教給孩子們。我想激動地告訴大家我已經(jīng)找到了答案,它基于我花了30年心血的另一個成果:Wolfram 語言。長期以來,有很多種方法可以進行低級編程原理的教育,但現(xiàn)在令人耳目一新并且至關重要的是,我們終于擁有了直接訓練計算思維的技術,包括對兒童進行這種訓練,那就是利用內置于 Wolfram 語言的知識和自動化功能。
我個人非常致力于教授計算思維,因為我相信它對我們的未來至關重要。我正在盡我所能利用我們的技術來支持這一努力。多年以來,我們在網(wǎng)上免費提供 Wolfram | Alpha。現(xiàn)在,我們還啟動了 Wolfram Open Cloud,這樣,無論在哪里,任何人都可以使用 Wolfram 語言從 Wolfram Programming Lab 開始學習計算思維。但這只是開始,就像我將要在這里討論的,有許多令人興奮的新事物將成為可能。
什么是計算思維?
首先,讓我們試著定義我們所說的“計算思維”。就我而言,它的智能核心是以足夠清晰的方式構置事物,并且以足夠系統(tǒng)的方式,告訴計算機如何去實現(xiàn)。數(shù)學思維是如何構置事物以便在可能的情況下用數(shù)學方式處理它們。計算思維則是一個更大更廣闊的故事,因為有更多的事物可以用計算方式來處理。
但是如何把一件事情“告訴給計算機”呢?我們需要一種語言。了不起的是今天利用 Wolfram 語言我們可以直接與計算機交流我們想到的事情。Wolfram 語言是基于知識的:它知道現(xiàn)實世界中的事物,如城市、物種、歌曲或我們拍攝的照片,并知道如何對它們進行計算。只要我們有一個可以用計算方式構置的想法,關鍵是語言讓我們可以表達它,那么,借助于 30 年的技術發(fā)展,我們就可以盡可能自動地實現(xiàn)這個想法。
Wolfram 語言是一種編程語言。所以在使用它時,你是在編程。但它是一種新的編程,是一種人們盡可能直接地表達計算思維的編程,而不是一步一步地告訴計算機應該執(zhí)行什么樣的低級操作。它是一種人類(包括孩子)提供想法,由計算機和 Wolfram 語言處理執(zhí)行細節(jié)的編程。
傳統(tǒng)上,編程和編程教育一直是關于在低水平上指示計算機進行操作。但是得益于所有內置于 Wolfram 語言的技術,我們不必再這么做了。人們可以在更高的層次表達事物,我們可以專注于計算思維,而不僅僅是編程。
是的,我們的確需要一些能夠用 C 、Java 或 JavaScript 等語言編寫低級程序,并且可以處理循環(huán)和聲明的細節(jié)的軟件工程師。但是需求數(shù)量上遠遠不及能夠以計算方式思考的人。
Wolfram 語言,特別是 Mathematica 形式的,在世界上的科研和開發(fā)中已經(jīng)被廣泛使用了超過四分之一個世紀,促生了無數(shù)重要的發(fā)明和創(chuàng)新。這些年來,我們也逐步填補了我對于擁有一個綜合語言的初衷,在這個語言中,每一個可能的知識領域都是內置和自動化的。令人興奮的是,現(xiàn)在我們已經(jīng)在很多領域做到了這一點,足以支持各種計算思維,例如傳統(tǒng)上學校教授的所有學科。
七年前,我們推出了 Wolfram | Alpha,回答孩子們(和許多其他人)的各種問題。 Wolfram | Alpha 接受日常英語輸入,然后使用 Wolfram 語言的復雜計算自動生成結果頁面。對于孩子們和其他人,Wolfram | Alpha 是利用 Wolfram 語言基于知識的計算能夠做到的事情的一個有力的說明。但它只為解決能以簡單的詞匯所表述的“隨想”問題而設,也可以包括一些簡單的符號。
那么更復雜的問題和其他事情呢?日常英語不再適用。為了獲得足夠的精度,能夠得到確定的結果,人們最終會使用一些非常復雜和不可理解的措辭來表述。但好消息是,有一個替代方法:Wolfram語言,它專門為表達復雜的事物而設,并且總是以精確和確定的方式來表述。
使用 Wolfram | Alpha 不需要任何技能。但是,如果想進一步利用計算的威力,人們必須學習怎樣組織和構建你想要的東西。或者,換句話說,人們需要學習計算思維。令人高興的是 Wolfram 語言終于提供了一種可以做到這一點的語言,因為通過我們不懈的努力,它被設計成超越純編程,并盡可能直接支持計算思維。
計算思維用在何處?
我剛才說的那些都是教授計算思維的技巧。但是計算思維可以融入我們標準教育課程的何處呢?我認為,答案很簡單,任何地方!
有些人可能覺得計算思維只與 STEM 教育有關。但這不全面。計算思維應該與所有課程都相關,與社會學、與語言藝術、與音樂、與藝術、甚至與體育都有關。人們一直在嘗試讓數(shù)學融進這些學科。光用傳統(tǒng)的手工計算的數(shù)學是不可能實現(xiàn)這一點的,但是一旦有了計算和計算思維,情況就完全不一樣了。在每個領域中,都有一些非常強大而且非常明確的部分可以使用計算和計算思維。而且很棒的是,這些對于孩子來說都是可以理解的。Wolfram 語言已經(jīng)做好了內部技術支持,所以你只需要單純關注計算思維和理解,不需要考慮技巧上的障礙。
實現(xiàn)這一點的其中一個方法是要重新定義人們認為"數(shù)學"教育是什么,這一點在基于計算機的數(shù)學學科倡議中已經(jīng)實現(xiàn)。而另一個方法是,考慮將計算型思維直接嵌入各領域學科。我注意到在實踐中,尤其是初等學校——無論是否有技術背景,都有對教授計算思維很有興趣的教師。這一點很像這一代的孩子:你不需是一個技術專家,也可以對基于知識的編程和計算思維感興趣。
過去,對于低級語言如 C 和 Java,你確實需要一個認真的工程方向的人來學習這些語言。但是對于 Wolfram 語言則完全不一樣。當然如果你要精通這門語言確實需要很多學習,但你可以了解其中的計算思維,而非計算機系統(tǒng)中的工程細節(jié)。
所以計算思維如何融入學校課程?我經(jīng)常聽到的是老師們對于在時間允許范圍內把應該教學的東西完成都已經(jīng)很困難了,怎么還能加入其它東西?但是我漸漸開始理解,雖然聽起來有點讓人吃驚:其實加入計算思維可以讓很多東西變得簡單,所以即使多花些時間在上面,卻可以把整體時間減少,學習到的東西反而更多。
為什么會這樣?主要的一點是,計算思維提供了一種可以讓事情變得更透明更易懂的框架。當你想計算式地思考事情時,每個人都可以試一試然后看結果如何。學生還是從某種程度上必須從老師的評論中做結論,這一點沒什么好隱藏的。
有一個多年前發(fā)生的事,那時候 Wolfram 語言——當時還是 Mathematica ——第一次使用于教授微積分。學習微積分的學生在理解函數(shù)的概念方面遇到困難是很正常的事。但是多位教授告訴我,他們注意到,自從學生們開始使用 Mathematica 學習微積分后,他們幾乎不再對函數(shù)感到困惑。原因是他們使用計算思維學習函數(shù)——即通過 Wolfram 語言觀察函數(shù),而不是像傳統(tǒng)標準微積分教學一樣很抽象地理解函數(shù)。
尤其在過去幾十年,幾乎每個學科的教科書編寫有一個很大的傾向是解釋東西很拘泥——所以解釋的最好的往往都不是當時推崇的教科書。但是現(xiàn)在,有了 MathWorld 和 Wikipedia,呈現(xiàn)信息的方式變得更直接了,現(xiàn)在的學生也把這種傾向當做理所當然的事情了。在每個領域計算思維的應用都是這種趨勢的延續(xù):那些以前只能用來描述的事情,現(xiàn)在可以用計算的方式以更具體的方式直接清楚明白的呈現(xiàn)在大家面前。
比如,,你說起莎士比亞的戲劇,希望能體會到戲劇中的感覺。在計算思維中,你可以想象為戲劇創(chuàng)造一個社交網(wǎng)絡(誰通過在一個場景里認識了誰等等)。然后很快你就能有一個不錯的總結了,這時候你就可以說出這部戲劇和主題的很多細節(jié)了。
想象一下現(xiàn)在你又要說到不同語系了。你可以用 WordTranslation 把一些單詞翻譯成上百種語言。然后做一張系統(tǒng)樹圖,看不同的語言中這些單詞都是怎么聚類的,然后你就能發(fā)現(xiàn)印歐語系了。
你也可以說起藝術類型——用很多 Wolfram 語言內植入的著名油畫舉例。然后可以開始比較不同畫作中的顏色使用——可能可以繪制一張圖表說明隨著時間顏色使用是怎么變化的,然后看有沒有人能看出藝術類型在什么時候發(fā)生了改變。
你也可以談論不同國家的經(jīng)濟狀況。你可以立即創(chuàng)建自己的信息圖表,和學生一起研究怎樣才能最好地把重要信息呈現(xiàn)出來。你也可以說歷史,然后使用 Wolfram 語言中歷史地圖數(shù)據(jù)來比較亞歷山大大帝和凱撒大帝的征戰(zhàn)。還有關于美國總統(tǒng),你可以做一張他們在任的時間表,然后用經(jīng)濟和文化指標對歷任總統(tǒng)進行比較。
再假設你在進行英語語法教學。Wolfram 語言一方面可以自動圖解句子,這當然很有用。但你也可以讓學生用自己的規(guī)則造句——這樣他們就能看出什么能造出他們認為語法正確的句子,什么不能。那單詞拼寫呢?計算型思維能幫到這個嗎?我不是很確定。當然展示英文常用單詞很簡單,然后嘗試驗證一些可能的規(guī)則。然后發(fā)現(xiàn)一些有違規(guī)律的例外也很有意思(“u” 總是在 “q” 之后嗎:在 Wolfram 語言中很容易找出這種規(guī)則)。
在不同學科的標準課程中問"這部分可以應用計算思維嗎?"也很有意思。有時候人的第一反應可能就是個噱頭。但我發(fā)現(xiàn)的是,如果有人真正認真思考這個課程的重點在哪里,最后他可能真的能發(fā)現(xiàn)計算思維在這門課程的基礎中的用處。
隨著時間發(fā)展,這樣的例子會越來越多。過去,數(shù)學不能用計算機輔助,這一點很難做到,所以成功的例子也沒有那么多。沒錯,在各個領域這樣案例都呈指數(shù)式增長,但是當人們意識到他們的微積分課本和 1700 年的課本并無太大差異時,可能就不太樂觀了。等到有了標準編程,情況也沒有變好太多,有很多地方斐波那契數(shù)列還在出現(xiàn)。但是有了基于知識編程的 Wolfram 語言,我們面對的情況就完全不一樣了。因為這門語言可以將跨學科跨領域的數(shù)據(jù)和計算都連接起來。
所以,如果有人想要開始教計算型思維,應該如何組織呢?是不是應該開一門計算思維課程?在大學階段,我覺得計算型思維 101 是不錯的。實際上,這可能應該是學生應該上的重要課程。但在高中階段,還不是太明晰應該做什么,而且我并不是這方面專家,我傾向于把計算思維融入各種不同的課程中,這樣可能比較好。
有一個很明顯的問題是:讓學生學習計算思維的初始成本有多大?我覺得依據(jù)我們現(xiàn)在的技術,成本很低。使用 Wolfram|Alpha,那就是零成本。使用 Wolfram 語言中的 Exploration,基本接近零成本。使用 Wolfram 語言中自由形式代碼,可能會有點小成本,而且這可能一次教完更好,有點像大學階段的“服務數(shù)學課程”的微型版本。
值得一提的是,計算思維橫跨學科的應用已有獨一無二的廣度了。大家都想要把自己在一門課程中學到的東西應用在其他地方,但這也并不能經(jīng)常發(fā)生。我已經(jīng)解釋過了傳統(tǒng)數(shù)學教學中的困難。在寫作中情況可能好一點,起碼學生可以使用其他課程中學到的東西應用在論文寫作中。但是很多其他領域都在知識庫中進行教學,并不需要應用其他領域的知識。然而有了計算思維,就可以進行大量交叉連接。莎士比亞戲劇里的社交網(wǎng)絡和國際貿易中的網(wǎng)絡、或和不同語言中單詞之間的圖表的計算思路是一樣的。經(jīng)濟表現(xiàn)中的可視化技術和在體育領域中使用的技術也是一樣的,等等。
基礎知識
也就是最近(基本上花了 30 年的努力) Wolfram 語言終于可以為孩子們學習計算思維提供一種極具吸引力的方式。實際上,不只是語言自身和它所包含的知識是非常重要的,語言環(huán)境也很重要。
首先,第一點我們在將近 30 年前發(fā)明的 Wolfram Notebook 概念是孩子們(和其他人)與語言交互的一個很好的方式。筆記本的主旨是提供一個交互式文檔,可以把代碼、結果、圖形、文本和其他一切都不受限制地混合在一起。人們可以在筆記本中進行計算、輸入代碼,并在文檔中直接得到結果。利用它們自己生成的用戶界面,結果可以是動態(tài)的。大家可以直接在筆記本中讀寫說明或指令。我們花了幾十年來完善筆記本的各個方面。現(xiàn)在我們有了一個可以工作和思考的極為高效的美妙環(huán)境,同時可以學習計算思維。
多年來,筆記本和 Wolfram 語言基本上只能作為桌面軟件使用。但現(xiàn)在,我們在軟件工程方面做了大量的工作,使大家在云端、網(wǎng)絡瀏覽器或移動設備上也可以直接使用。這意味著每個孩子都可以到網(wǎng)絡瀏覽器上立即開始與 Wolfram 語言進行交互:創(chuàng)建或編輯筆記本,并編寫任何他們想要的代碼。
這些事情的發(fā)生需要大量的技術來推動。我花了生命中大部分的時間來構建它。看到利用我們的技術實現(xiàn)了這么多偉大的前沿成果,令我非常欣慰。現(xiàn)在我真的很期待看到用它來傳播計算思維給子孫后代會帶來什么。
在創(chuàng)建 Wolfram | Alpha 的時候,我決定把它放在網(wǎng)上,免費供大家使用。看到這么多人( 特別是孩子們)每天都在使用它真的是太好了。所以在幾個月以前,當技術上已經(jīng)成熟的時候,我又決定在 Wolfram Open Cloud 中免費提供整個 Wolfram 語言,并設置好讓孩子們(和其他人)可以在那里學習計算思維。
Wolfram | Alpha 被設置成任何人都可以用日常英語向它提問。在眾多優(yōu)點中,這對在各領域為教育提供支持非常有益。但是,如果你非常想要學習未來真正的計算思維,那你就不能只用日常英語提問。這就要用到 Wolfram 語言了。
那么,入手使用 Wolfram 語言并進行計算思維的最好方法是什么呢?可能有很多答案,這取決于不同的孩子擁有的環(huán)境和資源情況。我認為我個人在與孩子打交道上做得還不錯,例如在我們的 Wolfram 高中生夏令營中,通過直接的個人指導,我看到了很好的結果。
但是擁有“自助”方案也很重要,為此我專門寫了一本書,叫做《Wolfram 語言入門》。這是一本關于計算思維的書,不要求有任何編程知識或者是高深的數(shù)學知識。但在讀書的過程中,漸漸引領人們習慣于寫出真正的程序,完成他們想做的事情。
本書可在網(wǎng)上免費閱讀。書后還附有練習,云端會自動為你評分。原本這本書是面向高中及以上學歷的人群,但后來我發(fā)現(xiàn)一些熱心研究的初中生(11歲及以上的學生)也在讀這本書,這本書甚至還推廣到了研究生的數(shù)學課、銀行培訓和專業(yè)軟件開發(fā)者的教育等等。
不久我們會提供與本書配套的(免費)在線課程。據(jù)我所知,還有一些使用本書來教授現(xiàn)代編程和計算式思維的課程正在開發(fā)中。
好了,那么,當孩子打開瀏覽器想要學習計算式思維和 Wolfram 語言時,他們究竟應該去哪里呢?這個問題的答案就是我們幾個月前發(fā)布的 Wolfram Programming Lab。在 Wolfram Open Cloud 中有免費版本(如果不需要儲存你的工作的話,你甚至不需要登陸)。
Wolfram Programming Lab 有兩個基本分支。第一個是 Exploration 系列。每一個 Exploration 都是一個筆記本,包含可編輯的代碼,可以運行一些有意思的東西。當你把現(xiàn)有的代碼過完一遍后,筆記本會建議你進行進一步探究。
Exploration 讓你初步領略 Wolfram 語言和計算式思維。小孩通常在幾個小時內就可以掌握基礎內容。從某種意義上說,這有點像“浸入式語言學習”:先從“流利的發(fā)言人”所寫的代碼入手,然后再與這些代碼互動。
Wolfram Programming Lab 還提供了第二個分支:我這本書的交互式版本,讓你一步一步學習,從寫一個最簡單的代碼開始,然后循序漸進地創(chuàng)建更多復雜的代碼。
你可以完全通過瀏覽器在云端使用 Wolfram Programming Lab。但也有桌面版本可以在任何普通電腦上運行,這樣你可以迅速獲取本地互動,也可以按照你的需求進行大型計算。如果你用的是 Raspberry Pi 計算機,那么 Wolfram Programming Lab 是與操作系統(tǒng)綁定的,包括從與 Raspberry Pi 相連接的傳感器中獲取數(shù)據(jù)的特別功能。
我希望確保 Wolfram Programming Lab 能適合所有孩子使用,無論他們在哪里,所處的教育環(huán)境怎樣。從我們知道的看來,這一點好像運作的還不錯,當然如果孩子們能有和他們一起學習的人那是最好。我們已經(jīng)計劃建立一個非正式網(wǎng)絡結構來支持這一設想,同時還可以使用現(xiàn)有的活躍度很高的 Wolfram Community。我們仍在不斷努力,最終希望 Wolfram Programming Lab 可以輕松地與現(xiàn)有的、有組織的教育環(huán)境融為一體,而不只是使用 Wolfram 語言進行世界上最好的教育分析來分析學生的學習進度。
值得一提的是,Wolfram Cloud 的整體架構的優(yōu)點之一是,它可以讓任何人——不管是學生還是老師——直接在網(wǎng)絡發(fā)布內容供全世界使用。比方說,在 Wolfram Programming Lab 中,Exploration 的結束部分就是例行在網(wǎng)絡上部署應用。
理解在每一個可能的學習環(huán)境中部署 Wolfram Programming Lab 的細節(jié)對我們來說可能還為時過早,但我們在很多方面都在穩(wěn)步向前。不久前我在韓國在一群孩子面前做了一個演講,我問他們覺得自己是否有能力學習 Wolfram 語言。其中有一個孩子回答,她覺得除了函數(shù)名稱都是英文的外,其他都看起來挺簡單的。
這讓我陷入思考,思考的結果是我們推出了多語言代碼說明,對代碼進行多語言注釋。也就是說,你仍然使用標準函數(shù)名稱輸入 Wolfram 語言代碼,但是可以即時得到代碼的母語解釋。(順便說一聲,我的這本書也會有各種語言的版本發(fā)行。)
初涉 Wolfram 語言
那么,當孩子們首次接觸到 Wolfram 語言時,情況是什么樣的?作為我努力學習如何教授計算思維的一部分,我在過去幾年里花了相當多的時間和孩子們一起使用 Wolfram 語言。
有時是與大團體,有時與小團體,有時我會注意到一個成年人參加的活動中的小孩子,最終我會拿出計算機,與孩子們進行交流而不是和大人們。我曾和高中年齡段的孩子們和中學年齡段(11-14歲)的孩子們打過交道。
如果是一個孩子,或一個小組,我會永遠堅持讓孩子們打字。通常我會從大家都知道的東西開始。讓計算機計算 2 2。他們鍵入,然后看到電腦給出了他們知道的結果:
他們經(jīng)常會嘗試一些其他的基本算術。非常重要的是,Wolfram 語言允許他們只進行輸入,并立即看到輸出,沒有額外的步驟。
在完成了一些基本的算術后,我通常建議他們嘗試生成許多位數(shù)字的運算:
通常他們會問,這樣子能行嗎,或這么長的數(shù)字會不會把計算機弄壞。我鼓勵他們嘗試其他例子,他們則經(jīng)常會嘗試能立刻產(chǎn)生幾頁數(shù)字的計算。幾十年來,我們一直能夠進行這些大數(shù)字的運算,但是孩子們還是會很興奮。重要的一點是讓他們感受到計算機真的可以進行巨量的計算(想想要是你來做這些運算的話,要花多長時間......)。
在做了一些基本的算術后,是時候讓他們嘗試一些其他函數(shù)了。我常常以最常用的函數(shù) Range 開始:
Range 是一個很好的例子,因為很容易讓孩子們看到它在做什么,他們很快就能明白,太好了,告訴計算機去做一件事,計算機就會照做。Range 的另一個好處是很容易用它來給出令人滿意的大結果。通常我建議他們嘗試 Range [1000],他們會問 Range [10000] 行不行,我會告訴他們試試看啰......
我會與每個孩子或不同群體的孩子做不同的事情。但相當普遍的是下一步我們會看看如何可視化我們所做的列表:
如果孩子們碰巧喜歡數(shù)學,接下來我會嘗試制作一張素數(shù)表:
然會把它們畫出來:
對于自認為可能不喜歡數(shù)學,或籠統(tǒng)地不喜歡科技的孩子,我可能改用一些顏色:
我們可能會嘗試把紅色和藍色混在一起,產(chǎn)生紫色:
我們也會嘗試獲取攝像頭當前的圖像:
然后勾勒出所有的“邊”:
我們也會嘗試對顏色做更復雜的操作:
也許我們會選另一個方向,獲取英語常用詞匯列表(如果任何一個孩子知道另一種語言,我也會進行嘗試):
如果孩子們喜歡語言藝術,我們可能會嘗試隨機產(chǎn)生一些單詞:
我們會了解如何用 StringTake 來提取每個單詞的第一個字母:
然后用 WordCloud 制作一個詞云,查看每個首字母出現(xiàn)的相對頻率:
有些小孩兒可能會問“那前兩個字母呢”?我們會改為嘗試這種情況(對,UpTo 就涉及到一些計算型思維):
我們也可能討論一下有多少個單詞是以 ”un-” 等開頭的。然后對其中的一些單詞做一番調查。接下來還可以看看這些單詞的翻譯:
實際上,只是做我剛剛提及的那些事情就可以很容易地花上幾個小時。但讓我們來看一些其他的例子。關于 Wolfram 語言的一個重要的事實是它知道很多現(xiàn)實世界的數(shù)據(jù)。我通常會通過一系列的步驟來構建,但是這里有一個例子,制作歐洲國家的國旗拼貼,其中,每個國旗的大小由該國當前人口的數(shù)量決定:
因為我們剛剛碰巧談到了顏色,所以來看看這些國旗在顏色空間的位置會是一件有趣的事情(例如,顯然不會有很多“粉紅色國家”):
Wolfram 語言的一個宏大主旨在于不僅可以進行抽象的計算,還可以基于現(xiàn)實世界的知識進行計算。Wolfram 語言涵蓋了許多領域,從傳統(tǒng)的 STEM 類領域到藝術、歷史、音樂、體育、文學、地理等各個方面。孩子們常常喜歡利用地圖做許多事情。
我們可以從自己所在的地方 (Here) 開始。或從一些地標開始。比如這里是顯示埃菲爾鐵塔周圍半徑 100 英里范圍的地圖:
下面是“10 的冪”系列大小的圖像:
那么,歷史呢?Wolfram 語言如何與之互動?實際上它飽含各種歷史知識。關于國家(繪制羅馬帝國的興盛和衰落),或電影(比較電影海報隨時間的變化),再或者,單詞。像這里是在過去 300 年書中使用“馬”和“汽車”的比較:
可以對國家的名字、發(fā)明創(chuàng)造,或其他東西進行類似嘗試;總有很多歷史可供討論。
有這么多方向可以選擇。這里是另一個:圖形。我們來制作一個三維球面:
對孩子們來講,能作出這樣的三維圖形并進行移動永遠是一件很有趣的事情。如果他們想要把事情弄得更復雜一點,我們可能會用顏色隨機的 100 個隨機球面制作一幅這樣的三維圖形:
所有年齡段的孩子都喜歡做交互式的東西。這里有一個簡單的“可調節(jié)的獨眼巨人的眼睛”,大家可以輕松地逐步進行調節(jié):
我有時做的另一件事是使 Wolfram 語言發(fā)出聲音。這里是一個隨機的音符序列:
有這么多方向可以選擇。如果孩子是未來醫(yī)療領域的苗子,可以向他們展示 3D 解剖學,挑出骨頭的幾何形狀并進行 3D 打印,等等等等。
其他方面呢......
在對計算思維方面付出努力之前,我從來沒有認真地嘗試過與孩子們打交道(雖然我自己有四個孩子)。所以我不知道應該期望什么。和別人說起我對技術發(fā)展的孜孜以求的日常生活的時候,他們都不以為然。他們不斷對我想做的事情提出可能的障礙。第一條是他們懷疑孩子們實際上能不能在 Wolfram 語言中輸入原始代碼;他們認為孩子們會被語法搞糊涂,或是其他問題。第二條是他們認為除非代碼能生成一個孩子們可以玩的游戲,否則他們是沒有動力去寫代碼的。
和孩子們打交道的一個好處是如果給他們機會,他們會非常快地讓你明白什么能行,什么不行。那實際情況是什么呢?以我的經(jīng)驗,人們提出的那兩個潛在問題都沒有成為真正的問題。但其中的原因十分有趣,遠不是我本來預期的。
關于鍵入代碼,要認識到在今天的世界里,大多數(shù)中學階段的孩子都已習慣于用鍵盤輸入,至少是輸入文字。有時,在他們開始輸入代碼時會先看看 [ ] 鍵在哪里,甚至是 號在哪里。但打字本身對他們不是根本問題。他們也習慣于學習事情運行的精確規(guī)則(在英語拼寫中,i 在 e 之前;數(shù)學的運算順序;等等)。所以,學習幾條規(guī)則,如“函數(shù)要使用方括號”,或“函數(shù)名要以大寫字母開頭”不是什么大問題。當然,在 Wolfram 語言中不存在自然語言(如英語)中才有的不規(guī)則性。
在觀察孩子們輸入代碼的時候,我注意到自動提示是很重要的(在匹配以前中括號是紫色的;如果位置不對,輸入的東西會顯示為紅色;為所有輸入提供自動補全等)。但歸根結底,盡管大人們有各種理論上的顧慮,實際上孩子們似乎很容易在 Wolfram 語言中鍵入語法正確的代碼。事實上,我經(jīng)常吃驚于孩子們快速“理解”的能力。看過幾個例子后,馬上就能推而廣之。最棒的是因為 Wolfram 語言是以非常一致的方式設計的,他們的概括結論總是對的。作為語言的設計者,看到這些令我非常欣慰。當然,對于孩子們,事情就應該以這種或那種方式工作,他們無法體會如此設計背后人們所付出的努力。
OK,所以孩子們是能夠鍵入 Wolfram 語言代碼的。但他們想這樣做嗎?許多小孩兒喜歡在計算機上玩游戲,成年人常常認為這是他們唯一在計算機上想做的事情。但以我的觀察,這并不是事實。對于大多數(shù)孩子來說,關于 Wolfram 語言的最重要的事情是,他們可以立即用它來“做一些實事”。他們可以輸入任何他們想要的代碼,并立即讓計算機為他們做點什么。他們可以創(chuàng)建圖片、聲音或文本,可以進行藝術創(chuàng)造,可以研究科學、可以探索人類的語言,可以分析 Pok?mon(沒錯,Wolfram 語言有豐富的 Pok?mon 數(shù)據(jù))。如果他們真的非常想的話,也可以制作游戲。
根據(jù)我的經(jīng)驗,如果你在孩子們看到 Wolfram 語言之前問他們編程有什么好玩兒的,他們經(jīng)常會說游戲。但是,一旦他們實際上看到了 Wolfram 語言的功能,他們就會停止談論游戲,會想做一些“實事”。
孩子們能做什么?
頂尖的科學家和技術專家每天都在使用 Wolfram 語言做很多復雜的事情。但是最近 Wolfram 語言最重要的發(fā)展是,孩子們也可以開始使用這門語言了。而且我說的不是什么打折的玩具版本,而是專家們都在使用的 Wolfram 語言版本。(是的就像英語語言一樣,有些孩子們不會使用的生僻字,所以 Wolfram 語言中也有一些孩子們一般不會用的晦澀的函數(shù)。)
所以是什么幫助實現(xiàn)了這一點呢?基本上就是過去30年我們在 Wolfram 語言中寫入的一層又一層的自動化技術。我們的目標就是讓這門語言越自動化越好——這樣使用 Wolfram 語言的任何人,無論是頂尖的專家還是中學的孩子,只要提供概念和他們的計算思維,這門語言就可以自動做剩下的工作,并且完成賦予的任務。
過去,孩子們和專家用的經(jīng)常是兩個分開的系統(tǒng)。但是由于有了這個自動化技術,兩個系統(tǒng)可以合并了。這樣的事在其他領域也發(fā)生過。比如以前,業(yè)余剪輯手用的是簡單系統(tǒng),專家使用更復雜的系統(tǒng),但是現(xiàn)在,從孩子到大片的制作人,使用的都是同一套系統(tǒng)。
對于計算思維和編程,要達到這一點可能更困難,但是經(jīng)過 Wolfram 語言30年來的努力,我認為我們已經(jīng)實現(xiàn)了這個目標。
在很多標準課程學科,孩子們只是模仿老師教學的東西。但是有了計算思維,孩子們已經(jīng)有了和老師一樣的工具,所以現(xiàn)在孩子們也能做一些專業(yè)級別的事情了。
在某種程度上,孩子們在學校里所學的功課,都很少能夠舉一反三。孩子們花很多精力做數(shù)學或化學題。如果要寫論文,他們要清清楚楚地寫出每個字。但是有了計算思維和 Wolfram 語言,情況就完全不同了。一旦孩子知道了怎么計算式地構建,然后知道怎么把這個思路用 Wolfram 語言表達出來,然后語言就可以接管剩下的事,構建出一個復雜的結果。
有學生可能對歷史王國的發(fā)展和滅亡有一些想法,而且可能想到了一個規(guī)劃歷史國家的地理面積的時間序列的辦法。只要他能把這個思路用 Wolfram 語言寫出來,Wolfram 語言就可以幫助該學生立即生成精細的表格、信息圖像等等,然后學生就可以根據(jù)這些圖表得出各種結論。
孩子又可以從用 Wolfram 語言寫東西中學到什么呢?首先最重要的,他們學習了計算思維。計算思維是一種非常新的思考方式。但是它和孩子們做的其他事也有一些相同的特點。比方說,和數(shù)學一樣,它強調的是思路的準確與清晰。和寫作一樣,本質上是在交流思想,是一種創(chuàng)作活動。Wolfram 語言中的優(yōu)秀代碼,像寫作一樣,是清楚優(yōu)雅的,而且易讀易懂。但與普通意義上的寫作不同的是,它的受眾不僅僅是人類,還有計算機,Wolfram 語言告訴它們應該自動執(zhí)行什么。
當學生在做數(shù)學、化學或其他學科的題目時,他們如果想知道是不是得到了正確答案,通常不是問老師就是看“課本最后的答案”。但是 Wolfram 語言代碼給他們帶來了不同的體驗。因為孩子們可以知道他們解題的思路方向是否正確。代碼應該可以做一個像蜂巢的陣列。Wolfram 語言真的做得到這一點嗎?
寫代碼的整個過程與孩子們做的其他事還是有一點小區(qū)別。首先要構思代碼,然后對代碼進行調試。調試是一個非常有趣的腦力活。在 Wolfram 語言中調試的難度比起以前已經(jīng)大大降低,這是因為 Wolfram 語言是符號化的,任何代碼片段都可以單獨運行、分開研究。
但是調試的最終目的是理解和解決問題,是處理生活中很多事物的單純形式。但調試最好的地方——尤其是在 Wolfram 語言中——是它能立即反饋。所做的改變有沒有效果,是不是需要深入研究,想點其他辦法,等等。
調試的一部分是讓一段代碼生成結果。調試的另一部分是了解生成的結果是不是正確的。比如莎士比亞戲劇的社交網(wǎng)絡是不是合乎情理的?為什么有很多角色好像和其他人都沒有聯(lián)系?我們要理解我們是怎么定義"聯(lián)系"的。這么定義有意義嗎?有沒有更好的定義?
這就是計算思維在做的事。和編程沒有太大關系,而是關于應該對什么進行編程,是關于構思整個問題,使之可以用計算的形式表達。而有了如今的 Wolfram 語言,我們已經(jīng)有了這樣一個環(huán)境,把自己的構想變成現(xiàn)實。
讓孩子引導
到底什么是計算?什么又是編程?
近幾年來,很多人都在談“寫代碼”教學。當然,“寫代碼”跟計算思維不同。這有點像手寫或鍵入一篇文章與寫作的關系。您(通常)要手寫或打字才能完成一篇文章,但這不是核心的智力活動。OK,那么“寫代碼”應該怎么教呢?
Wolfram 語言的理念是,一個人應該能夠運用計算思維,把人類形成的想法盡可能直接地轉換成語言中的代碼。在一些小的情況下(它們可以被逐漸變大), 可能只需用英文指定他(她)想要什么。但通常人們就直接用 Wolfram 語言寫出。這意味著,在某種程度上我們是在寫代碼,或者稱為編程。
但這其實是一種級別很高的編程,比大多數(shù)程序員所習慣的級別要高得多。這正是為什么它現(xiàn)在正被越來越多的人使用,也是為什么把它大規(guī)模地應用于教育教學領域更有意義。
但它與“傳統(tǒng)的”編程教學有什么聯(lián)系呢?實際上,迄今為止我們采用過的編程教育只有兩種類型:一種大概可以稱為”高中版“,另一種是”小學版“。近年來,高中版主要是關于 C 和 Java。小學版主要是 Logo 的衍生品,比方說 Scratch。有一點很令我震驚,即使是在美國很頂尖的學校里那些喜歡玩科技的小孩子,他們在學校里所學到的編程知識也是少之又少。
但當他們真的開始學習”編程“時,比方說到了高中,他們會學到什么?通常是大量的語法細節(jié),而頂尖的概念則往往是條件語句、循環(huán)和變量。作為一個對計算傾注了大半生心血的人來說,這實在是令人失望。是的,這些概念是低級計算機語言的一部分,與我們現(xiàn)在所廣為理解的計算還相去甚遠,在一般意義上的計算型思維這個大的概念中,它們充其量是幾張幻燈片而已。
重要的是什么?在實踐中,最重要的一個概念大概是一切事物 (文本、圖像、網(wǎng)絡、用戶接口,等等等等)都可以表示為計算形式。函數(shù)和列表這類概念也很重要。如果一個人很聰明,通用計算 (軟件由此產(chǎn)生) 的概念也很重要。但問題是現(xiàn)在所教的不僅不是一般的計算型思維,甚至都不是一般的編程。條件語句、循環(huán)和變量是1960年代所出現(xiàn)的第一代實用計算機語言的核心。今天的計算機語言,比如 C 和 Java,有了很多更好的方法來管理大量代碼,但其基本的計算結構仍然與上世紀60年代的語言非常類似。而孩子們通常只寫極少量的代碼,事實上這跟那個年代所進行的計算沒什么不同(只不過由于致力于大型代碼庫的機制,可能更復雜一些)。
Wolfram 語言是一門現(xiàn)代化的語言。如果是在1960年代,它不會如此實用:那時的計算機不夠大也不夠快,也沒有維護大型知識庫的云端。(湊巧的是,在1960年代初期,LISP 和 APL 等語言已經(jīng)有了更高水平的、與 Wolfram 語言相似的理念,但那些理念直到幾十年后才真正被實際應用。
那么條件語句、循環(huán)和變量又如何呢?它們全部存在于 Wolfram 語言中,不過不再是前端和中心概念。比方說,在我的《Wolfram 語言入門》一書中,直到第38章,才開始討論變量賦值,而在此之前,我已經(jīng)介紹過在網(wǎng)頁上部署基于知識的高級應用程序。
舉個例子,比方說我們想要作前10個平方數(shù)的表格。在 Wolfram 語言中,這非常簡單:
但如果用 C 語言的話,大概得這樣: