武仁杰,郭喜鳳,郭曉玲,劉志蘭
(1.河北北方學(xué)院信息科學(xué)與工程學(xué)院,河北 張家口 075000;2.張家口市橋東區(qū)環(huán)境衛(wèi)生管理處,河北 張家口 075000)
計(jì)算思維 (computational thinking)是當(dāng)前國(guó)際及國(guó)內(nèi)計(jì)算機(jī)界廣為關(guān)注的一個(gè)重要概念[1]。計(jì)算思維作為人類(lèi)三大科學(xué)思維 (理論思維、實(shí)驗(yàn)思維、計(jì)算思維)之一[2],涉及到運(yùn)用計(jì)算機(jī)科學(xué)的基礎(chǔ)概念去求解問(wèn)題、設(shè)計(jì)系統(tǒng)和理解人類(lèi)的行為。計(jì)算思維涵蓋了反映計(jì)算機(jī)科學(xué)廣泛性的一系列思維活動(dòng)[1]。
計(jì)算思維就是通過(guò)約簡(jiǎn)、嵌入、轉(zhuǎn)化和仿真等方法,把一個(gè)看來(lái)困難的問(wèn)題重新闡釋成一個(gè)知道問(wèn)題怎樣解決的方法。它采用抽象和分解來(lái)完成復(fù)雜的任務(wù)或設(shè)計(jì)復(fù)雜的系統(tǒng);它選擇合適的方式去陳述一個(gè)問(wèn)題,或者選擇合適的方式對(duì)一個(gè)問(wèn)題的相關(guān)方面建模使其易于處理;它使樹(shù)立在不必理解每一個(gè)細(xì)節(jié)的情況下就能夠安全地使用、調(diào)整和影響一個(gè)大型復(fù)雜系統(tǒng)的信心;它是為預(yù)期的多個(gè)用戶(hù)而進(jìn)行的模塊化,是為預(yù)期的未來(lái)應(yīng)用而進(jìn)行的預(yù)置和緩存[1]。
計(jì)算思維是利用啟發(fā)式推理來(lái)尋求解答,是在不確定情況下的規(guī)劃、學(xué)習(xí)和調(diào)度。計(jì)算思維是利用海量的數(shù)據(jù)來(lái)快速計(jì)算,它是在時(shí)間和空間之間,在處理能力和存儲(chǔ)容量之間的權(quán)衡[1]。
計(jì)算思維所關(guān)注的核心問(wèn)題是人的思維方式及問(wèn)題求解能力的培養(yǎng)[3]。把轉(zhuǎn)變思維方式融入到 “程序設(shè)計(jì)”類(lèi)課程的教學(xué)中,以系統(tǒng)化、邏輯化的計(jì)算思維方式去思考問(wèn)題和解決問(wèn)題,著重培養(yǎng)學(xué)生的計(jì)算思維能力,最大限度地利用有限的時(shí)間強(qiáng)化學(xué)生如何進(jìn)行工程化、系統(tǒng)化程序設(shè)計(jì)的觀念和能力,而不是過(guò)于局限于機(jī)械的語(yǔ)言本身,讓學(xué)生成為被動(dòng)的語(yǔ)法背誦者。事實(shí)上,語(yǔ)言特性及語(yǔ)法規(guī)則可以很快從相關(guān)資料中獲取,而面對(duì)實(shí)際問(wèn)題能快速地找出解決的方法才是一個(gè)開(kāi)發(fā)人員能力的體現(xiàn)。
計(jì)算思維必須建立在服務(wù)的基礎(chǔ)之上,同時(shí),計(jì)算學(xué)科為服務(wù)的工程化、信息化和智能化提供技術(shù)和工具以及產(chǎn)品 (軟件、硬件或集成系統(tǒng))服務(wù)[4]。
計(jì)算思維不僅僅源于和服務(wù)于計(jì)算機(jī)科學(xué)。實(shí)際上,狹義地講,計(jì)算機(jī)思維源于并服務(wù)于計(jì)算機(jī)科學(xué)、計(jì)算機(jī)工程、軟件工程、信息技術(shù)和信息系統(tǒng)。廣義地講,計(jì)算思維源于并服務(wù)于由理論、技術(shù)、工程、工具、服務(wù)和應(yīng)用構(gòu)成的計(jì)算鏈(或計(jì)算網(wǎng)絡(luò))。這一計(jì)算鏈以理論為始點(diǎn),以應(yīng)用為終點(diǎn)。這一計(jì)算鏈上的每一結(jié)點(diǎn)都將產(chǎn)生計(jì)算思維,而計(jì)算思維從這一計(jì)算鏈的始點(diǎn)到終點(diǎn)的轉(zhuǎn)化構(gòu)成了計(jì)算思維的工程化[4]。
教育部專(zhuān)家在 “積極研究和推進(jìn)學(xué)生計(jì)算思維能力的培養(yǎng)”一文中指出:計(jì)算機(jī)及其相關(guān)專(zhuān)業(yè)教育應(yīng)該在計(jì)算思維能力培養(yǎng)中做出表率。事實(shí)上,計(jì)算思維已經(jīng)在某種程度上滲透到培養(yǎng)方案和課程大綱中,但計(jì)算思維能力培養(yǎng)的水平還不夠高,學(xué)生對(duì)于計(jì)算思維要掌握的程度也不夠深。對(duì)此,需要更主動(dòng)地采取有效措施,從思想觀念、師資隊(duì)伍、教學(xué)內(nèi)容、教學(xué)方法等方面入手,進(jìn)一步強(qiáng)化對(duì)學(xué)生開(kāi)展計(jì)算思維能力的培養(yǎng)。
程序設(shè)計(jì)在計(jì)算機(jī)及其相關(guān)專(zhuān)業(yè)教育教學(xué)中是必不可少的內(nèi)容,程序設(shè)計(jì)課程教學(xué)的許多環(huán)節(jié)都可以訓(xùn)練學(xué)生的計(jì)算思維能力,使計(jì)算思維能力得到提高。模型設(shè)計(jì)是程序設(shè)計(jì)的重要方法,一個(gè)好的模型會(huì)使程序變得簡(jiǎn)潔而輕松,程序的性能也會(huì)得到提高。模型設(shè)計(jì)過(guò)程中,計(jì)算思維起著非常重要的作用。因此它也是計(jì)算思維能力培養(yǎng)的重要途徑。
無(wú)論是結(jié)構(gòu)化程序設(shè)計(jì)還是面向?qū)ο蟪绦蛟O(shè)計(jì),需求分析是整個(gè)程序設(shè)計(jì)的第一個(gè)階段。結(jié)構(gòu)化的分析方法是最具代表性的分析建模技術(shù),它是一種面向數(shù)據(jù)流進(jìn)行需求分析的方法,分為功能建模、數(shù)據(jù)建模和行為建模。
功能建模的思想就是用抽象模型的概念,按照數(shù)據(jù)傳遞、變換的關(guān)系,自頂向下逐層分解,直到找到滿(mǎn)足功能要求為止。它用數(shù)據(jù)流圖來(lái)描述。如銀行儲(chǔ)蓄系統(tǒng)業(yè)務(wù)流程為:儲(chǔ)戶(hù)填寫(xiě)存單或取單,然后由業(yè)務(wù)人員錄入系統(tǒng)。如果是存單,系統(tǒng)記錄存款人姓名、身份證號(hào)、存款類(lèi)型、金額等信息,并打印存單給儲(chǔ)戶(hù);如果是取款,系統(tǒng)首先核對(duì)儲(chǔ)戶(hù)密碼,若密碼正確,則系統(tǒng)計(jì)算出利息并打印利息清單給儲(chǔ)戶(hù)。針對(duì)這樣的需求,首先引導(dǎo)學(xué)生識(shí)別外部實(shí)體有哪些,并確定輸入數(shù)據(jù)流及輸出數(shù)據(jù)流。將存款及取款信息抽象為事務(wù),最后得到分層的數(shù)據(jù)流圖。
數(shù)據(jù)建模使用實(shí)體-關(guān)系模型在較高的抽象層次 (概念層)上對(duì)數(shù)據(jù)結(jié)構(gòu)進(jìn)行建模。實(shí)體-關(guān)系模型表示為可視化的ER圖。對(duì)于銀行的儲(chǔ)蓄業(yè)務(wù),涉及的對(duì)象有儲(chǔ)戶(hù)、賬戶(hù)、存單和取單,在進(jìn)行需求分析時(shí),可以把這些對(duì)象抽象為實(shí)體,這些實(shí)體間有著一對(duì)一或一對(duì)多的關(guān)系,比如一個(gè)儲(chǔ)戶(hù)有多個(gè)帳戶(hù),一個(gè)帳戶(hù)可對(duì)應(yīng)多個(gè)存單等,存款和取款事件抽象為這些實(shí)體間的聯(lián)系。通過(guò)抽象設(shè)計(jì)出ER圖,最后確定數(shù)據(jù)庫(kù)的結(jié)構(gòu)。在這個(gè)過(guò)程中,學(xué)生的計(jì)算思維能力得到了訓(xùn)練。
行為建模,就是用狀態(tài)轉(zhuǎn)換圖來(lái)描繪系統(tǒng)的狀態(tài)及引起系統(tǒng)狀態(tài)轉(zhuǎn)換的事件來(lái)表示系統(tǒng)的行為。狀態(tài)是任何可以被觀察到的系統(tǒng)行為模式,事件是某個(gè)特定時(shí)刻發(fā)生的事情。銀行的儲(chǔ)蓄業(yè)務(wù)流程中,發(fā)生了一系列的狀態(tài)轉(zhuǎn)換,通過(guò)引導(dǎo)學(xué)生對(duì)這些流程的行為建模,可以得到存款過(guò)程狀態(tài)圖和取款過(guò)程狀態(tài)圖,也訓(xùn)練了學(xué)生的計(jì)算思維能力。
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,通過(guò)用例模型、靜態(tài)模型和動(dòng)態(tài)模型來(lái)實(shí)現(xiàn)功能建模、對(duì)象建模和交互建模。
建立用例模型的目的是提取和分析足夠的需求信息。該模型應(yīng)能表達(dá)用戶(hù)需要什么,而不涉及系統(tǒng)如何實(shí)現(xiàn)的特定細(xì)節(jié)。如分析學(xué)校的選課系統(tǒng)需求時(shí),首先引導(dǎo)學(xué)生根據(jù)系統(tǒng)功能,確定業(yè)務(wù)的參與者是學(xué)生、教師、系統(tǒng)管理員和學(xué)籍檔案系統(tǒng);接著在確定業(yè)務(wù)需求用例時(shí),設(shè)計(jì)以下問(wèn)題幫助學(xué)生更好的標(biāo)識(shí)系統(tǒng)的用例:
·每個(gè)參與者的任務(wù)是什么?
·每個(gè)參與者是否都要從系統(tǒng)中創(chuàng)建、存儲(chǔ)、移動(dòng)、修改或讀取信息?
·支持或維護(hù)系統(tǒng)的用例有哪些?
·當(dāng)前的用例是否覆蓋系統(tǒng)的所有功能需求?
在此基礎(chǔ)上,設(shè)計(jì)出選課系統(tǒng)的環(huán)境圖,確定系統(tǒng)的主要輸入和輸出及潛在用例;最后畫(huà)出用例圖,標(biāo)識(shí)參與者與用例之間、用例與用例之間的關(guān)系。在整個(gè)用例模型設(shè)計(jì)過(guò)程中,學(xué)生的計(jì)算思維能力得到了培養(yǎng)。
用例模型是從用戶(hù)的角度描述對(duì)系統(tǒng)的需求,依據(jù)用例模型可以導(dǎo)出對(duì)象模型。在系統(tǒng)分析階段,對(duì)象建模的任務(wù)是建立問(wèn)題域的概念模型。為了降低系統(tǒng)的復(fù)雜度,需要在概念上把系統(tǒng)所包含的內(nèi)容分解成若干個(gè)范疇;然后確定問(wèn)題域的類(lèi)與對(duì)象。在選課系統(tǒng)中,確定教師、學(xué)生、課程、課程任務(wù)、學(xué)生名冊(cè)和成績(jī)單等類(lèi)與對(duì)象。在確定類(lèi)與對(duì)象后,分析確定關(guān)聯(lián)有助于考慮問(wèn)題域的邊緣情況,發(fā)現(xiàn)那些尚未被發(fā)現(xiàn)的類(lèi)與對(duì)象。如教師與課程任務(wù)、課程與課程任務(wù)、學(xué)生與課程任務(wù)之間都存在關(guān)聯(lián)關(guān)系。接著引導(dǎo)學(xué)生為類(lèi)和對(duì)象確定各自的屬性,如選課系統(tǒng)中教師類(lèi)至少有教師號(hào)、姓名和系別等屬性,學(xué)生類(lèi)有學(xué)號(hào)、系別、專(zhuān)業(yè)、班級(jí)、姓名等屬性。最后為類(lèi)和對(duì)象確定服務(wù),即對(duì)象收到消息后所能執(zhí)行的操作,如選課系統(tǒng)中教師類(lèi)有查詢(xún)所教課程的信息和查詢(xún)學(xué)生名冊(cè)等服務(wù)。這一系列的過(guò)程,學(xué)生學(xué)會(huì)了分析問(wèn)題和解決問(wèn)題的方法,計(jì)算思維能力有了一定的提高。
動(dòng)態(tài)模型在交互式系統(tǒng)設(shè)計(jì)中起著很重要的作用。動(dòng)態(tài)模型的描述工具有順序圖、協(xié)作圖和狀態(tài)圖。順序圖按照時(shí)間順序顯示對(duì)象之間的交互關(guān)系。協(xié)作圖用于描述相互協(xié)作的對(duì)象間的交互關(guān)系和鏈接關(guān)系,它比順序圖更形象。狀態(tài)圖由對(duì)象的各個(gè)狀態(tài)和連接這些狀態(tài)的轉(zhuǎn)換組成,用于描述用戶(hù)接口、設(shè)備控制器和其它具有反饋的子系統(tǒng),也可用于描述在生命期中跨越多個(gè)不同性質(zhì)階段的被動(dòng)對(duì)象的行為。在選課系統(tǒng)分析中,課程任務(wù)類(lèi)的對(duì)象具有比較明顯的狀態(tài)特征,在教學(xué)中,引導(dǎo)學(xué)生分析其各種狀態(tài)下,有初始狀態(tài)、可選狀態(tài)、人滿(mǎn)狀態(tài)和關(guān)閉狀態(tài)。
算法 (algorithm)是對(duì)解決問(wèn)題方案準(zhǔn)確而完整的描述,是解決問(wèn)題的一系列清晰指令。也就是說(shuō),能夠?qū)σ欢ㄒ?guī)范的輸入,在有限時(shí)間內(nèi)獲得所要求的輸出。不同的算法可能用不同的時(shí)間、空間或效率來(lái)完成同樣的任務(wù)。程序設(shè)計(jì)中的許多問(wèn)題都需要不同的算法來(lái)解決。由于學(xué)生的認(rèn)知差異,必然導(dǎo)致學(xué)生解決問(wèn)題的方法不同。在教學(xué)中,鼓勵(lì)學(xué)生使用適合自己認(rèn)知程度的算法,然后引導(dǎo)學(xué)生對(duì)算法進(jìn)行反思和進(jìn)一步探索,從而達(dá)到簡(jiǎn)化并優(yōu)化算法的目標(biāo)。這種將一個(gè)計(jì)算任務(wù)用多種思路、多種算法進(jìn)行求解的教學(xué)過(guò)程,可以培養(yǎng)學(xué)生的計(jì)算思維能力。如程序設(shè)計(jì)中的排序問(wèn)題,目前的主要算法有:冒泡排序、選擇排序、插入排序、殼排序、歸并排序、快速排序、堆排序、拓?fù)渑判颉㈠\標(biāo)賽排序和基數(shù)排序等。教學(xué)中從學(xué)生使用的排序算法中,指導(dǎo)學(xué)生考慮程序的執(zhí)行時(shí)間、存儲(chǔ)空間和編程工作量等因素。對(duì)于數(shù)據(jù)量較小的情形,主要考慮編程工作量的多少,以程序簡(jiǎn)化為先;而對(duì)于數(shù)據(jù)量大的情況,應(yīng)首先考慮程序的執(zhí)行時(shí)間,以執(zhí)行時(shí)間短為優(yōu)。
程序設(shè)計(jì)是計(jì)算機(jī)及其相關(guān)專(zhuān)業(yè)教育教學(xué)中必不可少的內(nèi)容,工程化程序設(shè)計(jì)的各個(gè)環(huán)節(jié)所使用的設(shè)計(jì)模型對(duì)于培養(yǎng)計(jì)算思維能力有著極其重要的作用。只要在程序設(shè)計(jì)類(lèi)課程中,主動(dòng)地采取有效措施,從思想觀念、教學(xué)內(nèi)容、教學(xué)方法等方面入手,強(qiáng)化對(duì)學(xué)生計(jì)算思維能力的培養(yǎng),學(xué)生的計(jì)算思維能力就會(huì)得到提高。
[1]Wing J M.Computational thinking[J].Comm ACM,2006,49(03):33-35.
[2]朱亞宗.論計(jì)算思維—計(jì)算思維的科學(xué)定位、基本原理及創(chuàng)新路徑[J].計(jì)算機(jī)科學(xué),2009,36(04):53-55,93.
[3]郭喜鳳,武仁杰,米海英.計(jì)算思維能力培養(yǎng)模式探索[J].河北北方學(xué)院學(xué)報(bào):社會(huì)科學(xué)版,2012,28(05):115-117.
[4]郭喜鳳,孫兆豪,趙喜清.論計(jì)算思維工程化的層次結(jié)構(gòu)[J].計(jì)算機(jī)科學(xué),2009,36(04):64-67.