
摘要:數據結構課程改革的重點是培養學生的計算機思維。算法的設計、實施最能體現計算機思維。數據結構課程教學應從技巧教學中抽離出來,以問題的抽象、算法的構造及實現為重點,結合豐富的生活實例,培養學生工程化思維、抽象思維、逆向和分治思維及即時反饋思維等計算機思維,實現數據結構課程教學的跨越式發展。
關鍵詞:數據結構;課程改革;計算機思維;工程化思維;抽象思維
中圖分類號:G642? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)20-0102-03
開放科學(資源服務)標識碼(OSID):
Abstract:The focus of data structure curriculum reform is to train students'computer thinking. The design and implementation of the algorithm can best reflect the computer thinking. The teaching of data structure course should be separated from the teaching of skills, focusing on the abstraction of problems, the construction and realization of algorithms, and combining with abundant living examples, training students'computer thinking such as engineering thinking, abstract thinking, reverse and dividing thinking and instant feedback thinking. The reform will achieve leapfrog development of data structure course teaching.
Key words:data structure; curriculum reform; computer thinking; engineering thinking;abstract thinking
數據結構是計算機相關專業的核心基礎課,也是管理類、通信類專業的必修課程,是計算機相關研究的理論及編程基礎。在數據結構課程中培養計算機思維,并引導學生學以致用,將會使學生更深刻地理解計算機的本質,形成計算機思維的思想與方法論。
1 計算機思維概述
計算機思維是一種思維過程,也是一種思維活動,即人們有意識地應用計算機解決問題的原理,去分析與解決現實問題的一系列思維活動。[1-2]計算機解決問題的過程具體包括以下步驟:通過分解現實中的具體問題,抽象出適當的數學模型,識別數據,定義數據結構,構建算法,測試分析并進行性能評估,最終呈現出一定的問題解決方案。[3]
計算機思維是有助于人類認識世界和改造世界的思維方式。管理學界認為計算機編程知識及其思想是理解新技術、新服務和新商業模式的第3只眼睛。[4]國外前些年已經開始強調在小學生中培養計算機思維,國內近兩年面向小學生的程序設計課程也開設得如火如荼,目的就是為了從小培養孩子的計算機思維。
2 數據結構課程中計算機思維培養的現狀
2.1 對計算機思維的重要性認識不足
雖然計算機思維已經深入到我們生活的方方面面,我們也都在自覺不自覺地應用計算機思維,但人們對計算機思維的理解仍然只停留在表層,計算機思維并未得到真正重視。很多人也沒有意識到生活中的這些應用就是計算機思維。有些老師可能對計算機思維還沒有清晰的認識,沒有認識到計算機思維是人特別是大學生必備的思維方式之一。擔任數據結構教學時,也沒有深入認識數據結構的本質,沒有發現數據結構背后的計算機思維的價值,沒有考慮計算機思維對學習、工作和生活的深刻影響。
2.2 對計算機思維的培養重視不夠
目前任何一個行業都離不開計算機,為了促進就業,都開設了計算機相關課程,但更多的只是為了掌握計算機的應用,對計算機思維的培養重視程度不夠,主要表現在以下三個方面:一是數據結構課程教學改革的重點放在培養學生的計算機技能,而不是計算機思維;第二,孤立地看待每一個算法;第三,計算機思維的培養僅僅局限在課堂。
開展數據結構教學時,很多老師徘徊在教學舒適區,按照自己多年形成的習慣去教學,不轉變教學思路,不去鉆研新的教學方法,沒有花時間去思考、歸納課程中相關的計算機思維,數據結構課程沒有與生活實踐緊密結合,往往就數據結構講數據結構,見山是山,見水是水,最后只能是培養學生的計算機技能。很多老師認為,學生掌握了計算機技能也就完成了教學任務,也有老師認為,掌握了計算機技能,也就掌握了計算機思維。沒有鉆研的動力,缺乏與生活的聯系,導致計算機思維的培養得不到很好的落實。
3 基于計算機思維的數據結構課程改革
數據結構課程概念多、內容抽象、算法復雜,實踐課時少,學生容易產生畏難情緒,傳統的課程考核模式也不利于調動學生的積極性。其實,開設數據結構課程的目的不僅僅是學習和掌握相關知識和算法,更重要的是通過學習獲得思維方式,更好地理解人類的思維,掌握做事方法。因此,數據結構課程改革的重點是培養學生的計算機思維,通過人的認知思維和計算機思維的互動,結合實際例子,有助于培養學生的成長型思維,提高學生的學習興趣,加強主動學習意識。將計算機思維的培養放置于核心位置, 在實際的教學過程中不斷向學生滲透計算機思維, 將會極大提升數據結構課程實施的質量。
數據結構包括堆棧、隊列、樹、圖等抽象數據類型,涉及邏輯結構、存儲結構及基于不同存儲方式的運算等三個方面。算法的設計、實施、算法的時間效率和空間效率等都能體現計算機思維,體現問題求解、系統設計及人類行為理解等一系列計算機思維活動。
計算機思維是全方位的,不可能通過這一門課程全部掌握,需要不斷的提煉,并通過和認知科學的互動不斷發展。表1所示是部分知識點重點培養的計算機思維。
下面介紹數據結構課程改革中重點培養的幾種計算機思維。
3.1工程化思維
算法設計和理論研究不完全一致,算法設計最終要落地實施,會受到很多約束條件制約,涉及具體環境、客戶需求及體驗等,講究可行性,還得考慮成本,即有用、用得起、體驗好,還要安全可靠,不容易被黑客攻擊。工程化思維是算法聯系現實世界的重要紐帶,工程是不可逆的過程,它與各種不確定、風險并存,工程化思維特別要處理好以下兩個方面的關系。
(1)處理好大和小的關系。問題規模的增大會導致性質的變化,問題達到一定程度后,不再是同類問題的放大,變成了另一個問題,需要的解決方案完全不同,要求我們學會轉化思維模式,這樣在舊問題已經轉變成新問題時,可以更好地去應對。數據結構介紹復雜度的表示時培養學生量級意識:小量級或小量級的常數倍和大量級并存時,必須忽略前者。一個好的工程師,要懂得把精力放在從量級上改進工程方法,如排序算法規模增大時,算法優劣的計算量天差地別。提醒學生寫小規模算法時就要重視算法的優劣,努力設計較優算法,不能因為計算量小就無所謂。生活中遇到復雜問題時要有拆解的能力,能夠梳理出其中各個因素在量級上的不同,把那些無關緊要的事情先從清單中刪除,而不是碰到什么問題就先解決什么問題。
(2)處理好成本和性能的平衡關系。在數據結構分析算法的時間復雜度和空間復雜度關系時,強調在時間復雜度和空間復雜度之間找到平衡,可以結合一些現實的工程問題培養學生的工程化思維。[5]人類很多時候強調對錯,喜歡要求最好的結果。但是,從工程的角度講,好和不好只是在特定的條件下相對的表現,往往沒有全局最優解。計算機里面無論是軟件設計,還是硬件設計,都在平衡性能和成本的關系。如語音識別,往往識別率提高一點點,付出的成本可能是幾倍甚至幾十倍,因此用戶通常在容錯的范圍內達到最好即可。我們每天都在做許多的選擇和決定,小到去哪里吃飯,大到人生的重要決定,所以很多人都自嘲有選擇困難癥。這是因為現實世界是復雜的,有很多問題都是不確定的,加上有時信息不透明,而且人也不可能掌握所有的信息,面對百度中海量的信息,為了把事情做好,應該什么時候停止搜索開始利用這些信息呢?關鍵是在各種錯綜復雜的體系中求得一種平衡,如果等到信息搜集整理全面、期待獲得最優解,事情可能永遠沒有開始的時候。
3.2 抽象思維
抽象是人類認識復雜世界最強有力的工具之一,它從具體事物中抽取、概括出共性和本質的屬性,暫時屏蔽非本質的、細節的部分,有助于我們集中注意力,抓住重點,通過按層次分解抽象,能夠將復雜的問題簡單化。抽象思維是計算機思維最本質的特征,抽象可以完全用符號表示,這就要求在抽象的過程中進行精確的符號化和建模。[2]
數據結構課程有大量的抽象概念,圍繞抽象數據類型研究它們的邏輯結構、存儲結構及其運算,如樹、圖等是數據結構課程中重要的抽象數據類型,但它們不能像基本數據類型那樣進行簡單的加、減、乘、除運算,這些內容學生不容易理解,教師們在講解過程中可以采用形象化、結合現實生活精心設計案例等方法講解,進而培養學生抽象思維的能力。
3.3逆向和分治思維
通常情況下,人們習慣采用正向思維,如計算n!,根據定義計算,n!=1*2*3*…*n。但對于復雜的問題,用這種正向思維方式可能沒有辦法解決,如“八皇后”問題,這時可以試試逆向思維方式,問題就會迎刃而解。如n!也可以采用逆向思維方式計算,即n!=n*(n-1)!。這種程序調用自身的編程技巧稱為遞歸,遞歸的本質是自上而下通過調用自身而層層展開,并利用堆棧保存上下文,再不斷重復自下而上一步步回溯,堆棧里的數為空時遞歸結束。遞歸層層展開時常常結合分治,因為復雜的問題能解決的人不多,碰到復雜的問題通過分治抽象變成相似的規模小一點的問題,經過逐級分解,問題規模越來越小,能解決的人就越多,工作開展就方便,效率提高,水到渠成。
《數據結構》課程介紹堆棧的應用時強調遞歸的作用,介紹遞歸算法的快速排序時可以結合管理團隊的應用,引導學生思考:假設你帶領一個團隊,結合計算機思維如何帶好團隊?帶好團隊可以綜合采用計算機思維中的遞歸、分治、規范化等。首先要建立一個規范,使這個團隊有共同討論的基礎和共同遵守的原則,再通過逐級授權,授權相當于計算機思維中的分治,領導帶頭樹好榜樣,把自己好的工作方式和工作作風傳遞下去,上行下效,你怎么做,下屬怎么做,這樣不斷遞歸,就能形成團隊強大的合力。計算機教學需要讓學生掌握如何采用抽象和分解來控制龐雜的任務或進行巨大復雜系統設計的方法。
3.4 即時反饋思維
選擇結構的分支走向就是即時反饋的結果,因此隨處可見反饋,數據結構課程也不例外。如二分查找就是典型的即時反饋實例。心理學研究表明,做任何事情,有反饋和沒有反饋的結果,有著巨大的差異,通過反饋,可以及時校準偏差,糾正錯誤,所以刻意練習特別強調“反饋”。軟件最終要交付給用戶使用,用戶使用軟件的習慣方式、軟件的使用環境等可能和軟件設計師設想的完全不一樣,如果等到把最終產品交付用戶后才得到用戶的反饋,那肯定太晚了。因此軟件工程開發要求做好用戶調研,深入了解用戶需求,甚至讓用戶介入進來,根據用戶的反饋快速迭代。
數據結構課程教學抽象復雜,更需要教師得到學生的及時反饋,了解學員情況,適當調整教學進度,改進教學方法,通過上課提問、作業批改、隨堂測試、章節測試、課后答疑等方式了解聽課情況,同時,也讓學生得到即時反饋。
4 結語
綜上所述,數據結構課程教學應從技巧教學中抽離出來,以問題的抽象、算法的構造及實現為重點,結合豐富的生活實例,培養學生工程化思維、抽象思維、逆向和分治思維及即時反饋思維等計算機思維,實現數據結構課程教學的跨越式發展。。
參考文獻:
[1]Jeannette M Wing.Computational Thinking[J].Communications of the ACM, 2006,49(3):33-35.
[2]董榮勝,古天龍.計算思維與計算機方法論[J].計算機科學,2009,36(1):1-4.
[3]嚴蔚敏,李冬梅,吳偉民.數據結構(C語言版第2版)[M].北京:人民郵電出版社,2017.1-2.
[4]天極網.告別編程課MIT展示自然語言編程[EB/OL]. (2013-07-16) [2014-02-25]. http://dev.yesky.com/406/35250406.shtml.
[5]陳萱華,楊玲,張靜.“數據結構”教學中的常見問題與應對策略[J].公安海警學院學報,2018(12):52-53.
【通聯編輯:王力】