摘 要:該文以通信工程專業為例,對軟件設計基礎課程開展案例式教學的必要性進行了闡述,然后提出了案例設計的原則,探索了“案例式作業”綜合實訓,并以二維離散余弦變換快速算法為例,論述了編寫案例的相關注意事項,對課堂授課方式進行了改革,取得了較好的效果。
關鍵詞:軟件設計基礎 案例式教學 案例式作業
中圖分類號:G642.0 文獻標識碼:A 文章編號:1674-098X(2014)03(c)-0155-03
1 問題的提出
大多數地方高校本科教育的培養目標是:培養高素質應用型人才。而應用型人才的重要特征是:學生的專業素質能夠適應市場的需要。通信工程的學生要想適應市場需要,必須堅持“軟硬兼通”的培養模式[1]。據統計,通信領域70%以上的增長靠軟件,在一定的硬件設施基礎條件上,軟件業務是通信產業的主要業務增長點。因為硬件基礎設施是相對穩定的,而軟件業務的發展變化是非??斓?,他既要滿足客戶的需求,還要滿足現如今的發展趨勢。因此通信軟件的發展帶動了整個通信行業的發展,進而成為推動整個IT行業向前發展的主要動力。目前,在大學教育擴招的背景下,對于純硬件職位,用人單位在招聘本科人才時,幾乎都要求有相關工作經驗。也就是說,站在公司的利益上講,沒有公司肯愿意讓應屆畢業生來直接介入到硬件工作中去。而單純懂軟件,不懂硬件也不利于系統搭建。事實上,約有80%的行業應用軟件是由非計算機專業的人編寫的。而既掌握本專業知識,又掌握相當計算機應用知識,已經成為各行企業對各高校培養人才的要求。在此背景下,C語言程序設計和軟件設計基礎作為計算機軟件的基石成為我校通信工程專業的必修課[2]。
為了更好地加強通信工程專業學生的軟件編程能力,課程教研組編寫《計算機軟件基礎實驗及課程設計指導書》,充分利用動態鏈接庫的優越性提出“跳躍性分級設計任務”,把驗證型實驗和設計綜合型實驗相結合[4],促進了學生軟件學習的興趣。盡管上述教改工作取得一定的成效,但是在畢業設計中,教研組發現學生對于軟件設計類課題仍然缺乏認知度,對教師下達的任務無從下手,大部分學生都是靠“百度”和“google”完成畢業設計,這使我們反思,為什么學生還是這么懼怕軟件呢?
教研組深入調研了市場上相關的計算機培訓機構,發現他們在授課時具有小班上課,靈活機動,以案例教學為基礎,用任務驅動教學等特點,這種授課方式對于有一定基礎的學生來說,可以更好地聚焦他們的注意力,激發他們學習軟件設計的興趣。因此課程組提出《軟件設計基礎》課程案例式教學設計,試圖引入20-30個案例,把基礎理論與應用實踐緊密結合,把案例和應用任務作為教學內容的主線,力爭在4個學時內講完案例(當然需要學生課下配合),最終提高學生的軟件編程能力。
2 案例設計原則與實踐
通信工程專業與計算機軟件相關的課程主要為:計算機基礎(1)→C語言程序設計(1)→Visual Basic程序設計(3)→軟件設計基礎(4)→Matlab及其應用(4)→單片機原理與應用(5)→DSP技術(5)→軟件無線電技術(5)→嵌入式系統及應用(6)→數據通信網(6)→通信系統課程設計(7)。其中括號里的數字表示開課的學期?!盾浖O計基礎》是計算機軟件的核心課程,其主要內容包括數據結構,操作系統,數據庫系統概論。開設這門課程的目的是讓學生具有初步的軟件編程能力,掌握數據結構的相關算法,理解操作系統的基本概念,熟悉數據庫的基本操作。為了培養學生的軟件素質,此課程也有相當數量的常規上機實驗練習,但是這些練習缺少連貫性和系統性,一般都是以章節為主,學生所練習的題目范圍比較小。更為突出的是:上機內容僅僅從計算機專業的角度加強學生的軟件素質,并沒有結合通信工程的專業特點,以至于在大四進行的通信系統綜合課程設計中,學生對硬件有較好的掌握,但對串口編程等通信軟件知識所知甚少,影響課程設計的進度。由此可見,結合通信工程專業的特點,科學有效地培養學生的軟件素質,把案例教學引入到軟件設計基礎課程中,對于培養應用型人才起著至關重要的作用,具有現實意義[3]。
案例教學因其在美國哈佛大學商學院的成功應用而聞名于世,被教育界所廣泛推崇。我國于20世紀80年代開始引入案例教學,但多年來一直主要用于法學、醫學、經濟學和管理學等學科領域,在工科類課程的教學中, 采用案例教學的偏少。案例教學法是運用案例進行教學的一種方法,通過對一個包含有問題在內的具體情境的描述,引導學生對這些特殊情境進行討論的一種教學方法,是一種教師和學生直接參與共同對案例或疑難問題進行討論的教學方法,其目的是培養學生批判性、分析性的思維能力和信心,論證和說服的技能,以及解決不同實際問題的應變能力。
軟件設計基礎課程的教學對多媒體的依賴性需要借助案例教學來吸引學生的注意力,并促使學生同步思維[5]。計算機軟件的使用必須在計算機上進行,為加強直觀性,提高教學效果,軟件設計基礎課程的教學就離不開多媒體設備。軟件設計基礎的教學,主要是要求學生掌握軟件的各項功能和各種算法操作,對于一個較復雜的軟件來說,其功能是很強大的,操作也非常多,且各種操作之間并無明顯的聯系,因此,單純地向學生講授零散的知識點,不利于學生的深入理解和聯系記憶??梢?,軟件設計基礎課程知識點的零散性需要利用案例來建立各知識點之間的聯系,以利于學生理解和深入。
軟件設計基礎與其他課程的關聯圖如圖1所示,案例式教學的例子盡可能與信息論、數據通信網、通信原理等通信老牌基礎課相關。主要培養學生如下能力:問題分析能力、查閱新技術新資料的能力、工程實踐能力、編寫代碼,撰寫文檔能力。具體實踐如下:
(1)編寫《軟件設計基礎》案例式教學實施方案,關鍵是要選擇典型而準確的案例。因為案例教學法就是運用具體案例進行教學,如何選擇案例,選擇什么案例,對案例教學有著決定性的意義。故所選擇案例應該是“準確”而又“典型”,“準確”是指案例內容與有關理論相吻合,“典型”是指該案例具有代表性,具體選擇哪一個案例取決于教學的內容和目的。只有通過一個個精選的案例使學生輕松地掌握各個知識點的實際應用及其差異,才能達到預期的教學目的和教學效果。學生在學新課時,總是會問:“這門課程的知識到底有什么用?”這是學習過程中常常困擾學生的一個問題。案例教學將理論和實踐引入特定的教學環境,從不同的角度審視兩者的關系,在理論和實踐之間架起了一座橋梁,使理論與實踐有機結合在一起。案例分析促使學生對理論運用的方式、原因等作更深入的思考,在思考過程中,學生可以將有關的理論知識融會貫通, 并與實際應用聯系起來,這樣就使學生在學習知識的過程中記憶更加牢固。案例教學是把學生到社會去實踐的過程提前到教學過程中, 讓學生在學習的過程中, 就具有一定的實戰經驗。例如“約瑟夫環問題”是一個很好地講述隊列的案例,在講完隊列基本原理后,引導學生用隊列解決“約瑟夫環問題”,具體編程時,根據學生的學習能力,可以采用分層次教學,例如對于接受能力快,編程基礎好的同學可以引導他們用VC或C++Builder實現可視化編程。對于其他同學只要求編寫控制臺程序即可。當然為了方便學時學習,可以事先把相關接口做成DLL,這樣使學生把精力都放在隊列技巧的應用上。endprint
(2)嘗試探究式課程學習。所謂探究式課程學習是指在課程講授中,以學生自主學習和合作討論為前提,以案例指導書為基礎,在教師的啟發誘導下,學生自由表達觀點、質疑探究問題,并通過個人、小組、集體等多種形式,結合自身的知識來解決疑點和難點。探究式課程學習特別重視培養學生的自學能力,發展創造性思維,開發學生智力,并通過自我探究,掌握科學方法和學會學習,為終身學習奠定基礎。教師作為探究式課程學習的引導者,其任務是調動學生的積極性,促使他們自己去獲取知識、發展能力,做到自己去發現問題、提出問題、分析問題、解決問題;與此同時,教師還要為學生的學習創設探究的情境,營造探究的氛圍,促進探究的開展,把握探究的深度,評價探究的成效。學生作為探究式課程學習的主人,根據課程學習的條件,明確探究目標,思考探究問題,掌握探究方法,敞開探究思路,交流探究內容,總結探究結果。課程學習結束后,可通過讓學生自發組織小組答辯,課堂現場測試評定最后的成績[6]。
凡是教過程序設計的教師都有這樣的體會:語句教到一定的程度,學生會漸漸感覺到編程過難,無法繼續學下去的想法。語句相當于程序設計的工具,只有大量的掌握好語句,才能在編程上如魚得水。導致上述反?,F象發生的原因有很多,其中最重要的一點就是長期以來程序設計的觀念不是以如何處理好對象為出發點,而是以如何使用好語言為基點。受這種思想的影響,傳統的程序設計教學是以講解語法規則和語句格式為目標,而不是以解決問題為重點。也就這樣導致學生在拿到任務后首先想的是該有哪條語句,而不是怎樣把任務進行合理的解析。因此課題組嘗試使用問題驅動的教學方法,先提出問題,然后介紹解決問題的方法,最后歸納總結其一般步驟。在講述軟件基礎相關課程時,把每節的內容用案例引出,然后分析解決。這樣學生容易明白本節的內容,增強其學習的積極性。
(3)探索“案例式作業”綜合實訓。在傳統的授課中,都是按部就班地進行講授—作業——點評——講授……,學生在做作業時,基本上失去了興趣,很多教師都反應目前學生作業的雷同度太高,實際上就是幾個“作業范本”在學生中傳來傳去……。實際中可以采用“案例式作業”,所謂“案例式作業”指的是教師直接把一個綜合案例項目作為作業,一門課程若交5次案例作業,每次教師準備4個案例,例如2009級第1次作業使用案例1-1,2010級第1次作業使用案例1-2,就可在某種程度上防止師兄學弟間的“作業交流”。實訓時,教師將之前已經完成的實訓項目運行給學生看,讓學生對實訓作業項目的結果有個感性認識,同時,在作業指導書中,對項目的功能、性能提出進一步的要求,學生可以參考運行項目的外觀和功能特性,對項目進行改觀、優化和創新。教師則以學生對項目的功能完成情況、性能指標達到情況、項目外觀改觀情況、優化情況和創新情況作為實訓作業結果的考核指標對學生進行考核。由于軟件類所需的主要設備——計算機已經非常便宜了,所以軟件類的課程作業實訓可以脫離實驗室,在宿舍,在教室,只要有一臺2000元的筆記本就可以完成實訓作業,而教師也可以從批改“雷同”作業的煩惱中解脫出來,重點考察學生的軟件編程能力[7]。
在布置實訓作業時,要在框架程序中預設問題。在實訓之前展示實訓項目的運行框架,并不是預先實現項目的所有部分,而是將學生必須要掌握的知識部分和通過學生查閱資料可以解決的問題部分,在所展示的項目中將其空出來,并以文字的形式注明學生必須自行完成該部分的設計和編碼。在展示實訓項目時,可以有意識的將問題分類,例如,分類為一般難度、中等難度和高難度的問題,并對不同難度的問題在考核評分時賦予不同的分值,這樣,可以督促學生解決預設,同時還可以激發較為優秀的學生解決高難度的問題的欲望,進而使得各種層次的學生在作業實訓時都能有所作為,同時避免了作業抄襲。
3 案例設計示例
在傳統的軟件設計基礎課堂上講授時間復雜度知識點時,往往僅強調時間復雜度的概念及數學表示,學生能從教師簡單的示例中大概知道時間復雜度的含義,但缺乏對其本質理解。如何設計與之匹配的案例,讓學生不僅深刻的理解時間復雜度,而且能夠有意識地運用時間復雜度解決實際問題呢?授課時,首先向學生提問,大家用的手機是如何存儲照片的?存儲照片的格式是什么?運用的數學原理是什么?多年授課經驗表明,與生活常識密切相關的問題,往往會引起學生的注意,并踴躍回答問題。這樣很自然地引出了二維離散余弦變換(簡稱2D-DCT),由于學生之前學習過高等數學,信號與系統,熟悉傅里葉級數分解,簡單說明DCT與傅里葉級數的關系后,就會引起學生的思考,這個與信號系統相關的概念與時間復雜度有什么關系呢?2D-DCT公式列出如下:
(1)
(2)
接下來提問,如何利用C語言編程求出?如何簡化運算,降低時間復雜度?
為了節約課堂時間,提出問題后,請學生在課下自覺編程,嘗試獨立解決問題。課下,教師可以通過課程博客與同學們在網絡上互動。上課時,教師提問,2D-DCT編程需要多少重循環?常規算法需要的乘法次數是多少?降低時間復雜度的解決方案是什么?信號與系統課程中是否有相關算法的提示?在引發學生深入思考的同時,給出下列公式:
(3)
(4)
(4)
通過引導學生復習信號與系統函數組正交的概念,啟發學生把式(3)看做式(1)的等價形式,進而提示學生可以把2D-DCT看做2個1D-DCT運算的組合,若N=8,傳統直接的2D-DCT需要的乘法次數為64*64=4096,需要4重嵌套循環;若把2D-DCT按照式(3)分解,則可以看做是2個3重嵌套循環的組合,需要乘法的次數為64*8*2=1024,可見簡單的數學變換可以節約4倍的計算量。學生聽到這里一定興趣盎然,沒有想到時間復雜度會與考研重點課程《信號與系統》密切關聯,進而會迫不及待地嘗試編寫程序,實現上述思想。endprint
接著再次提問,實際編程中如何組織數據呢?學生經過思考,基本上都能給出利用數組實現,
設一個大小為8的數組SL(8),先讀取一個8*8塊的第一行資料值,賦給SL(8),對SL(8)進行一維DCT變換后得到一個新的SL(8)數組,再把SL(8)數組覆蓋到原來的8*8塊中相應的地方去。做完第一行后再做第二行,一直做完8行,一個8*8塊的一維DCT即告完成,然后再做列方向的第二維DCT變換,變換公式一樣,只是由SL(8)取8*8塊的行資料變成取列數值。做完后覆蓋回原值,即得到一個8*8塊的DFT系數塊,再重復這兩個過程做第二個8*8塊......。上述過程實現后,如何驗證算法的正確性呢?當然,仿真工具Matlab是一個驗證的好工具,學生會馬上調出它,驗證上述算法。
從上述案例可見,一個時間復雜度問題引出了《信號與系統》和《Matlab及其應用》兩門課程的知識點,充分調動了學生的學習興趣,使學生深刻地認識到學習軟件編程知識是有用的,能夠解決大問題,進而增強他們的好奇心和學習的動力。事實上,筆者認為,案例式教學是一種使學生快速理解知識點,增強學習興趣的手段,在這個原則下,可以嘗試編寫多個案例,盡可能與通信的主干課聯系起來,最終增強電子信息類專業學生的軟件編程能力。
4 結語
實踐中嘗試使用案例式教學對《軟件設計基礎》課程進行改革,提出“案例式作業”,通過案例給學生展示作業實訓項目的運行框架,使學生對作業實訓項目有一個感性認識,對項目的功能、性能和邏輯有一個初步的了解,為學生對作業項目進行設計和對項目元素進行創新奠定了基礎,通過設定項目難度系數,有效避免了作業抄襲。
設計符合通信工程專業特點的《軟件設計基礎》案例,把精講原理與精選案例相結合,嘗試探究式課程學習,把基礎理論與應用實踐緊密結合,把案例和應用任務作為教學內容的主線,進而提高學生的軟件編程能力。
參考文獻
[1] 王良成,王科明.普通高校通信工程專業的教學改革探討[J].新課程研究(高等教育),2010(12):97-98.
[2] 胡永祥,楊偉豐,蔣鴻.應用型通信工程專業實踐教學體系的構建[J].湖南工業大學學報,2011,25(3):105-108.
[3] 周云,辛華,姚新宇.案例教學在“計算機軟件技術基礎”課程中的嘗試[J].高等教育研究學報,2007,30(3):57-59.
[4] 曹林,繆旻,樊文波.計算機軟件基礎課程設計的探索與實踐[J].中國科教創新導刊,2008,30(10):133-135.
[5] 吳紹根.基于案例再現的軟件開發綜合實訓項目設計[J].計算機教育,2009, 7(7):104-106.
[6] 盧瑩,林蔭.《軟件工程》課程教學改革與實踐[J].教育教學論壇,2014,3(2): 42-43.
[7] 司春景,李向陽.基于多元教學模式的“軟件工程”課程改革研究[J].中國電力教育,2013,266(7):98-99.endprint
接著再次提問,實際編程中如何組織數據呢?學生經過思考,基本上都能給出利用數組實現,
設一個大小為8的數組SL(8),先讀取一個8*8塊的第一行資料值,賦給SL(8),對SL(8)進行一維DCT變換后得到一個新的SL(8)數組,再把SL(8)數組覆蓋到原來的8*8塊中相應的地方去。做完第一行后再做第二行,一直做完8行,一個8*8塊的一維DCT即告完成,然后再做列方向的第二維DCT變換,變換公式一樣,只是由SL(8)取8*8塊的行資料變成取列數值。做完后覆蓋回原值,即得到一個8*8塊的DFT系數塊,再重復這兩個過程做第二個8*8塊......。上述過程實現后,如何驗證算法的正確性呢?當然,仿真工具Matlab是一個驗證的好工具,學生會馬上調出它,驗證上述算法。
從上述案例可見,一個時間復雜度問題引出了《信號與系統》和《Matlab及其應用》兩門課程的知識點,充分調動了學生的學習興趣,使學生深刻地認識到學習軟件編程知識是有用的,能夠解決大問題,進而增強他們的好奇心和學習的動力。事實上,筆者認為,案例式教學是一種使學生快速理解知識點,增強學習興趣的手段,在這個原則下,可以嘗試編寫多個案例,盡可能與通信的主干課聯系起來,最終增強電子信息類專業學生的軟件編程能力。
4 結語
實踐中嘗試使用案例式教學對《軟件設計基礎》課程進行改革,提出“案例式作業”,通過案例給學生展示作業實訓項目的運行框架,使學生對作業實訓項目有一個感性認識,對項目的功能、性能和邏輯有一個初步的了解,為學生對作業項目進行設計和對項目元素進行創新奠定了基礎,通過設定項目難度系數,有效避免了作業抄襲。
設計符合通信工程專業特點的《軟件設計基礎》案例,把精講原理與精選案例相結合,嘗試探究式課程學習,把基礎理論與應用實踐緊密結合,把案例和應用任務作為教學內容的主線,進而提高學生的軟件編程能力。
參考文獻
[1] 王良成,王科明.普通高校通信工程專業的教學改革探討[J].新課程研究(高等教育),2010(12):97-98.
[2] 胡永祥,楊偉豐,蔣鴻.應用型通信工程專業實踐教學體系的構建[J].湖南工業大學學報,2011,25(3):105-108.
[3] 周云,辛華,姚新宇.案例教學在“計算機軟件技術基礎”課程中的嘗試[J].高等教育研究學報,2007,30(3):57-59.
[4] 曹林,繆旻,樊文波.計算機軟件基礎課程設計的探索與實踐[J].中國科教創新導刊,2008,30(10):133-135.
[5] 吳紹根.基于案例再現的軟件開發綜合實訓項目設計[J].計算機教育,2009, 7(7):104-106.
[6] 盧瑩,林蔭.《軟件工程》課程教學改革與實踐[J].教育教學論壇,2014,3(2): 42-43.
[7] 司春景,李向陽.基于多元教學模式的“軟件工程”課程改革研究[J].中國電力教育,2013,266(7):98-99.endprint
接著再次提問,實際編程中如何組織數據呢?學生經過思考,基本上都能給出利用數組實現,
設一個大小為8的數組SL(8),先讀取一個8*8塊的第一行資料值,賦給SL(8),對SL(8)進行一維DCT變換后得到一個新的SL(8)數組,再把SL(8)數組覆蓋到原來的8*8塊中相應的地方去。做完第一行后再做第二行,一直做完8行,一個8*8塊的一維DCT即告完成,然后再做列方向的第二維DCT變換,變換公式一樣,只是由SL(8)取8*8塊的行資料變成取列數值。做完后覆蓋回原值,即得到一個8*8塊的DFT系數塊,再重復這兩個過程做第二個8*8塊......。上述過程實現后,如何驗證算法的正確性呢?當然,仿真工具Matlab是一個驗證的好工具,學生會馬上調出它,驗證上述算法。
從上述案例可見,一個時間復雜度問題引出了《信號與系統》和《Matlab及其應用》兩門課程的知識點,充分調動了學生的學習興趣,使學生深刻地認識到學習軟件編程知識是有用的,能夠解決大問題,進而增強他們的好奇心和學習的動力。事實上,筆者認為,案例式教學是一種使學生快速理解知識點,增強學習興趣的手段,在這個原則下,可以嘗試編寫多個案例,盡可能與通信的主干課聯系起來,最終增強電子信息類專業學生的軟件編程能力。
4 結語
實踐中嘗試使用案例式教學對《軟件設計基礎》課程進行改革,提出“案例式作業”,通過案例給學生展示作業實訓項目的運行框架,使學生對作業實訓項目有一個感性認識,對項目的功能、性能和邏輯有一個初步的了解,為學生對作業項目進行設計和對項目元素進行創新奠定了基礎,通過設定項目難度系數,有效避免了作業抄襲。
設計符合通信工程專業特點的《軟件設計基礎》案例,把精講原理與精選案例相結合,嘗試探究式課程學習,把基礎理論與應用實踐緊密結合,把案例和應用任務作為教學內容的主線,進而提高學生的軟件編程能力。
參考文獻
[1] 王良成,王科明.普通高校通信工程專業的教學改革探討[J].新課程研究(高等教育),2010(12):97-98.
[2] 胡永祥,楊偉豐,蔣鴻.應用型通信工程專業實踐教學體系的構建[J].湖南工業大學學報,2011,25(3):105-108.
[3] 周云,辛華,姚新宇.案例教學在“計算機軟件技術基礎”課程中的嘗試[J].高等教育研究學報,2007,30(3):57-59.
[4] 曹林,繆旻,樊文波.計算機軟件基礎課程設計的探索與實踐[J].中國科教創新導刊,2008,30(10):133-135.
[5] 吳紹根.基于案例再現的軟件開發綜合實訓項目設計[J].計算機教育,2009, 7(7):104-106.
[6] 盧瑩,林蔭.《軟件工程》課程教學改革與實踐[J].教育教學論壇,2014,3(2): 42-43.
[7] 司春景,李向陽.基于多元教學模式的“軟件工程”課程改革研究[J].中國電力教育,2013,266(7):98-99.endprint