徐 猛 ,楚 旺,宋英杰,謝青松
(1.山東工商學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山東 煙臺(tái) 264005;2.山東省高等學(xué)校未來智能計(jì)算協(xié)同創(chuàng)新中心,山東 煙臺(tái) 264005)
2018年3月15日,教育部辦公廳發(fā)布《教育部辦公廳關(guān)于公布首批“新工科”研究與實(shí)踐項(xiàng)目的通知》(教高廳函[2018]17號(hào)),提出了“新工科”研究與實(shí)踐建設(shè)的新要求,相對于傳統(tǒng)的人才培養(yǎng)模式,未來新興產(chǎn)業(yè)需要的是實(shí)踐能力強(qiáng)、創(chuàng)新能力強(qiáng)、具備國際競爭力的高素質(zhì)復(fù)合型人才。
C程序設(shè)計(jì)課程是高校軟件工程專業(yè)本科教育的必修課程,也是數(shù)據(jù)結(jié)構(gòu)與算法、算法設(shè)計(jì)與分析等后續(xù)相關(guān)專業(yè)課的基礎(chǔ),在軟件工程專業(yè)的本科教育中發(fā)揮著舉足輕重的作用。近年來,針對C程序設(shè)計(jì)已有許多教改工作[1-3]及思考[4],陸續(xù)提出了一些新的教學(xué)模式與方法[5-6],但從部分軟件工程專業(yè)畢業(yè)學(xué)生掌握的情況來看,與培養(yǎng)滿足企業(yè)軟件開發(fā)需求、跟進(jìn)IT行業(yè)技術(shù)發(fā)展、具備專業(yè)性創(chuàng)新能力的高水平軟件工程人才仍具有一定的差距。為了達(dá)到這個(gè)目標(biāo),可將培養(yǎng)目標(biāo)進(jìn)行分解細(xì)化,制訂C程序設(shè)計(jì)課程的學(xué)生能力培養(yǎng)目標(biāo),將其融入本課程的教學(xué)過程中,并結(jié)合工程教育專業(yè)認(rèn)證的思想不斷進(jìn)行反饋、改進(jìn),從而達(dá)到培養(yǎng)具備高技術(shù)、高素質(zhì)、符合現(xiàn)代企業(yè)需求的應(yīng)用型人才的目標(biāo)。
近年來,我國提出“走中國特色新型工業(yè)化道路”“中國制造2025”等建設(shè)目標(biāo)。這些目標(biāo)都需要大量的工程師來實(shí)現(xiàn),而軟件工程專業(yè)正是培養(yǎng)軟件開發(fā)領(lǐng)域所需工程人才的主要專業(yè)。然而,目前許多學(xué)校的軟件工程專業(yè)在軟件工程人才培養(yǎng)過程中還存在一定的問題。具體到C程序設(shè)計(jì)教學(xué)中,目前主要存在以下問題。
課程的教學(xué)目標(biāo)應(yīng)當(dāng)為最終的人才培養(yǎng)目標(biāo)服務(wù),然而目前針對C程序設(shè)計(jì)課程的教學(xué)目標(biāo),多數(shù)是針對課程本身制定,并未結(jié)合最終的人才培養(yǎng)目標(biāo),體現(xiàn)不同專業(yè)的特色及側(cè)重點(diǎn),導(dǎo)致學(xué)習(xí)過程中難以提高學(xué)生學(xué)習(xí)興趣,課程結(jié)束后未能完全為后續(xù)課程奠定基礎(chǔ),畢業(yè)后無法滿足用人單位對于人才的需求。
軟件工程專業(yè)的人才培養(yǎng),除需要學(xué)生掌握軟件開發(fā)相關(guān)的主要技術(shù)外,更加重要的是培養(yǎng)學(xué)生在解決實(shí)際問題時(shí)的工程思想,而軟件工程的思想需要貫穿于多門課程,由淺入深,由點(diǎn)及面,在整個(gè)人才培養(yǎng)過程中處處滲透、體現(xiàn)軟件工程的思想,使學(xué)生養(yǎng)成以工程思想的習(xí)慣進(jìn)行問題分析、軟件開發(fā)。目前的C程序設(shè)計(jì)教學(xué)過程中,更多的注意力放在了語言本身的細(xì)節(jié)上,而軟件工程的思想及要求體現(xiàn)過少,不符合軟件工程專業(yè)的培養(yǎng)要求。
C程序設(shè)計(jì)課程中知識(shí)點(diǎn)分散,內(nèi)容多,對于不同的專業(yè)應(yīng)當(dāng)重點(diǎn)不同。目前C程序設(shè)計(jì)教學(xué)中,過于強(qiáng)調(diào)對C語言內(nèi)容的掌握全面程度,但是對于一些在實(shí)際工程應(yīng)用中使用頻率高、易出問題的重點(diǎn)內(nèi)容不夠突出,導(dǎo)致在課程結(jié)束后學(xué)生難以直接進(jìn)行工程性軟件開發(fā)。
目前C程序設(shè)計(jì)教學(xué)的考核方式,一種是筆試,該方式易導(dǎo)致學(xué)生動(dòng)手能力欠缺;第二種是機(jī)試,該方式提高了學(xué)生的動(dòng)手能力,但對于軟件工程的要求難以體現(xiàn)。因此,單一的評價(jià)方式,無法體現(xiàn)工程實(shí)踐中軟件開發(fā)對于人才的要求。
為培養(yǎng)出符合市場需求的軟件人才,按照“工程教育專業(yè)認(rèn)證”的要求,針對上述C程序設(shè)計(jì)課程教學(xué)過程中存在的問題,可以對軟件工程專業(yè)的C程序設(shè)計(jì)課程教學(xué)采取如下改進(jìn)措施。
根據(jù)軟件工程專業(yè)的人才培養(yǎng)目標(biāo),有針對性地制訂C程序設(shè)計(jì)課程的教學(xué)目標(biāo)。人才培養(yǎng)過程中,所有課程的設(shè)置及課程目標(biāo)的制定,都應(yīng)該以達(dá)成人才培養(yǎng)目標(biāo)為最終目的,因此,首先根據(jù)軟件工程專業(yè)的人才培養(yǎng)目標(biāo),制定出軟件工程專業(yè)的畢業(yè)要求,并將畢業(yè)要求分解到各課程中,其中,C程序設(shè)計(jì)對于軟件工程專業(yè)畢業(yè)要求指標(biāo)點(diǎn)的貢獻(xiàn)度見表1。
根據(jù)表1中對于培養(yǎng)目標(biāo)的貢獻(xiàn)度要求及課程支撐,制訂C程序設(shè)計(jì)課程教學(xué)目標(biāo):本課程重點(diǎn)講解過程式程序設(shè)計(jì)語言及其程序設(shè)計(jì)方法,通過本課程的學(xué)習(xí),學(xué)生能夠:
(1)掌握程序設(shè)計(jì)語言的基本結(jié)構(gòu);
(2)掌握程序設(shè)計(jì)的基本思想、方法和技巧,養(yǎng)成良好的程序設(shè)計(jì)習(xí)慣,培養(yǎng)學(xué)生基本的計(jì)算思維能力(設(shè)計(jì)簡單算法);
(3)掌握C語言編程、編譯、調(diào)試、測試工具和方法。
由于本課程是學(xué)生接觸的第一門計(jì)算基礎(chǔ)課程,該課程的學(xué)習(xí)情況直接影響后續(xù)課程的學(xué)習(xí),因此本課程被看做是計(jì)算基礎(chǔ)課程中最重要的課程之一。本課程的講解要結(jié)合軟件工程的相關(guān)概念(如設(shè)計(jì)質(zhì)量、代碼規(guī)范、代碼測試、代碼評審等),使工程化的思想融入學(xué)生的學(xué)習(xí)過程中。
軟件工程專業(yè)C程序課程的教學(xué)目標(biāo)要求學(xué)生能夠掌握相關(guān)工程知識(shí),并利用已有知識(shí)分析問題,設(shè)計(jì)相應(yīng)軟件解決方案,使用開發(fā)工具進(jìn)行程序開發(fā)與測試,因此軟件工程相關(guān)思想及知識(shí)應(yīng)當(dāng)貫穿整個(gè)C程序設(shè)計(jì)課程的始終,可以采取以下措施改進(jìn)之前的教學(xué)過程。
表1 C程序設(shè)計(jì)對畢業(yè)要求的貢獻(xiàn)度
(1)整個(gè)課程中以一個(gè)完整項(xiàng)目的不斷迭代作為教學(xué)示例,使學(xué)生明確所學(xué)內(nèi)容如何在實(shí)際軟件項(xiàng)目中進(jìn)行運(yùn)用。
(2)2~3名學(xué)生一組,初步體會(huì)團(tuán)隊(duì)開發(fā),使學(xué)生從開始逐漸適應(yīng)團(tuán)隊(duì)開發(fā),在團(tuán)隊(duì)開發(fā)中體會(huì)軟件工程思想的重要性。
(3)課后作業(yè)增加根據(jù)已有項(xiàng)目文檔進(jìn)行模塊開發(fā)的要求,使學(xué)生從代碼實(shí)現(xiàn)環(huán)節(jié)開始接觸軟件開發(fā)過程,明確軟件并非是直接編碼而來。
在課程授課前將學(xué)生進(jìn)行分組,每組2~3名學(xué)生。授課過程中,首先,向?qū)W生演示一個(gè)已完成項(xiàng)目,使學(xué)生對項(xiàng)目的整體目標(biāo)有感性認(rèn)識(shí)。其次,在課程進(jìn)行過程中,每次講解新知識(shí)前,都由該項(xiàng)目的某一功能提出問題,使學(xué)生能夠清晰的認(rèn)識(shí)到所面對的問題,進(jìn)而能夠?qū)⑺鶎W(xué)知識(shí)運(yùn)用到軟件實(shí)際開發(fā)過程中。然后,在知識(shí)點(diǎn)講解結(jié)束后,為每一小組的不同學(xué)生分配項(xiàng)目不同模塊的文檔,要求按照文檔進(jìn)行程序的實(shí)現(xiàn),這樣既練習(xí)了所學(xué)知識(shí),同時(shí)也使學(xué)生初步認(rèn)識(shí)了軟件開發(fā)的過程。最后,要求學(xué)生在完成自己的模塊后,將組內(nèi)完成的代碼和項(xiàng)目中已提供的其他目標(biāo)代碼進(jìn)行鏈接和簡單的系統(tǒng)測試,從而達(dá)到初步鍛煉學(xué)生團(tuán)隊(duì)合作開發(fā)的能力,同時(shí)也訓(xùn)練了學(xué)生基本的文檔閱讀能力。
根據(jù)C程序設(shè)計(jì)課程的教學(xué)目標(biāo),制訂主要的課程內(nèi)容見表2。
課程內(nèi)容中,在掌握C語言本身語法的基本要求下,重點(diǎn)講解實(shí)際軟件開發(fā)中所需工程知識(shí),使學(xué)生從接觸編程初期,就養(yǎng)成注重注釋、變量命名、代碼風(fēng)格、代碼可讀性、可移植性等工程實(shí)踐問題的良好編程習(xí)慣。例如在軟件工程實(shí)踐方面,對于指針的應(yīng)用,一定要明確在軟件開發(fā)實(shí)踐中最容易犯錯(cuò)且難以進(jìn)行錯(cuò)誤定位的兩個(gè)問題——野指針和內(nèi)存泄漏,并且在教學(xué)過程中不斷重復(fù)對于這兩個(gè)問題的分析,將出現(xiàn)的原因及現(xiàn)象和如何在程序開發(fā)過程中避免出現(xiàn)等逐步進(jìn)行講解,同時(shí)將在遇到此類問題時(shí)如何進(jìn)行應(yīng)對,作為實(shí)驗(yàn)環(huán)節(jié)讓學(xué)生進(jìn)行練習(xí),從而徹底掌握此類問題相關(guān)的必要工程實(shí)踐知識(shí)。對于軟件工程實(shí)踐中常用的字符串也要作為C語言程序設(shè)計(jì)授課的重點(diǎn)講解內(nèi)容,尤其要重點(diǎn)關(guān)注字符串中最易忽略的最后一個(gè)“空”字符的問題。讓學(xué)生將實(shí)際軟件項(xiàng)目中出現(xiàn)的各類對于字符串的問題進(jìn)行逐一練習(xí),進(jìn)行多次講解與問題反饋,從而讓學(xué)生徹底掌握字符串這一軟件工程實(shí)踐中最為常用且重要的知識(shí)。
表2 課程內(nèi)容
由于單一的考查方式難以體現(xiàn)軟件工程所要求的多種開發(fā)能力,因此采用多樣化考核方式改革,具體考核方式如下。
(1)筆試。筆試主要考查學(xué)生對于理論知識(shí)的掌握程度,包括語言相關(guān)語法、流程圖及偽碼編寫和閱讀能力等。其中基本語法占比60%,流程圖及偽碼編寫和閱讀占比40%。
(2)機(jī)試。機(jī)試主要考查學(xué)生實(shí)際編程能力,包括基本算法的實(shí)現(xiàn)、簡單問題的編程等。其中,50%為編程解決簡單問題,50%為依照給定算法或文檔實(shí)現(xiàn)代碼。
(3)項(xiàng)目。項(xiàng)目主要考查學(xué)生對軟件工程基本思想的掌握,包括代碼風(fēng)格、小規(guī)模團(tuán)隊(duì)合作等。具體評分標(biāo)準(zhǔn)見表3。
表3 C程序設(shè)計(jì)項(xiàng)目評分標(biāo)準(zhǔn)
最終課程得分筆試成績占30%,機(jī)試成績占30%,項(xiàng)目成績占30%,平時(shí)學(xué)習(xí)及作業(yè)情況占10%。
結(jié)合多年的課堂教學(xué)經(jīng)驗(yàn)和學(xué)生的實(shí)際情況,以培養(yǎng)滿足市場需求的應(yīng)用型軟件工程人才為目標(biāo),提出C程序設(shè)計(jì)課程教學(xué)改革方案。教學(xué)實(shí)踐證明,這種教改方案不僅提高了學(xué)生的C語言編程能力,同時(shí)還初步培養(yǎng)了學(xué)生的軟件工程思想及良好的編程習(xí)慣,比如,學(xué)生在編程過程中使用注釋的比例從不足10%提高到了70%左右,對于變量命名和代碼格式等規(guī)范性也有大幅提高。同時(shí)初步鍛煉了學(xué)生的團(tuán)隊(duì)合作能力,在課程結(jié)束后能夠合作進(jìn)行簡單項(xiàng)目的開發(fā),為培養(yǎng)符合現(xiàn)代企業(yè)需求的應(yīng)用型軟件工程人才打下堅(jiān)實(shí)基礎(chǔ)。接下來,將根據(jù)實(shí)際教學(xué)情況,對C程序設(shè)計(jì)教改措施進(jìn)行進(jìn)一步的完善。