个人作业-Week3:代码复审
Part1成长&未来
(写了不少,又删了些)
-
三流的竞赛生
初一开始真正接触计算机,第一个上手的是PASCAL语言。那时候是参加了学校的选拔,据说过了选拔可以免费参加编程培训,凭着好奇心就报名了,而且很幸运地通过了(大概先上四五节课,然后有一个考试,考试的前多少名可以留下来,其他人就不继续培训了,参加的人绝大多数都是零基础)。但是当时并不知道这个培训的目的是什么(很久之后,大概高一才知道竞赛的体系)。一开始就当玩,后来老师逐渐将一些算法,也跟着学,在算法的基础部分,学的还是很快的,当时在培训的30人里面也能排的很前。但是竞赛的体制是严格的,虽说初中的时候拿过几个没什么用的奖,但是事实上到初中后期在进阶的算法学习上是明显不够前面四五个人学得快。但是至此我拿的奖项等级还是和学校顶尖的同学一样的,原因是比赛太简单。到了初三的时候,参加了第一次真正有难度的比赛,虽说和前面五个人在普及组都是拿一等奖,但是那次比赛就是我全面爆炸(第一天3分第二天爆零),别人却能拿三等奖(作为初中生和高中生一同参赛而且拿三等奖)。然后家里人当时目光也是不长远,也不知道竞赛体系,然后叫我别花太多时间搞编程,多认真学习考好中考。我自己也不知道,年纪还小啥都不会,最终面对着本校的高中直升签约,我选择了放弃,通过中考去了另一所高中——理论上是比原来的初中直升的高中更好的高中,可惜的是在信息学竞赛上却不够强。高中呢,由于老师放羊式管理,自己学也不是很上心,最终省赛还是离省队的距离差很远,这也是理所当然的。然而之前初中一起学的那前五个,直升了高中,有专门的信息学老师辅导,人也聪明,基本都进了省队,现在至少都是复旦以上的大学。当时知道了这个竞赛是可以上好大学的,心里还是觉得选择错了,但是这已经没有办法回头了。
高中没拿到什么好奖,高考考来了北航,然后就是现在的事了。现在在打ACM,也算是想弥补初三的另一个选择吧(然而还是弱鸡铜牌)。听说现在在复旦北大等校的那几个初中同学,第一次打ACM区域赛就金牌,打了一年就退役搞科研去了。似乎最终还是摆脱不了三流竞赛生的命运,或许这就是人生吧。
-
什么都真的只是会一点
高中没有全心全意搞竞赛,当然也没有闲着,就不务正业地乱搞。在初二时老师就介绍过Pascal的GUI(Delphi),自己在初中也搞过一些弱鸡工具程序。高一第一次加入社团,部长要我学HTML,买了本书,看的很累,最后还是把书放一边,自己乱搞,然而却比看书学的还快。过了一个学期,基本能搞出一个功能上没啥问题的静态页(用来放一个学生会部门介绍信息)。也不会用模板,自己写丑的很。当时觉得这个DIV/CSS就是乱搞的,由于竞赛情结(特别是得知竞赛能自招保送清北),又不是很想搞这些有的没的,高二半年又回去竞赛了。竞赛跪了以后,当上了部长,开始搞动态网页(ASP),当时还是用的IIS,设置都是图形的,没有命令行,服务器是网络中心老师帮配置的,我只管用竞赛的思路写ASP代码。最终搞出来一个义卖活动的在线平台,可以查看、预定商品等。也就是模仿啥淘宝功能做了一个简版。整个代码没有像样的结构,什么MVC更是听都没听过。倒是Delphi那边开始了面向对象编程(当时也不知道啥面向对象,反正就玩着玩着发现了一个新的套路,东西都是网上查的)。高中三年最后结果就是啥都会一点,没有一个精通的。
然后就是大学,开始转C/C++,开始倒腾Linux服务器,又学点Java/Android,Python啥的,也接触过一点点的Perl,反正更加是啥都知道一点点。
于是现在就成了这个半吊子的样子,你说啥VC++深层实现原理,什么程序生命周期,什么JVM原理,都不了解,依旧吃着竞赛的基本功乱搞。不去看深层的东西,想到就开始做,不会就上网查,不成体系,需要什么才即时查。但是有些东西搞出来好像还想模像样,但是我知道这东西都是上不了台面的。最后依然没能放下竞赛情结,现在还在备战ACM。
相比之下,看到那些一心竞赛的神牛,算法贼六,进G推软;反过来看一些不竞赛的人,在工程、应用方面了解很深入,能搞起编译器,做起嵌入式;抑或是钻研学术的人,在搞神经网络,图形识别等,自己又好像啥都追不上了……
-
冷静一下
讲道理自己就不是什么很聪明的人,数学不行,静不下心来,也不够细心。目前做了的一点微小的工作也就是几年下来自然而然的小成果,算不上有什么进步。还是该老老实实找个稳定的方向,投入进去,不要揽太多事,钻研钻研。争取在大学结束前搞一个能上得了台面的东西吧,虽然还没决定好,不过等ACM搞完了,时间空出来的话,应该也是能搞起的。
Part2代码复审
复审的是 杨子琛 同学的代码
General
- Does the code work? Does it perform its intended function, the logic is correct etc. ——Almost right, just some small bugs.
FILE: test.bat
echo testing... > ans.txt
Project1.exe -b 2号航站楼 3号航站楼 >> ans.txt
Project1.exe -c 2号航站楼 3号航站楼 >> ans.txt
Project1.exe -b 大望路 高碑店 >> ans.txt
Project1.exe -c 大望路 高碑店 >> ans.txt
Project1.exe -b 高碑店 大望路 >> ans.txt
Project1.exe -c 高碑店 大望路 >> ans.txt
Project1.exe -b 俸伯 苏庄 >> ans.txt
Project1.exe -c 俸伯 苏庄 >> ans.txt
Project1.exe -b 知春路 三元桥 >> ans.txt
Project1.exe -c 知春路 三元桥 >> ans.txt
All are right except the 9th command
Project1.exe -b 知春路 三元桥 >> ans.txt
10
知春路
西土城
牡丹园
健德门
北土城
安贞门
惠新西街南口
芍药居
太阳宫
三元桥
Project1.exe -c 知春路 三元桥 >> ans.txt
10
知春路
西土城
牡丹园
健德门
北土城
安贞门
惠新西街南口
芍药居
太阳宫
三元桥
It should be:
Project1.exe -b 知春路 三元桥 >> ans.txt
9
知春路
大钟寺
西直门换乘2号线
积水潭
鼓楼大街
安定门
雍和宫
东直门换乘机场线
三元桥
Project1.exe -c 知春路 三元桥 >> ans.txt
10
知春路
西土城
牡丹园
健德门
北土城
安贞门
惠新西街南口
芍药居
太阳宫
三元桥
- Is all the code easily understood? ——Yes
- Does it conform to your agreed coding conventions? These will usually cover location of braces, variable and function names, line length, indentations, formatting, and comments. ——Not bad
- Is there any redundant or duplicate code? ——There are some redundant define, maybe the code is still in debug mode.
- Is the code as modular as possible? ——Not yet
- Can any global variables be replaced? ——Yes, some of them can become local variables
- Is there any commented out code? ——No
- Do loops have a set length and correct termination conditions? ——Yes
- Can any of the code be replaced with library functions? ——No
- Can any logging or debugging code be removed? ——Yes, some of them
Security
- Are all data inputs checked (for the correct type, length, format, and range) and encoded? ——Not all, some haven't been checked the length
- Where third-party utilities are used, are returning errors being caught? ——Yes
- Are output values checked and encoded? ——Yes
- Are invalid parameter values handled? ——Yes
Document
——NONE
Testing
- Is the code testable? i.e. don’t add too many or hide dependencies, unable to initialize objects, test frameworks can use methods etc. ——Yes, testable
- Do tests exist and are they comprehensive? i.e. has at least your agreed on code coverage. ——No test units
- Do unit tests actually test that the code is performing the intended functionality? ——No test units
- Are arrays checked for ‘out-of-bound’ errors? ——Yes
- Could any test code be replaced with the use of an existing API? ——No