唐四薪,鄭光勇
(衡陽師范學院 計算機科學與技術學院,湖南 衡陽 421001)
我國軟件行業(yè)每年需要大量的程序設計人才,而我國高等教育培養(yǎng)的計算機人才雖然在數(shù)量上能滿足需求,但在質(zhì)量上仍然和軟件企業(yè)的要求有較大差距。例如,很多計算機專業(yè)學生畢業(yè)后需要再參加社會培訓才能從事軟件開發(fā)行業(yè)工作。這說明我國程序設計類課程體系的教學效果仍然不能令人滿意,特別是對于學生基礎較一般的應用型本科院校。
由于程序設計能力是計算機專業(yè)學生的核心能力,因此如何改進教學,高效地培養(yǎng)學生的程序設計能力一直是一個具有重大研究意義的課題[1]。目前大多數(shù)教學研究都是對教學方法、教學手段進行改革,但對課程體系結構、培養(yǎng)目標層次這類教學改革的基礎性問題研究較少[2-4]。
與我國相比,印度的高等教育毛入學率不及我國,但卻培養(yǎng)了大量合格的軟件開發(fā)人員,說明印度的軟件教育比我國成功。有人認為,這是因為印度的母語是英語,因此學習軟件開發(fā)有語言方面的優(yōu)勢。這種觀點實際上并沒有意識到問題的關鍵,我們認為這是由于兩國在程序設計人才的定位、培養(yǎng)目標、課程層次側重點方面的差異而造成的。
我國的高等教育是從精英教育開始的,程序設計教學一開始也是面向精英類學生的,因此培養(yǎng)目標的層次比較高,導致課程體系中高層次的課程比較多,低層次的、應用型的課程不足。隨著我國高等教育由精英教育逐步走向大眾化教育,雖然也做了一些調(diào)整,但仍然存在盲目拔高層次,程序設計課程體系的層次不清晰的問題,這才是引起我國程序設計類課程教學效果不良的真正原因,其主要不足可歸結為如下4點。
首先,每個層次的教學目標不夠明確,表現(xiàn)在:①課程設置和教學內(nèi)容沒有體現(xiàn)分層的教學目標;②一些高層次的課程或知識點在低層次教學目標尚未達到時就開設,比如學生學數(shù)據(jù)結構時連代碼中大量出現(xiàn)的函數(shù)定義都看不懂,導致學生的學習效果不好;③一些應用價值很高的編程技能在高校教學中講解比較空泛,沒有引向深入和重點強化。
其次,根據(jù)建構主義學習理論,學生要掌握新知識必須和舊知識聯(lián)系在一起才能被掌握,這就要求必須厘清程序設計類課程的層次結構,和認知的邏輯順序,如果課程的層次結構沒厘清,學生在構建知識體系時就不能把新知識和已有的舊知識很好地建構在一起。
第三,存在盲目拔高層次的現(xiàn)象,例如,高校數(shù)據(jù)結構課的大量內(nèi)容都在講一些比較高級的數(shù)據(jù)結構。但實際上,這些高級數(shù)據(jù)結構可能只在一些科研軟件的開發(fā)編程中才會用到,而在大部分行業(yè)軟件的開發(fā)中一般都用不到。與此相對的是,在軟件公司中,經(jīng)常要用到的一些技術(比如程序的封裝,軟件的設計模式)等,在高校開設的課程中又沒有系統(tǒng)地講授。比如,學生在沒有學過微觀上設計軟件的課程——“設計模式”情況下,就去學習宏觀上設計軟件的課程——“軟件工程”,其教學效果當然不可能會好。
最后,沒有體現(xiàn)興趣引導、任務驅(qū)動的教學策略。過去,普遍存在教程序設計課程就是教編程語言的誤區(qū)。例如,學生學習的第一門語言多為C語言或VB,而這兩種語言對于初學者來說無法做出比較有實用價值的程序;另一方面,側重于以語法為重點進行教學,使學生容易陷入繁冗的語法格式等細枝末節(jié)而忽略程序設計的本質(zhì),忽略程序語言設計者的設計思想,降低了學生對編程的興趣,不利于學生編程思維的塑造與培養(yǎng)。
總體來說,程序設計類課程體系的設置和教學研究還處在逐漸深化的過程中,存在以下問題和不足:①由于研究者大都是教育工作者,自身缺乏開發(fā)大型軟件的實踐經(jīng)驗,因此對編程學習的層次和路線大多缺乏親身體會經(jīng)驗;②只是在教學模式上提出了層次階段模型[5],但并未對編程課程的知識結構進行層次分析,使得將教學模式轉換應用到實際教學中還存在難度;③過于強調(diào)教學內(nèi)容的系統(tǒng)性和完備性,對編程中需要掌握的重點技能(如函數(shù)設計、問題抽象、團隊分工開發(fā)等)強化不足[6]。
雖然程序設計課程的教學體系龐大且不斷發(fā)展變化,但是學習編程的模式和步驟是相對固定的,根據(jù)編程需要學習的各個知識面,將其抽象劃分為3個方面,稱為程序設計課程體系的3個維度,如圖1所示。
圖1 程序設計課程體系教學的維度和層次劃分
維度一:界面編程及用戶交互(主要包括Windows界面、Web界面和APP界面等的設計和交互)。
維度二:編程訪問外部資源(包括訪問文件、數(shù)據(jù)庫編程和Socket網(wǎng)絡編程)。
維度三:各種平臺下的編程(Windows平臺、Linux平臺、安卓平臺、嵌入式平臺)。
劃分維度后,根據(jù)每個維度的難易程度和學生的興趣,可以更清晰地規(guī)劃出學生的學習路徑,為更好地編寫課程標準和人才培養(yǎng)方案提供參考。對于應用型本科人才培養(yǎng)來說,教學內(nèi)容的改革應著重放在維度一和維度二上。
接下來,研究程序設計類課程的學習層次,并按照學習層次設置相關課程。依據(jù)是編程能力是一種可分層的能力,教編程不是教語言,每種語言都有一些共同的內(nèi)容,程序設計類課程對語言的依賴性很低,而對幾種固定的能力依賴度卻很高。程序設計依賴的幾種固定的能力可劃分為圖1所示的5個層次。
第一層次:學會基本語法,基本程序結構。
第二層次:學會程序封裝,功能和數(shù)據(jù)封裝(包括使用函數(shù)封裝程序功能,使用結構體封裝數(shù)據(jù),使用類封裝數(shù)據(jù)和功能)。
第三層次:學會利用設計模式抽象問題(包括UML建模、類的設計)。
第四層次:學會使用特殊數(shù)據(jù)結構,設計高效算法(數(shù)據(jù)結構)。
第五層次:掌握軟件開發(fā)的過程與方法(軟件工程)。
最后,研究初學者學習編程的習得過程,在課程內(nèi)容設置上,注重分散難點,由淺入深,問題驅(qū)動。在實驗案例設置上,注重案例的實用性、綜合性、趣味性和難易適中性。
依據(jù)基于維度和分層課程體系劃分,可給出一種一般化的程序設計類培養(yǎng)目標、課程體系安排和課程教學模式,以及可操作的教學模式和程序,對計算機專業(yè)程序設計類課程的理論和實驗教學的設置提供參考和推廣價值。具體的實施步驟如下。
(1)分析程序設計類課程體系的層次和維度,根據(jù)層次找到最佳的學習路徑,培養(yǎng)目標,根據(jù)維度確定最合適的入門點和學習范圍。
(2)根據(jù)分層教學目標構建課程體系,并重構每層次課程的設置和每門課的教學內(nèi)容。
(3)分析新構建課程的知識結構,將知識點分類為元知識(基礎知識)、硬知識(識記的知識)和軟知識(實踐類知識),分別設計教學策略和教學方法。
(4)根據(jù)上述步驟進行教學實踐,再總結出一般的教學過程、教學方法和教學策略,將其用培養(yǎng)方案、課程標準和教材、研究論文等形式表現(xiàn)出來。
對程序設計類課程體系劃分維度和層次,并不是要求在開設課程時涉及所有的維度和層次,而應該根據(jù)學生的實際水平,或依據(jù)社會對專業(yè)的人才需求,靈活地選擇其中某幾個層次和某些維度。以應用型本科院校來說,課程體系的維度可如下設置。
(1)對于偏硬件開發(fā)的方向,應側重學習維度三的內(nèi)容,即掌握各種平臺下的編程(Windows平臺、Linux平臺、安卓平臺、嵌入式平臺);在編程層次上,學生達到第二層次就可以。
(2)對于偏網(wǎng)絡開發(fā)方向(如網(wǎng)絡工程專業(yè)),可重點加強維度二內(nèi)容的學習,包括網(wǎng)絡編程和Web編程。學生達到第二層次就可以。
(3)對于偏軟件開發(fā)方向(如軟件工程專業(yè)),學生至少需達到第三層次。對于維度來說,應主要學習維度一和維度二的內(nèi)容,包括各種界面和交互的編程,以及編程訪問外部資源(包括訪問文件、數(shù)據(jù)庫編程和Socket網(wǎng)絡編程)。
為了培養(yǎng)適應軟件企業(yè)需要的編程人才,應用型高校在教學中,應將人才培養(yǎng)目標定位在達到第三層次為宜,對第四、五層次只需有一定的了解即可。因為,第一層次是基礎,第二、三層次是重點,教學改革的重點應放在第二、三層次的改革上。
基于分層和維度的方法,進行程序設計課程體系的設置。
(1)對于第一層次,主要是通過編程語言來學習基本語法和基本程序結構,編程語言以開設2~3門為宜,教第2門語言時應注意與第1門語言作對比分析,這樣學生才能通過比較幾種編程語言的異同對程序設計有更深的體會。在編程語言的選擇上可根據(jù)專業(yè)學習或社會的需要靈活地選擇,例如,我校一般選擇C++、Java和Python作為第一層次教學的編程語言。
第一層次的課程可以與維度一的課程結合起來開設,如開設“Windows界面編程”“Web編程”等課程。界面編程與數(shù)據(jù)交互是制作實用程序的基礎,且學習界面編程能有效激發(fā)學生學習編程的興趣,界面編程本質(zhì)上比較簡單,適合于盡早開設,按照難易程度,可按照Web編程、Windows編程和安卓編程的順序進行學習。
(2)對于第二層次,可開設“程序封裝方法”,該課程主要內(nèi)容為函數(shù)和面向?qū)ο缶幊?,這對于應用型本科院校的學生來說是非常必要的,因為應用型本科學生在學完幾門編程語言之后,往往還不能領悟程序封裝的方法和作用,導致對數(shù)據(jù)結構等后續(xù)課程的學習比較吃力,因此將程序封裝方法單獨作為一門課程開設,可起到很好的銜接作用。另一方面,在軟件開發(fā)行業(yè),能夠編寫函數(shù)是參與團隊軟件開發(fā)的基礎,而類作為面向?qū)ο缶幊痰暮诵慕M件,其本質(zhì)是對函數(shù)和數(shù)據(jù)進行二次封裝,使程序進一步結構化,可見學生掌握了程序封裝方法就相當于擁有了進入軟件開發(fā)行業(yè)的敲門磚。
對于維度二,可開設“數(shù)據(jù)庫與Web編程”,將數(shù)據(jù)庫和Web開發(fā)結合起來學習更有效果;以及“Socket網(wǎng)絡編程”,將訪問網(wǎng)絡和訪問文件的技術結合起來。
(3)對于第三層次,可開設“設計模式”課程,該課程應以任務驅(qū)動的方式介紹幾種常用的設計模式,以及UML軟件建模方法[7]。這樣,在學生掌握該層次后,即可適應軟件公司程序員或系統(tǒng)架構師的工作需要了。
(4)第四層次,應開設“數(shù)據(jù)結構”課程,重點講解幾種簡單常用的數(shù)據(jù)結構和算法。需要說明的是,第四層次和第三層次的學習也可同時進行。
(5)第五層次,開設“軟件工程”的課程。只有當學生具備了一定的編程經(jīng)歷,才能較好地理解這門課程,因此,這門課程需要在高年級并且經(jīng)歷過程序課程設計或?qū)嵙暫笤匍_設。在該層次中,還需要重視培養(yǎng)學生的軟件團隊分工開發(fā)的技能。
以衡陽師范學院網(wǎng)絡工程專業(yè)為例,根據(jù)課程體系維度和層次的劃分方法,對該專業(yè)的人才培養(yǎng)方案和課程設置進行了重構。將其程序設計能力的培養(yǎng)目標定位為達到第二層次:其中,第一層次開設C++和Java兩門編程語言的課程,第二層次開設程序封裝方法的課程。
對于課程設置,以維度一和維度二為主,開設Web編程(含數(shù)據(jù)庫編程的內(nèi)容)、Socket編程和安卓編程等。并且,還開設了幾門先修課程,如數(shù)據(jù)庫原理、計算機網(wǎng)絡、Linux操作系統(tǒng)以支撐相關程序設計課程的學習。
經(jīng)過教學改革的實施,取得了較好的實施效果,學生的學習興趣和編程自信心都有明顯提高,經(jīng)調(diào)查統(tǒng)計,學生專業(yè)滿意度提高到97.6%,軟件中級資格證書的考試通過率提高了25%,就業(yè)率提高了5個百分點,并且就業(yè)質(zhì)量也有明顯提高。
程序設計課程體系的維度和層次的劃分方案在衡陽師范學院計算機類專業(yè)進行了初步的實踐,取得了較好的成效,較大地提高了程序設計類課程的教學效果,從而提升了應用型院校計算機類專業(yè)人才培養(yǎng)的質(zhì)量。以此項目研究為基礎,可以使專業(yè)人才培養(yǎng)方案得到完善和改進,同時,將較大地提升學生對學校及專業(yè)的認可度,提高畢業(yè)生就業(yè)率,為我國軟件產(chǎn)業(yè)的發(fā)展作出一定的貢獻。