李駿揚
(東南大學(xué) 自動化學(xué)院,江蘇 南京 210096)
計算思維是一種人類通過計算機解決問題的思維模式,計算思維不是計算機的思維,而是人類面向計算機,選擇合適的方式陳述一個問題,或?qū)σ粋€問題的相關(guān)方面建模使其易于處理的思維方法[1]。在大學(xué)一年級的計算機基礎(chǔ)教學(xué)課程中,計算思維的培養(yǎng)已經(jīng)成為一種主流[2]。
理工科學(xué)生在計算機語言入門的學(xué)習中會遇到很多的困難。學(xué)生在編寫第一個可以運行的程序前,其需要掌握的前置語法知識包括編譯預(yù)處理、變量定義、運算符、表達式、程序結(jié)構(gòu)等。此外,學(xué)生還必須對計算機處理問題的方式有所理解,對算法有所理解。眾多前置知識的學(xué)習往往會導(dǎo)致兩方面的問題:首先,在前置學(xué)習中方向不明,容易喪失學(xué)習的興趣;其次,后期的學(xué)習中,任何前置知識掌握得不牢固,都會導(dǎo)致編寫程序中出現(xiàn)各種困難,降低學(xué)習的效率。
基于計算思維和可執(zhí)行程序框圖的計算機語言入門教學(xué)模式是一種全新的教學(xué)模式,它有助于大學(xué)一年級學(xué)生轉(zhuǎn)變思維方式,暫時屏蔽繁復(fù)語法的干擾,專心于計算思維與算法的學(xué)習,并從算法基本邏輯出發(fā),逐步過渡到C/C++等語言的學(xué)習。
C 和C++語言是目前理工科專業(yè)最為普遍采用的計算機入門語言,C 語言面向底層,C++具有面向?qū)ο蟮奶卣鳎燃骖欁詣踊?、信息、電子等專業(yè)對硬件底層編程的要求,又能夠應(yīng)對圖像處理、控制方法設(shè)計、信息處理等算法實現(xiàn)[3],C++也可以面向桌面,但在移動終端、Web 的上層系統(tǒng)編程中就力不從心了。
然而,在教學(xué)中,C 和C++語言卻具有兩面性。一方面,C 和C++面向底層的特性,對指針和內(nèi)存的操作,極好地揭示了計算機處理問題的方式,從另一個側(cè)面展示了程序設(shè)計的魅力,學(xué)生在精通C 和C++之后,一般都可以輕松學(xué)習其他的語言;另一方面,過多的新特性的堆積,過多的需要編程者親歷親為且不可疏漏的操作,給初學(xué)者的學(xué)習帶來了巨大的困難。
Python 語言目前在計算機基礎(chǔ)教學(xué)過程中越來越流行,無論是大學(xué)一年級的計算機語言入門,還是在中學(xué)生的計算機語言教學(xué)中,Python語言越來越廣泛地在教學(xué)中進行使用[4]。
Python 語言的優(yōu)勢在于語法簡單,可集成性強,但是Python 語言依然無法擺脫語法的束縛,依然需要較多的前置學(xué)習。
另外,針對理工科學(xué)生,特別是自動化、電子、信息類專業(yè)的理工科學(xué)生來說,Python太多地隱藏了計算機底層的處理方式,在學(xué)習Python 語言之后,面對C 和C++語言依然有諸多困難。
圖形化編程平臺目前廣泛使用在青少年編程教育和一些行業(yè)應(yīng)用中。早期的圖形化編程平臺主要以流程圖的方式展現(xiàn),如LabView,還有筆者為微波儀器計量機構(gòu)開發(fā)的計量自動測試系統(tǒng)。這類軟件平臺針對的用戶群是某行業(yè)的專業(yè)人士,用戶特點是對本行業(yè)極為精通,但是缺乏專業(yè)代碼能力,因此采用流程圖等圖像化形式快速組態(tài)其需要完成的工程任務(wù)[5]。這類軟件早期也在青少年的編程學(xué)習中出現(xiàn),如樂高的RTX系統(tǒng)(基于LabView),但此后都被基于程序框圖的EV3 圖形化編程平臺所替代。
流程圖的優(yōu)勢在于對順序的直觀展現(xiàn),但是在面對條件和循環(huán)時,卻不如N/S 圖等程序框圖表達那樣具有結(jié)構(gòu)性。目前,面向青少年的編程平臺大多采用類似N/S 圖的框圖編程。在機器人領(lǐng)域,比較典型的編程平臺有樂高的NXT和EV3 平臺、VEX 的RQ 機器人編程平臺等。在通用編程領(lǐng)域,目前使用最廣泛的是MIT 的Scratch 平臺,國內(nèi)也有大量模仿或嵌套Scratch的編程平臺,如Hopscotch、Mixly、網(wǎng)易卡卡、編程貓等[6]。但是,我們在教學(xué)實踐中發(fā)現(xiàn),純圖形化編程平臺雖然可以將編程思維導(dǎo)向程序邏輯的思考,但是依然存在以下問題:
第一,為適合青少年的學(xué)習,大多數(shù)圖形化語言界面有低幼化的傾向,其編程界面不適合面向大學(xué)一年級的學(xué)生使用。
第二,對數(shù)學(xué)表達式的處理過于復(fù)雜,并盡可能避免出現(xiàn)數(shù)學(xué)表達。由于這些編程平臺過于游戲化,因此展現(xiàn)算法的能力有限。學(xué)生在轉(zhuǎn)入高級語言學(xué)習時依然會遇到算法的瓶頸。
第三,主要功能的實現(xiàn)依靠調(diào)用和拼搭,而不是對算法的深入思考,不適合培養(yǎng)具有獨立思考能力的科研與工程人才。
第四,缺乏程序調(diào)試的手段,面對程序運行的錯誤,只能靠“看”,而不是單步跟蹤、內(nèi)存檢查等常有的程序調(diào)試方法。
第五,從教學(xué)的角度,這些工具大多缺乏從圖形化語言到普通計算機的銜接,由于圖形化編程平臺的簡易性,部分學(xué)生在面對普通計算機語言時會顯得畏懼不敢嘗試。
為了更好地結(jié)合教學(xué),筆者自主設(shè)計了X-Program 可執(zhí)行的程序框圖系統(tǒng),該系統(tǒng)以教學(xué)為出發(fā)點,并具有以下特點:
第一,系統(tǒng)采用N/S 框圖的方式展現(xiàn)程序,程序的結(jié)構(gòu)直觀清晰。
第二,系統(tǒng)能夠展現(xiàn)內(nèi)存中的所有數(shù)據(jù),學(xué)生能夠通過十進制、十六進制和二進制等多種方式查詢系統(tǒng)的數(shù)據(jù)。
第三,系統(tǒng)能夠單步跟蹤,能夠設(shè)置斷點,能夠?qū)崿F(xiàn)在運行中對程序的調(diào)試。
第四,對表達的處理,既可以采用手動書寫的模式,讓學(xué)生逐步理解計算機中表達的書寫形式,亦可以直接展示成數(shù)學(xué)公式的形式,但不采用Scratch 用積木組合的形式。
第五,系統(tǒng)可以將偽碼翻譯為常用的計算機語言,包括C、C++、Java、Basic、Python、Pascal 等。
程序設(shè)計的首要問題是程序的“過程性”,以及每個步驟的“標準化”。X-Program 面向剛?cè)腴T的學(xué)生,采用了一些最基本的步驟和模塊,來展現(xiàn)程序的過程,這些基本模塊包括:
表達式:書寫一個可賦值的表達式
創(chuàng)建數(shù)組:設(shè)定一個固定長度的數(shù)組
如果:條件語句
計數(shù)循環(huán):通過計數(shù)變量的循環(huán)語句
條件循環(huán):符合條件則循環(huán)
跳出循環(huán):結(jié)束并跳出循環(huán)
輸入:輸入語句
輸出:輸出語句
通過這些模塊,就可以非常方便地編寫出大部分C 和C++語言所可以書寫的入門程序。
由這些基礎(chǔ)模塊構(gòu)成的程序如圖1 所示。
在程序設(shè)計的過程中,存儲器的訪問與程序的過程同等重要。X-Program 采用了三種方式來展示運行中的內(nèi)容,包括十進制模式、十六進制模式和二進制模式。
圖2 展示了十進制和十六進制的數(shù)據(jù)展現(xiàn)形式,其中在十六進制中,自動區(qū)分了整數(shù)與浮點的整數(shù)表達。
圖1 求2~1 000 質(zhì)數(shù)的程序示例
圖2 十進制和十六進制內(nèi)存展示
在二進制模式下,系統(tǒng)將根據(jù)自動區(qū)分整數(shù)和浮點,并展示出不同數(shù)據(jù)在二進制中的表達。在圖3 中,分別展示了布爾型數(shù)據(jù)、整型和雙精度浮點的二進制表達。
圖3 布爾型、整型和浮點數(shù)據(jù)的二進制內(nèi)存展示
X-Program 支持一步一步地來運行程序,每一步的運行,程序都會自動展示出當前內(nèi)存的情況,并顯著地標出當前運行的步驟,如圖4 所示。
于此同時,X-Program 也支持設(shè)定斷點,程序運行到某個斷點步驟時將自動暫停。另外,當程序運行暫停時,X-Program 支持對程序的修改,并即刻生效。
圖4 X-Program 單步跟蹤(包括當前程序,正在運行(暫停)的步驟,當前內(nèi)存,以及當前輸出的內(nèi)容)
X-Program 為了方便學(xué)生未來從圖像化程序設(shè)計轉(zhuǎn)向普通的文本程序設(shè)計,設(shè)計了將框圖程序翻譯成常用計算機語言程序,包括C、C++、C#、Java、Basic、Python、Pascal 等。
圖5 和圖6 中展示了X-Program 翻譯成C++語言和Python 語言的結(jié)果。
圖5 X-Program 翻譯為C++程序,并相互對比
圖6 X-Program 翻譯為Python 程序,并相互對比
以X-Program 為工具的在線開放課程(MOOC)“程序設(shè)計基礎(chǔ)——發(fā)現(xiàn)計算之美”,已經(jīng)在中國大學(xué)慕課上線,目前完整實施了兩輪教學(xué)。該課程的主要學(xué)習目標為:能夠描述并設(shè)計常用的程序設(shè)計算法,運用多種程序的基本結(jié)構(gòu),靈活調(diào)度存儲,構(gòu)建基本的數(shù)據(jù)結(jié)構(gòu),分解復(fù)雜問題,并能夠通過X-Program 編寫中小規(guī)模的代碼,解決學(xué)生在高等數(shù)學(xué)、線性代數(shù)、大學(xué)物理等一年級課程中所涉及的一些問題。
該MOOC 教學(xué)安排見表1。
表1 X-Program 線上慕課教學(xué)安排
在教學(xué)設(shè)計中,提倡使用案例式的教學(xué),而非傳統(tǒng)的從知識點出發(fā)逐一講解。案例教學(xué)中,從提出案例或問題出發(fā),對問題進行分析,然后引出要使用或?qū)W習的新知識點,然后運用新知識點來完成程序的設(shè)計,并在課程的最后回到案例中來,對程序解決問題的效果、執(zhí)行的效率進行進一步分析,或提出改進意見,或進行應(yīng)用拓展。
X-Program 工具的下載,在該在線開發(fā)課程第一單元第四課時“附A:X-Program 的下載與安裝”。
該MOOC 在設(shè)計中,充分考慮線上線下混合式教學(xué)[7]的實施,不僅安排了學(xué)生的學(xué)習內(nèi)容,也對教學(xué)的實施進行了設(shè)計說明與建議。
為了有效銜接學(xué)生未來C/C++等語言的學(xué)習,建議對X-Program 的混合式教學(xué)分3 個階段組成。
第一階段,計算思維入門,結(jié)合慕課第一第二單元,從學(xué)生日常生活經(jīng)驗出發(fā)凝練程序運行的原理與邏輯本質(zhì),與中學(xué)數(shù)學(xué)的學(xué)習經(jīng)驗出發(fā)辨析程序的計算步驟與數(shù)學(xué)表達的異同。
第二階段,基礎(chǔ)算法入門,結(jié)合慕課第三至第七單元,以案例分析與課堂研討的方式,辨析計算機解決問題的方式與我們?nèi)粘K伎紗栴}方式的差異,鍛煉學(xué)生編寫基礎(chǔ)算法的能力。
第三階段,銜接階段,充分利用X-Program的語言翻譯功能,對已經(jīng)學(xué)過的案例進行翻譯對比,逐步從圖像化語言過渡到C/C++等計算機語言。
通過兩個學(xué)期的運用,學(xué)生認可了X-Program對程序設(shè)計入門的幫助,在2019—2020 學(xué)年秋季學(xué)期面向三個教學(xué)班93 名參與課程的學(xué)生的調(diào)查中,共88.3%的學(xué)生肯定了X-Program 的易用性,超過90%的學(xué)生表示X-Program 對程序設(shè)計的學(xué)習有幫助,如圖7 所示。
圖7 X-Program 易用性與幫助度調(diào)查
從教學(xué)效果上看,2019—2020 學(xué)年秋季學(xué)期,兩個班級采用X-Program 與MOOC 混合式教學(xué),并在第七周轉(zhuǎn)入C 語言的學(xué)習。另兩個班級從第一周開始就進行C 語言學(xué)習。在第九周,進行C 語言基礎(chǔ)語法(不含指針與結(jié)構(gòu)體)和算法的階段性測試,從總體成績分布上看,雖然X-Program+MOOC 教學(xué)方案的班級,學(xué)習C 語言晚于平行對照班級,但是測試成績分布總體優(yōu)于平行班級,如圖8 所示。
另外,在線開放課程“程序設(shè)計基礎(chǔ)——發(fā)現(xiàn)計算之美”目前已經(jīng)獲批江蘇省2018—2019 在線開放課程建設(shè)項目,中國計算機教學(xué)慕課聯(lián)盟(CMOOC)線上線下混合式教學(xué)項目,東南大學(xué)課程思政改革項目,以及中國計算機教學(xué)慕課聯(lián)盟優(yōu)秀在線開放課程。實施兩輪以來,獲得了學(xué)生的好評。
圖8 X-Program+MOOC 班級與對照班級教學(xué)效果對比
以學(xué)習者為中心的教學(xué)理念,幫助學(xué)習者的學(xué)習得到更多的收獲,是大學(xué)教師進行課程設(shè)計與改革的基本出發(fā)點。目前,中學(xué)信息教育部分內(nèi)容與大學(xué)計算機程序基礎(chǔ)課程與程序設(shè)計課程有較大的重疊,但是由于地域差異,實施效果的差異,大學(xué)一年級需要零基礎(chǔ)學(xué)習計算機語言的學(xué)生普遍存在,且該現(xiàn)狀在短期內(nèi)不可能完全改變。然而,隨著時代的發(fā)展,越來越多的高中學(xué)生在進入大學(xué)校園前,已經(jīng)具備一定的計算機編程能力,這更需要像X-Program 這樣的入門工具,以及類似“程序設(shè)計基礎(chǔ)——發(fā)現(xiàn)計算之美”這樣的在線開放課程,幫助零基礎(chǔ)的學(xué)生快速地在程序設(shè)計思維上進行提升,并跟上整體的教學(xué)進度。