期刊VIP學術指導 符合學術規范和道德
保障品質 保證專業,沒有后顧之憂
摘 要:計算機類專業的學生掌握編程解決問題的基本技能,是基本的專業素質。算法是程序設計的靈魂,是用系統方法描述解決問題的方法,是從編程通向計算思維的必由之路。計算機類專業的“系統能力”,是計算機類專業相較于其他專業的核心競爭力。本文總結了六年來采用不同編程語言進行教學的比較,討論了如何貫通專業學生的這些專業基本素質和核心能力,為我們進行教學時編程語言選擇提供了基于系統能力的可行方案。
關鍵詞:程序設計;數據結構與算法;計算機系統;編程語言
1 引言(Introduction)
數據結構與算法課程曾經用偽代碼教學,旨在掌握算法思維本身。現在基本采用一門具體的編程語言進行教學,可能是Linus Torvalds說:“Talk is cheap,show me the code.”,也可能是程序執行時間比算法復雜度分析更有感覺。當前計算機系統能力的培養也是一個倒逼的動力,因為體驗代碼的執行、調試程序的bug,是讓學生深入理解計算機系統,加強工程能力培養的必由之路[1-4]。
目前,計算機類專業的程序設計基礎和數據結構與算法這兩門課程的教學,選擇同一門編程語言進行兩門課程的連續教學是較好的選擇。這樣為學生“學好一門編程語言”+“計算思維”這個主線提供了很好的條件[5]。
那么是讓學生自主選擇課程的這一門編程語言,還是根據專業課程體系的需要進行設定,這是我們進行課程體系設計的時候容易引起爭論的話題。我們根據TIOBE編程語言排行榜以及網上招聘和地區人才需求,“所學即所用”“一點打透”等原則,在學生中試行了學生自由選擇排名前列的幾種編程語言進行這兩門課程的教學。現在根據計算機系統能力建設的趨勢,回歸了簡單的C語言路線。這又會讓人想起發明C語言的Dennis M. Richie說:“Keep it simple stupid”[6]。我們做了一些思考和總結,供專家和同行們參考。
2 面向對象編程語言的特點(Characteristics of object oriented programming language)
我們以Java語言為例來說明用面向對象編程語言來進行程序設計基礎+數據結構與算法課程教學的特點。Java的優勢在于實現了面向對象的主要技術(封裝、繼承與多態、接口等),而放棄了容易引起混亂的技術(例如多繼承)。
(1)封裝。在數據結構與算法課程教學中,數據抽象是首先要面對的主題。現在的面向對象技術已經很成熟,如果選擇將數據成員(數據結構)設為私有屬性隱藏起來,通過調用公有成員方法(算法)訪問私有數據,Java完成了定義自己的數據類型(數據抽象)和對這些數據操作的封裝。數據類型和相關操作(算法)有了密切相關性,定義了一個類的數據成員(數據結構)之后,相應的算法就是同一個類中的各種方法,就可以創建對象,以及派生出更多的細分、實用的類。
(2)泛型。泛型是Java 5以上版本提供的支持這一目標的方式之一。泛型也就是參數化類型,例如Stack是某種元素的棧,而Stack處理的就是String對象。同理,Queue就是處理Date對象[7]。
算法中經常需要進行對象的大小比較,一般采用兩種方法實現泛型,從而實現對象間可比較。一是用Object表示泛型,二是用Comparable接口類型表示泛型。用Comparable接口類型表示泛型時(從JDK 1.5開始,在java.lang.Comparable中使用了泛型),需要定義對象為Comparable接口的實例,然后調用Comparable的compareTo方法(需要重寫)就可以進行對象間的比較操作[8]。
推薦閱讀:計算機論文發表的普通期刊