滕劍鋒 王玉鋒 王 猛 劉二林
(濟寧醫(yī)學(xué)院醫(yī)學(xué)信息工程學(xué)院,山東日照276826)
隨著計算機應(yīng)用范圍的不斷擴展,程序設(shè)計類課程不僅是計算機相關(guān)專業(yè)的必修課程,也是廣大非計算機專業(yè)的基礎(chǔ)課程。以醫(yī)學(xué)專業(yè)為例,教育部在2011年下文,明確了包括程序設(shè)計基礎(chǔ)在內(nèi)的多門課程作為必修的計算機基礎(chǔ)課程。2010年7月,在西安舉行的首屆“九校聯(lián)盟(C9)計算機基礎(chǔ)課程研討會”旗幟鮮明地把“計算思維能力的培養(yǎng)”作為計算機基礎(chǔ)教學(xué)的核心任務(wù)[1]。
國際上廣泛認同的計算思維定義來自卡內(nèi)基·梅隆大學(xué)周以真(Jeannette Wing)教授。周教授認為,計算思維是運用計算機科學(xué)的基礎(chǔ)概念進行問題求解、系統(tǒng)設(shè)計,以及人類行為理解的涵蓋計算機科學(xué)之廣度的一系列思維活動[2]。計算思維的理念古已有之,只是2006年周教授首次把該概念清晰歸納。計算思維的本質(zhì)是抽象和自動化。其與“理論思維”(以數(shù)學(xué)為代表)、“實驗思維”(以物理學(xué)為代表)一起,并稱3大科學(xué)思維[3]。
1972年圖靈獎得主Edsger Dijkstra曾說:“我們所使用的工具影響著我們的思維方式和思維習(xí)慣,從而也將深刻地影響著我們的思維能力?!笨梢姡季S是通過工具來體現(xiàn)和影響的。計算思維的培養(yǎng)不是孤立進行的,不是依靠另外開專門課程講授的,而是在學(xué)習(xí)和應(yīng)用計算機的過程中培養(yǎng)的[3]。學(xué)習(xí)程序設(shè)計類課程是培養(yǎng)“計算思維”的有效途徑之一。
長久以來,程序設(shè)計類課程教學(xué)中往往忽視對計算思維的培養(yǎng),偏重對編程語言語法細節(jié)的講授,將程序設(shè)計課簡單的等同為“編程”課,導(dǎo)致諸如“Hello World”難度的例子貫穿授課過程的始終[4]。其僅僅為演示語言的細節(jié)而設(shè)計,制約了學(xué)生能力的進一步提高。一些教師意識到了這個問題,提出了諸如“案例教學(xué)法”之類的教學(xué)理念,將大型應(yīng)用系統(tǒng)案例引入到程序設(shè)計類課程中,一定程度上消除了教學(xué)和企業(yè)需求之間的差距[5]。但是,在教學(xué)實踐中也發(fā)現(xiàn)這種教學(xué)方式并不是萬能的。主要體現(xiàn)在:
1)“案例教學(xué)法”在高級的開發(fā)平臺(例如Java或.Net)教學(xué)中相對適用,但在程序設(shè)計基礎(chǔ)課程(一般講授C語言)中并不適用。所以,針對程序設(shè)計類課程,需要根據(jù)語言或平臺,靈活的選用教學(xué)理念;2)“案例教學(xué)法”將重點放到了整個案例功能的最終實現(xiàn)上,導(dǎo)致學(xué)生往往忽視細節(jié)部分設(shè)計的高效性、科學(xué)性,不能將算法、數(shù)據(jù)結(jié)構(gòu)多課程的知識有機融合進來,最終影響了整體的執(zhí)行效率。
計算思維的養(yǎng)成,恰好能夠很好地解決這個問題。由此也可見,培養(yǎng)計算思維也不是推倒重來,而是在珍惜多年來行之有效的經(jīng)驗和成果的前提下增加對計算思維的培養(yǎng)。主要思路如下:在程序設(shè)計基礎(chǔ)課程教學(xué)中,將計算思維作為貫穿課程教學(xué)的理念,不孤立介紹語法細節(jié),而是將算法貫徹始終,逐步深入;在程序設(shè)計后續(xù)課程中,將“案例教學(xué)法”與“計算思維”的理念相互滲透,互為補充。
我們認為,程序設(shè)計基礎(chǔ)課程的教學(xué)應(yīng)該突出體現(xiàn)使用編程解決特定問題的方式,即程序設(shè)計方法。另外,在這門課程的教學(xué)實施中要特別注重實踐,要使學(xué)生通過實踐確實感受和領(lǐng)悟計算機問題求解的基本方法和思維模式。就課程性質(zhì)而言,程序設(shè)計基礎(chǔ)課有利于訓(xùn)練計算思維能力和動手解決問題的能力。當(dāng)今社會的有識之士提出:既然計算機已經(jīng)成為“人類通用智力工具”,那么計算思維對每個學(xué)生都有普遍意義,而不僅囿于計算機專業(yè)[6]。
《China Computing Curricula 2002中國計算機科學(xué)與技術(shù)學(xué)科教程2002》中說:“從問題的抽象描述到具體實現(xiàn),以及從研究對象的表示形式到相應(yīng)的處理方法,都要求本學(xué)科的工作者具有較強的計算思維能力,而計算思維能力在較大的程度上是以思維方式的數(shù)學(xué)化為支撐的。所以,學(xué)生在思維方式的數(shù)學(xué)化上受到良好的訓(xùn)練是非常重要的。”[7]由此可見,對學(xué)生在程序設(shè)計課上進行數(shù)學(xué)抽象化的訓(xùn)練是培養(yǎng)“計算思維”,進而掌握程序設(shè)計方法的重要環(huán)節(jié)。計算思維能力在很大程度上是以思維方式的數(shù)學(xué)化為支撐的,在程序設(shè)計基礎(chǔ)課上通過教師講授和學(xué)生自己上機實踐,來體會一個實際問題是怎樣變?yōu)橛嬎銠C能夠求解的問題,這個過程蘊含著計算思維要素。
就數(shù)學(xué)抽象而言,它是針對現(xiàn)實世界的量的關(guān)系和空間形式進行的。計算思維中的抽象與傳統(tǒng)數(shù)學(xué)相比更為復(fù)雜和實用,抽象的好壞和是否能夠?qū)嵱?,要看計算機能否快速地自動化地完成人們預(yù)想的計算任務(wù)。計算機解題過程是抽象和自動化過程,就步驟而言,主要是:1)對問題進行抽象得到數(shù)學(xué)模型;2)研究解決數(shù)學(xué)模型的算法;3)選擇與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu);4)程序編碼;5)調(diào)試運行;6)結(jié)果分析。
在整個步驟過程中,構(gòu)造問題很重要,它是切入點,擔(dān)負著激發(fā)興趣,引出思路的重要使命,同時,它還必須具有普遍性,具備舉一反三的可能。
教學(xué)具體舉措:1)在教學(xué)中盡量選用有典型數(shù)學(xué)模型背景的示例,例如漢諾塔問題、人鬼渡河問題等,不再采用單純?yōu)榱搜菔菊Z法而設(shè)計的初級例子;2)以賽代練,鼓勵學(xué)生參加算法類程序設(shè)計比賽,例如ACM程序大賽、百度之星、TopCoder、Google Code Jam等,以培養(yǎng)、鍛煉學(xué)生的計算思維能力。
對于程序設(shè)計的后續(xù)課程,如果還把重點僅僅放在“計算思維”的培養(yǎng)上,那就等于是在簡單地重復(fù)程序設(shè)計基礎(chǔ)課程的教學(xué)工作,達不到提高的效果。較為合理的做法應(yīng)該是秉承行之有效的“案例教學(xué)法”理念,將程序設(shè)計基礎(chǔ)課程中培養(yǎng)出來的計算思維能力,應(yīng)用到案例的實現(xiàn)過程中,豐富案例教學(xué)法的內(nèi)涵。
教學(xué)具體舉措:1)以賽代練,由鼓勵學(xué)生參加算法類比賽,轉(zhuǎn)為參加軟件應(yīng)用類比賽,例如齊魯軟件大賽、全國信息技術(shù)應(yīng)用水平大賽等;2)在軟件整體功能實現(xiàn)的前提下,關(guān)注軟件中算法、數(shù)據(jù)結(jié)構(gòu)的高效與優(yōu)化。
對于專業(yè)基礎(chǔ)課來說,在以往的教學(xué)過程中,編程語言語法的教學(xué)是非常重要,但也是非??菰锏?,很多學(xué)生正是因此有了厭煩情緒導(dǎo)致學(xué)習(xí)掉隊。通過教學(xué)實踐,我們發(fā)現(xiàn),較之以往,加入蘊含數(shù)學(xué)的趣味問題之后,學(xué)生的學(xué)習(xí)積極性明顯有所提高,更為重要的是通過這樣的例子,不自覺地提高了學(xué)生的算法邏輯思維能力,同時使學(xué)生掌握了基本的編程語法,課程掉隊的學(xué)生比例顯著降低,有效地實現(xiàn)了既定教學(xué)目標。
對于后續(xù)課程來說,在以往的教學(xué)過程中,學(xué)生往往理解不清各門專業(yè)課程的關(guān)系,忽視,乃至曲解課程的前后銜接關(guān)系,無法建立起正確的、整體的知識框架。經(jīng)過了相應(yīng)的教學(xué)改革后,學(xué)生的知識體系趨于完整而清晰,并能夠有意識地將算法、數(shù)據(jù)結(jié)構(gòu)等融入自己的開發(fā)系統(tǒng)中,能較熟練地形成實際解決方案。在齊魯軟件大賽、全國信息技術(shù)應(yīng)用水平大賽中我院學(xué)生取得全省一等獎和全國二等獎的好成績。
我們應(yīng)特別關(guān)注學(xué)生多種思維能力的培養(yǎng),尤其要重視創(chuàng)造性思維的訓(xùn)練及創(chuàng)造性思維方法的掌握,提高學(xué)生發(fā)現(xiàn)問題、解決問題的能力。在培養(yǎng)計算思維的過程中,教師也需要警惕另外一個極端,那就是只重視思維,而忽視了編程語言,否則,計算思維就成了無源之水。培養(yǎng)計算思維不是目的,我們的最終目的是要提高學(xué)生的綜合能力。合理的根據(jù)課程內(nèi)容,在程序設(shè)計類課程的不同階段選用不同的教學(xué)方法、理念,是提高教學(xué)質(zhì)量的一條有效途徑。
[1]楊玉良.深入實施通識教育 培養(yǎng)未來社會中堅[J].中國高等教育,2010,46(19):4-5.
[2]Wing JM.Computational thinking[J].Communications of ACM,2006,49(3):33-35.
[3]譚浩強.研究計算思維,堅持面向應(yīng)用[J].計算機教育,2012,10(21):45-49.
[4]王玉鋒,孔繁之.基于計算思維的計算機教學(xué)研究[J].計算機教育,2013,11(13):57-59.
[5]滕劍鋒.Java課程改革的研究與實踐[J].計算機教育,2012,10(23):87-89.
[6]吳文虎.我怎么講好“程序設(shè)計基礎(chǔ)”這門課[J].中國大學(xué)教學(xué),2011,30(12):10-12.
[7]中國計算機科學(xué)與技術(shù)學(xué)科研究組.China Computing Curricula 2002中國計算機科學(xué)與技術(shù)學(xué)科教程2002[M].北京:清華大學(xué)出版社,2002:27.