王若龍
(濮陽市食品藥品信息中心,河南 濮陽 457000)
程序設(shè)計是計算機類專業(yè)的重要課程之一,以程序設(shè)計為主要目標,涵蓋數(shù)據(jù)存儲、編程軟件的運用及程序?qū)崿F(xiàn)等內(nèi)容。對于計算機科學,計算思維是基本素養(yǎng)。從程序設(shè)計課程教學中可知,計算思維是關(guān)鍵能力。結(jié)合計算機技術(shù)及應(yīng)用,了解和掌握計算機的思維方式,對于設(shè)計高質(zhì)量的軟件程序至關(guān)重要。所謂計算思維,可以解釋為運用計算機科學來求解問題、設(shè)計系統(tǒng)和理解人類的行為。產(chǎn)出導向理念(Outcome Based Education,OBE)打破傳統(tǒng)教學“重知識、輕能力”格局,關(guān)注學生自主學習意識的激發(fā),引入工程教育專業(yè)認證體系,注重學生間的合作與交流,變革教法,啟發(fā)學生的計算思維,面向科學評價,持續(xù)提升課程教學質(zhì)量。為此,計算機專業(yè)學科教育要重視學生計算思維的培養(yǎng),指向計算思維,運用產(chǎn)出導向理念,改革現(xiàn)有程序設(shè)計課程教學模式,促進高校工程教育質(zhì)量的全面提升。
周以真教授認為,計算思維是一種借助于約簡、嵌入、轉(zhuǎn)化、仿真等方法,將看似難以解決的問題,重新闡述為能夠被解決的一種思維方法。計算思維,關(guān)鍵在于抽象和自動化,提煉重要內(nèi)容,刪去不重要的細節(jié),借助于計算機自動化運作系統(tǒng),解決實際復雜問題。教育部高等教育司《關(guān)于開展新工科研究與實踐的通知》(教高司函〔2017〕6 號)中,將“工程教育”理念作為新工科課程改革的指導新思想。計算思維以科學計算為指導,重視邏輯、抽象、推理、綜合。
在程序設(shè)計課程體系中,計算思維具有不同的層級特點。在計算表示層,主要完成對數(shù)據(jù)的存儲方式、數(shù)據(jù)的描述與表示,如字符集、數(shù)據(jù)類型、變量、數(shù)組、指針、類或?qū)ο蟮龋辉谟嬎闾幚韺?,主要實現(xiàn)程序的控制與數(shù)據(jù)的操作,包括程序設(shè)計的基本規(guī)則和方法;在計算分析層,主要包括算法分析、結(jié)構(gòu)化程序設(shè)計,面向?qū)ο笤O(shè)計思想等;在計算實現(xiàn)層,主要包括對算法的實現(xiàn)、算法程序的表示,調(diào)適與驗證程序的穩(wěn)定性等;在計算優(yōu)化層,通過時間復雜度分析、空間復雜度分析,優(yōu)化程序設(shè)計流程和方法。在計算思維與程序設(shè)計課程融合中,要把握適度原則,避免過度強調(diào)程序設(shè)計的繁雜語法和規(guī)則、限制學生思維的主動性和能動性。培養(yǎng)計算思維要結(jié)合課程內(nèi)容,啟發(fā)學生關(guān)注復雜問題的分解與解決,提高學生綜合素養(yǎng)和程序設(shè)計專業(yè)能力。
程序設(shè)計課程作為計算機專業(yè)基礎(chǔ)課,包括數(shù)據(jù)存儲、數(shù)據(jù)表示、數(shù)據(jù)處理、程序設(shè)計、程序?qū)崿F(xiàn)和程序優(yōu)化等內(nèi)容。因此,強調(diào)產(chǎn)出導向理念與計算思維的培養(yǎng),在程序設(shè)計課程教學中需要把握3 個方面。
知識灌輸、一刀切的無差別育人模式,既會抑制學生的創(chuàng)新意識和創(chuàng)造力,又不利于計算思維的培養(yǎng)。結(jié)合學情,了解學生的認知、起點、學習需求,強調(diào)“因材施教、能者多學”原則,設(shè)置分層次、有梯度的學習任務(wù),讓每個學生的能力都能夠獲得提升。
在程序設(shè)計課程中,要明晰課程特點,體現(xiàn)學生專業(yè)技能的培養(yǎng)。增加實踐性課時,特別是引入真實項目或任務(wù),鼓勵學生分工協(xié)作、合作探究、歸納總結(jié),提升其程序設(shè)計綜合能力。
傳統(tǒng)教學目標以“了解”“理解”“熟悉”“掌握”等為要求,考核學生的能力缺乏量化,導致教學效果不理想。據(jù)調(diào)研,很多高校程序設(shè)計課程缺乏明晰、準確、完善的考核評價體系。應(yīng)立足計算思維,細化評價內(nèi)容,著力培養(yǎng)學生利用計算機程序設(shè)計解決實際問題的能力。在評價上,要啟發(fā)學生發(fā)現(xiàn)、分析問題,尋求不同算法,激活學生思維;通過算法比較,增強學生自覺意識。鼓勵重構(gòu)問題,培養(yǎng)學生思維的深度。
落實工程教育專業(yè)認證培養(yǎng)理念,以學生為中心,以產(chǎn)出為導向,從人才職業(yè)需求和必備能力方面“反向設(shè)計”課程教學模式,突出基本知識、專業(yè)技能、綜合素質(zhì)的協(xié)調(diào)發(fā)展。
在產(chǎn)出導向理念下,對于程序設(shè)計課程育人目標的設(shè)定,要明晰“具備解決復雜軟件工程能力”的人才定位。程序設(shè)計本身具有多種學科交叉、綜合性特征,對數(shù)學、自然科學等知識的學習,要體現(xiàn)學生計算思維的培養(yǎng),能夠結(jié)合程序設(shè)計具體實踐問題,優(yōu)化程序設(shè)計語言的表示方法,順應(yīng)程序設(shè)計模塊結(jié)構(gòu)特點,通過抽象、歸納、遞歸、回溯等算法設(shè)計,獲得自上向下的程序設(shè)計思路。計算思維的培養(yǎng),通過對程序設(shè)計目標、程序編寫過程、程序執(zhí)行、驗證與調(diào)適分析,解決具體問題。注重程序語言規(guī)范、程序算法的表示、程序設(shè)計方法的掌握,更要能夠銜接軟件工程領(lǐng)域,提高學生在編程中養(yǎng)成必備的職業(yè)素養(yǎng),如合作意識、團隊精神,具備多學科背景下的程序設(shè)計編程能力,能夠結(jié)合編程項目,展開自主學習、自主探究,適應(yīng)軟件行業(yè)人才發(fā)展需要。教師在關(guān)注程序設(shè)計課程教學時,要確立“具備解決復雜軟件工程能力”的人才目標,以產(chǎn)出導向為指引,對教學各個環(huán)節(jié)進行優(yōu)化和變革,提升軟件人才綜合素養(yǎng)。
程序設(shè)計課程涵蓋的知識點、程序設(shè)計規(guī)則與算法較多。要想實現(xiàn)正確的程序輸出,就需要做好數(shù)據(jù)的表示和處理。在教學中,針對過多的講解程序規(guī)則、算法等內(nèi)容,學生反而會被這些知識點所束縛,導致計算思維受限。程序設(shè)計課程可以讓學生自主認識相關(guān)規(guī)則和算法,自主體認程序設(shè)計的數(shù)據(jù)表示和處理方式,培養(yǎng)學生的計算思維。要將自主學習融入程序設(shè)計各個環(huán)節(jié),要強化學生自主學習意識和能力。例如對于常量、變量的討論,與數(shù)據(jù)二進制存儲有關(guān),如果圍繞二進制展開知識點講授,學生依然存在搞混現(xiàn)象,教學效果不理想。應(yīng)給予學生自主學習的機會,讓學生自己去探索和感知二進制補碼存儲的規(guī)律。教師通過有效的引導,化解學生學習中的疑難問題。參照產(chǎn)出導向理念,根據(jù)程序設(shè)計教學目標,要引領(lǐng)和啟發(fā)學生主動進行自主學習,如在任務(wù)設(shè)計與布置中,結(jié)合學情,鼓勵學生自主學習。針對結(jié)構(gòu)體知識的講解,安排學生在課下學習“共同體”“枚舉類型”,引入作業(yè),讓學生對自己的學習成效進行考核。程序設(shè)計課程非常適宜學生半自主學習,由師生協(xié)同,整合課程學習資源,鼓勵學生持續(xù)改進自主學習模式。隨著學生學習能力的提高,教師要減少干預與監(jiān)控。同樣,注重因材施教,結(jié)合學生自身學習興趣、方向,拓展其知識面,提升學生解決復雜工程問題的學科能力。
程序設(shè)計課程教學中有結(jié)構(gòu)化分析方法、面向?qū)ο蠓治龇椒ǖ?。考慮到程序設(shè)計的教學效率,教師要注重學生間的合作與交流,鼓勵學生以團隊形式參與分組討論,共同提升計算分析能力。一般情況下,團隊教學模式有三種。第一種是以分塊協(xié)作為主,將一項復雜的程序設(shè)計任務(wù)分解為若干模塊,團隊各成員相互協(xié)作,各自完成相應(yīng)的模塊。第二種是主輔協(xié)作,由能力強的學生與能力弱的學生合作,對任務(wù)進行難易度劃分,各負其責。第三種是結(jié)對協(xié)作,圍繞程序設(shè)計任務(wù),引入角色互換方式完成合作。不同協(xié)作方式的應(yīng)用要與課程實際相聯(lián)系。每個人在面對程序設(shè)計任務(wù)時,其思維意識、思維能力是有限的。引入小組合作,發(fā)揮團隊的力量,有助于學生從思維碰撞中形成計算思維與分析能力。比如,對于一個數(shù),通過素數(shù)因子乘積的方式來表示這個數(shù)。很多學生在分解該數(shù)時,會采用雙重循環(huán)程序結(jié)構(gòu)來實現(xiàn)。利用外循環(huán),窮舉因子;利用內(nèi)循環(huán),判斷該數(shù)是否為素數(shù)。這一設(shè)計思路,看似沒有紕漏,但少數(shù)學生在對素數(shù)因子進行分解時,無須再判斷其是否為素數(shù)。也就是說,利用單循環(huán)結(jié)構(gòu)即可解決該問題。通過學生分組探討,能夠開闊學生計算思維的視野,在遇到程序設(shè)計等問題時,多鼓勵學生團隊協(xié)作,從不同想法的碰撞中激發(fā)計算思維,提高學生程序計算分析能力。
計算思維的培養(yǎng),要強調(diào)學生計算實現(xiàn)能力的獲得。在教學過程中,教師要善用啟發(fā)式教學,引領(lǐng)學生展開思維訓練。在程序設(shè)計課程中,針對知識型問題,可以將知識嵌入程序設(shè)計,分析程序,體認知識。比如,對邏輯運算符的使用,很多學生在程序設(shè)計時,易犯錯誤集中在邏輯與左側(cè)表達式值為“0”,或者邏輯或左側(cè)表達式值為“1”時,右側(cè)表達式不再執(zhí)行。教師利用具體程序,讓學生通過執(zhí)行程序,對比執(zhí)行結(jié)果,反思該知識點,促進學生對邏輯運算符的正確理解。對于分析型問題,教師要突出學生思維的發(fā)散。對程序流程的控制,程序設(shè)計的流程,有順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)等。對于順序結(jié)構(gòu),在不使用中間變量條件,交換兩個數(shù)的方法。形如“a=a+b;b=a-b;a=a-b”。運用編程語句,如何來交換兩個數(shù),啟發(fā)學生去體會順序結(jié)構(gòu)的數(shù)據(jù)流向,幫助學生掌握順序結(jié)構(gòu)的編程方法。同樣,對于選擇結(jié)構(gòu),可以從最大公約數(shù)的求解方法中來驗證。對循環(huán)結(jié)構(gòu),可以通過除法運算實例,加深學生對程序流程的控制。計算思維在培養(yǎng)中,要注重問題的遞進性。例如“百錢百雞”問題,利用三重循環(huán),將公雞、母雞、小雞的數(shù)量控制在“0~100”之間,每次累進“1”,窮舉所有情況。對于該設(shè)計思路,請同學們思考:是否需要對三重循環(huán)的常量都設(shè)定為“0~100”,是否需要每次都累進“1”,是否必須用“三重循環(huán)”來實現(xiàn)。鼓勵學生拓展思維,優(yōu)化程序設(shè)計算法,以便提高程序運算效率。在計算思維培養(yǎng)中,學科知識的交叉與融合,面對程序設(shè)計任務(wù),不能孤立地看待問題,要結(jié)合多種學科知識,強調(diào)學生數(shù)學思維分析能力的養(yǎng)成。數(shù)學思維為計算思維創(chuàng)造基礎(chǔ),程序設(shè)計中的計算思維很多情況需要轉(zhuǎn)換為數(shù)學方式來完成,如合數(shù)的分解,從“2”開始,直到合數(shù)的平方根結(jié)束,作為循環(huán)判斷的是否整除的條件。
產(chǎn)出導向下,程序設(shè)計課程教學要歸結(jié)于對實際問題的解決。結(jié)合程序設(shè)計課程,引入具體的編程項目,讓學生能夠參與編程,對程序進行驗證、優(yōu)化,提高程序設(shè)計的正確性、可行性、高效性。在程序設(shè)計中,對所編程序需要進行調(diào)試、驗證。如何選擇調(diào)試工具,如何驗證程序的合理性,如何結(jié)合錯誤提示來改進和糾正程序內(nèi)容,如何設(shè)置程序運行斷點,如何利用單步執(zhí)行來分析程序中變量的合理性等等。通過編程實踐,對程序進行輸出結(jié)果調(diào)適,再反過來優(yōu)化編程方法,如對于“N 個字符串有序輸出”任務(wù),需要明晰字符串的存儲方式,設(shè)定字符串的排序過程。對于不同字符串,根據(jù)其長度不同,可以選擇不同的存儲方式,如靜態(tài)數(shù)組,需要預先定義數(shù)組的大小;對于引入多個變量來存儲字符串,可能影響程序的可讀性。對字符串的排序,從字符串大小比較、交換位置中,可能會帶來運算效率問題。因此,引導學生利用指針數(shù)組,利用交換數(shù)組元素,而不交換字符串,能夠?qū)崿F(xiàn)算法的優(yōu)化,提高學生編程設(shè)計優(yōu)化能力。
計算思維的培養(yǎng)具有長期性、漸進性特點,要融入程序設(shè)計課程教學全過程。重視產(chǎn)出導向理念的指導,從程序設(shè)計基礎(chǔ)知識、編程項目實例開發(fā)中,完善教學評價,增強學生自主學習、團隊協(xié)作能力。將計算思維與數(shù)據(jù)分析處理能力協(xié)同起來,讓學生能夠融入計算思維,關(guān)注問題的解決過程,為后續(xù)課程學習奠定基礎(chǔ)。