个人作业week3——代码复审
一、感想
某一篇知乎的评论说:小说总是不如真实的人生。呃,确实是这样,感觉各路大神的技术成长史总结起来有这么几个要点。
1.一定要敲样例
2.一定要阅读经典书籍
3.平时自学很重要
4.基础很重要
5.英语很重要
我看到有个人的博客首页写:“希望能用代码改变世界,哪怕只有一点点也可以”。我顿时想到了自己。
高中的时候总以为自己能改变世界,然而大学已经过了一半,现在的我呢?我跟他们比,我大概只有年轻这个优势吧,以及我有很多前人的经验指路。以及现在开始还不晚。
二、计算机之路
关于进了计算机系这个事吧。。
高中的生活真是不想再提了。。想到现在自己这么失败都觉得自己没什么脸提自己的高中生活。。
曾经觉得自己能改变世界,现在只希望自己的加权平均能高一些。。差不多就是这样吧
本来我高中的想法是,我要考上清华,读全国第一的核物理,因为当初看物理书说可控核聚变将在本世纪中叶获得重大突破。。现在看自己真是无知。。
然后我妈一直在研究这个招生这个东西。。后来跟我说:“你要是考不上清华就读北航的计算机吧。”再加上家里一个很厉害的长辈也这么推荐我,然后我就半推半就了。
当时我还是对于核物理很专一的,后来第一次有出轨的意思是因为看了一个TED视频。
视频主要说有一个人完成了一个很厉害的手机,手机有一个很厉害的投影功能。。现在想来我还是不知道怎么实现的。。具体手机的摄像头可以识别用户的手势,然后根据手势利用投影仪完成一些功能比如拍照,显示时钟,播放报纸上新闻的相关视频等等。。我差不多有了一点出轨的意思。。然而那个时候我还是什么都不懂
第二次有出轨的意思是因为读了一篇文章,文章是关于whatsapp创始人的故事,标题叫做“从来没有一个屌丝能够逆袭”
很有意思。。
“我们只看得见5年、50人、190亿美金,却看不见他的梦想、积累、心态,看不见他的意志、气度、热情,看不见此人在职场里长达22年的摸爬滚打。”
然而那个时候我还是什么都不懂。。
后来高考出分了,清华不足,北航有余。然后我就来了北航了。。于是我算是彻底出轨了。。
但是很有意思的是。。我并不了解我的出轨对象,只是凭着当初TED的那个视频和Whatsapp创始人的创业历程,我出轨了(我真是个坏男人。。)。。。。
于是。。这大概也是我大学前两年没有什么长进的原因之一吧。。(主要还是自己懒。。)
前三个学期越来越惨淡。。第四个学期获得了一个小进步,但还是得到了一个不公平的成绩,于是第五个学期,我打算保持这个进步的势头,拿下这门软工课。为我以后的程序员生涯打下基础。
我不想再给自己扣上“间歇性壮志凌云,持续性混吃等死”这个属性了。
技术道路:看了那位混迹江湖12年的老手的就业经历和其他博主的成长历程,我对我的规划是:这学期学习C++和C#,以及开发GUI,如果可以还可以学习安卓开发。以后自己不断阅读书籍,找到自己最喜欢的技术,并且尝试一些项目。
职业道路和社会道路:毕业之后有两条路:考研,读完研之后出国,然后期间尝试做一些小项目,努力拿到大公司的offer,并在大公司中积累经验,再考虑创业或是跳槽之类的。
三、代码复审
1.复审对象
由于我们组比较特殊,是三人结对编程。所以复审采取循环方式,我复审的是石浩然同学的代码。
2.阅读代码
呃,石浩然的代码大约800+行C#代码,思路不是很清晰。。四个类,十几个函数。
对代码进行了一些分析:
主要的功能函数如下:
public void ReadData()
功能是读取数据
分析结果:在读入数据中删除了某条线路的四惠站,导致四惠不是换乘站,原因据本人所说是BFS会出问题。。
public void BuildGragph()
功能是构建邻接矩阵
分析结果:很有意思,他的邻接矩阵里只有换乘站,这样大大降低了dijkstra的问题规模,缩短了运行时间,理论上。
以上两个功能在我个人的代码里是使用的状态机读入,只有一层循环同时完成两个功能,所以我觉得他的可以做优化也可以不做。因为这不重要
public Tuple<string,int> DjistraPath(string f,string t)
功能是通过不同的情况调用下面Djistralen,求出不同的最短路径并比较
分析:由于他的邻接矩阵里只有换乘站,因此根据起始站和终点站是否是换乘站,我们可以得出多条可能的线路,并做比较,得到最终最短的线路,使用了以代码换时间的策略,具体来说比较成功,但是有一个bug是:如果起始站和终点站在同一条线上则直接输出,不做最短路径的查询,导致从知春路到东直门的测试样例测试错误。另外他还特殊处理了机场线,导致程序的扩展性比较低。
public int DjistraLen(int fromno, int tono, int[] parents)
功能是通过dij算法查询最短路径
分析:没什么问题,忠实地实现了算法
public Tuple<string, int> BFSPath(string f, string t)
功能类似dijstrapath算法,当调用下面的函数求出所有最少换乘的路径之后,求出其中最短的一条
public void BFSPathRecursion(int transLv, Station curStation, Line curLine,Station endStation, List<PathSection> stationList,List<Line> lineHis)
功能:这个才是通过广搜求出所有最少换乘的路径
除此以外。。还有很多函数辅助生成路径,这些函数是整个代码里逻辑最复杂的部分,尝试理解但是失败了。大概是我比较没用吧。。
- CheckList
General |
|
Does the code work? Does it perform its intended function, the logic is correct etc. |
代码工作正常,做了一些测试,可以实现预期功能,逻辑大致正确 |
Is all the code easily understood? |
部分地方有注释,部分结构易懂,部分结构复杂。 |
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. |
这些好像都没有问题 |
Is there any redundant or duplicate code? |
有挺多的。。 |
Is the code as modular as possible? |
模块化了,但是耦合度高 |
Can any global variables be replaced? |
代码中全局变量较多,一时半会找不到替换的方法 |
Is there any commented out code? |
有,是测试代码 |
Do loops have a set length and correct termination conditions? |
有 |
Can any of the code be replaced with library functions? |
没有 |
Can any logging or debugging code be removed? |
没有 |
Security |
|
Are all data inputs checked (for the correct type, length, format, and range) and encoded? |
有,但是当两个输入都有误时,只会显示第一个输入有误 |
Where third-party utilities are used, are returning errors being caught? |
没有,没有 |
Are output values checked and encoded? |
无 |
Are invalid parameter values handled? |
处理了 |
Documentation |
|
Do comments exist and describe the intent of the code? |
有一些 |
Are all functions commented? |
并没有 |
Is any unusual behavior or edge-case handling described? |
处理了 |
Is the use and function of third-party libraries documented? |
没有 |
Are data structures and units of measurement explained? |
无 |
Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’? |
无 |
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. |
呃。。怎么说呢。。有部分小函数是为了满足另一个大函数的,所以这些小函数不是很容易测试 |
Do tests exist and are they comprehensive? i.e. has at least your agreed on code coverage. |
看不出来 |
Do unit tests actually test that the code is performing the intended functionality? |
是的 |
Are arrays checked for ‘out-of-bound’ errors? |
是的 |
Could any test code be replaced with the use of an existing API? |
不知道。。 |
结论:
1.能够想到只处理换乘站来缩小问题规模,这一点很厉害,但是关于这一点,我认为只能运用到-a的处理上,因为如果运用到-b-c的处理上,付出的代价太大,例如增加了很多小函数,使用了很多全局变量,最主要的是代码量直线上升,难以修改和维护和扩展,完成同样的功能,比我的代码要多400+行,且某些功能完成的没有我的好,但是由于简化了运算所以速度比我的快大约40倍,
如果我是用户,我给五星好评,因为真的很快,但是如果我是维护人员,我。。我。。我大概不会接这个活。。
2.特殊处理机场线和删去四惠这个。。虽然我一开始也想到特殊处理,但是最终还是想出了通用方法。。所以这一点我给差评。。从行为来分析是:特殊处理数据,简化程序功能,从动机\本质来分析是:投机取巧
3.代码不易读,难以扩展,不是很符合软件工程开发的要求。
但是我有一个额外的问题:
我的评价是否真的公正了?
posted on 2016-10-02 02:14 ChildishChange 阅读(225) 评论(2) 编辑 收藏 举报