• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于計算機系統(tǒng)能力培養(yǎng)的程序語言選用分析

      2020-12-07 06:03:42羅先錄周富肯艾廣燚向燕飛
      軟件工程 2020年11期
      關(guān)鍵詞:編程語言計算機系統(tǒng)程序設(shè)計

      羅先錄 周富肯 艾廣燚 向燕飛

      摘? 要:計算機類專業(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);編程語言

      中圖分類號:TP312? ? ?文獻(xiàn)標(biāo)識碼:A

      Abstract: It is a professional quality for learners of computer majors to master basic skills of problem solving with programming. Algorithm, the soul of program design, is a stepwise procedure for solving problems systematically, and is the only access to computational thinking. "System Ability" is the core competitiveness of computer majors compared with other majors. This paper summarizes and compares teaching with different programming languages over the past six years, and then discusses how to enhance both professional qualities and core abilities of computer major students. The result of the paper provides a feasible scheme for programming language selection of teaching for cultivation of students' system capability.

      Keywords: program design; data structure; algorithm; computer systems; programming language

      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é)?,F(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ù)抽象是首先要面對的主題?,F(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)建對象,以及派生出更多的細(xì)分、實用的類。

      (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]。

      3.3? ?計算機系統(tǒng)角度的C語言

      從程序員角度的計算機系統(tǒng)看,C語言版本的優(yōu)勢還在于可以深刻理解計算機系統(tǒng),這個是當(dāng)前計算機教育的一個趨勢[1-3]。2010年,教育部高等學(xué)校計算機類專業(yè)教學(xué)指導(dǎo)會組織高校的資深計算機教育專家成立“計算機類專業(yè)系統(tǒng)能力培養(yǎng)研究專家組”,研究組經(jīng)過對國內(nèi)外計算機專業(yè)的課程體系、用人單位的需求及技術(shù)的發(fā)展,提出了“計算機類專業(yè)系統(tǒng)能力培養(yǎng)專業(yè)課程體系”。并分批設(shè)立了試點高校。如果是計算機系統(tǒng)能力試點學(xué)校,就會了解目前所有的計算機系統(tǒng)基礎(chǔ)之類的課程和教材,都是采用了C語言舉例[1,2] ,特別是其中最著名的CMU教材《深入理解計算機系統(tǒng)》就是采用了C語言作為例子貫穿整個教學(xué)[10]。我們以南京大學(xué)袁春風(fēng)《計算機系統(tǒng)基礎(chǔ)》為主教材,同時參考CMU的《深入理解計算機系統(tǒng)》,加入了第四批試點高校行列。我們結(jié)合這幾年進行程序設(shè)計基礎(chǔ)+數(shù)據(jù)結(jié)構(gòu),以及后續(xù)的計算機系統(tǒng)基礎(chǔ)課程這三門課連續(xù)教學(xué)中的一些主要概念的逐級提升或者延伸、最后得以澄清的經(jīng)驗體會來說明這個選擇的優(yōu)點。

      構(gòu)的訪問 數(shù)組和指針(結(jié)構(gòu)體、鏈表) 線性表、棧、隊列、樹和圖等抽象數(shù)據(jù)類型等都有兩種結(jié)構(gòu)的實現(xiàn)方式 順序?qū)崿F(xiàn)的數(shù)組首地址以及循環(huán)模式和鏈?zhǔn)綄崿F(xiàn)的鏈?zhǔn)皆L問模式的比較 在匯編代碼級理解各種數(shù)據(jù)訪問模式的本質(zhì)

      棧(stack) 在調(diào)試運行遞歸函數(shù)時觀察調(diào)用的函數(shù)棧 LIFO問題的解決模式,熟悉棧的底層實現(xiàn)和運用 操作系統(tǒng)的棧是一個特定內(nèi)存區(qū)域,和數(shù)據(jù)結(jié)構(gòu)的棧一樣遵循先進后出的規(guī)則 數(shù)據(jù)結(jié)構(gòu)的棧和操作系統(tǒng)函數(shù)調(diào)用棧的區(qū)別、函數(shù)調(diào)用棧的耗時和溢出是線索

      堆(heap) 動態(tài)內(nèi)存分配函數(shù)malloc/free(面向?qū)ο缶幊陶Z言的new)的使用 一種特殊的二叉樹數(shù)據(jù)結(jié)構(gòu),以數(shù)組方式連續(xù)存儲 操作系統(tǒng)的堆是一個特定的動態(tài)內(nèi)存分配區(qū)域(運行時才知道大小需求) 操作系統(tǒng)的堆(棧)強調(diào)數(shù)據(jù)生命周期,而數(shù)據(jù)結(jié)構(gòu)的堆(棧)強調(diào)數(shù)據(jù)組織

      排序算法

      中的歸并

      排序 多項式加法等簡單運用 遞歸實現(xiàn)或者非遞歸實現(xiàn) 額外空間的分配,需要理解內(nèi)存的分配和回收的代價 從系統(tǒng)角度理解“以空間換時間”和“以時間換空間”的權(quán)衡

      堆排序和

      快速排序

      比較 兩個變量比較和交換的方法 對于同樣的數(shù)據(jù),排序過程中,堆排序算法的交換次數(shù)要多于快速排序 快速排序中數(shù)據(jù)是局部順序訪問,堆排序是跳躍訪問,對CPU緩存不友好 從系統(tǒng)角度理解算法快慢的根本原因

      文件 文件建立/打開/關(guān)閉、讀/寫、文件指針移動 內(nèi)部排序和外部排序 Cache、內(nèi)存、I/O的讀寫 Cache/內(nèi)存/硬盤等存儲層次結(jié)構(gòu)的效率和配合

      這樣的例子還可以不斷總結(jié)很多,運用C語言實現(xiàn)的例子,就很容易闡述清楚這些概念背后的內(nèi)涵與延伸,讓學(xué)生深入理解計算機系統(tǒng)的運行機制,逐步形成計算機專業(yè)的核心能力。

      4? ?結(jié)論(Conclusion)

      對于一般專業(yè)學(xué)生來說,面向解決問題的模式,學(xué)會一種編程語言后進一步學(xué)習(xí)算法和數(shù)據(jù)結(jié)構(gòu),用一種語言學(xué)習(xí)這兩門課程是一個很順利的學(xué)習(xí)進階道路,目前的教材和師資的成熟度也支持這樣的做法。對于計算機類專業(yè)學(xué)生來說,用C語言進行這兩門課程的學(xué)習(xí),對于后續(xù)專業(yè)核心課程的學(xué)習(xí),將會起到很好地理解與掌握計算機系統(tǒng)的作用。特別是目前的計算機教育更強調(diào)計算機系統(tǒng)能力的培養(yǎng)的形勢下,更是一個必然的選擇。

      參考文獻(xiàn)(References)

      [1] 王志英,周興社,袁春風(fēng),等.計算機專業(yè)學(xué)生系統(tǒng)能力培養(yǎng)和系統(tǒng)課程體系設(shè)置研究[J].計算機教育,2013(09):1-6.

      [2] 臧斌宇,彭遠(yuǎn)紅.反思、借鑒、融合、提升—探尋計算機系統(tǒng)能力培養(yǎng)之道[J].計算機教育,2015(21):1-2.

      [3] 袁春風(fēng),王帥.大學(xué)計算機專業(yè)教育應(yīng)重視“系統(tǒng)觀”培養(yǎng)[J].中國大學(xué)教學(xué),2013(12):41-46.

      [4] 尚鳳軍.面向計算機系統(tǒng)能力培養(yǎng)的課程和實踐體系研究[C]. Proceedings of the 3rd International Conference on Applied Social Science Research(ICASSR 2015), 2015:4-5.

      [5] 湯偉.《數(shù)據(jù)結(jié)構(gòu)》和《C語言程序設(shè)計》新教學(xué)模式研究[J].科技資訊,2017,15(24):170-171.

      [6] Brian W. kernighan, Dennis M. Ritchie. The C Programming Language(Second Edition)[M]. New Jersey:Pearson Education International,1998:23-189.

      [7] Robert Sedgewick, Kevin Wayne. 謝路云,譯.算法(第4版)[M].北京:人民郵電出版社,2014:38-107.

      [8] 劉小晶,杜選,朱蓉,等.數(shù)據(jù)結(jié)構(gòu)-Java語言描述[M].北京:清華大學(xué)出版社,2015:23-64.

      [9] 陳越,何欽銘,徐鏡春,等.數(shù)據(jù)結(jié)構(gòu)(第二版)[M].北京:高等教育出版社,2019:73-276.

      [10] Randal E. Bryant, David R. O'Hallarond. 龔奕利,賀蓮,譯.深入理解計算機系統(tǒng)[M].北京:機械工業(yè)出版社,2018:99-276.

      猜你喜歡
      編程語言計算機系統(tǒng)程序設(shè)計
      壓力-體積轉(zhuǎn)換在CFC編程語言中的實現(xiàn)解析
      基于Visual Studio Code的C語言程序設(shè)計實踐教學(xué)探索
      計算機教育(2020年5期)2020-07-24 08:52:56
      Java編程語言的特點與應(yīng)用
      從細(xì)節(jié)入手,談PLC程序設(shè)計技巧
      電子制作(2019年9期)2019-05-30 09:42:04
      IBM推出可與人類“辯論”的計算機系統(tǒng)
      英語文摘(2019年3期)2019-04-25 06:05:32
      淺談不同編程語言對計算機軟件開發(fā)的影響
      電子制作(2018年1期)2018-04-04 01:48:36
      高職高專院校C語言程序設(shè)計教學(xué)改革探索
      分布處理計算機系統(tǒng)研究
      面向?qū)ο骔eb開發(fā)編程語言的的評估方法
      MIMD 并行計算機系統(tǒng)結(jié)構(gòu)與定量分析
      阳谷县| 本溪市| 金昌市| 宜良县| 页游| 双辽市| 桐城市| 新疆| 开平市| 乌兰察布市| 名山县| 黑龙江省| 泗水县| 色达县| 精河县| 鹰潭市| 定州市| 临潭县| 资溪县| 永康市| 唐山市| 察雅县| 麟游县| 东兰县| 阿城市| 双牌县| 孟村| 黄龙县| 建瓯市| 白水县| 贵德县| 禹州市| 辽阳县| 永靖县| 本溪市| 合水县| 柳河县| 威远县| 鄂尔多斯市| 仁怀市| 卓尼县|