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