代码复审
结对人员: 左少辉12061209 杨昊兰12061202
代码复审--左少辉读杨昊兰
刚开始不理解为什么要换一种编程习惯替代原来一个人独立完成作业,之前一个人不是挺好的。但完成电梯调度作业过程中,对结队编程有了新的认识,其实结对编程坐起来很简单也很有趣,找个水平差的不太远的同学和自己配成一对。只用一台计算机,大家选一个人坐在键盘前面负责输入,另一个人坐在后面口 述。两个人要不断的交流,频率不应低于一分钟一次。整个的设计思想由后面只动口不动手的人主导,而由操键盘的人做实现。由于人的思维速度是快于输入代码的 速度的。那么观看的人可以有空闲的时间做额外的思考,观察代码写的有没有问题,结构有没有问题。不同的人考虑事情有不同的思维和角度,所以对于同一份作业的表达也会不尽相同,此次代码复审正是要求我们结对人员相互对彼此的第一次作业进行解读和建议,这不仅是一次锻炼我们阅读他人代码的机会,更利于我们对同样的问题做出多种不同角度的思考。
其实读别人代码是一件很不情愿的事儿,没有三五遍根本不会读懂,代码写的规范还好说,但是不尽规范的代码表述带给我们更多的是时间和耐心的付出。刚拿到队友代码也是一头雾水,因为正处于锻炼阶段的我们并没有达到契约式的标准,所以代码显得并不是很规整。现实仔细读了一遍,大致了解了代码架构,然后在队友的讲解下,对代码整体和局部有了更加清晰的认识,没有什么程序是绝对完美的,当然我们写的程序也只是张牙舞爪地实现简单的功能而已。很多情况下我发现,自己写的程序,写的时候就已经固定了一种思维方式,无论写完后你读几遍,那种最基本的定式还是不会有多大改变,然后换一个人来看,就会不同许多,就像我读队友代码,就发现了一些和我不一样的风格,不一样的构架设计,不一样的实现方式。下面就浅谈一下此次代码复审我的发现和见解。
一、首先单词测试程序有统一的输入规范和输出规范,这就要求我们的输入输出形式得有一个标准,而程序的输入过程是文件的读取,这就涉及到目录和文件的读。杨昊兰同学在这方面用到了一个searchFile方法实现了文件目录的递归查找以及合法文件格式的匹配,如后缀“.txt”。这是此次作业的一大关键在此我使用的方法和他一样。
二、程序构架方面,如上是杨昊兰同学的代码基本构架
从图片中我们可以清楚地看到他在此次程序设计中用到了类以及类内的方法和类外的函数,层次清晰,构架合理而无冗余,这相比起我的就显得干净许多,所以这启发我在程序设计过程中,首先要根据程序所要实现的功能切实考虑自己的代码构架,这样大的框架确立了再去逐步求精,就会达到更好的视觉和执行效果。
三、对于代码内容不得不提的亮点是他在处理单词统计这一问题上用到了hash表,当时我是由于不会用所以选择了容器模型,但是现在看到他的代码用hash表简单高效实现了这一功能,顿时感觉hash简直是神器,以后在作业中有机会一定用一用。还有就是很多同学包括我,在代码整体设计中都是没有涉及到类的建立和使用,而是简简单单是使用裸的方法,这就没有体现出c++面向对象的优良特性,其实用类实现更能保证代码的结实性以及程序整体的美观。虽然队友的代码也是将类和C语言式函数混为一用,但是这种想法还是值得我们去借鉴和思考。
四、最后要说的一点是他的程序在输出方面够早的很巧妙,单词存储函数用到了指针函数,这是我从来没有用过的,虽然不知道好处在哪儿,不过能用到实践中感觉还是蛮好的。输出时灵巧的使用参数,融会贯通,之前的局部都水到渠成,自然联系。
五、当然是程序总有瑕疵,他的程序给了我许多启发和思考,让我学到了好多,不过在代码构架以及具体实现方面还是有一些小的问题。框架上,他用到了三个存储函数,分别辨识需要查询的单词是几个组合,以至于后来能准确输出结果,不过我想要是能把三个函数做成一个看起来会更好;细节上,代码实现考虑的不够全面,单词统计中没能考虑到所查字符串中出现非字母类异常符号时的判定以及数字在单词中某些位置出现时该如何考虑是否认证。
此次代码复审告一段落,其实代码复审也好,结队编程也好,都是一个相互学习的过程,自己做作业久了,好多陋习都已经成为我们的一部分不断深入表现在程序中,不能及时发现就不能及时纠正并养成新的良好习惯,而结对编程给我们提供了一个思想交流的平台,代码复审给了我们认识自己并自我修正的机会。在不断发现自我完善自我中成长不正是我们所需要的么?
12061209 左少辉