论文部分内容阅读
摘要:在传统的C/C++程序设计教学中,大多数教师并不重视C/C++编程风格教学。实践证明,如果学生编写的程序不注重编程风格,将导致程序的可读性非常差,学生毕业后很难进行团队合作开发大型软件。本文提出一个C/C++编程风格子集作为程序设计基础课程编程风格教学改革参考文档。该编程风格教学子集具体内容包括三个部分:代码格式、注释和命名规范。并针对编程风格教学提出了一些教学建议。
关键词:编程风格;编程风格教学;编程风格教学子集;程序设计
【分类号】:G72
1选取编程风格教学子集的必要性
计算机科学与技术委员会的一份报告中指出,要想大幅度提高软件开发的质量和工作效率,需要把已知的行之有效的软件开发实践知识归纳,统一并广为传播 [1]。在软件工程中,大多数程序员认为,应该把软件开发中行之有效的实践知识归纳、编撰成一本开发手册。
在大学程序设计课程中,教师应该引入编程实践非常典型的,完成一个大型软件开发项目所必须的编程风格,可以培养学生良好的编程习惯[6]。
目前专门介绍编程风格的书籍种类繁多并且内容非常复杂,是针对软件开发人员和程序员而编写的,对于程序设计初学者来说这些编程风格很难理解并采纳。
经过多年的程序设计教学和毕业生对程序设计课程教学的反馈信息,我们认为,应该在程序设计课程教学中,针对程序设计初学者的特点,提出一个适合用在“程序设计基础”课程中的编程风格教学子集是非常重要的。这个编程风格教学子集在不影响学生学习程序设计语言语法和算法的前提下,作为学生编程风格的基本指导原则。通过这样的一个教学过程可以使学生在初学程序设计时就关注编程风格问题,有助于培养学生良好的编程习惯。
2编程风格教学子集
2.1代码格式
代码格式包括缩进、对齐、空行和空格等的使用。代码格式可以准确表现程序的逻辑结构,提高程序的可读性。
1.缩进
(1)缩进风格采用“悬挂式”(Allman)风格[2]
缩进形式可以显示程序的逻辑结构,增强程序的可理解性。完全没有缩进和过分地使用缩进都会影响程序的可理解性。美国马里兰大学(University of Maryland)对Pascal程序做了一个测试,分别使用四种缩进层次(0,2,4,6个空格)进行调查。结果显示2-4个空格的缩进是最理想的缩进层次[3]。
由于学生编写的程序规模相对比较小,为了清晰地显示程序的逻辑结构,我们建议学生使用4个空格的缩进风格即“悬挂式”(Allman)风格。“悬挂式”风格把“{”和“}”单独放在一行上,并且缩进尺度相同,括号内的程序语句缩进4个空格。
“悬挂式”风格的优点是:
格式清晰整洁,程序逻辑结构清晰
“{”和“}”上下对齐,视觉上很容易匹配,更易于初学者调试程序。
(2)缩进只使用空格键,不使用TAB键[4]。
因为不同的编辑器对TAB键的默认设置是不同的,当使用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,因此我们建议学生不要使用TAB键进行缩进。
2.对齐[5]
3.空行[5]
空行起着分隔程序段落的作用,空行可以将程序的相关语句各自划分成段落,分开各子程序、突出注释部分。空行得体将使程序的布局更加清晰。
(1)每个函数定义结束之后都要加空行。
(2)在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。如下示例说明了函数内部的空行。
4.一行代码只做一件事情,如只定义一个变量,或只写一条语句。
5.长行拆分
代码行最大长度宜控制在80个字符以内。
2.2注释
注释是帮助程序读者理解程序的一种手段。注释的原则是有助于对程序的阅读理解,注释语言必须准确、易懂、简洁。最好的注释是简洁地点明程序的突出特征,帮助别人理解程序。
1.注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。
2.边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
3.注释应当准确、易懂,防止注释有二义性。
4.尽量避免在注释中使用缩写,特别是不常用缩写。
2.3命名规范
命名规范可以传达重要信息,采用良好的命名规范,通过一个字符就可以区分局部变量、类变量和全局变量,大小写字母能精确区别类型、常量和变量。
1.标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue 写成NowValue。
2.标识符的长度应当符合“最小长度和最大信息量”原则。
太短的名字无法传达足够的信息,例如x1和x2这样的名字所存在的问题是,即使我们知道了x代表什么,但却很难知道x1和x2之间的关系。一般来说,长名字能更好地表达含义,但不是名字越长约好,太长的名字很难写,同时也会使程序的视觉结构变得模糊不清,例如变量名maxval 就比maxValueUntilOverflow好用。
3.变量的名字应当使用“名词”或者“形容词+名词”。
例如:float value; float oldValue;
4.准确使用对仗词。
通过应用命名规则来提高对仗词的使用的一致性,从而提高其可读性。比如像max/min这样的一组用词非常容易理解和记忆。而那些与常用语言相去甚远的词则很难记忆,甚至会产生歧义。 5.程序中不要出现仅靠大小写区分的相似的标识符。
3编程风格教学建议
1.采用讲座的形式开展编程风格教学
由于程序设计课程课时所限,教师没有太多的时间讲述关于编程风格的知识,但是讲座既不占用太多的教学时间又可以让学生了解编程风格的重要性和基本规则。讲座的次数可以按照教学进度分时间段进行安排。在学生刚刚开始学习程序设计时,可以先从宏观方面进行讲解,比如编程风格的重要性,编程风格的注意事项,尽量讲一些最基本、易于初学者理解的编程风格要求。等程序设计课程开设中后期时,学生有了一定的编程基础和经验之后,进行一些深入的讲解,比如标示符的命名、注释的使用,此时对于一些编程风格的基本要求要细化。
最后学生进行课程设计时,再给学生讲解关于编程风格的高级规则。此时学生已经有了较为丰富的编程经验,,此时讲解一些编程风格的高级规则,对于培养学生良好的编程习惯和编写高质量的程序具有重要的意义。
2.重视编程风格练习
教师强调了了编程风格的基本要求之后,最关键的环节就是学生必须自己动手编写程序,并且在编写程序的过程中不断贯彻编程风格的基本要求,并进行检测学生遵守编程风格的程度。
3.进行适当的讨论
学生学习并了解编程风格的基本知识后,具备了一定的编程基础,下一个环节就是讨论。学生在编写程序的过程中,会对编程风格的要求提出自己的想法和看法,此时教师与学生可以进行适当的讨论。例如:缩进的空格数究竟是4个还是2个好,还是其他格式。先让学生提出自己的看法,然后教师再进行引导和总结。当程序代码规模较小时,缩进4个空格更有利于显示程序的逻辑结构。但是当程序规模增大时,随着嵌套层次的增多,此时缩进2个空格相对更合适一些。然后教师要强调,学习编程风格的目的不是要求学生记住一些死规则,而是要活学活用。编程风格的精髓是在编写程序时要始终坚持一种风格,同时在进行团队合作时,团队的所有成员要遵循统一的编程风格。有约定比约定某个细节更重要[1],关键是通过编程风格的学习养成一种良好的编程习惯。
4、教师要起到表率作用[6]
程序设计基础是计算机专业学生进入大学之后开设的第一门程序设计课程,对于学生来说,教师在他们的心目中就是“榜样”,教师在讲课、辅导时所表现出来的代码格式的编排、标示符的命名等一些细节问题都会潜移默化地影响学生。所以教师在教学过程中要自始至终贯穿良好的编程风格,在编程风格方面起到表率作用。
5、选好教材
现有的程序设计课程教材虽然很多,但能够专门安排一定的版面阐述编程风格内容的却很少。甚至有些教材不但没有编程风格的章节内容,就连书中程序范例的编程风格也不统一。学生在学习程序设计时,模仿的程序范例主要有两个来源,一个是教师,另外一个就是教材。而且更为普遍的是模仿教材中的程序范例,如果教材中的程序没有良好的编程风格,学生就会不知不觉模仿教材中 “随意的编程风格”,久而久之就养成了不良的编程习惯。
程序设计课程教师在选择教材时,不但要考虑程序设计的技术、问题分析与算法实现,还要考虑该书是否具有良好的编程风格。目前很多国内程序设计课程教材的编者已经逐渐开始重视编程风格的重要性,在教材中特别安排一些章节阐述编程风格的内容,我们可以选用这些优秀的应该教材。
4小结
编程风格的内容远不止如此,以上所述只是编程风格的最基本的内容,我们把这个子集作为程序设计基础课程改革的编程风格教学参考文档,这只是只是一个经验的子集,还需我们广大教师结合教学实际不断的进行调整和验证。
参考文献
[1]Steve McConnell.代码大全(第2版) [M] .金戈,汤凌,陈硕等译. 北京:电子工业出版社,2006:729.
[2]Pete Goodliffe 著. 编程匠艺 [M] .韩江,陈玉等译. 北京:电子工业出版社,2008:27.
[3]Richard J. Miara,Joyce A. Musselman, et al. Program Indentation and Comprehensibility [EB/OL]. http://portal.acm.org/citation.cfm?id=358437.2010-2-16:
[4]Justus Piater. A Guide to Coding Style [EB/OL]. http://www.montefiore.ulg.ac.be/~piater/Cours/Coding-Style/Coding-Style.pdf. 2010-2-16:
[5]林锐,韩永泉.高质量程序设计指南-C++/C语言[M]. 北京:电子工业出版社,2008: 179.
[6]罗新星,高阳. 程序设计风格及其培养[J]. 现代大学教育, 1993(2):24-28.
作者简介:张良德(1978-),男,内蒙古兴安盟人,讲师,硕士,研究方向:计算机教育。
关键词:编程风格;编程风格教学;编程风格教学子集;程序设计
【分类号】:G72
1选取编程风格教学子集的必要性
计算机科学与技术委员会的一份报告中指出,要想大幅度提高软件开发的质量和工作效率,需要把已知的行之有效的软件开发实践知识归纳,统一并广为传播 [1]。在软件工程中,大多数程序员认为,应该把软件开发中行之有效的实践知识归纳、编撰成一本开发手册。
在大学程序设计课程中,教师应该引入编程实践非常典型的,完成一个大型软件开发项目所必须的编程风格,可以培养学生良好的编程习惯[6]。
目前专门介绍编程风格的书籍种类繁多并且内容非常复杂,是针对软件开发人员和程序员而编写的,对于程序设计初学者来说这些编程风格很难理解并采纳。
经过多年的程序设计教学和毕业生对程序设计课程教学的反馈信息,我们认为,应该在程序设计课程教学中,针对程序设计初学者的特点,提出一个适合用在“程序设计基础”课程中的编程风格教学子集是非常重要的。这个编程风格教学子集在不影响学生学习程序设计语言语法和算法的前提下,作为学生编程风格的基本指导原则。通过这样的一个教学过程可以使学生在初学程序设计时就关注编程风格问题,有助于培养学生良好的编程习惯。
2编程风格教学子集
2.1代码格式
代码格式包括缩进、对齐、空行和空格等的使用。代码格式可以准确表现程序的逻辑结构,提高程序的可读性。
1.缩进
(1)缩进风格采用“悬挂式”(Allman)风格[2]
缩进形式可以显示程序的逻辑结构,增强程序的可理解性。完全没有缩进和过分地使用缩进都会影响程序的可理解性。美国马里兰大学(University of Maryland)对Pascal程序做了一个测试,分别使用四种缩进层次(0,2,4,6个空格)进行调查。结果显示2-4个空格的缩进是最理想的缩进层次[3]。
由于学生编写的程序规模相对比较小,为了清晰地显示程序的逻辑结构,我们建议学生使用4个空格的缩进风格即“悬挂式”(Allman)风格。“悬挂式”风格把“{”和“}”单独放在一行上,并且缩进尺度相同,括号内的程序语句缩进4个空格。
“悬挂式”风格的优点是:
格式清晰整洁,程序逻辑结构清晰
“{”和“}”上下对齐,视觉上很容易匹配,更易于初学者调试程序。
(2)缩进只使用空格键,不使用TAB键[4]。
因为不同的编辑器对TAB键的默认设置是不同的,当使用不同的编辑器阅读程序时,因TAB键所设置的空格数目不同而造成程序布局不整齐,因此我们建议学生不要使用TAB键进行缩进。
2.对齐[5]
3.空行[5]
空行起着分隔程序段落的作用,空行可以将程序的相关语句各自划分成段落,分开各子程序、突出注释部分。空行得体将使程序的布局更加清晰。
(1)每个函数定义结束之后都要加空行。
(2)在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。如下示例说明了函数内部的空行。
4.一行代码只做一件事情,如只定义一个变量,或只写一条语句。
5.长行拆分
代码行最大长度宜控制在80个字符以内。
2.2注释
注释是帮助程序读者理解程序的一种手段。注释的原则是有助于对程序的阅读理解,注释语言必须准确、易懂、简洁。最好的注释是简洁地点明程序的突出特征,帮助别人理解程序。
1.注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。
2.边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
3.注释应当准确、易懂,防止注释有二义性。
4.尽量避免在注释中使用缩写,特别是不常用缩写。
2.3命名规范
命名规范可以传达重要信息,采用良好的命名规范,通过一个字符就可以区分局部变量、类变量和全局变量,大小写字母能精确区别类型、常量和变量。
1.标识符应当直观且可以拼读,可望文知意,不必进行“解码”。
标识符最好采用英文单词或其组合,便于记忆和阅读。切忌使用汉语拼音来命名。程序中的英文单词一般不会太复杂,用词应当准确。例如不要把CurrentValue 写成NowValue。
2.标识符的长度应当符合“最小长度和最大信息量”原则。
太短的名字无法传达足够的信息,例如x1和x2这样的名字所存在的问题是,即使我们知道了x代表什么,但却很难知道x1和x2之间的关系。一般来说,长名字能更好地表达含义,但不是名字越长约好,太长的名字很难写,同时也会使程序的视觉结构变得模糊不清,例如变量名maxval 就比maxValueUntilOverflow好用。
3.变量的名字应当使用“名词”或者“形容词+名词”。
例如:float value; float oldValue;
4.准确使用对仗词。
通过应用命名规则来提高对仗词的使用的一致性,从而提高其可读性。比如像max/min这样的一组用词非常容易理解和记忆。而那些与常用语言相去甚远的词则很难记忆,甚至会产生歧义。 5.程序中不要出现仅靠大小写区分的相似的标识符。
3编程风格教学建议
1.采用讲座的形式开展编程风格教学
由于程序设计课程课时所限,教师没有太多的时间讲述关于编程风格的知识,但是讲座既不占用太多的教学时间又可以让学生了解编程风格的重要性和基本规则。讲座的次数可以按照教学进度分时间段进行安排。在学生刚刚开始学习程序设计时,可以先从宏观方面进行讲解,比如编程风格的重要性,编程风格的注意事项,尽量讲一些最基本、易于初学者理解的编程风格要求。等程序设计课程开设中后期时,学生有了一定的编程基础和经验之后,进行一些深入的讲解,比如标示符的命名、注释的使用,此时对于一些编程风格的基本要求要细化。
最后学生进行课程设计时,再给学生讲解关于编程风格的高级规则。此时学生已经有了较为丰富的编程经验,,此时讲解一些编程风格的高级规则,对于培养学生良好的编程习惯和编写高质量的程序具有重要的意义。
2.重视编程风格练习
教师强调了了编程风格的基本要求之后,最关键的环节就是学生必须自己动手编写程序,并且在编写程序的过程中不断贯彻编程风格的基本要求,并进行检测学生遵守编程风格的程度。
3.进行适当的讨论
学生学习并了解编程风格的基本知识后,具备了一定的编程基础,下一个环节就是讨论。学生在编写程序的过程中,会对编程风格的要求提出自己的想法和看法,此时教师与学生可以进行适当的讨论。例如:缩进的空格数究竟是4个还是2个好,还是其他格式。先让学生提出自己的看法,然后教师再进行引导和总结。当程序代码规模较小时,缩进4个空格更有利于显示程序的逻辑结构。但是当程序规模增大时,随着嵌套层次的增多,此时缩进2个空格相对更合适一些。然后教师要强调,学习编程风格的目的不是要求学生记住一些死规则,而是要活学活用。编程风格的精髓是在编写程序时要始终坚持一种风格,同时在进行团队合作时,团队的所有成员要遵循统一的编程风格。有约定比约定某个细节更重要[1],关键是通过编程风格的学习养成一种良好的编程习惯。
4、教师要起到表率作用[6]
程序设计基础是计算机专业学生进入大学之后开设的第一门程序设计课程,对于学生来说,教师在他们的心目中就是“榜样”,教师在讲课、辅导时所表现出来的代码格式的编排、标示符的命名等一些细节问题都会潜移默化地影响学生。所以教师在教学过程中要自始至终贯穿良好的编程风格,在编程风格方面起到表率作用。
5、选好教材
现有的程序设计课程教材虽然很多,但能够专门安排一定的版面阐述编程风格内容的却很少。甚至有些教材不但没有编程风格的章节内容,就连书中程序范例的编程风格也不统一。学生在学习程序设计时,模仿的程序范例主要有两个来源,一个是教师,另外一个就是教材。而且更为普遍的是模仿教材中的程序范例,如果教材中的程序没有良好的编程风格,学生就会不知不觉模仿教材中 “随意的编程风格”,久而久之就养成了不良的编程习惯。
程序设计课程教师在选择教材时,不但要考虑程序设计的技术、问题分析与算法实现,还要考虑该书是否具有良好的编程风格。目前很多国内程序设计课程教材的编者已经逐渐开始重视编程风格的重要性,在教材中特别安排一些章节阐述编程风格的内容,我们可以选用这些优秀的应该教材。
4小结
编程风格的内容远不止如此,以上所述只是编程风格的最基本的内容,我们把这个子集作为程序设计基础课程改革的编程风格教学参考文档,这只是只是一个经验的子集,还需我们广大教师结合教学实际不断的进行调整和验证。
参考文献
[1]Steve McConnell.代码大全(第2版) [M] .金戈,汤凌,陈硕等译. 北京:电子工业出版社,2006:729.
[2]Pete Goodliffe 著. 编程匠艺 [M] .韩江,陈玉等译. 北京:电子工业出版社,2008:27.
[3]Richard J. Miara,Joyce A. Musselman, et al. Program Indentation and Comprehensibility [EB/OL]. http://portal.acm.org/citation.cfm?id=358437.2010-2-16:
[4]Justus Piater. A Guide to Coding Style [EB/OL]. http://www.montefiore.ulg.ac.be/~piater/Cours/Coding-Style/Coding-Style.pdf. 2010-2-16:
[5]林锐,韩永泉.高质量程序设计指南-C++/C语言[M]. 北京:电子工业出版社,2008: 179.
[6]罗新星,高阳. 程序设计风格及其培养[J]. 现代大学教育, 1993(2):24-28.
作者简介:张良德(1978-),男,内蒙古兴安盟人,讲师,硕士,研究方向:计算机教育。