文萬志,程學云,陳文蘭,任紅建
(南通大學 信息科學技術學院,江蘇 南通 226019)
計算機技術是當代信息技術核心技術之一,影響了社會的方方面面。正確認識、理解并使用計算機的關鍵是掌握計算機的思維方式,即計算思維。計算思維,是運用計算機科學的基本概念去求解問題、設計系統(tǒng)和理解人類的行為,它包括了涵蓋計算機科學之廣度的一系列思維活動[1-2]。
當前,高校倡導產(chǎn)出導向(Outcome Based Education,OBE)的教育理念。在信息化時代,計算思維的培養(yǎng)在基于OBE 理念的教學改革中至關重要[3]。運用計算思維分析問題是信息化社會的基本要求,是高校畢業(yè)生的基本能力素養(yǎng)之一。
程序設計基礎作為高校計算機類專業(yè)和一些非計算機專業(yè)的第一門程序設計基礎課程,其內(nèi)容涉及數(shù)據(jù)存儲、數(shù)據(jù)表示、數(shù)據(jù)處理、程序設計、程序?qū)崿F(xiàn)和程序優(yōu)化等[4]。該課程是學生計算思維培養(yǎng)的基礎課程,為學生后續(xù)課程學習、解決復雜工程問題中使用計算思維分析問題打下基礎[5-7]。
然而,在程序設計基礎課程實際教學中,仍然存在不少問題。傳統(tǒng)教學中,教師常采取以填鴨式灌輸知識為主的單向傳授、以一刀切的無差別傳授等方式極大地抑制了學生學習的積極性和創(chuàng)造性,抑制了計算思維能力的培養(yǎng),最直接反映在學生課程考核成績上。據(jù)筆者調(diào)研,國內(nèi)很多高校程序設計基礎類課程的考核成績較不理想,掛科率較高。課程考核結果是思維能力培養(yǎng)效果的反映。高質(zhì)量的具有計算思維能力的人才產(chǎn)出要求進行程序設計基礎課程的教學改革。
計算思維是運用計算機科學的基本概念求解問題。程序設計基礎課程知識體系與計算思維5個層次如圖1 所示。其中,計算表示層基于程序數(shù)據(jù)表示,包括計算機存儲數(shù)據(jù)的方式、程序中描述數(shù)據(jù)的方式;計算處理層基于程序數(shù)據(jù)操作和程序控制,包括計算機處理問題的基本規(guī)則和方法;計算分析/設計層基于算法分析設計,包括計算機結構化程序設計與面向?qū)ο蟪绦蛟O計思想;計算實現(xiàn)基于算法的具體實現(xiàn),包括算法實現(xiàn)的IDE 選擇、算法的程序表示與實現(xiàn)、調(diào)試、驗證等;計算優(yōu)化包括程序的時間復雜度分析、空間復雜度分析及其優(yōu)化。
知識學習和能力培養(yǎng)相互制約又相互促進。過度學習程序中繁雜的語法規(guī)則和知識點,將會約束計算思維的創(chuàng)造性,限制思維的空間拓展,影響知識的理解,達不到學習效果;過多地強調(diào)能力培養(yǎng),缺乏知識基礎,影響思維過程,抑制思維的進展。如何在知識學習中促進能力培養(yǎng),在能力培養(yǎng)中,加強知識學習,是計算思維培養(yǎng)的關鍵。
圖1 程序設計基礎知識體系與計算思維
基于OBE 教育理念,培養(yǎng)具有解決復雜工程能力的人才。學生在程序設計基礎課程中,能夠融合數(shù)學、自然科學等知識并應用這些知識發(fā)現(xiàn)計算機領域中的問題,能夠掌握實際問題的計算機程序語言的表示方法;能夠掌握自頂向下、逐步求精的模塊化程序設計思路,并運用抽象、歸納、遞歸、回溯等方法進行算法設計;能夠積極探索實際問題的求解方法,體現(xiàn)創(chuàng)新性,并通過實驗驗證方法的正確性和合理性;能夠分析程序的執(zhí)行過程,能夠選擇不同的調(diào)試工具并分析結果的正確性和合理性以及工具的局限性;能夠在程序設計過程中使用規(guī)范化的算法表示方法、程序設計方法,遵循編程規(guī)范,具有職業(yè)素養(yǎng);能夠在較復雜的編程中進行團隊協(xié)作溝通,并能夠勝任相應的角色,具有團隊意識;能夠具備多學科背景下的基本程序設計能力、程序綜合能力、項目組織能力;具備自主學習的能力,能夠自主探索研究課程內(nèi)容,拓展程序設計知識和技能,能夠適應計算機技術的發(fā)展,具備自主學習新的編程語言的能力。
教師在教學準備過程中,應深刻理解教學目標和培養(yǎng)要求并在教學各環(huán)節(jié)中體現(xiàn),有的放矢。在知識傳授過程中體現(xiàn)OBE 理念,著力培養(yǎng)具有解決復雜工程能力的人才。
如圖1 所示,程序設計基礎課程知識性強,規(guī)則繁多。正確的程序輸出,首先需要正確的數(shù)據(jù)表示和數(shù)據(jù)處理,但是,如果過多地強調(diào)知識和規(guī)則,學生則會逐漸依賴知識的被動灌輸而抑制學生計算思維能力的全面發(fā)展。在教學過程中,授人以魚的同時更應該授人以漁。變被動學習為主動學習,建立自主學習機制和激勵機制,鼓勵學生主動探索知識和規(guī)則,全面且深入理解計算機數(shù)據(jù)表示和數(shù)據(jù)處理的方式,提高程序設計過程中的計算表示和計算處理能力。
建立自主學習機制,需要教師在教學各環(huán)節(jié)中融入培養(yǎng)學生自主學習能力的方法。例如,教師在講解常量和變量時,涉及到數(shù)據(jù)的二進制存儲。而對于大多數(shù)初次接觸程序設計的學生來說,對二進制的補碼存儲并不熟悉。教師利用課堂有限的時間去充分講解二進制并不合適,也達不到應有的效果。多次的教學實踐表明,學生被動接受相關知識后,在高年級的專業(yè)課程中再次涉及到相關知識時,學生依然無法理解。對這種類似知識,教師更應引導學生自己去探索并配以適度的作業(yè)或考核,學生的知識掌握效果會更好,學習能力也會逐步提高。
培養(yǎng)自主學習,重在引導,遵循從半自主學習到完全自主學習的培養(yǎng)路線。填鴨式教學模式不適合大學課堂,也不符合OBE 理念,但剛?cè)雽W的不少學生較依賴于這種教學模式,需要循序漸進地引導學生進行自主學習。半自主學習,即根據(jù)學生情況,教師從任務布置、過程監(jiān)控和結果考核等全程指導學生自主學習。例如,教師在講解完結構體知識后,可布置學生課下自己學習共用體和枚舉類型,同時布置共用體和枚舉類型作業(yè)。過程監(jiān)控,一般可通過網(wǎng)絡學習時長監(jiān)控或問題植入等方式進行。構建課程網(wǎng)絡資源,統(tǒng)計學生每個章節(jié)的學習時間,并在學習節(jié)點植入問題,統(tǒng)計學生是否完成問題以及問題完成情況。全方位監(jiān)控自主學習過程以持續(xù)改進自主學習模式。半自主學習適合依賴填鴨模式以及知識學習初始階段的學生。隨著學習的深入,學生知識增多,能力增強,需要逐步引導學生進入完全自主學習,即教師較少或不干預和監(jiān)控學生學習。為了達到學習目標、擴展個人知識面、提高個人能力,學生完全自主地去獲取資源并學習。教師可適當提供一些資源獲取的方式以及學習方式。學生完全自主學習是教學的目標之一,是因材施教需要,是培養(yǎng)面向產(chǎn)出的學生的必然要求,也是學生解決復雜工程問題所需具備的能力之一。
程序設計基礎課程中計算分析主要有結構化分析、面向?qū)ο蠓治龅确治龇绞?。針對具體的程序設計問題,可以采用不同的思路。
由于地區(qū)教育差異、個人認知水平差異,學生能力水平參差不齊。在教學過程中,要加強團隊協(xié)作。團隊協(xié)作主要有3 種形式:第1 種形式是分塊協(xié)作,將復雜問題分解成若干模塊,一個團隊成員負責完成一個模塊,最后協(xié)作完成任務;第2 種形式是主輔協(xié)作,能力強者設計指導整個過程、能力弱者輔助完成;第3 種形式是結對協(xié)作,分析設計過程中經(jīng)常互換角色以完成任務。這3 種形式可根據(jù)實際情況自由選擇,但最終所有團隊成員能夠完全解決問題。
個人思維總會有局限。團隊協(xié)作、分組討論有助于激發(fā)思維,提高計算分析能力。在實際教學中,也經(jīng)常遇到個人思維受到局限的情況。例如,將任意一個數(shù)字分解成素數(shù)因子乘積問題。相當部分學生在分析此類問題時,用雙重循環(huán)來實現(xiàn)。外循環(huán)窮舉因子,內(nèi)循環(huán)判斷該數(shù)是否是素數(shù)。結果正確,學生檢查不出任何問題。只有少數(shù)學生在設計考慮到素因子不斷分解,就無需判斷素數(shù),只要單循環(huán)即可實現(xiàn)問題求解。加強討論,才能更好地開闊思維。在遇到難題時,才會時常感受茅塞頓開,體會其中的樂趣,激發(fā)計算分析思維。
培養(yǎng)學生計算思維,要善于啟發(fā)式教學,加強思維訓練,豐富思維方式。
對知識為主型問題,將知識嵌入程序中,啟發(fā)學生分析結果。例如,在講解邏輯運算符的使用方法的時候,學生比較容易犯錯誤的問題是:邏輯與左側(cè)表達式值為0 或者邏輯或左側(cè)表達式為1 時,右側(cè)表達式將不再執(zhí)行。學生通常會錯誤分析右側(cè)表達式也會執(zhí)行。教師在教學過程中,可在程序中嵌入這個知識點,讓學生自己分析程序執(zhí)行過程和結果。在學生得出結果后再指出問題,加深學生對知識型問題的理解。
對分析設計為主型問題,采取發(fā)散式啟發(fā)教學和遞進式啟發(fā)教學。例如,教師在講解程序流程控制時,首先講解的是順序結構,典型實例如不使用中間變量交換兩個數(shù)a 和b,教師可首先講解其中一種方法,如“a=a+b;b=a-b;a=a-b”,然后提出讓學生嘗試以程序語句“a=a-b”開始交換兩個數(shù),學生在這種發(fā)散式啟發(fā)中潛移默化地體會了順序結構中數(shù)據(jù)流。順序結構之后是選擇結構和循環(huán)結構,經(jīng)常使用的實例是最大公約數(shù)的求解,常用方法是輾轉(zhuǎn)相除法,也就是,被除數(shù)、除數(shù)、余數(shù)依次迭代循環(huán),直到余數(shù)為0,則除數(shù)為最大公約數(shù)。當教師講解完該實例時,可啟發(fā)學生思考用相減法完成最大公約數(shù)的求解,加深學生對流程控制結構的設計。
遞進式啟發(fā)教學注重的是計算思維的優(yōu)化。例如,在講解百錢百雞問題時,教師可先用三重循環(huán)將公雞數(shù)量、母雞數(shù)量、小雞數(shù)量控制在0~100 只,每次累進1 只窮舉所有情況,循環(huán)體判斷是否100 文錢買100 只雞。然后教師依次遞進提出啟發(fā)問題:是否需要將三重循環(huán)都控制在0~100、是否需要每次累進1 只、是否需要三重循環(huán)實現(xiàn)等,逐步遞進以加深理解循環(huán)控制方法和窮舉設計,掌握計算實現(xiàn)和計算優(yōu)化方法。
計算思維應融合多學科知識,又要體現(xiàn)學科間的思維差異。計算思維不應是孤立的計算機學科思維。例如,將輸入的整數(shù)k 表示成素數(shù)因子的乘積,這里涉及到素數(shù)的基本知識、合數(shù)的分解問題以及因子自2 向上累加則不需要判斷因子是否是素數(shù)等數(shù)學知識和分析。諸如此類涉及數(shù)學等其他學科知識的例子還有很多。在教學中,忽視與其他學科知識的融合,特別是數(shù)學學科知識融合,反而不利于計算思維的培養(yǎng)。學科融合有利于計算機思維的進行,即連貫性,同時,應注意區(qū)分思維差異。上述例子中,數(shù)學思維分析提供了計算實現(xiàn)的宏觀思路,計算機是不會根據(jù)數(shù)學思維來求解問題的。如合數(shù)的分解,計算思維一般從2 開始直到合數(shù)的平方根結束循環(huán)判斷是否整除,而數(shù)學思維主要根據(jù)經(jīng)驗、知識等判斷、嘗試等方式求解,有時雖然有窮舉,但這種窮舉多數(shù)時候是跳躍式的,而且隨著經(jīng)驗的增長,這種跳躍式會更加明顯。在教學過程中,要有意識的體現(xiàn)這些思維,從思想、實現(xiàn)、表示3條線來培養(yǎng)計算思維。
多思維融合,不僅需要多學科融合,而且需要多種思維融合,支持思維開放,不約束計算方式。傳統(tǒng)的歸納、演繹、聯(lián)想等思維方式可以應用到計算問題分析中。計算思維最常用的思維方式是逐步求精的方式,具體實現(xiàn)時又涉及到遞歸、抽象、歸納和窮舉等各種思維的融合。在教學中,應支持思維開放與發(fā)散,不約束計算方式,適當引導,以應對后續(xù)復雜問題的靈活處理。例如3個數(shù)的大小排序問題,有的學生使用6 個判斷,輸出排序順序,有的學生使用3 個判斷以及交換實現(xiàn),有的學生使用最大值、最小值實現(xiàn)。這些計算實現(xiàn)思維方式都是正確的,應予以肯定,但同時應引導學生分析,如在此例中可引導學生思考排序數(shù)的數(shù)目增多時方法的選擇等。
基于OBE 的教育理念,引導學生積極探索實際問題的求解方法的同時,鼓勵學生自主通過實驗等方法的驗證程序的正確性和合理性。引導學生熟練選擇并應用相關調(diào)試工具或簡單的插樁方法實現(xiàn)程序驗證;引導學生識別簡單的預編譯、編譯、鏈接等錯誤;根據(jù)調(diào)試工具錯誤提示分析錯誤原因并糾正語法錯誤;通過設置斷點、單步執(zhí)行等方法分析程序執(zhí)行過程中變量的變化與合理性并能糾正錯誤;通過簡單的探針插入法分析程序,如插入簡單的輸出語句來分析數(shù)據(jù)流,從而找出程序中的錯誤。
在程序輸出正確的結果后,要引導學生積極探索計算優(yōu)化的方法。例如,將N 個字符串有序輸出,首先要考慮字符串的存儲方式,然后要考慮字符串的排序方法。存儲上,字符串長度可能不相等,如果定義簡單的靜態(tài)數(shù)組存儲字符串,則需要預先定義數(shù)組大小,會造成空間的浪費;如果定義多個變量來存儲字符串,會造成程序的可讀性很差。排序上,如果通過比較字符串大小,再進行交換,則會由于大量的字符交換導致效率變低。然而,這些問題是學生在編程實踐中經(jīng)常使用的方法,可實現(xiàn)結果的正確輸出,但效率不高。在此例中,可引導學生使用指針數(shù)組的方法來實現(xiàn):數(shù)組元素指向字符串,通過交換數(shù)組元素而不實際交換字符串進行計算優(yōu)化。通過這種探索,不僅加深了學生對知識的理解,而且有助于提高學生計算優(yōu)化思維能力。
程序設計基礎課程作為入門的計算思維培養(yǎng)課程,是基于OBE 的人才培養(yǎng)的基礎,是后續(xù)相關課程的知識基礎和能力基礎,后續(xù)課程和實踐是計算思維的可持續(xù)發(fā)展的必然要求。
為了培養(yǎng)合格的OBE 人才,計算思維培養(yǎng)要貫穿學生學習階段,形成體系教學。計算思維教學體系主要表現(xiàn)在兩個方面:實踐體系和課程體系。實踐體系,即構建程序設計基礎和后續(xù)程序?qū)嵺`的思維發(fā)展鏈。鼓勵學生積極參與相關程序設計類競賽和項目開發(fā)。根據(jù)學生不同層次和不同階段選擇不同的類別。低年級或基礎薄弱學生可參加一些基礎性競賽,如藍橋杯、計算機設計大賽等,高年級和基礎較好的學生可參與軟件服務外包、ACM 等競賽以及項目開發(fā)。鼓勵導師制,每個學生選擇一個導師,進行實踐能力培養(yǎng)。課程體系,即構建程序設計基礎和后續(xù)相關課程計算思維培養(yǎng)鏈,在計算表示和計算處理上主要與其他相關程序設計類課程形成培養(yǎng)鏈,在計算分析、設計、實現(xiàn)、優(yōu)化上主要與數(shù)據(jù)結構、軟件工程、軟件測試、編譯原理等課程形成培養(yǎng)鏈。
計算思維的培養(yǎng)需要持續(xù)監(jiān)控教學過程,并制訂考核評價標準。
構建計算思維培養(yǎng)過程管理機制,加強過程管理,重點從以下3 方面實施:基于工程認證的要求和OBE 人才導向,完善相關教學文件,如課程教學大綱、實驗大綱、教學計劃書、講義、課件、備課筆記、學生作業(yè)設計、試卷及雙向細目表等;加強課堂教學管理,將課堂互動、講課狀態(tài)、教學方式等作為教師教學管理的重要一環(huán);完善教學督導機制,加強教學材料和教學過程的監(jiān)督。
完善教師評價機制,形成以督導評價、同行評價、學生評價和自我評價等為全方位評價指標。形成校、院、系三級督導制度,不定期督查教學過程和教學文件;形成同行互相聽課制度、課程組定期研討和反饋制度;形成以教學準備、作業(yè)設置與批改、課堂互動、課堂管理、教學效果和教學內(nèi)容等為主題的學生評價制度;形成教學總結的自我評價制度。
教學過程管理是計算思維培養(yǎng)的關鍵一環(huán),加強學生管理,引導學生自主學習是提高計算思維的內(nèi)在需要。
學習過程管理以更好地促進學生學習鞏固知識、鍛煉提高能力,引導學生養(yǎng)成自主學習和終生學習的學習習慣。教學過程管理是學生學習過程管理的一部分。教學內(nèi)容、教學形式、作業(yè)實驗設置等是學生學習內(nèi)容和學習方式的重要組成。除此以外,學習過程管理還包括使用現(xiàn)代化的教學工具或方法來管理學習過程,如采用競速制或積分制來管理程序設計實踐,采用問題植入法管理網(wǎng)絡資源的學習等。
為了更客觀地評價學生計算思維能力,更符合OBE 教育導向,制訂更全面有效的考核機制,形成期末理論考核、期末實踐考核、章節(jié)作業(yè)、師生互動、個人總結、學習積分組成的全方位評價指標。其中,期末理論考核和實踐考核占比應不超過50%,且期末試卷內(nèi)容的安排必須滿足工程教育專業(yè)認證基本要求,內(nèi)容分布合理;個人總結是個人在學習或?qū)嵺`中遇到的問題總結情況,建議占比為10%;學習積分是學生自主學習課程相關資源獲取的積分,建議不低于10%。
程序設計基礎課程是計算思維培養(yǎng)的入門課程,教師應深刻理解教學目標和培養(yǎng)要求,制訂教學計劃并在教學各環(huán)節(jié)中體現(xiàn)。在知識傳授過程中體現(xiàn)OBE 理念,為培養(yǎng)具有解決復雜工程能力的人才作準備。教學中,基于文中提出的方案組織教學,學生計算思維能力明顯提高,更多的學生愿意主動探索、主動學習,學習效果明顯改善,然而,教無定法,學生各異,計算思維的培養(yǎng)也非一日之功,我們在今后的教學中還需繼續(xù)摸索改進。