你好,游客 登录
背景:
阅读新闻

艾叔:高效程序设计的七个习惯

[日期:2019-03-31] 来源:  作者:艾叔 [字体: ]

这是艾叔之前发表的一篇教学论文,也是对自身多年工程实践和教学经验的一个总结。

1 引言

程序设计是计算机及相关专业学生所必须掌握的一门重要技能。

然而,从毕业生情况来看,真正能够较好掌握程序设计的学生只是部分,还有相当一部分无法较好地设计程序,甚至不会编程,其中还不乏高分学生。

为何同样的课程设置,同样的教材,甚至同一个教师,结果却有如此差异?

我们从学生个体差异的角度进行分析,认为:智力不是上述问题的关键因素,因为对于同一所大学的学生来说,除去特别突出者,绝大部分在同���水平,而每个学生在程序设计学习和实践过程中的个人习惯,才是导致上述现象的关键因素。

为此,我们根据自身在程序设计开发和教学方面的经验,总结出高效程序设计的七个习惯,将这些习惯的养成贯穿到人才培养的各个方面。

2 高效程序设计的七个习惯

高效程序设计的七个习惯分别是:

1)先找轮子

2)从最简出发;

3)让程序先跑起来;

4)友好编码;

5)即时验证;

6)无损迭代;

7)定期备份。具体描述如下。

2.1  先找轮子

在进行程序设计之前,不要急于从零开始,而是要尽可能地找到与设计目标相对应的实现,我们把它称之为轮子

在互联网上,程序设计的资源非常丰富,尤其是随着开源运动的蓬勃发展,小到一个简单的hello world程序,大到操作系统,都有开源实现。对于初学者来说,先找到轮子,就可以站在别人的肩膀上,快速进入某个专业领域。

比如说,我们要设计一个分布式文件系统,如果从零开始,将会非常复杂,而如果我们能找到MFS(一个开源的分布式文件系统,相对简单),就可以从使用、设计、到编码实现,全方位地学习和借鉴,这样会大大节省时间,并且迅速累积经验;

又比如,我们需要用到JPEG图片的编码和解压功能,如果从零开始实现,不但需要掌握JPEG算法原理,而且还要考虑实现的效率,在时间和可行性上是不可接受的,而如果我们能找到JPEG的开源实现,然后在此基础上,进行修改,适配我们的需求,就会大大节省时间。

2.2  从最简出发

设计一个复杂程序的时候,不要试图一次把实现整个程序,而是可以先实现其最核心的功能,然后进行多次迭代,形成最终的版本。

程序从本质上讲,就是逻辑的组合,一次实现这些复杂的逻辑,对于开发者来说,可能无法把控,有时即便实现了,稳定性也无法保证。

在实现之前,可以先对这些逻辑进行分解,确定哪些是核心的,是不可再分的,哪些是可以再后续进行组合的,按照先核心,后外围的顺序进行开发。

比如,我们要实现一个聊天软件,那么这里最核心的就是网络通信的功能,因此,可以先实现Server端和Client端的网络通信,即便只是通一个字节也是可以,然后在此基础上,再来定义消息,完善功能。

又比如用硬件语言实现CPU时,如果先对指令进行分类,然后实现代表指令,构建数据通路,后续的指令就可以线性添加,不需要改变数据通路和状态机,只需要改变控制信号,这样整个CPU的复杂逻辑就可以实现。

2.3  让程序先跑起来

无论是设计程序还是学习代码时,让程序跑起来都是第一要义。

如果是设计程序,一开始就让程序跑起来,可以及时对程序逻辑进行验证,从而避免错误的累积;

如果是学习代码,让程序跑起来,可以直接观察程序的运行状态和输出结果,必要时还可以进行调试,这样可以快速理解代码的含义和设计机制。

2.4  友好编码

友好编码是指我们编写代码时,要遵守一定的编码规范。

具体来说,包括:文件、目录、变量、函数的命名规则,代码缩进与对齐,注释风格等。

不同的语言有不同的规定,例如:C语言的代码风格和JAVA语言就有所区别;

即使是同一种语言,也可能有多种风格,尽量选取大多数人所遵循的风格,例如:在Linux平台下设计C程序,我们就可以参照内核代码或者平台软件,如GCC的代码风格。

2.5  即时验证

即时验证是指对代码进行一定修改后,要及时验证,有效防止错误的累积。

由于修改前的代码已经过验证,因此,修改后如果出现错误,可以根据提示信息,比照修改的代码部分,迅速定位。即时验证包括:语法验证和语义验证,

一般来说,一旦作出代码修改,就应立即进行语法验证,即重新编译、链接代码;而一旦完成某个逻辑功能的修改,就应立即进行语义验证,运行相应的测试用例。

2.6  无损迭代

无损迭代是指我们在扩展功能时,要注意新增的代码,不能影响原有代码的稳定性。

在具体实施中,功能的增加尽可能采用代码追加的方式实现,而不是重构代码,这样虽然可能会导致代码冗余,但是程序的原有功能没有改变,新增功能即使有问题,也可以迅速定位。

2.7  定期备份

定期备份的重要性不言而喻,最重要的是要形成习惯,长期坚持。

此外,备份的对象,不仅仅包括代码,也应包括开发环境等;备份的存储对象,不仅仅在本机,也可实时备份到移动设备,或者网络;

为了方便进行版本管理,可以利用git等优秀的工具;同时,对于非常重要的代码和文件,除了git进行备份外,也还应进行完全备份。

上述习惯对高效程序设计有非常重要的作用,具体体现在:

1)加速程序开发

先找到轮子可以让程序开发基于已有的实现,而不需要从零开始编码;

2)减少出错

让程序先跑起来可以检查程序的语法错误,同时可以动态调试程序,减少出错;

即时验证可以立即验证程序的语法和语义错误,将错误限定最近一次修改中,便于快速定位错误;

3)确保复杂程序的可靠性

从最简出发使得程序的逻辑遵循从简单到复杂的顺序,确保每个简单程序的正确性,从而确保最终复杂程序的可靠性;

无损迭代可以使得程序在添加新功能后,原有功能的可靠性不受影响;

4)提升协作效率

友好编码可以使得程序的编码遵循统一风格,提升团队协作开发的效率;

5)确保开发进程的可靠性

定期备份可以确保整个发开进行进行中所需资源的可靠,避免资源丢失后的重复劳动。

3 实践结果

近年来,随机选取22人参加高效程序习惯的养成实践,结果表明:学员掌握程序设计技能的时间大幅缩短,且程序设计的水平相对普通学员普遍较高。

参与实践学员中,共获得毕业设计良好以上有20人次,获得全国软件大赛一等奖以上有9人次二等奖有7人次,以及多项大学程序竞赛奖。

2013年,我指导的本科生,作为江苏高校唯一代表,获得第三届中科杯全国软件大赛一等奖,一等奖覆盖率不到千分之三,为当时我校参赛取得的最好成绩;

2014年,我指导的本科生,获得第五届蓝桥杯全国软件大赛团队赛选拔赛一等奖,一等奖覆盖率不到百分之五,为当时我校参赛以来的最好成绩;

2015年,我指导的本科生,作为我校的唯一代表,参加首届全国高校云计算应用创新大赛,面对全国14985211大学的博士、硕士团队的竞争,沉着应战,获得大赛最高奖项-特等奖,新华日报,网易新闻等对此进行了报道。

4 结语

实践结果表明,高效程序开发的七个习惯可以帮助学生在有限的时间内,快速掌握程序设计技能,快速提升独立解决问题的能力

要实现高效��序设计,仅仅明白上述七个习惯远远不够,重要的是要将它们转化成程序设计中不易改变的行为。因此,研究如何让学员更高效和牢固地养成上述习惯是下一步工作的方向。

Ps:艾叔不是高手,也不是牛人,编程的道路上,走了很多弯路,也踩了很多坑,如果你也和艾叔当年一样,欢迎关注公众号,亦可扫码私信,添加时请务必注明缘由。

收藏 推荐 打印 | 阅读:
相关新闻       编程习惯