牟連佳 李丕賢 邵洪艷
摘要:隨著移動計算和社會計算的發展,人們可以隨時隨地獲得需要的信息和服務,計算思維幾乎無處不在。計算思維使用的隱喻和結構正在影響著所有的科學與工程領域。對計算教育的研究工作將為“計算思維”成為一種全面共享的21世紀的文化技能而鋪平道路。需要利用多個學科(包括計算機科學、教育學、心理學和社會學)的方法來改善計算教育。
關鍵詞:計算;計算教育;計算思維;計算機科學
中圖分類號:G642.41 文獻標志碼:A 文章編號:1674-9324(2015)51-0228-02
一、前言
上世紀60年代初,專家提出:校園內的每一個大學生都應該學會程序設計[1],要把這當作通才教育的組成部分。他們認為,程序設計是對流程的探索,是一個與每個人都有關的課題,而且如果能用機器來自動執行流程的話,那將會改變一切。他們將程序設計看作是理解“計算理論”而必須采取的一個步驟,將導致學生們從計算理論的角度對大量的課題(比如微積分和經濟學)進行重新理解。
今天,流程的自動執行正在所有的科學與工程領域中改變著各個學科的專業人員對本行工作的思維方式。計算思維所使用的隱喻和結構正在影響所有的科學與工程領域。計算思維的專業人員與教育工作者有責任幫助各個學科的思想家去掌握計算思維方法。
通過正規教學將能夠部分實現這一職責。雖然其他領域內的專業人員可能不需要多少訓練就能夠使用某一種應用軟件,但是在軟件設計中所涉及到的隱喻和思維方式卻必須予以明確講授。在對校園中所有大學生進行計算教育的時候,可能需要采用多種不同的方法。這些方法應該與對那些有志成為計算學科專家的大學生進行教學時所使用的方法有所不同。在開發適用于所有大學生的方法時,我們需要解決各種難題,比如:非計算學科專業的學生是如何理解計算思維的,他們將會遇到哪些挑戰,什么樣的工具可以幫助他們最輕松地掌握計算思維,以及應該如何組織和建構我們的課程以便使各種各樣的大學生都能夠接受計算思維。
在本文中,將舉幾個簡單的例子來說明計算教育研究領域內的研究人員是如何解決這些問題的。計算教育領域的研究人員既倚重計算機科學理論又吸收教育理論的思想,二者缺一不可。雖然我們的計算機科學家是從實用的、理性的和理論的角度來理解計算思維,但是從本質上來看,有關教育的問題卻屬于人的問題。人往往是不切實際的,缺乏理性,而且其行為難以預測,也難以求證。
計算教育研究者們正在利用實驗和設計方案來證明我們能夠解決這些重要問題:即人類怎樣才能理解計算思維,以及我們如何才能更好地理解計算思維。有關計算教育的研究工作將會為此鋪平道路,使得“計算思維”成為一種全校園共享的21世紀文化技能。
二、編寫程序之前需具備計算知識
上世紀80年代初開展過一項研究課題,即如何讓程序設計語言更接近自然語言。當時遇到了一個顯而易見的問題,那就是人類如何用自然語言來描述流程。Lance A. Miller要求參試人員為另一個人詳細說明文檔操作任務。其中有一項任務就是“以給定的紙質文件為基礎,整理出一份清單,列出所有擁有攝影師職稱并被評估為高級攝影師的雇員”。然后,Miller對參試人員所使用的描述語言進行了研究[2]。
令Miller感到意外的是,那些參試人員極少對任何類型的控制流做出明確說明。在他們的任務描述中幾乎沒有出現任何明確的循環語句。雖然有些人試著使用了條件語句(“IF”),但是竟沒有一個人使用過一個“ELSE”語句。他對此感到非常吃驚,于是又為第二組參試人員提供了一個任務描述范例,范例中沒有出現循環語句和“ELSE”語句,結果第二組參試人員輕而易舉地完成了任務描述。
當他們被問到如果條件不滿足,或者如果數據被用盡的話,那么該怎么辦,他們幾乎眾口一詞回答說:“當然,那就查看下一個人,或者如果沒有數據了,那么繼續執行下一步就行了”。
Miller的研究結果可以預測在學習程序設計的過程中可能會遇到的某些挑戰,即如今入門課程的教師無人不知的那些挑戰。雖然新手們往往不會具體說明在每一種條件下應該做什么,但是計算機卻要求我們給出這樣明確的說明。Miller的研究結果表明了哪一種程序設計語言更容易被新手所接受。就像現在C和C++這樣的程序設計語言都使用了具體的循環語句,與Miller研究中參試人員的情況類似。
二十年以后,John Pane和他在卡內基梅隆大學的同事們重新研究了Miller提出的問題,但是換到了新的應用環境之中[3]。在一項實驗中,Pane為他的受試者說明了一個游戲中出現的情景和流程,然后問他們應該如何描述。就像Miller一樣,Pane發現參試人員很少使用明確的循環語句,他們總是使用單向的條件語句。Pane進一步說明了參試人員的程序設計風格。他發現,半數以上參試人員的任務說明都以順序結構的形式出現,就像例子中給出的那樣。他也觀察到了有約束語句和命令語句的使用,但是幾乎沒有證據表明參試人員使用了面向對象的思維方式。參試人員確實談到置于實體中的訪問行為,但是幾乎沒有從那個實體的角度來探討這個問題。相反,他們是從游戲玩家或程序設計人員的角度來看待這個問題的。他沒有找到任何證據表明參試人員對實體的分類(類別定義)、繼承關系或多態性做過任何描述。
Pane的研究結果說明,考慮到新手對任務描述的典型特征,面向對象的思維不是“自然的”思維方式。由于對象是當今多數現代化軟件的基礎,他的研究結果指出了我們在向學生解釋什么叫做對象的時候可能會在哪些地方遇到困難。Miller和Pane的研究結果都激勵我們去考慮如何才能設計出適合新手使用的程序設計語言,讓他們能夠按照自然的思維方式來描述計算步驟,就像使用MIT的Scratch進行面向事件的程序設計那樣。
在過去四年里,有一個多國研究小組對“常理計算思維”作了探討。研究的問題有:學生們在我們講授這門課之前已經具備了哪些知識?面對一項復雜任務時,那些不具備程序設計知識的人們是怎樣描述其算法的?Lewandowski等曾經發表一篇論文,文中對并發沖突現象進行了研究。在一家戲院有多個售票處的情況下,沒有程序設計知識的學生們如何才能避免售出兩張同一座位的戲票?他們的研究結果表明,有97個解決方案都是正確的(占受試者總數的69%,他們來自五個不同的機構);但是只有31%的解決方案(占正確方案的45%)得到了發行推廣。非計算機專業的學生不可能自然而然地拿出像計算機專業學生設計的那種非常講究的解決方案。然而,這些結果卻說明了學生們能夠用“自然的”思維方式對并發沖突問題進行正確思考。在實現并發沖突程序的過程中會遇到的問題可能更多地來自如何用當前使用的程序設計語言來描述那些算法,而不是來自這些算法本身的復雜程度。
如果我們的目標是要讓計算思維的思想更容易地為新手所接受,那么Pane和Miller的研究結果都為編程語言的設計提供了啟示,即需要重新設計程序設計語言。Thomas R.G. Green以及其他多名研究人員都對新型程序設計語言做過測試。這是一個相當活躍的研究領域[4]。
三、為所有學生鋪平“計算思維”的道路
為了讓校園中所有大學生都能夠接受“計算思維”,我們就要了解如何才能更好地教授計算學科這一類課程。計算教育領域的研究人員應該探討人類是如何理解計算思維的,以及他們是如何改善這種理解的。計算教育是人機交互學的一個近親學科,因為人機交互學的研究人員是探索人類如何與計算機進行交互活動的,以及如何才能改善這種交互活動。計算教育研究人員在國際計算教育研究會(ICER)以及像《計算機科學教育》和《計算教育資源期刊》這類刊物中已經占有了自己的一席之地。
計算教育研究從許多不同學科中汲取了知識和經驗,用這些來改善計算教育現狀。一些社會學科學家都曾幫助我們了解學生們在我們課堂上的體驗(這些體驗往往與我們作為教師所預期的效果有所不同),以及如何改變我們的課堂教學,使之更加成功地滿足全體學生的需要。計算教育研究人員從教育學、社會學和心理學領域中尋找方法,以便使用這些方法來測量計算學科的學習效果和了解都有哪些因素在影響著這個學習過程。改進了計算教育,我們就可以拓寬計算思維的普及面,增強計算思維的能力。當我們能夠以有益于學生們各自學科發展的方式將程序設計和計算理論教給他們的時候,就能夠看到,當計算學科得到全面普及后,它將以什么樣的勢頭推動著整個學校的發展。專家們早在50多年前就已經預見到了這一前景。
參考文獻:
[1]Perlis,A. The computer in the university[C].M.Greenberger,Ed.,Computers and the World of the Future[M].MIT Press,Cambridge,MA,1962,180–219.
[2]Miller,L.A. Natural language programming:Styles,strategies,and contrasts[J]. IBM Systems Journal,1981,29(2):184–215.
[3]Pane,J.F.,Ratanamahatana,C.,and Myers,B.A. Studying the language and structure in nonprogrammers solutions to programming problems[J].International Journal of Human-Computer Studies,2001,54:237–264.
[4]Sime,M.E.,Arblaster,A.T.,and Green,T.R.G. Structuring the programmers task[J] .Journal of Occupational Psychology,1977,50, 205–216.