葛欣 席景科 李政偉 劉厚泉
[摘 要]“高級語言程序設計”課程是一門知識點繁多、實踐性較強的課程。它面向計算機所有本科專業開設,是學生靈活運用所學知識,培養和訓練軟件開發能力的基礎和關鍵。計算思維作為一種應對信息時代的普適能力,得到了廣泛的關注和認可。計算機課程是培養學生計算思維的最好課程。以技能培養和能力培養為目標的“高級語言程序設計”課程,需要擺脫傳統的教學內容和教學方法,以計算思維為主線,開展教學活動,使程序設計思維成為學生自身的技能組成部分。
[關鍵詞]計算思維 高級語言程序設計 思維訓練
[中圖分類號] G423.07[文獻標識碼] A[文章編號] 2095-3437(2015)06-0089-02
“高級語言程序設計”課程是一門知識點繁多、實踐性較強的課程。它面向計算機所有本科專業開設,是學生靈活運用所學知識,培養和訓練軟件開發能力的基礎和關鍵。它不僅是對C++語言的學習,也是軟件開發的啟蒙和軟件開發技能的初步訓練。可以說,它是計算機專業的入門課程,不僅決定著今后的課程學習情況,也直接影響著學生學習計算機知識的興趣和動力。
根據多年的教學實踐,以及學生在課程設計、畢業設計中暴露出的問題,筆者發現“高級語言程序設計”課程雖然課時量很大,但教學效果與學習效果均不理想,學生普遍不會用面向對象的思想解決實際應用問題,在后續的軟件開發工作中感到無從下手。
“計算思維”作為三大科學思維之一,旨在培養思維方式和提高創新能力,將其應用在“高級語言程序設計”課程中,能夠有效地提高教學效果,使該課程不再僅僅講授程序編寫,而是成為思維訓練和能力培養的平臺,真正發揮其在課程體系中的作用。
一、引入計算思維的必要性
(一)計算思維的特質
“計算思維”(Computational Thinking)2006年由美國卡內基梅隆大學計算機科學系主任周以真教授提出,是運用計算機科學的基礎概念去求解問題、設計系統和理解人類的行為。[1]其本質是抽象(Abstraction)和自動化(Automation),即在解決實際問題時,首先通過分析、提取、類比、替代等一系列方法將問題抽象成計算機世界中的問題描述;其次利用形式化語言,將問題進行離散的符號化處理,建立模型;最后設計算法和編程實現,在實際的計算機中運行并求解。
當前,計算機領域的研究成果不斷豐富和完善,它與其他學科的交叉也越來越深入,計算思維有利于解決計算機科學家和領域專家之間的知識鴻溝所帶來的困惑。計算思維雖然具有計算機的許多特征,但是計算思維本身并不是計算機的專屬。計算思維是屬于人類的一種思維方式,它給出了求解問題的一條途徑,而不是讓人類像計算機那樣思考。[1]因此,計算思維是一種基本技能,是每一個人必須掌握的技能。
(二)計算思維的作用
長期以來,學生們在很多課程中被動地學習,導致思維固化,缺乏解決具體問題的能力。計算思維在培養認知能力和鍛煉思維方式上有其獨特之處,得到了國內眾多院士和教授的一致認可。
計算大師戴克斯特拉曾說過:“我們所使用的工具影響著我們的思維方式和思維習慣,從而也將深刻地影響著我們的思維能力。”計算機以及計算機科學的發展催生了智能化的思維,周以真教授更是把這種思維提升到與“讀、寫、算”同等的重要地位,成為適合于每一個人的“一種普遍的認識和一類普適的技能”。[2]
計算思維將計算機從工具發展成一種思維方式,使計算機科學中的經典方法潛移默化地應用到分析問題和解決問題中,巧妙地實現了多領域知識的融合。在解決具體問題時,它使用計算機科學中的抽象、分解、嵌入、轉化和仿真等方法,把一個看起來困難的問題重新闡釋成一個已有解決方案的問題;利用復雜度計算的思想充分估計解決方法的空間和時間代價,同時借鑒系統設計的簡潔和優雅,在解決問題時兼顧對美學的考量。
二、基于計算思維的“高級語言程序設計”教學模式
“高級語言程序設計”課程的最終目標是培養學生程序設計的思維,即解決具體問題的思維方式,這和計算思維的目標相一致。因此,應結合計算思維對課程的教學內容和教學方法進行改革。
(一)教學內容的改革
1.結合實際生活設計教學實例
傳統的教學內容中也會包含許多實例,但這些實例與生活脫節,學生雖然掌握了這些實例的解題方法,但遇到和實際相關的題目時仍無從下手。例如,比較兩個整數的大小,輸出較大的值。對于這個經典的比較大小的題目,大部分學生都能理解和掌握。但如果改成“桌子上有兩個大小不同的蘋果,請編程實現找出大的蘋果”,那么很多學生就會感覺問題簡單到不知如何去做。導致這個情況的原因是,傳統的教學實例基本上都是經過了抽象、提取、細化等處理后的產品,學生在學習這些實例時只鍛煉了語法知識的理解和組織,而前期的思維訓練都被省略,但這部分恰恰是整個程序設計思維的主體,也是計算思維的本質之一——抽象。
實際生活中的問題會包含大量的信息,在處理這些問題時,首先需要明確目標,對信息進行過濾,保留需要的信息。這就是抽象與提取的過程。以“比較蘋果”為例,題目中要求找出較大的蘋果,那么就可以確定比較的條件是蘋果的大小,而不是外觀、產地、品種等條件。其次,什么值能夠代表蘋果的大小?如果往簡單地想,重量從一定程度上可以代表大小;如果往復雜地想,設定蘋果是一個圓體,那么體積可以代表大小;這樣問題就抽象成給定兩個值,進行比較。最后,落實到編程語句上,要根據實際情況確定兩個值的數據類型,比較的過程則對應到選擇結構的語法。這個過程是計算思維的本質之二——自動化。
2.注重實例間的關聯與組合
思維訓練的另一個重要方面是問題的分解與組合,因此在設計教學實例時,除了要結合實際生活,還要注重實例間的關系,讓每個實例不僅能單獨解決一個問題,而且能夠通過多個實例的組合來完成更高難度的問題。例如在講解數組和指針內容時,對應的知識點會有關于數組的輸入、輸出的實例,基于冒泡、選擇等多種算法的數值排序的實例,折半查找的實例……這些實例獨立存在時是針對某一個問題的解決方法,如果把這些實例組合在一起,就實現了一組數據的輸入/輸出、排序、查找、插入、刪除等多種功能的結構,這正是《數據結構》中講解的隊列結構,應用到實際生活中,可以用來模擬實現超市排隊結賬、火車票售票、旅游路線規劃等多種具體問題。
3.提高實例的實用性
“高級語言程序設計”課程在進入面向對象的程序設計時,實例的規模一般都會變大,因為面向結構的程序設計階段中每個實例解決的只是一個知識點,而面向對象的程序設計本身就包括類、對象、屬性、方法等多個因素,實例的內容為了覆蓋這些因素就需要設計得復雜一些。但常用的實例,如日期類、時鐘類、圖形類等在實際中的可用性并不大,學生通過這些實例確實理解了類的結構,但遇到具體問題時卻不能根據需要設計出一個新類。因此,在設計教學實例時需要結合后續課程的內容,設計一些在以后學習中經常會遇到或能夠用到的、具有延展性的實例,例如string類、堆棧類、隊列類等。
(二)教學方法的改進
1.教學以組為單位
學生按照兩到三個為一組進行劃分,教學過程中,對于問題的求解按照組內討論的方式開展。每個組內的學生,不設組長,輪流講解該組討論后的結論。遇到結論不同的情況,先由組與組之間進行辯論,結論仍不明確時,每個小組選擇本組所支持的結論進行編程驗證,最后由教師結合各組實驗結果,給出具體說明和講解。這種方法能夠有效地調動學生學習的積極性,同時也避免了教師一個人的思維局限性,讓教學碰撞出思想的火花。
2.以實例安排教學單元
教學單元不再按照章節進行,而是根據教學實例進行設計。每個實例作為一個教學單元,先給出問題的描述,學生分組后,組內進行討論;然后教師對實例中涉及的知識點進行詳細的講解和延伸,并根據每組反饋回來的結論,給予對比和分析;最后學生通過對知識點的理解和消化,對本組的結論進行調整和細化,并在計算機上編程實現。
3.隨堂上機實踐
蒙臺梭利曾說過:“我看到了,我忘記了;我聽到了,我記住了;我做過了,我理解了。”所以,實踐對知識的掌握具有關鍵作用。傳統的“滿堂灌”和少量的學生問答,很難獲得理想的教學效果。學生只有在思考后,付諸于實踐,在實現過程中總結經驗教訓,才能把知識內化,最終轉化成行為習慣的一部分。
三、結束語
“計算思維”隨著計算機的普及和計算機技術的發展演化而來,提出了面向問題解決的系列觀點和方法,指出了計算機科學與其他領域融合、創新的途徑。計算機課程不是培養計算思維的唯一課程,但卻是最好的課程。[3]以技能培養和能力培養為目標的“高級語言程序設計”課程,需要擺脫傳統的教學內容和教學方法,以計算思維為主線,開展教學活動,使程序設計思維成為常識,成為學生自身的技能組成部分。
[ 注 釋 ]
[1] J.M.Wing.Computational Thinking[J].Communications of ACM,2006(3):33-35.
[2] Fei?鄄Yue Wang.Toward a Paradigm Shift in Social Comput?鄄ing[J].The ACP Approach,IEEE Intelligent Systems,2007(5):65-67.
[3] 戰德臣,聶蘭順,徐曉飛.計算之樹——一種表述計算思維知識體系的多維框架[J].工業和信息化教育,2013(6).
[責任編輯:覃侶冰]
[收稿時間]2014-12-19
[基金項目]中國礦業大學2013青年教師教改項目(2013Y45);中國礦業大學計算機學院2012精品課程培育項目。
[作者簡介]葛欣(1980-),女,江蘇徐州人,博士,副教授,研究方向:信息處理。