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