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