孫偉峰, 楊 華, 齊玉娟, 萬 勇
(中國石油大學(華東)信息與控制工程學院,山東青島266580)
程序設計語言C/C++是面向我校電子信息工程、自動化、測控技術與儀器、電氣工程及其自動化4個電氣信息類專業大一新生開設的程序設計語言入門課程,也是學習后續專業課程如微機原理、單片機原理與接口等的基礎課程。編程作為理工科專業學生必備的基本工具與技能,其掌握程度將直接影響到后續相關課程的學習[1],甚至以后的科研與工作。
本課程理論與實驗并重,由32學時的理論課與24學時的上機實驗課組成,實驗單獨設課,教學內容包括面向過程的程序設計與面向對象的程序設計兩部分,涉及到的內容多,概念抽象,語法、規則繁多,實踐性強。目前,該課程的教學面臨以下問題:①依照我校計算機系列課程的“Bus”培養模式,取消了先修課程計算機文化基礎,部分學生計算機基礎薄弱;②學時少與內容多之間的矛盾突出;③理論課與實驗課作為獨立的教學單元,兩者之間銜接不暢,沒有充分發揮出實驗教學對本課程的支撐與促進作用;④為了便于學生管理,大一的學生不允許帶電腦到學校,學生只能在24學時的實驗課上進行上機編程,實踐練習的機會少,不利于課程知識的掌握與學生編程能力的培養。學生普遍反映該課程比較抽象、難學,“課上能聽懂,程序能看懂,上機不會編”“遇到問題也不知道如何去調試,實際編程能力較弱”,學生學習興趣不高,學習效果不盡人意。
作為一門實踐性很強的課程,上機實踐是學習程序設計語言最為有效的方法[2],尤其對于大一新生而言,他們的計算機文化基礎較為薄弱,理解及應用程序設計語言的能力不強,只有通過不斷上機編寫、調試程序,發現并改正錯誤,才能真正理解并掌握程序設計語言的語法、結構及程序設計的基本思路與方法,才能逐漸培養計算思維[3]。因此,編程實踐在程序設計類課程的教學中具有十分重要的作用,強化實踐能力是提高本課程教學效果的重要途徑。
為了解決本課程教學過程中遇到的學時少與內容多、理論與實驗教學銜接不暢、尤其是因條件所限導致學生上機實踐機會少等問題,在信息技術與教學深度融合的大趨勢下,課程組以提高學生的上機編程能力為目標,將智能手機、互聯網等信息技術發展成果引入到課程教學中,建立了智能手機端編程、網絡在線編程與實驗室上機實驗相結合的多元協同實驗平臺,為學生編程實踐提供了更多途徑。
對注重編程實踐的程序設計類課程而言,實驗教學不僅僅是理論教學的輔助,能夠幫助學生加深、鞏固對理論教學內容的理解,更是學習程序設計的一種重要途徑,對學生發現問題、分析問題、解決問題的能力以及計算思維、創新能力的培養都具有重要作用,學生只有通過編程實踐才能真正掌握程序設計的思想和方法。因此,實驗教學對程序設計類課程的教學質量具有至關重要的作用,教學效果最終要體現在學生的編程能力上。
程序設計實驗課程目前大多采用單獨設課的方式,理論課程與實驗課程獨立進行,分別由不同的教師執教。理論課教師主要負責程序設計基礎知識、基本語法及程序設計方法的講解,實驗課教師根據理論課程進度指導學生上機編程練習。在這種教學模式下,①學生在理論課上只能“紙上談兵”,老師講的理論知識及演示實驗都能看得“懂”,但由于無法親自編程實踐,這種“懂”僅限于淺層的理解,很多情況下學生并未真正明白,由此,就會出現學生上機編程時需要翻課本、看課件,比照例題“照葫蘆畫瓢”的現象,也即學生所說的“上課能聽懂,上機不會編”“面對題目無從下手,面對錯誤束手無策”。②實驗課上由1位老師指導眾多學生,學生在編程調試過程中遇到問題往往得不到及時解答,理論課教師又不能及時了解學生遇到的問題,理論課與實驗課銜接不暢。實驗課由于學時少等原因在培養學生編程能力方面的作用受限,學生缺乏編程實踐的機會,導致課程整體教學效果不佳。
許多高校都意識到了編程實踐對程序設計類課程的重要性,開展了系列實驗教學改革。例如,劉光蓉[4]在C程序設計課程中采用理實一體化的教學模式,將理論知識融入到實驗教學中,讓學生在練習中理解理論知識。黃云等[5]基于云平臺改革程序設計基礎實踐教學體系,建立實踐教學資源庫,搭建了課程實踐教學平臺。許小東等[6]基于MOOC理念,構建了集資源管理、過程控制、考核評價于一體的程序設計開放實驗平臺,提升了學生的自主學習意識和創新實踐能力。陳婷[7]提出將階梯式教學、案例教學、項目驅動教學等方法應用于程序設計實驗教學中。張彥航等[8]提出一種基于虛擬實踐平臺的C語言實踐教學模式,開發了自主式虛擬作業系統及考試系統,促進學生的自主學習。曾慶江等[9]將實驗教學與云課堂相結合進行計算機程序設計探索性實驗教學,訓練學生綜合利用知識和解決實際問題的能力。何文廣等[10]引入自動評分系統來輔助程序設計課程實驗教學。陳昕等[11]提出采用階梯式遞進的分階段考核方式,注重對學生編程能力的培養。
綜上所述,當前程序設計類課程實驗教學改革的關注點都集中在內容體系、教學方法、教學組織形式、考核評價等方面,而對于實驗得以有效進行的物質載體—實驗場所與編程環境,很少有研究涉及,上機實驗基本局限在實驗室內進行,學生在規定的時間內到實驗室,在教師指導下圍繞特定的實驗內容進行集中實驗;而平時機房資源緊張,即使學生自己有計算機,也不便隨時隨地隨身攜帶,學生在圖書館、自習室等場所寫作業或突然冒出一個好的想法想編程驗證,但苦于手邊沒有計算機,只能暫時放棄,想“等實驗課的時候驗證一下”,但實驗課上卻已遺忘,編程實踐在時間及空間上都受到很大約束,缺乏靈活性,不利于學生的自主、即時學習。
隨著信息技術在教育領域的滲透和融入的深化,其在教育教學方面的助推作用越來越顯著,信息技術與教學深度融合已經成為當今教育教學的一個重要發展方向[12]。為了給學生提供優質的實驗教學環境,讓學生獲得更多編程實踐的機會,讓編程實踐融入程序設計教學的每個環節,借助業已普及的智能手機與互聯網技術,課程組建立了多元協同的C/C++實驗教學平臺。
為了有效解決傳統的實驗室教學因時空受限帶來的諸多問題,讓學生做到“隨時有想法,隨時可編程”,切實提高課程的教學質量,有必要探索多樣化的實驗教學手段,構建多元化的實驗教學環境。課程組在多年教學實踐的基礎上,通過與學生多次溝通交流,在信息與教學深度融合的教育教學背景下,逐步發展建立了基于智能手機編程、網絡在線編程、實驗室上機實驗相結合的C/C++課程多元實驗教學模式。
當前,智能手機已經成為大學生的必需品,學生對手機的依賴越來越強,上課玩手機的現象及報道層出不窮,很多學校都想方設法限制學生課堂使用手機。但是,“堵而抑之,不如疏而導之”,如果能引導學生合理地使用智能手機,就可以將其變成一種有效的學習工具?;谥悄苁謾C的移動教學與學習將成為未來主要的學習方式之一[13-14],能夠提高學生學習的自主性和積極性,在促進高校課堂教育教學方面有著無限的潛力。
智能手機在某種程度上相當于一臺移動電腦,具有獨立的操作系統和運行空間,可以接入無線網絡,且具有無可比擬的便攜性—本身便于攜帶,學生也樂于攜帶,給隨時隨地學習提供了可能。運行蘋果iOS與Android系統的智能手機都可以安裝C/C++開發環境,智能手機對程序設計語言課程的教學具有更為重要的意義。
目前,已經有多種可以在智能手機上安裝運行的C/C++編譯應用程序。例如,可以在蘋果手機上安裝的應用軟件有 Dmitry Kovba開發的“C++Programming Language-Compiler with Reference”(只能聯網使用),踏宇科技開發的C/C++開發應用等;可以在 Android手機上安裝的應用軟件有 C4droid、MySpringC、AIDE、C++compiler IDE、CppDroid 等。目前,應用最為廣泛的是Android系統下的C4droid,本節以其為例介紹基于智能手機的C/C++編程方法。
C4droid是Android平臺下的一款界面友好、功能強大的C/C++集成開發環境 ,默認以tcc(tiny c compiler)為編譯器,具有如下特征:能夠以離線的方式編輯、編譯、運行C/C++程序;支持 ANSI C與 ISO C99標準;源代碼編輯器提供語法高亮、代碼完整性檢查等功能;安裝gcc插件后,支持C++11標準,能夠進行斷點調試,非常適合初學者使用。下面以使用cin及cout語句進行輸入輸出的程序為例,介紹使用C4droid進行編程的過程。首先,打開軟件并新建一個cpp文件,在編輯窗口中編寫C/C++程序,在編輯窗口的最下端,有“編譯”及“運行”兩個控制命令按鈕,如圖1所示。

圖1 程序編輯窗口
程序編輯完成后,執行“編譯”命令對程序進行語法檢查,若程序無語法問題,則會提示“編譯成功”;若存在語法問題,會給出錯誤提示。例如,將語句“sum=a+b;”后面的“;”去掉,則會給出圖2所示的錯誤信息提示。需要注意的是,對于存在多個語法錯誤的程序,C4droid每次只會顯示一個錯誤,需要通過多次編譯才能發現并解決所有的問題。

圖2 錯誤信息提示示例
程序編譯通過后,點擊“運行”命令執行程序,出現終端仿真器(Terminal Emulator)界面,從鍵盤輸入“5 6”后回車,運行結果如圖3所示。

圖3 運行結果示例
若發現運行結果有問題,可以對程序添加斷點進行調試。點擊行號旁邊的區域即可添加斷點,如圖4所示。添加斷點后,執行“運行”命令可以打開調試窗口,如圖5所示。調試窗口中提供了“添加監視”功能,可以在調試過程中實時查看程序中變量的當前取值。例如,對上述程序中的變量“a,b,sum”添加監視后,可以觀察3個變量在程序執行過程中的取值變化。調試窗口中提供了“繼續、步進、單步、斷開”4個調試功能,“繼續”是指從斷點處繼續向下運行,直到遇到下一個斷點時暫停;“斷開”的作用是斷開所有斷點,直接運行至程序結尾處;“步進”與“單步”均能從斷點處開始逐條語句執行,其區別在于,遇到函數調用時,“步進”功能能夠跟蹤到被調用函數內部執行,而“單步”則會整體跳過函數調用語句。

圖4 添加斷點示例

圖5 程序調試窗口
在智能手機上安裝C4droid及其插件后即可單機運行,不需要連接互聯網,使用非常方便。
以智能手機為主要終端的移動互聯網已經成為人們重要的學習工具與途徑,除了可以在智能手機上安裝C/C++集成開發環境之外,在網絡環境下還可以利用在線C/C++編譯器進行程序的編輯及編譯運行。我校目前已經實現了無線網絡的全校園覆蓋,“互聯網絡高速泛在”,為網絡在線C/C++編程提供了條件。
常用的C/C++在線編譯器有 codepad、ideone、C++ shell、dooccn、JDoodle、codechef、wandbox、TutorialsPoint、onlineGDB等,不同的在線編譯器具備的功能也不盡相同,表1給出了常用的C/C++在線編譯器在交互輸入、錯誤信息提示、程序執行方式等方面的對比。

表1 常用C/C++在線編譯器功能對比
C/C++在線編譯器的響應速度視網速及手機性能而定,但整體比使用離線版本的編譯器編譯執行速度慢。在線編譯器的優點是無需安裝集成開發環境,在裝有瀏覽器的手機上即可使用。對上述編譯器進行了大量實驗測試,根據響應速度、功能、易用性等方面的性能比較,推薦使用 C++shell、ideone、onlineGDB 3款C/C++在線編譯工具,其中,onlineGDB還具備程序調試的功能。
學生在初學程序設計時,往往會遇到各種各樣的問題,并且很多問題都具有共性,如果問題得不到及時解決,會挫傷他們學習的積極性,滋生畏難情緒,逐漸喪失學習信心和興趣;相反,如果能夠及時引導學生圍繞這些問題積極開展討論,則會讓學生在思考、討論中對涉及到的編程知識有更深刻的認識。QQ或微信群是當前學生普遍采用的即時通信方式,建立C/C++討論QQ群或微信群,課程組教師及研究生助教都加入群中,學生在學習過程中遇到問題時,可以及時方便地以文字或圖片(比如代碼截圖、編譯系統提示的錯誤信息截圖等)的形式發到群中,教師適當引導,讓學生充分展開討論,體現出“協同學習”的優勢[15]。討論有助于引起學生對問題的深刻思考,在理解并掌握編程知識的同時,也能形成良好的學習氛圍。同時,學生在提出解決方案時會獲得成就感與認同感,能夠進一步增強學生的學習興趣。
基于QQ群或微信群的即時討論建立了師生互動、學生互動的平臺,學生遇到困惑時可以采用文字、拍照、截圖等方式快捷、直觀地提出問題,并能夠得到老師與同學們的及時響應,不會引起問題的“積壓”;同時,這些問題也可以讓教師掌握學生的學習現狀,及時發現教學過程中的不足之處并進一步改進,形成良性循環。另外,在教學實踐中發現,平時在課堂上“沉默寡言”的同學,在討論組中卻變得異常活躍,群內討論也給這部分學生提供了良好的交流平臺。
以C4droid作為編譯工具的智能手機端編程與以C++shell、ideone等作為編譯環境的網絡在線編程構成了 C/C++編程的“移動實驗室”,與以 Visual C++6.0作為編譯環境的實體實驗室以及方便即時討論的QQ群或微信群共同構成了C/C++編程的多元協同實驗教學平臺,如圖6所示。

圖6 多元協同實驗教學平臺構成
其中,移動實驗室C/C++編程適合編寫小規模程序,主要用于理論課上與課下對知識點及基礎驗證性實驗進行編程驗證,以及對設計性與創新性實驗中局部代碼的驗證,其特點是方便、靈活,可隨時隨地進行編程實踐。借助移動實驗室,理論課教學可以采用“體驗式”的教學方法,在講解程序設計知識的同時同步讓學生進行編程驗證,學生在學中做,做中學,邊做邊學,促進學生對知識的深度理解,體會到編程給其帶來的成就感,增強學生的學習興趣,實現“教學做一體化”,提高課堂教學效率及效果。實體實驗室主要用于開展綜合設計性與實踐創新性實驗項目,在實驗課前學生編寫出初步的代碼并利用移動實驗室對局部關鍵代碼進行驗證,在實驗課上主要進行程序的綜合調試及開展問題討論,有效提高實驗課的效率。學生不論利用移動實驗室編程還是在實體實驗室編程時遇到問題,都可以通過QQ群或微信群開展即時討論。
移動實驗室可以讓學生有效地利用碎片時間,彌補了現有實驗教學環境及資源存在局限的不足,從時間與空間兩個維度對現有的實驗教學模式進行了拓展,改善了現有的實驗教學環境,緩解了課程學時少與內容多之間的矛盾,有助于培養學生的自學能力,滿足學生個性發展的需求。3種實驗方式相輔相成,相得益彰,協同實現了“理實一體化”,使編程實踐貫穿整個程序設計教學及學習過程。以該實驗平臺為基礎,可對程序設計理論與實驗教學在教學內容、教學方法、考試方法等方面開展系列教學改革,不斷提升課程教學效果。
采用構建的C/C++編程多元協同實驗環境,改革與之相適應的教學方法,在自動化、測控技術與儀器兩個專業2014~2016級學生中進行了教學實踐。結果表明,大部分學生都樂意使用移動實驗室編程方式,“感覺手機有了超出娛樂之外更高層次的功能”,很多學生對編程產生了濃厚興趣;學生在對程序設計基本知識與方法的理解、動手編程能力、計算思維等方面,整體水平都有了明顯提高。表2中列出了未使用多元協同實驗環境的2013級與使用該實驗模式的2014~2016級學生在期末考試平均成績、期末考試程序設計題平均得分率以及實驗平均成績的對比情況。

表2 編程實踐相關成績對比
由表2中的數據可以看出,隨著多元協同實驗平臺的逐步應用,學生的平均成績,尤其是與編程實踐緊密相關的程序設計題的得分率與實驗課平均成績均逐年提高,從一個側面反映出構建的實驗平臺對程序設計課程學習的助推作用。
信息技術的快速發展為教育教學提供了越來越多的新手段,如何將更多先進的信息技術有效融入到程序設計語言課程的教學過程中,開展系列教學改革[16],充分發揮好信息技術對教學的助推作用,為此提出并構建了結合智能手機端編程、網絡在線編程與實驗室上機實踐相結合的C/C++編程多元協同實驗平臺,強化對學生編程實踐能力的培養,3種編程手段與基于QQ群或微信群的即時討論協同實現了理論教學與實驗教學的良好銜接,為學生提供了多樣化的編程實踐平臺,使編程實踐貫穿程序設計教學的全過程。教學實踐表明,建立的多元協同實驗教學模式對學生編程能力及計算思維的培養起到了積極的促進作用,有利于推進學生自主學習,提高課程的教學效果。