培養(yǎng)計(jì)算思維的難點(diǎn)在于如何設(shè)計(jì)好的教學(xué)課程,特別是入門級課程。創(chuàng)客類課程和少兒編程類課程都有很豐富的選擇,計(jì)算思維的課程卻很少,國內(nèi)能自行設(shè)計(jì)計(jì)算思維課程的老師也是少之又少。
既然國內(nèi)缺乏好的計(jì)算思維課程,索性我們還是先向國外大牛們?nèi)∪〗?jīng)吧。在推進(jìn)計(jì)算思維教育這條路上,英國是先行者之一,他們組織專業(yè)人士設(shè)計(jì)了Unplugged Computational Thinking(不插電的計(jì)算思維) 系列課程。
該系列課程由倫敦瑪麗王后大學(xué)設(shè)計(jì),易上手,啟發(fā)性強(qiáng),而且很關(guān)鍵的一點(diǎn)是課程中并不需要使用電腦等計(jì)算設(shè)備,也不需要具備任何編程基礎(chǔ),只需具備一定的邏輯思維能力即可,所以非常的大眾化。
這篇文章小編為大家介紹該系列課程的第一課《為對話而搜索》,該課程的設(shè)計(jì)靈感來源于暢銷書作者多米尼克?鮑比的真實(shí)經(jīng)歷。鮑比在身患閉鎖綜合癥后,在助手的幫助下,靠一只眼睛眨眼來拼讀單詞,完成了暢銷書《潛水鐘與蝴蝶》的寫作。該課程模擬類似場景,啟發(fā)學(xué)員設(shè)法找到助手和患者高效溝通的方法。在游戲過程中,參與者可以體驗(yàn)到編程、算法、迭代、糾錯(cuò)等概念,非常直觀的體驗(yàn)到運(yùn)用這些思維的神奇效果。
面臨的問題
計(jì)算思維是用來幫我們解決問題的,在這里,待解決的問題是“助手如何快速知道鮑比想說什么”。
患病的鮑比只有一只眼睛可以活動(dòng),他聽的見,也看的見,但是無法用語言和外界溝通,唯一可用的就是他的這只眼睛。也就是說,眼睛是鮑比唯一可用的與外界進(jìn)行溝通的工具了。
一個(gè)可能的解決辦法
讓助手從成千上萬的單詞中直接猜測鮑比想說的單詞(我們稱之為目標(biāo)單詞)顯然是個(gè)幾乎不可能完成的任務(wù),但是從26個(gè)英文字母中猜測目標(biāo)單詞的首字母、第二個(gè)字母等卻簡單的多。
一個(gè)很容易想到的方法是用眨眼次數(shù)來代表不同的字母,眨一次代表A,眨兩次代表B,其他字母依此類推。這樣的話,助手要做的就是數(shù)鮑比的眨眼次數(shù),再將對應(yīng)的字母寫下來。按照這種方法,從目標(biāo)單詞的首字母開始一個(gè)個(gè)猜下去,就能完整地拼出目標(biāo)單詞了。
想出這個(gè)辦法的過程中我們就用到了一種“計(jì)算思維“,我們把這種計(jì)算思維叫”算法思維“。算法就是一種約定好的運(yùn)算方式,按照這個(gè)約定好的規(guī)則一步步地做下去就能完成某種目標(biāo),在這里,目標(biāo)是傳達(dá)字母和單詞。算法思維是指如何想出一個(gè)算法去解決問題。
算法之美
算法的美妙之處是相關(guān)對象不需要理解他們在做什么以及為什么這么做。在算法的幫助下,助手即便不理解自己所做的事情,書依然能被寫出來。助手只需要數(shù)清楚鮑比的眨眼次數(shù)并把相應(yīng)的字母寫下來就可以了。我們可以給鮑比和助手準(zhǔn)備一個(gè)眨眼次數(shù)和字母對照表,這樣他們就能完全不需要思考地按照算法去做了。
算法的美妙就在于它使得人們能夠“機(jī)械化”做事情,這意味著計(jì)算機(jī)也可以不加思考地按照指令做事情。
我們想出的這個(gè)算法分為兩個(gè)部分,一部分是鮑比用來執(zhí)行的(根據(jù)字母對應(yīng)的次數(shù)眨眼),一部分是助手用來執(zhí)行的(數(shù)清鮑比的眨眼次數(shù)并寫下相應(yīng)字母)。對于這種兩個(gè)人之間或者兩臺(tái)電腦之間用來傳遞信息的算法,計(jì)算科學(xué)家管它們叫協(xié)議。
雙方都要按照協(xié)議中關(guān)于自己的那部分去做,假如任何一方出錯(cuò)(假如數(shù)錯(cuò)了次數(shù)),信息傳遞都會(huì)失敗。而計(jì)算機(jī)的厲害之處就是它每一次都會(huì)完完全全地按照協(xié)議去做,不會(huì)犯類似錯(cuò)誤。
算法思維是一種特殊的問題解決方式,它不需要你給出一個(gè)問題的具體答案,比如“42”,而是要你給出一種有步驟的解決方案,其他人(也包括計(jì)算機(jī))只要按照這個(gè)步驟做就能得出答案。比如我們給鮑比提出的這個(gè)辦法,辦法本身并不能告訴我們鮑比想說什么,但是我們能它算出鮑比想說的話。雖然很慢,但至少能幫鮑比和助手實(shí)現(xiàn)溝通了。也許有更好的方法,尋找更好的方法也是算法思想的一部分。
鮑比是怎么做的
鮑比的確有更好的辦法,別忘了,助手是可以說話的,而鮑比的聽力也沒問題,因此我們可以利用這一點(diǎn)。鮑比用了這樣的一個(gè)算法,讓助手從“A-Z”按順序的讀字母表,當(dāng)鮑比聽到他想要的字母后就眨眼示意,這時(shí)助手停止讀字母并將讀過的最后一個(gè)字母寫下來。然后重復(fù)這樣做,把字母一個(gè)個(gè)寫下來。和朋友一起試試這種交流方式,試想一下這是你僅有的和外界溝通的方法。希望你的名字不是“Zebedee? Zacharius ?Zog or Zara Zootle”。
一但你試過了這種方法,就會(huì)發(fā)現(xiàn)真要想讓它發(fā)揮作用還有一些問題。試過之后,也許你還能想出別的辦法來改善這個(gè)算法,試一試你能想出什么辦法。
細(xì)節(jié)優(yōu)化
你可能會(huì)發(fā)現(xiàn)的一件事兒是你需要處理的不只是26個(gè)英文字母,還有空格、阿拉伯?dāng)?shù)字、句號等等信息,你需要把這些也添加到要使用的表格里。還有一個(gè)要解決的問題是如果錯(cuò)眨了眼睛怎么辦,我們要想個(gè)辦法讓鮑比表達(dá)“剛才眨錯(cuò)了,忽略它,重新開始”,用快速連眨兩次眼睛來代表這個(gè)意思似乎不錯(cuò)。
算法思維是關(guān)于尋找解決辦法以及處理解決辦法中的細(xì)節(jié)的,是關(guān)于認(rèn)識到做事情的方式有很多種,而我們要想出針對這個(gè)情景的最佳方法的。我們要意識到算法中人去做的那部分事情是我們要解決的問題之一。理論上,我們的算法這樣就能起作用:在正確的時(shí)間眨眼。我們可以傲慢地說人應(yīng)該把事情做對,做錯(cuò)了,那是人的錯(cuò),跟我無關(guān)。但不要忘了我們的目的,我們的目的是幫鮑比和助手實(shí)現(xiàn)溝通,所以我們要考慮如果人出了錯(cuò)該怎么辦,我們設(shè)計(jì)的算法要能夠允許人犯錯(cuò)并能夠?qū)⑵浼m正過來,所以說,算法思想和理解人也有關(guān)。
如何做得更好
在單詞拼寫到一半的時(shí)候,通過直接猜測目標(biāo)單詞的方式我們可以加快速度。假如你已經(jīng)知道了“a-n-t-e-l”,那么很容易猜測目標(biāo)單詞是“antelope”。所以你可以改編算法的規(guī)則,讓助手去做類似的猜測。那么我們就需要一種方法讓助手知道他的猜測是否正確,也許方法就是猜對了就眨眼,沒猜對就什么也不做。
這其實(shí)就是“預(yù)測性文本”的工作方式,手機(jī)里用的就是這種算法,也許手機(jī)也是你想到“猜詞”這種方法的來源。如果你想到了這種猜詞的辦法,那么你就運(yùn)用了另一種計(jì)算思維——問題轉(zhuǎn)化。
通常,我們遇到的問題會(huì)變得和我們在另一個(gè)不同情景下見過的問題很相似。如果對于另一個(gè)不同情景下的問題我們有解決辦法,那這個(gè)辦法就可以拿來用。和助手在看到幾個(gè)字母后需要猜測鮑比想說什么一樣,手機(jī)也有同樣的問題需要解決,手機(jī)需要在人們打字過程中弄清人們想要打什么字。一旦意識到了這一點(diǎn),對于這兩個(gè)問題,有了解決任何一個(gè)問題的辦法,都可以拿去解決另一個(gè)問題。
鮑比的助手的確使用了一種“預(yù)測性文本”。鮑比也意識到“拼讀字母的算法”可以用一種不同的方式來改進(jìn)。在他患病前,他曾是法國女性雜志 ELLA 的編輯,因此熟知語言。他知道在語言里,一些字母比其他字母更常見,比如,字母E 在英語和法語中都是最常見的。因此他讓助手按照字母的常見程度(在單詞中出現(xiàn)的頻率)讀字母,在英語中是這個(gè)順序“E…T…A…O…”在法語中是這個(gè)順序“E…S…A…R…”。這樣,他的助手可以更快得到常見字母。
很久以來,類似的技巧也被用于破解密碼。一千多年前,穆斯林學(xué)者發(fā)明了使用字母頻率的方法。鮑比利用頻率分析的主意也是一個(gè)問題轉(zhuǎn)化的例子,只要我們意識到破解密碼和猜字母是類似的問題,那么為其中一個(gè)問題發(fā)明的方法就可以用于解決另一個(gè)問題。