梅冠華 康燦 顧媛媛
摘 要 《計算機軟件技術基礎》是高等院校非計算機專業本科生的專業基礎課,課程對于學生的學習、工作和生活具有重大的指導意義,由于該課程專業跨度大、涵蓋內容廣、實踐性強,因此講授和學習難度較大。通過對學生特點和該課程傳統教學方式的深入分析,提出了一些行之有效的教學手段與學習方法,在實際教學中取得了較好的效果。
關鍵詞 軟件基礎 教學設計 C++
當前,計算機軟件技術已經深入到各行各業,已經并將繼續發揮巨大的推動作用。因此,對于非計算機專業的工程技術人員來說,若能掌握一定的計算機知識,則可以很方便地與計算機專業的技術人員一起,開發適用于本行業的相關軟件。[1]合理的本科生培養應該是使得本科生對于本專業的知識有深入扎實的掌握,同時又能對其他方面的相關知識有廣泛涉獵,這樣方能游刃有余、從容不迫,以不變應萬變。當今社會,需要的正是這種復合型、創新型的人才。因此,“計算機軟件技術基礎”被眾多高校列為非計算機專業的必修課程,江蘇大學能源與動力工程學院流體機械及工程系也特別針對本專業學生開設了該課程,以期學生可學習和掌握一定軟件開發方面的知識,為將來的學習、工作和生活提供指導和借鑒。
由于該課程屬于概述類課程,其涵蓋了算法、數據結構、操作系統、數據庫、軟件工程等眾多知識,且針對的是非計算機專業學生,因此講授和學習難度較大,對于傳統的教學方式,學生普遍表示“理解不了”。如何讓學生們高效地學好和學活這門課,這是亟待解決的問題。經過對本專業學生前期知識儲備和學習特點的調研,對該課程知識點結構及相互關系的深入分析,結合多年的的學習、工作和教學經驗,在實際教學過程中進行了有針對性的處理,收到了良好的教學效果。
1 學生特點
1.1 對課程認可度不高,學習興趣不濃厚
當前軟件行業飛速發展,針對各行各業已推出了相對較為成熟的專用軟件,可以解決常見的行業問題。[2]比如流體機械行業有CFTurbo軟件來進行水力設計,有UG軟件用來三維建模,有FLUENT軟件來分析流場等。這就使得學生們普遍認為軟件開發是搞計算機的同學所做的事情,跟自己沒有關系,而自己只要使用好這些軟件就行了。因此,學生大多認為這門課的知識將來用不上,缺乏學習興趣。
1.2 前期知識儲備不足,學習過程痛苦煩躁
雖然95后的學生較早接觸到了計算機,但大多只是用來進行如打游戲和看電影等娛樂活動,并未對計算機的工作原理有較為清晰的認識。此外,盡管前期學過C++語言,但受限于較少的課時和較少的實踐積累,多數同學對于C++的掌握僅限于常見變量和運算、控制結構、函數等相對簡單的知識點,一旦涉及到結構體、類和對象、重載、模板、指針等較為復雜的知識點,就束手無策、不知所云。這導致在本課程的學習過程中,同學們對理論部分理解起來較為吃力,而對于代碼實現則更是一頭霧水。前期知識儲備不足影響了課程學習效果。
1.3 對于新技術既渴望好奇又害怕畏懼
任誰也無法抵抗人工智能、大數據、云計算、物聯網這些新名詞鋪天蓋地的狂轟濫炸,任誰也無法阻擋這些新興科技對于其他行業的巨大推動。面對這些新技術,同學們感到好奇,渴望了解它們究竟是什么,如何起源的,發展現狀如何,將來又會產生哪些影響。另外又感到害怕,害怕新技術引起的新變革會顛覆本行業的傳統格局,如果不能及時把握這些看似神秘而又高大上的新技術,很有可能被時代所淘汰。這種既好奇又畏懼的矛盾心理同樣反映在該課程的學習過程中。
1.4 對老師和課堂的過分依賴
不同于中學時代老師對知識點的再三強調和題海戰術,和大學其它課程類似,由于知識面寬廣且教學課時有限,該課程講授時不可能把一個知識點翻來覆去地不斷強調,基本上只能保證一兩遍的講解,這就使得課程知識點較多、節奏較快。但學生的注意力往往不能長時間聚焦,一旦稍有松懈,便無法跟上節奏。實際上,過分依賴老師和課堂,想要在課堂上全盤消化吸收知識點是不切實際的,該課程更多地需要學生的課前預習、課后復習、上機實踐和自我領悟。
2 該課程傳統教學方式的不足
2.1 實踐環節較少,學習效果較差
以往的課時分配上,重視課堂講授理論知識,而忽視上機編寫代碼、實際問題建模與求解、軟件項目開發等實踐環節,實踐環節象征性開設兩三次,甚至沒有。在課堂講授上,更多的也是對理論知識的闡述,而對理論的具體代碼實現避而不談或語焉不詳。缺乏實際動手操作的實踐環節,這使得原本就很難理解的知識點更加晦澀艱深,且進一步打擊了學生的學習興趣。
2.2 專業結合不強,學習目標不明
以往的開課老師一般來自計算機學院,雖然其對于計算機領域的知識掌握得十分扎實,然而對于學生所在專業領域的知識知之甚少。這導致在講課過程中,對于學生的專業需求不甚明了,不能很好地將課程知識與聽課學生所在專業的相關知識和具體應用場景結合。知識點的傳輸過程脫離專業需求,顯得枯燥乏味,無法調動學生的學習積極性。
2.3 集中教學模式,無法因材施教
毋庸置疑,最好的教學模式應該是一對一的家教式教學,可以針對每個同學的特點因材施教。[3]受限于外部條件,實際情況多為大班集中教學模式,教師在講課過程中很難考慮到每個學生理解能力上的差異和學習狀態的好壞,無法滿足不同層次學生的多樣需求,僅能就學生的平均水平來安排教學。造成學習能力差的學生聽不懂,能力較強的學生又感覺簡單無趣,既無法使前者輕松收獲知識,更無法使后者百尺竿頭更進一步。
3 改進措施
3.1 結合專業實際,濃厚學習興趣
第一節課,通過實例和講解充分調動學生的學習興趣和學習熱情。首先,縱然有很多本行業相對較為成熟的軟件,然而其使用起來相當于黑箱,如果不對其內部工作機制有所了解,是不能很好地發揮其功能的。其次,這些商業軟件雖然通用性強,但適用性差,也并非任何實際問題都能解決,有時我們不得不自己去開發軟件來解決特定問題,這就需要用到本課程的相關知識。再者,軟件開發屬于高薪行業,有部分同學將來考研或是找工作會跨界到計算機行業,那么有了本課程知識的積累,其后續的再學習和工作將會較為容易。最后,藝多不壓身,掌握本課程相關知識,也可用來高效指導生活的方方面面,比如數據整理、查找和排序方法、日程安排、人際關系圖、運籌帷幄等。總之,要讓同學們深刻認識到軟件技術已經滲透到各行各業,務必要對其有所了解才能有所作為。
3.2回顧計算機原理和C++語言,夯實前期基礎
針對學生前期知識積累薄弱的情況,先進行計算機基本原理和C++語言的知識點回顧,為后續學習鋪平道路。使學生對于計算機的硬件系統、軟件系統、工作原理有了初步的理解,并對C++的結構體、類和對象、重載、模板、指針等較為復雜的知識點有較深入的理解。著重通過舉例使這些知識點形象生動。比如用流體力學中一個空間點上具有速度、壓力、密度等變量,可將其綜合起來定義為一個新的類型,來引出結構體的概念。再比如用平面上的點具有x和y坐標兩個變量,同時又需要經常計算該點距離原點O的距離,可將這兩個變量和計算距離函數綜合起來,這便是類的概念。用金庸武俠劇不斷翻拍來類比重載的概念,用小學生寫作文的“小明扶老奶奶過馬路”和“小張扶老奶奶過馬路”來類比模板的概念等。磨刀不誤砍柴工,夯實了前期知識基礎,極大方便了本課程后續知識點的學習。
3.3 結合專業特色和生活實際,深入淺出的教學
主講老師雖然出身于流體機械專業,卻在軟件公司開發過大型軟件,因此既有扎實的行業基礎,又有豐富的軟件開發經驗,非常適合本課程的講解。其結合生活實踐和專業知識,根據學生的認知規律,先拋出幾個具體的問題,然后總結抽象出同一類問題,再給出該類問題的解決方法,寫出算法的具體流程及偽代碼,最終編寫算法的C++程序實現。使同學們形象直觀、由實際中得出理論,再將理論用于實際,學以致用,活學活用。在講述“棧”這種數據結構時,先用生活中常見的彈匣、糖葫蘆、羊肉串、織毛衣等實例引出“先入后出、后入先出”這樣一種數據類型,并通過流體機械裝配與拆解過程引出“先裝后拆,后裝先拆”這樣的零件排序,隨后給出棧的定義及其順序和鏈式存儲結構,最后給出其程序實現,并進一步提出棧可以用來合理指導自己的日常事務安排。在講述“回溯法”時,通過走迷宮和摸著石頭過河的實例很好地詮釋了其試探前進不行就回退換路走的思路。將枯燥的理論與這些專業例子和生活例子的緊密結合,使得學生可更加容易地理解這些知識點。
3.4 理論聯系實際,注重培養學生動手能力
該課程屬于一門實踐性很強的課程,僅僅是從理論層面上理解相關概念,而不去真正編寫代碼實現,這無異于蜻蜓點水、紙上談兵。為此,本課程除了課堂講授之外,還安排了大量的上機操作環節、小軟件開發環節。指導學生們實際動手編寫線性表、棧、隊列的線性存儲、鏈接存儲結構,對角矩陣、帶狀矩陣、稀疏矩陣的壓縮存儲方式,二叉樹的存儲和前序、中序與后序遍歷,以及常見的查找和排序方法等,并就有代表性的小游戲如俄羅斯方塊、貪吃蛇、連連看等的開發過程進行演示,使同學們不僅在理論上對所學知識有所領悟,更能真正在代碼編寫與調試的實踐中深入理解和靈活運用課程知識。
3.5 與時俱進,不斷豐富教學內容
圍棋程序AlphaGo輕松戰勝人類頂尖棋手李世石與柯杰,購物網站精準的廣告推送,智能導航可實時避開擁堵路段,這些都顯著提高了人們的生產效率和生活水平。對于這些新技術,學生們普遍存在既新鮮好奇又害怕畏懼的矛盾心理。為此,特意對人工智能、大數據、物聯網、云計算等知識作了粗略的概述性講解,著重回顧了它們的起源和發展現狀,展望了其未來發展趨勢,并通過手寫體識別、計算流體動力學的云計算、流體機械工程優化等例子來說明人工智能、云計算等在生活和本行業中的應用。這些緊貼時代的新內容,使得同學們耳目一新,知識面大為拓展,為今后深入學習和靈活運用這些新技術推開了一扇窗。
3.6 分組互助,課后學習,全面提升
建立課程QQ群,將課程PPT和相關代碼上傳到群共享文件,方便師生互動和課后學習。針對學生層次參差不齊,學習能力差異較大的實際情況,將學生分為學習興趣小組,并由學習能力較強的同學擔任組長,幫助組內同學在學習上一起進步。此外,該小組將在課下自選題目共同完成小型軟件的開發,最終以項目開發報告和程序的形式提交,并進行課堂展示,成績按一定比例計入期末總分,通過團隊協同合作和實際項目開發,可全面提升學生的軟件開發水平。對于那些學有余力和興趣濃厚的同學,推薦C++的經典學習網站www.learncpp.com、經典教材《C++Premier》、矩陣運算經典教材《矩陣計算》、人工智能相關書籍《游戲編程中的人工智能技術》等資源,更進一步豐富其知識結構,同時也能在一定程度上提升其科技英語水平。
4 結語
當今世界飛速發展,科技進步日新月異,復合型人才正是社會迫切需求的,“計算機軟件技術基礎”課程的學習對于非計算機專業的學生而言意義十分重大,同時它也是一門教授和學習難度都很大的課程,其教學方式方還有待不斷研究探索。縱然提出了一些新的教學方法和方式,也收到了較好的教學效果,可是仍需精益求精。在今后的教學中,要充分考慮學生前期知識儲備和學習認知規律,深入分析課程知識點的相互關聯,結合本專業特點和時代特色,精心設計課堂教學與實踐環節,不斷推陳出新,培養出更加優秀的應用型、創新型、復合型本科人才。
參考文獻
[1] 徐士良,葛兵.計算機軟件技術基礎[M].北京:清華大學出版社,2014.
[2] 李昕,仲偉和.計算機軟件基礎教學研究[J].遼寧工業大學學報,2008.10(6):127-128.
[3] 趙穎,楊海英,褚治廣.計算機軟件基礎教學改革的研究[J].遼寧工業大學學報,2014.16(5):138-140.