夏耘
(上海理工大學,上海)
自1995 年以來,“程序設計”課程作為大學的通識課程,由于課程的面向對象是大學一、二年級的學生,剛進入大學的學生對自主式學習方式的適應需要時間,同時該課程教學內容是以結構化程序設計方法為主線,學生在學習中會遇到很多問題,因此,該課程在過去幾十年教學中,無論從程序設計技術與程序設計語言而言,還是從教學方法都沒有停止過創新和發展,未來,這種持續的改進仍將繼續。程序設計課程的教和學也在不斷進步,同時還會不斷面臨新的挑戰[1]。
一直以來被很多高等學校作為第一門程序設計課程的C 語言,由于其語言簡單和思維清晰,成為程序設計課程中的常青樹。盡管語言本身變化不大,但如何更有效地提高C 語言教學效果的改革實踐,一直都在進行中。
以C 語言為平臺,介紹程序設計的基本思想、概念與方法,以培養學生基本的程序開發能力為核心,通過課程教學,要求學生掌握C 語言基本的數據結構、語法規則、控制結構和常用算法,學會用結構化程序設計方法編寫結構清晰、符合程序設計規范的程序,具備計算思維能力,并用C語言對可計算問題進行描述。
“程序設計”課程是一門理論與實驗緊密結合的課程,需要完成所有的課程教學任務,必須是:
選擇貼近學生生活和年輕人感興趣的案例,配上生動活潑的展示形式,注重激發學生學習編程的興趣;通過提供可復用的公共庫等形式,讓學生通過簡單的編程就能得到完整的程序和實用的結果,解決日常生活中的熱點問題,增強學生學習成就感[2]。
編程需要立足四個維度:編程思維、編程技能、語言知識點和編程規范。通過例題分析、經典算法等,以“思考”等形式描述常用的編程思維和思考問題的方式;分析、設計、編寫、調試、運行程序,在此基礎上歸納出“常見錯誤”,用以訓練學生的編程技能;總結編程規范和經驗,引導學生從一開始學習程序設計就養成良好的編程習慣。
編程在內容組織上更加突出從簡單到復雜,將知識點的結構性和系統性淡化;將“指針”的概念和筒單應用提前,將“文件”分散到節而不獨立介紹;同一個問題從簡單到復雜分解到多個程序例子中,讓學生們從簡單程序開始,逐步增加功能,在不知不覺中學會編程技能、融會貫通編程思維。
打造立體資源,設計網絡課堂教案、PPT 講稿等,充分利用移動互聯網,實現線上線下、資源共享,便于學生預習、復習和自學,方便師生互動,提高課堂教學效果。
當今社會,大數據、云計算、物聯網等技術應用隨處可見,信息技術的應用已經并正在繼續改變著人們的工作和生活,而這些新技術和應用的核心是程序。人們生活在一個程序控制的時代,網上點餐、購物、理財、社交都離不開程序。
當今的大學生是與程序共同成長的一代,他們是在“機器人”保姆幫助下學會叫媽媽的,也是在“機器人”老師幫助下學會算術、音樂、繪畫的,他們的第一個琴就是屏幕上的仿真琴[3]。
由此可見課程的內部優勢十分強大,學生熟悉程序、能使用程序、有探索程序之奧秘的動力。
課程的內部不足是:編程思維、編程技能、語言知識點和編程規范不是一天形成的,需要長期的積累,在積累過程中會遇到很多問題,例如,編程的語法與語文語法不同,編程的運算與數學的運算相似但不同,這些帶給學生的就是困擾,因為,他們采用定式思維,將數學運算寫入程序中,導致程序無法正常運行,學生并沒有意識到,因此與程序杠上了,往往3-4 個小時也沒有發現問題,但挫敗2 次后就不會再出現類似問題了,但往往部分學生無法面對這2 次的挫敗,選擇放棄編程。在課程教學中關注學生,幫助他們克服困難,重樹學習信心尤為重要。
課程的外部優勢:新一代信息技術不斷涌現(云計算——集中處理信息、物聯網——萬物都能互聯、移動應用——創新變革、大數據——大數據技術成為主流、人工智能——服務的智能化),給整個社會進步與人類生活帶來的顛覆性變化。從圖1 所示的Gartner 發布的2018 新興技術成熟度曲線圖可以看到智能塵埃、智能機器人、智能工作空間、生物芯片、深度神經網絡、物聯網平臺等各式各樣的新興技術,這些技術都蘊含了各個領域廣泛的發展空間,也是各專業與信息技術交叉的增長點。
2015 年7 月國務院發布的《國務院關于積極推進“互聯網+”行動的指導意見》、2016 年12 月工信部發布的《大數據產業發展規劃(2016-2020)》、2017 年7 月國務院發布的《新一代人工智能發展規劃》、2018 年4 月教育部頒布的《高等學校人工智能創新行動計劃》、2018 年9 月世界人工智能大會在上海舉行、2019 年世界人工智能大會以“智聯世界無限可能”為主題,以“高端化、國際化、專業化、市場化、智能化”為特色,將集聚全球智能領域最具影響力的科學家和企業家,以及相關政府的領導人,圍繞智能領域的技術前沿、產業趨勢和熱點問題發表演講和進行高端對話,打造世界頂尖的智能合作交流平臺,成為業內廣受贊許的專業性學術會議,打造具有國際水平和影響力的行業盛會。上海發布《關于加快人工智能高質量發展的實施辦法》等國家戰略規劃的相繼出臺,推動物聯網、云計算、大數據、人工智能等與其他學科技術結合,引領科技變革和社會變革[4]。
語言語法知識:語法知識是解決問題的工具,在教學內容設計中以夠用為界,教師作為教練,只引導學生用好基本語法,例如:在班級的學生管理問題上,教師用結構體數組存放學生成績信息,在課堂上僅講授結構體數組構建相關語法知識,但留給學生的作業是可以用其他方式來存儲學生成績信息,同時要求學生思考如何處理來自不同數據源成績信息。
程序設計技能:通過案例的不斷深化來培育編程能力,例如,設計一個匯率計算器,從順序結構的程序案例開始,案例解決了輸入一筆金額兌換成指定幣種的問題,在此基礎上引導學生思考,外幣的幣種很多,不同幣種的匯率不同,實際應用中需要根據幣種完成兌換,如何讓程序識別外幣的幣種,這樣就引入了程序的選擇結構,解決多幣種問題,又有多筆業務問題出現,自然過渡到程序的循環結構,之后就是優化程序,引入用自定義函數構建模塊化程序。
計算思維:學生學習的難點面對一個具體問題不知如何解決,然而計算思維可以定義為通過嵌入、轉化和仿真等方法,將一個問題重新闡釋成問題解決方法;計算思維可以是一種遞歸思維,是一種并行處理,是一種把代碼譯成數據又能把數據譯成代碼,是一種多維分析推廣的類型檢查方法;計算思維可以是一種采用抽象和分解來控制龐雜的任務或進行巨大復雜系統設計的方法;是一種選擇合適的方式去陳述一個問題,或對一個問題的相關方面建模使其易于處理的思維方法;計算思維則是解決學生學習的難點的良方[5]。
程序設計藝術:編程只是一個表象,編程解決實際問題需要大量的數學、物理、生物、管理、問題的業務基礎知識為其支撐。同一個問題解決方案有多個,例如,兩個程序員編寫實現具有相同功能的兩個程序,其中一位程序員的程序代碼冗長、復雜難懂、性能低下;另一位程序員的程序代碼邏輯清晰、簡單明了、性能比較高。在程序設計中沒有最好,只有更好,如何讓學生具備優秀程序員的能力,程序設計藝術的教學是十分重要的,在設計中根據編程規范就可以使代碼具有藝術之美。
總之,課程的多維度教學內容定位策略見圖2。
問題教學是指以問題為中心開展教學活動的教學。其核心就是在教學的全過程中,教師將從一個點出發,如提出一個應用實例(或一個活動),朝著課程所需解決問題的目標推進;用一條線連接,如串起一系列子問題;結合相關知識與技能的方方面面;采取多方位梳理解決問題的過程與方法;通過多維度的思維方式完善學生的情感與價值觀,達到讓學生自主、獨立地尋求并運用已有的知識經驗創造性完成研究事物、探索知識、發現問題、解決問題的目的。
總之,將策略思想運用于課程的教學,制定教學計劃、實施計劃,經過2 年的教學實踐,已初見成效,筆者將繼續運用策略思想在實施計劃中不斷完善計劃,順利達成課程的教學目標。