摘要:程序設計基礎課程要注重培養(yǎng)學生良好的編程風格及習慣,但是現(xiàn)在編程風格教學現(xiàn)狀卻不容樂觀。為使教師從繁重的指導工作中解脫出來,我們在編程風格教學中試驗性地引入開源軟件Indent,提高學生對編程風格學習的興趣。
關鍵詞:編程風格;Indent;程序設計基礎;編程習慣
程序除了寫給自己看,還要交流,良好的編程風格可以提高程序的可讀性、規(guī)范性、通用性。編程風格應該成為一種習慣,如果學生開始學習編程時就關注風格問題,并且在編程實踐中不斷審視和改進風格,就會逐漸養(yǎng)成一種良好的編程習慣[1]。日常教學中,教師應該注意對學生這方面習慣的培養(yǎng),這也有助于塑造學生嚴謹?shù)闹螌W精神。
1編程風格教學現(xiàn)狀分析
雖然國內(nèi)很多高校在程序設計基礎課程教學目標中提出要培養(yǎng)學生良好的編程風格及習慣,但在實際教學中,無論是教師還是學生,都很少關注編程風格的問題,而是將注意力集中在程序的語法及正確性方面。
歷經(jīng)幾年的積累,內(nèi)蒙古師范大學計算機與信息工程學院的程序設計基礎課程于2005年被評為“內(nèi)蒙古自治區(qū)級精品課程”,教師們還自主開發(fā)了在線評測系統(tǒng)。該系統(tǒng)可以實現(xiàn)程序在線自動評測,將信息實時反饋給學生。它不但可以自動評測學生平時的程序作業(yè),還可以應用于期中和期末考試。我們發(fā)現(xiàn),雖然應用在線評測系統(tǒng)提高了編程能力,但無論是平時的程序作業(yè)還是考試的程序,學生很少講究編程風格,主要表現(xiàn)在:
(1) 程序中應用嵌套甚至多級嵌套時,不用鋸齒形排列,看不清嵌套層次。
(2) 邏輯結(jié)構(gòu)混亂,層次不清晰,發(fā)現(xiàn)存在錯誤,卻難以找到癥結(jié)所在。
對于程序設計初學者來說,即使老師在教學中強調(diào)編程風格的重要性,他們也很難建立編程風格的概念,認為編程風格無關緊要,只要算法正確、實現(xiàn)了程序的功能和符合特殊邊界條件,無論提交的源碼格式有多亂,都可以通過在線評測系統(tǒng),作業(yè)也就合格了,期中及期末考試也是如此,所以學生不可能再花費更多精力去學習編程風格并保持這種習慣。
在學生的意識中,程序的算法和功能遠比編程風格重要。大部分學生都把編程風格問題放在最后,甚至根本不去考慮風格問題[2]。因為在一個規(guī)模很小的程序中,即使格式很亂,也能正確地編譯運行。但是編寫一個大型程序時,就會導致程序的可讀性非常差,并且可能隱含錯誤,代碼的修改非常困難,甚至編程者本人在一段時間后也難以讀懂當時編寫的程序。
程序設計基礎是入門級的程序設計課程,所以一定要讓學生意識到編程風格的重要性,引導他們學習關于編程風格的基本知識,形成良好的編程習慣。編程習慣的養(yǎng)成一定要從程序設計初學者抓起,因為一旦養(yǎng)成了不良習慣,再想改正是非常困難的[3]。
培養(yǎng)良好編程風格的唯一途徑就是讓學生長期實踐,編寫大量枯燥乏味的程序代碼。這就要求教師必須及時、準確地評測學生的程序,及時做出信息反饋。在授課人數(shù)較少時,教師能夠及時評閱,有時還可在課上抽出時間,針對編程風格問題與學生交流反饋。
但以國內(nèi)現(xiàn)有的情況看,一個教學班的學生一般都在八九十人,老師在批改學生程序代碼格式上耗費很多時間。繁重重復的手工批改工作分散了教師的工作時間,很難保證教學質(zhì)量。為了減輕教師的工作量,使教師把更多精力投入到正常教學環(huán)節(jié)中,我們開始利用Indent進行改革嘗試。
2Indent在編程風格教學中的應用
2.1Indent簡介
GNU Indent是一個開源軟件。1976年,美國伊利諾伊大學開發(fā)出Indent的第一個版本,隨后加利福尼亞大學(1980)、Sun公司(1985)、自由軟件基金會(1989,1992, 1993,1994,1995, 1996)和Joseph Arceneaux(1995, 1996)、Carlo Wood(1999)、David Ingamells(2001)等相繼開發(fā)了Indent的后續(xù)版本,目前Indent的最新版本是2.2.10[4]。
Indent的主要功能是通過插入和刪除空格對C語言代碼進行格式化,使代碼更容易閱讀,并能夠使C語言代碼從一種風格轉(zhuǎn)化為另一種風格。學生通過使用Indent軟件,可以知道什么是規(guī)范的代碼格式以及如何應用Indent軟件對程序代碼進行格式化。
2.2Indent的功能
(1) 空行??招心軌蛟鰪姵绦虻目勺x性,是展現(xiàn)程序結(jié)構(gòu)的主要手段,Indent提供了很多使用空行的選項,通過空行將相關語句各自劃分成段落,分開各子程序,聲明、突出注釋部分。
(2) 縮進??s進可以顯示程序的邏輯結(jié)構(gòu),邏輯上隸屬某語句的語句都應該縮進,能提高程序員的理解能力。有篇名為《Program Indentation and Comprehensibility》(《程序縮進和可理解性》)的文章報道說,多項研究發(fā)現(xiàn)縮進和理解力的提高有關。當程序有2~4個空格的縮進時,受試者對程序的理解分數(shù)會比對毫無縮進的程序高出20%~40%[5]。Indent關于縮進的選項有“-in”,其中n是指定縮進的字符個數(shù),除“-in”外還有很多其他的縮進選項。
(3) 長行拆分。一條常見但有點過時的規(guī)則,就是語句長度應限制在80個字符以內(nèi),理由如下:
超過80個字符的語句很難讀
80個字符的限制不鼓勵深度嵌套
長于80字符的語句行在8.5×11英寸規(guī)格紙張上放不下,特別是當一面打印兩欄代碼時
現(xiàn)在有了大幅面的顯示器、窄的字體和橫向打印模式,80個字符/行的限制日益顯得武斷了。一行上有90個字符常比為避免超出80個字符將其拆分為2行要容易讀得多。通過現(xiàn)代技術(shù)的幫助,偶爾超過80個字符也沒多大關系[5]。
Indent通過選項“-ln”來指定代碼行的最大長度。當現(xiàn)有的程序代碼長度超過指定的最大行長度時,Indent可以通過“-bbo”選項指定在邏輯運算符之前進行換行等。
(4) 多種風格選擇。Indent有3種常用的風格,分別是GNU風格、Kernighan Ritchie風格和Berkeley風格。默認的風格是GNU風格,在程序設計學習初級階段,我們提倡學生使用默認的GNU風格。等學生對編程風格的要素有了一定了解時,再建議學生采用其他兩種風格對代碼進行格式化,使學生掌握不同編程風格的特點。
3Indent在編程風格教學中的優(yōu)勢
傳統(tǒng)教學方式是教師在講,學生被動接受,而學生使用Indent軟件進行編程風格學習的過程是有趣的而不是乏味的。學生提交給Indent一段格式非常差的代碼,Indent馬上就會輸出經(jīng)過格式化的規(guī)范代碼,學生能夠體驗一種“成功”的喜悅,并積極主動地學習。Indent的格式選項一共有80多個,學生都有好奇的心理,想看看不同的選項及選項組合會輸出什么風格的程序代碼,不知不覺中對編程風格的興趣提高了,而且加深了對編程風格知識點的理解。實踐證明,Indent軟件確實能夠促進學生自主地學習編程風格,有助于培養(yǎng)學生良好的編程習慣。
教師從繁重的重復性批改作業(yè)的工作中解脫出來,把更多的精力投入到教學中,教學效果顯著提高。Indent猶如精力充沛的兢兢業(yè)業(yè)的“助教”一樣,協(xié)助教師指導學生學會規(guī)范的編程風格。
4Indent在編程風格教學中的不足
對于程序設計初學者來說,編程風格包含的內(nèi)容至少有Layout、Naming、Comment、Coding 四個方面的要求。Layout關注合理的布局及縮進、空格的運用等;Naming要求學生必須給變量、函數(shù)等以有意義的命名;Comment要求無論是大程序還是小程序,都要寫足夠的注釋去描述程序的功能;而Coding則要求學生注重一些控制語句的使用規(guī)范[6]。Indent軟件只能解決編程風格中的縮進、空行和空格等代碼布局問題,對于其他編程風格問題,還需要教師結(jié)合其
他方法進行教學。
5結(jié)語
我們在編程風格教學中引入Indent的初衷是減輕教師教學的負擔,讓教師有更多時間專注于編程思路、邏輯、軟件設計等方面的教學。Indent是教師的助手,能及時指導學生,但它不能替代傳統(tǒng)教學,如教師的課堂講解,有關編程風格的基礎內(nèi)容,仍然需要教師在課堂上簡明扼要地講解[2]。
只有把編程風格的內(nèi)容納入到考試范圍,在考試中加入編程風格內(nèi)容的考核,才能引起學生對編程風格的足夠重視,更好地促進學生良好編程習慣的養(yǎng)成。
參考文獻:
[1] Kernighan B W, Pike R. 程序設計實踐[M]. 裘宗燕,譯. 北京:機械工業(yè)出版社,2000.
[2] Kirsti Ala-Mutka, Toni Uimonen, Hannu-Matti Jauml;rvinen. Supporting Students in C++ Programming Courses with Automatic Program Style Assessment[J/OL].Journal of Information Technology Education,2004(3):245-262 [2009-10-25]. http://informingscience.org/jite/documents/Vol3/v3p245-262-135.pdf.
[3] 丁紅勝,田金琴. C語言教學中學生編程風格的培養(yǎng)[J]. 計算機時代,2006(10):65-67.
[4] Indent: Indent and Format C Program Source[EB/OL]. [2009-10-25]. http://www.gnu.org/software/indent/manual/ indent.html.
[5] Steve M. 代碼大全[M]. 金戈,湯凌,陳碩,等譯. 2版. 北京:電子工業(yè)出版社,2006.
[6] 王延青,王建政,張麗杰,等. 程序設計語言教學中編碼標準的定量評測框架[J]. 合肥工業(yè)大學學報:社會科學版,2008(6): 67-71.
Application of Indent Software in Programming Style Teaching
ZHANG Liang-de, GE Xiang-wei, LIU Dong-sheng
(College of Computer and Information Science, Inner Mongolia Normal University, Huhhot 010022, China)
Abstract: Programming courses should pay attention to cultivate students’ good programming style and habits, but now programming style teaching is not optimistic. A teacher teaches more than one hundred students and it is a heavy burden for him to guide and correct students’ programming style in time. In order to relief teachers from heavy workload, we draw experimentally open-source software Indent into teaching. The experiment shows that it can improve the students’ interest in learning programming style and reduce the teachers’ burden as well.
Key words: programming style; Indent; fundamentals of programming; programming habit
(編輯:張玥)