李志圣,苑伯達,郝 琨,唐國峰
(天津城建大學 計算機與信息工程學院,天津 300072)
2006年,計算思維能力概念被正式提出。2010年,清華大學等高校明確提出將“計算思維能力的培養”列為計算機基礎教學的核心任務。此后,多所高校積極參與計算思維能力培養的教學改革與實踐[1]。
然而總體上看,教育界對計算思維的認識以及如何進行計算思維能力的培養還處于相對初始的階段,很多問題還有待進一步地研究和實踐。目前主要研究成果集中在基礎編程教學過程中的計算思維能力培養上[2],同時也有少量研究在基礎編程之外。文獻[3]提出在編譯原理的課程教學中,強化計算思維所要求的抽象化、形式化和自動化的特點。文獻[4]針對高校數據庫課程的教學提出合并整理教學內容,體現計算思維培養特點,并采用生動具體實例教學方法。文獻[5]提出在計算機類課程中貫穿以“提出問題—分析問題—構造方法—解決問題—引發思考”的問題驅動式教學。文獻[6]針對案例教學進行分析,提出應該精選案例、引導分析、建立模型、教學評價和反饋,進行學生思維能力的培養。
總的來說,研究者在計算機基礎編程之外的研究點主要有兩大類:一是探討如何改革具體核心課程教學內容,以適應計算機思維能力培養;二是研究探討對案例教學和任務驅動教學具體過程的改進,以突出計算思維能力培養的抽象化、自動化和形式化等能力。目前尚無文獻從整個本科階段進行全周期、一體化的計算機思維能力培養探討和研究。
傳統工科專業,例如土木工程、環境工程等,具有理論知識與工程實踐嚴密結合的特點,各門課程的教學都立足于提出實際問題,引導學生形成理論認識,進而獲得解決該領域問題的完備能力,從上述教學過程來看,形成了一個“問題提出—形成理論—實踐檢驗”的完整閉環。與此相對比,計算機專業的教學體系則存在特殊性。
基礎編程類課程的主要教學內容是語法和例題,教學目的是通過編程實例使學生熟悉編程語言語法和一些基本問題的程序編寫方法;專業類課程(如數據結構、算法分析與設計和編譯原理等)則是關于特定類型問題的解決方案的設計與實現;職業技能類課程(如JSP技術、JavaEE技術等)和相關實習實踐,都是源自具體工程實踐的解決方案。
綜合以上分析,傳統工科教學中“問題提出—形成理論—實踐檢驗”的教學閉環,在以往計算機類專業教學體系中應替換為“問題提出—形成解決方案—編程實踐”。

圖1 傳統工科課程體系與計算機類專業課程體系對比
也許有學者會以數據結構和算法設計課程中也含有較多的圖論基礎加以反駁,但實際上圖論等數學基礎并不是數據結構等課程的主要授課內容,這些課程的重點是提升學生對某類問題解決方案的編程實現能力。
傳統工科的理論所起的作用,絕不止是“解決方案”的作用,其更重要的作用是在不同課程之間將理論內容構成一個嚴密的體系。以此為基礎,遵循由淺入深的原則,再適當地增設實踐實習內容,構建出合理的課程實踐體系。
在計算機類專業的教學中,各門課程依據要解決的問題,提出各自的“解決方案”,這會造成以下問題:
(1)方案本身難以精煉到理論的高度,其正確性論證也非教學重點;
(2)各門課程之間難以在相對獨立的“解決方案”基礎上形成嚴密的體系支撐;
(3)以“解決方案”和編程實踐為教學重點,難以產生貫穿于本科4年的整體著力、循序漸進的核心凝聚力。
圖1對比了傳統工科畢業與目前計算機類專業的教學體系特點。
計算機類專業課程雖然關注不同類型問題的解決方案,以及引導學生進行相應的編程實踐,其共性目標都是培養學生對具體問題的邏輯分析、形式化表示和程序實現的能力,使學生能更好地將所理解的解決方案以計算機語言進行表達和實現,這顯然就是計算思維能力培養工作的直觀表述。
因此,計算機類專業課程的教學體系應該明確地以計算思維能力培養為核心目標,各類課程(從基礎課程、專業課程到職業技能課程)應依據其解決問題的難度遞進關系,以各問題規模粒度,對計算思維能力的各個層面進行針對性培養,構建出全周期、一體化的計算思維能力培養體系。
文獻[7]中提出了計算思維能力的培養的概要過程:建立計算的意識、了解計算的功能、掌握計算的方法、利用計算的工具和資源、具備計算(復雜問題)的能力。并提出上述過程的實現應構建恰當的課程體系,確定相應的教學目標。
采納文獻[7]的觀點,同時依據“基礎課程—專業課程—職業技能課程”的遞進式劃分,構建的全周期、一體化的計算思維能力培養體系,詳見圖2。
對理論課程和實踐課程實施全面覆蓋、分類規劃的一體化教學。針對各類課程特點,改革課程教學內容和教學方法,圍繞計算思維能力構筑有機課程體系,從理論到實踐進行全方位、綜合性的計算思維能力培養,具體思路如下:
(1)基礎課程。包括基礎編程語言和面向對象編程語言,采用細節驅動式教學,參考現有豐富成果,針對入門級編程能力培養時所遇到的細節問題,進行細節詳盡、過程規范的引導,培養學生初步的計算意識,并使其了解計算的功能。
(2)專業課程。針對各種粒度適中的經典問題,如最短路徑問題、貪心算法等,采用問題驅動式教學,使學生掌握常用的計算方法。
(3)職業技能課程。針對企業較為關注的前沿問題和解決方案,以項目驅動的方式,引導學生掌握企業級開發的工具,具備解決復雜問題的計算能力。
各類課程與計算思維能力培養的遞進關系如圖3所示。

圖2 以計算思維能力培養為核心的計算機類專業課程體系
按照3個階段遞進式的培養學生計算思維能力,實現對基礎課程、專業課程、職業技能課程等的全覆蓋。
(1)建立計算意識階段。為培養學生在基礎編程中的計算思維能力,筆者提出將基礎編程的引導教學進行形式化和標準化:圍繞“問題提出—學生嘗試—定義數據—學生完善”4個教學階段,為每個階段制定合理的教學方案,明確每階段的教學內容和評價標準。教師依據標準化教學方案實施階段性教學行為,能夠隨時指出學生在各個階段所存在的問題,并能夠引導學生按照標準化方案進行下一步思考,為學生計算思維能力的培養提出切實可行的步驟方案(圖4)。

圖3 課程分類與對應計算思維能力培養目標的關系

圖4 基礎課程教學中計算思維培養的細節驅動式教學方案
(2)掌握常用計算方法階段。對算法設計與分析和設計模式等課程,按照“教師提出問題—學生提出方案—學生改進方案—理論總結和提升”的問題驅動式教學方式(圖5),調整、充實課程教學內容和教案,切實提升理論教學的教學質量,并使得學生計算思維能力在理論教學中得到充分的展示和提升。
(3)培養復雜計算能力階段。以案例驅動方式(圖6)的講練結合、按照“理解問題—邊講邊練—自主訓練—總結提升”的總線,實施“教學—反饋”的項目驅動式教學,重新修訂Web前端開發、核心開發和框架開發等課程的教學大綱和教學方案,擴充和完善教學案例,同時增設實習教學環節,并優化開發課程與實習的前后銜接次序。

圖5 專業課程教學中計算思維培養的問題驅動式教學方案

圖6 案例驅動式教學方案
筆者圍繞計算思維能力培養,構建統一著力、前后呼應的教學內容和體系改革方案;同時,針對“基礎課程—專業課程—職業技能課程”的各階段課程教學,形成步驟明確、可操作性強的教學實施方案,使所有教師都能找到學生在程序設計中所遇到問題的思維根源,進而實施有效的引導教學。
筆者依托于天津城建大學軟件工程專業進行了一體化教學的初步探索,目前完成了C語言、Java語言設計、設計模式和軟件開發實習的教學內容調整,按照標準化教學方案制定了新的教學方案,并在2014—2016級軟件工程教學中進行了驗證,取得了較好的學習效果,3門理論課程的平均成績均比往屆有所提高;新的軟件開發實習方案得到了實習企業的高度肯定,企業對學生實習項目質量的評價也高于往屆。
今后在具體實踐中,我們將針對全部課程,按照標準化方案進行教學內容和教學方式的改革,使計算思維能力培養在教學活動得到完整、全面的實施。