[摘 要] 針對編程過程中不會想、不會寫的問題,建立以思維能力培養(yǎng)為核心程序設計課程教學目標,在趣味任務中構(gòu)建融合知識、工具、方法與技能訓練的課程內(nèi)容,以求解“百雞百錢”為例,從科學方法論的角度闡述程序開發(fā)流程形式化方法,在融合理論仿真實踐的教學模式下培養(yǎng)思、寫、調(diào)、測的程序設計能力和規(guī)范意識、規(guī)范編程的習慣。
[關 鍵 詞] 程序設計;思維能力;趣味任務 ;開發(fā)流程;理仿實;規(guī)范
[中圖分類號] G712 [文獻標志碼] A [文章編號] 2096-0603(2018)06-0068-03
高校理、工科類的專業(yè)基本上都將“程序設計”課程作為培養(yǎng)學生基本信息素質(zhì)的基礎課程。20世紀70年代初問世的C語言,兼具高級語言的特性,具有層次清晰、模塊化、接近自然語言和數(shù)學公式的形式,又有匯編語言可直接操縱硬件、訪問內(nèi)存等優(yōu)點,還有良好的可移植性而成為程序設計首選語言。也是教育部各個課程建設指導委員會推薦的高校程序設計課程。高等職業(yè)教育作為高等教育的一種重要的組織形式,從出現(xiàn)以來一直都把C語言作為許多專業(yè)培養(yǎng)學生基礎職業(yè)能力的平臺課程。高職院校通過該門課程培養(yǎng)學生的程序邏輯思維的同時也培養(yǎng)高職學生解決實際問題等綜合能力與素養(yǎng)。
一、程序設計類課程教學中存在的問題
(一)教學目標偏離課程本質(zhì)
大部分程序設計課程的教學目標為:不但要注重C語言程序設計基本知識的學習,更要注重程序設計技能的培養(yǎng),初步積累編程經(jīng)驗,打下良好的計算機應用基礎。
顯然,培養(yǎng)目標是掌握編程知識與技能。而畢業(yè)生從事編程的并不多,它與崗位應用脫離。從而導致學生認為該課無用產(chǎn)生抗拒。若抓住思維能力培養(yǎng)的本質(zhì),領會程序設計理念,體會過程化編程思想,掌握通過計算機解決問題的方法,程序設計課程對人人都有用,從而改變了學生思想認識,有效地增強了心理接納度和學習的主動性。
(二)教學內(nèi)容陳舊、枯燥
大多數(shù)教材是按編程語言知識結(jié)構(gòu)來組織的,再輔以比較刻板、趣味性不強的程序樣例,如練習輸出格式:用*號輸出字母C的圖案、輸出九九口訣;求水仙花數(shù)、求一定范圍內(nèi)的素數(shù)等。對高職生來說,數(shù)學知識性強又不實用的程序設計接受起來又難又無聊,主觀學習意識與意愿大打折扣。
(三)教法、學法導致難教難學
程序設計語言語法規(guī)則多、難記憶,關鍵字、標識符、函數(shù)等往往混淆不清。教學過于注重語句語法,滿腦子都是語句,離開老師就不會寫程序、不會測試程序,根本原因就是沒有掌握程序設計的思維方式與方法,學生像機器一樣成為教師指導的被動執(zhí)行者,喪失主體的自主認知,教學效果很一般。如何調(diào)動學生學習的積極性、喚醒學生的力量,成為教學成功的一個關鍵。
(四)忽略規(guī)范
程序中隨意設置變量名稱、不遵守層次明晰的縮進格式、怕麻煩不寫注釋,造成程序可讀性差,影響調(diào)試、開發(fā)進度和交流。不規(guī)范的書寫與企業(yè)的嚴格而全面的軟件文檔規(guī)范差距大,影響學生和企業(yè)對學校專業(yè)的滿意度。
二、建立思維能力是程序設計課程本質(zhì)的思想[1-2]
“C51程序設計”就是用C語言為51內(nèi)核的微型計算機,也稱為微控制器或單片機的智能控制核心設計、編寫控制軟件。程序設計的學習直接與智能控制類產(chǎn)品掛鉤,其針對性、適應性更強。占理工科大多數(shù)的非軟件專業(yè)98%的學生不會從事程序編寫等軟件開發(fā)工作,學生的收獲似乎就只記得零星的幾個語句關鍵字,如if、for、while等。所以編程技術(shù)、技巧上的能力不是最重要的,而其本質(zhì)“邏輯思維”能力、對問題的分析方法的掌握應用,從而找到解決問題方法的能力則更為重要。方法與思維能力是可從學?!皫У淖摺钡哪芰?,生活和工作中隨時隨地都要用到,是陪伴人的一生的可持續(xù)發(fā)展能力。故程序設計類課程的核心是培養(yǎng)思維能力,學習計算機語言知識、訓練編程技能是實現(xiàn)邏輯思維能力培養(yǎng)的手段。好的程序員、軟件開發(fā)者一定具備優(yōu)良的邏輯思維能力。
三、趣味任務驅(qū)動,融合仿真重構(gòu)內(nèi)容[3-4]
從電子產(chǎn)品中提煉項目與任務,將知識、仿真技術(shù)與方法、技能訓練、趣味性融入任務中,在完成任務的過程中理解、體會、內(nèi)化為技能與能力。
設計實用、易學的項目任務有花樣燈、鍵控燈、思維訓練、小球計數(shù)、秒閃燈、測量正脈沖寬度、看誰反應快、鍵控PWM調(diào)光燈、可調(diào)時鐘、多功能秒表、打地鼠游戲、單片機唱歌等,還將仿真技術(shù)應用融入其中,如應用Keil編程與編譯、用Keil模擬調(diào)試程序、用Keil的串口監(jiān)測數(shù)據(jù)、用仿真軟件PROTEUS進行軟硬件協(xié)同仿真調(diào)試、用串口助手實時監(jiān)測數(shù)據(jù)跟蹤系統(tǒng)運行等。項目任務中融入的語言知識包括C51的基本語法、語句&結(jié)構(gòu)、數(shù)據(jù)及其類型、運算符、函數(shù)、數(shù)組、指針等;程序設計對象涵蓋單片機I/O端口應用、中斷、定時/計數(shù)器原理及應用、數(shù)碼管靜態(tài)&動態(tài)顯示、LCD及點陣顯示、鍵盤接口技術(shù)、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換、串行通信應用等。
遵循學習規(guī)律和人的發(fā)展規(guī)律,以項目為導向,以軟件開發(fā)過程為主線,整體內(nèi)容組織由易到難,由淺入深,由單一到綜合,循序漸進,可操作性強。每一個任務都以步步高式層次化內(nèi)容及組織安排,在進階設計環(huán)節(jié)有思路點撥,滿足不同能力的學生個性化需求,以期能舉一反三,觸類旁通地自如駕馭編程任務。
四、求漁——掌握方法,學會學習[5-6]
曾有學生問“程序怎么寫,你是怎么想到的”?他這是求捕魚之法,而不是簡單的“怎么寫?”求答案!“求漁”!這也道出了程序設計教學的根本所在“通過形式化的軟件開發(fā)流程訓練如何思考如何編寫”,即問題分析→數(shù)據(jù)抽象→算法設計→流程設計→語句選擇→程序書寫→調(diào)試、測試與判定→總結(jié),解決學生 “怎么想?(思想方法)怎么寫(編程落地)?”的疑問,重點放在思路、算法、編程構(gòu)思和程序?qū)崿F(xiàn)上。而不是直接給魚,即“例程”!同時,努力建立全局意識,先整體后模塊,通過算法設計、程序框架、程序流程等強調(diào)從整體上把控設計,而不是只記得零星的句式或語法那樣只見樹木,不見森林。所以此“漁”就是突出重點的軟件開發(fā)流程。為此,教師特地設置強化邏輯思維訓練任務,如歌星大賽計分、推理車號、誰是罪犯、百雞百錢、數(shù)據(jù)排序等,即為培養(yǎng)掌握程序設計思想和方法的程序員,更重要的是對大多數(shù)學生訓練思維解決實際問題,培養(yǎng)探索創(chuàng)新精神,收獲帶的走的科學的方法能力對每個人都非常有用。以下以著名的“百雞百錢”問題求解來說明“漁”的方法與能力訓練。
(一)“百雞百錢”的任務目標與分析
中國古代數(shù)學家張丘建在他的《算經(jīng)》中提出了著名的百錢買百雞問題:雞翁一,值錢五,雞母一,值錢三,雞雛三,值錢一,百錢買百雞,問翁、母、雛各幾何?
1.任務目標
通過該題求解學習分析一題多解的求解方法。理解變量取值范圍的窮舉、多個變量所有可能值的組合;學習將問題抽象為一系列數(shù)據(jù)的運算。數(shù)據(jù)通過變量承載,學習變量設置及其數(shù)據(jù)類型、初值設計。能正確表達顯性的描述,更要洞察隱性的條件。注意外部函數(shù)的聲明。靈活應用PROTEUS中虛擬終端Virtual Terminal或KEIL進行測試,并對結(jié)果進行測試。
2.任務分析
問題中有三個對象:雞翁、雞母和雞雛。百雞可表示為:雞翁數(shù)+雞母數(shù)+雞雛數(shù)=100;百錢的限定條件可表示為:5*雞翁數(shù)+3*雞母數(shù)+雞雛數(shù)/3=100。這個答案可能不唯一,三種對象的數(shù)量有多種組合可滿足百雞百錢的要求,所以此問題可歸結(jié)為求這個不定方程的整數(shù)解。
(二)“百雞百錢”的算法與流程
1.數(shù)據(jù)抽象為變量
問題是關于三個對象的數(shù)量組合,設三個變量cock,hen,chick,分別代表雞翁、雞母、雞雛這三個對象。且都設置為無符號字符型(數(shù)值都在100以內(nèi),且是正數(shù))。故百雞百錢可表示為:
(1)5*cock+3*hen+chick/3=100;
(2)chick+cock+hen=100;
其中也隱含了多種組合的答案中三個對象的數(shù)量范圍,若全買雞翁最多買20只,全買雞母最多可買33只,全買雞雛可買300只,為方便類計多種結(jié)果,設置一變量Count表示解答累計,其值為正且≤255,故數(shù)據(jù)類型設置為無符號字符型。
2.算法設計——以循環(huán)結(jié)構(gòu)遍歷所有可能的組合
三種雞的數(shù)量各是多少恰好能滿足百雞百錢?那就要在每種雞的數(shù)量范圍內(nèi)一一組合再代入以上兩個表達式中去測試,有多少種組合?應用循環(huán)結(jié)構(gòu)在三個變量未知數(shù)的取值范圍上窮舉和組合的方法來覆蓋可能得到的全部各組解。滿足表達式的便是題解。算法如圖1所示。
3.程序框架
先建立程序的整體架構(gòu),如圖2所示。
4.程序流程構(gòu)思
根據(jù)以上分析與準備,將程序框架細化為流程,如圖3所示。再依流程選擇合適的語句與結(jié)構(gòu)有條不紊地寫出程序。
(三)“百雞百錢”程序編譯、仿真調(diào)試、實物測試
1.編譯、調(diào)試
寫程序的目的是為了實現(xiàn)一定的功能,功能是否達到必須經(jīng)過測試。否則只寫不測無意義!源程序經(jīng)Keil編譯成功后,進入下一步仿真測試。如果異常就需要在仿真軟件中跟蹤調(diào)試、找到問題并解決。如果編譯不成功可能是手誤書寫錯誤、語法或語言規(guī)則錯誤,一般可根據(jù)錯誤提示修改。編譯成功就如寫文章沒錯別字,而語句是否合理通暢、邏輯是否正確只有仿真運行測試才可知。所以調(diào)試的基本技能是必須掌握的。
2.仿真、測試、判斷
用PROTEUS仿真軟件進行測試,根據(jù)運行現(xiàn)象判斷是否達到目標或解決問題。不能判斷說明還沒理解題目,從頭重新開始。判斷結(jié)果是異常,那要回頭去調(diào)試程序,找出問題修正后再測試,直到成功!該實例正確的結(jié)果是:
從串口輸出4種答案:
1:Cock=0 Hen=25 Chick=75
2:Cock=4 Hen=18 Chick=78
3:Cock=8 Hen=11 Chick=81
4:Cock=12 Hen=4 Chick=84
對以上結(jié)果用公式(1)5*cock+3*hen+chick/3=100;(2)依算式:chick+cock+hen=100;進行驗證。判斷自己的程序設計是否正確。進行實物測試時,可監(jiān)測串口助手的數(shù)據(jù)來判斷是否成功。
(四)進階設計與總結(jié)
用一元人民幣兌換成1分、2分和5分硬幣,共有多少種不同的兌換方法。
總結(jié):“百雞百錢”的算法可推廣到窮遍所有可能的組合找到滿足條件的組合即是答案,如推斷N位數(shù)的密碼,再如通過稱重來判斷1角、五角、1元三種面值的硬幣數(shù)量等。
五、理、仿、實相融合探索式地構(gòu)建知識與能力
程序設計是高強度的腦力勞動,實踐性極強,不是聽會看會的,而是手腦并用練會的。事實證明,實踐是編程能力賴以生長的土壤,也是這門課化難為易的“金鑰匙”。針對高職學生樂于形象思維學習特點,適合在做中學,應用世界最先進的單片機&嵌入式系統(tǒng)及電子電路仿真軟件PROTEUS作為形象直觀的仿真教學與仿真實踐的平臺,創(chuàng)建理論、仿真、實踐相融合,教學做一體的教學模式,教師應用仿真技術(shù)講解理論與方法,學生跟著進行程序的仿真設計與調(diào)試實踐,在實踐過程中構(gòu)建自己的知識結(jié)構(gòu),在實踐中探索其中有規(guī)律性的認識,將感性認識升華到理性的高度,理性的思考與理性的實踐相結(jié)合,培養(yǎng)學生會想、會寫、會調(diào)、會測試的綜合能力。
六、在規(guī)范中訓練職業(yè)素養(yǎng)[7]
規(guī)范的程序有清晰的層次、有注釋有說明,可讀性強,便于調(diào)試,有問題也容易發(fā)現(xiàn),也方便移植。作風是訓練出來的,敬業(yè)的職業(yè)素養(yǎng)就是通過上課聽講、做作業(yè)和上機編寫程序等每一個環(huán)節(jié)來培養(yǎng)的,需要“從我做起,從現(xiàn)在做起”。學習時掌握以下幾點:(1)使用TAB進行左縮進。(2)有合適的空行。(3)變量常量命名應統(tǒng)一、見名知意,數(shù)據(jù)類型盡可能簡單,適當為變量分配內(nèi)存。(4)盡可能詳細的注釋。
因為當時編程時可能靈感突現(xiàn),過后就忘了。再拿起來連自己都看不懂了,所以必須對程序語句添加注釋。記錄思想,記錄工作。一般注釋內(nèi)容有:(1)程序名稱;(2)程序功能;(3)程序的思路和特點;(4)編程人員、時間、版本等;(5)結(jié)果、缺陷、改進思路等。
總之,程序設計能力是計算思維和技能化知識的綜合體現(xiàn)。在理仿實融合的趣味任務驅(qū)動下通過科學形式化的軟件開發(fā)方法、流程的編程訓練,學生在學知識和長技能的同時獲得經(jīng)驗和感悟,形成自己的思維方式,既提高了思維能力和編寫程序解決實際問題的能力,也為可持續(xù)發(fā)展能力貢獻重要力量。因會思才會學,也會成為一個有思想的人。
參考文獻:
[1]梁碧珍.在程序設計教學中強化計算思維的研究與實踐[J].百色學院學報,2012(11).
[2]武仁杰.計算思維與程序設計[J].河北北方學院學報, 2013(2).
[3]周靈彬.基于PROTEUS和Keil的C51程序設計項目教程:理論、仿真、實踐相融合[M].電子工業(yè)出版社,2016.
[4]張靖武,周靈彬.單片機原理、應用與PROTEUS仿真:匯編+C51編程及其多模塊、混合編程(本科版)[M].電子工業(yè)出版社,2015.
[5]劉明軍.C語言程序設計(研究型教學模式系列教材)[M].電子工業(yè)出版社,2010.
[6][美]肯尼斯·莫爾.課堂教學技巧[M].人民教育出版社,2010.
[7]柳光凱.程序設計教學培養(yǎng)高職學生素質(zhì)探索[J].計算光盤軟件與應用,2012(8).
Thinking Ability-Centered“C51 Programming”Teaching Reform
ZHOU Ling-bin
Abstract:Aiming at cant think and write in the programming, established teaching objectives of program design course with thinking ability training as the core, to build course content in the interesting tasks which integration knowledge, tools, methods and skills training, from the view of scientific methodology to described development process formalism method in the example of hundred chicken hundred money, to fuse theory simulation practice to develop the ability of thinking, writing,debugging and testing for program design and specifications consciousness,standardize the programming?habits. A person who could think so will learn,will also become a thinking man.
Key words:program designing;thinking ability;interesting tasks;development process;theory simulation and practice;specifications