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