1.软件工程师的成长
看了那么多前辈的博客,有些我深有体会,有些我不太赞同,总之来说还是有点收获的
我从小在农村长大,接触计算机算是比较晚的,我三年级的时候才开始接触电脑,最开始的时候就是在金山打字通上面玩打字游戏,后来发现了4399后就成天玩小游戏,那个时候都是在学校的机房里面玩的,或者到隔壁小朋友的家里蹭电脑玩,直到08年我考上初中的时候,家里买了第一台电脑,我才开始接触网络,一开始也就是玩玩QQ,玩点网游什么的,也是在这个过程中体验到了使用计算机的乐趣,学会了不少的电脑小技巧从那个时候开始我就想着以后要从事“电脑行业”的工作,那样就可以天天“玩电脑”了。哈哈哈,那个时候还真是too young too simple啊。
直到后来我考上了北航计算机系,我才知道原来想成为一个“电脑行业”的从事人员没有那么简单,有好多好多东西要学的。然后我就开始了苦逼的学习生活,一开始学习编程的时候,各种不会,各种挫败感,这种感觉来自于与他人的比较,我发现好像周围的人学起来都非常的轻松,而我却非常的吃力,这个时候我才发现很多同学都是初高中甚至小学的时候就开始学习编程了,而我那个时候还在玩游戏,所以我要追赶上他们是比较费力的,但是不能这样放弃了,因为我心中始终有个成为优秀的IT工程师的理想,我要为了自己的理想而好好努力。
到现在为止,我接触一些语言,有C/C++、Java、PHP、Python等等,由于要兼顾平时的基础理论的课业,这些语言都还没有深入的去探索,很多都是浅尝辄止,不过我觉得没有关系,某前辈在他的博客里说到要在项目中学习,而不是先学会了再去做项目,因为现在技术的更新实在是太快了,很多现在流行的语言、框架,说不定过个几年就被淘汰了,所以除了基本的一些数据结构、算法这些永不过时的东西需要先掌握之外,那些语言、框架之类的东西,完全可以边做边学,当然也得有一项自己最擅长的语言,我暂时没有发现我最喜欢哪门语言,我会借助做项目的机会,多接触一些,多瞅瞅多看看,直到找到我认为应该去深入学习的。
至于职业道路规划的话,我目前的两个选择是:1、考研继续深造,学习一些时下比较火的技术方面:如机器学习、数据挖掘或者是网络安全等等;2、趁着大三大四课少,多去实习,积累项目经验,争取进入大公司工作成为一个优秀的软件工程师,进而成为架构师、CTO什么的,甚至等时机成熟了可以自己去创业,这都是后话了,总之先做好当下的工作,在闲暇时间多多展望一下未来,为自己的职业生涯做些规划
2.代码复审
我复审的代码是我的结对编程的伙伴——黎柏文的代码
Code Review Checklist
General
- Does the code work? Does it perform its intended function, the logic is correct etc.
- 基本功能都实现了,不过最小换乘算法会有一些瑕疵,有些时候得到的最小换乘的结果不是最优的(可以有换乘次数相同但是乘坐的站数更小的方案)
- 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.
- 柏文和我都是大括号不换行的,他在变量和函数的命名上采用的是驼峰法,这里要提出一点建议是:
- 比如 int Temp 最好写成 int temp,因为变量开头小写的话便于与函数名区分,增强了可读性
- Is there any redundant or duplicate code?
- No
- Is the code as modular as possible?
- Yes,模块封装得到位
- Can any global variables be replaced?
- No
- 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?
- Yes,处理命令行参数那部分代码可以用函数写一下,但是长度应该不会减少多少
- Can any logging or debugging code be removed?
- No
Security
- Are all data inputs checked (for the correct type, length, format, and range) and encoded?
- Yes
- Where third-party utilities are used, are returning errors being caught?
- No
- Are output values checked and encoded?
- No
- Are invalid parameter values handled?
- Yes
Documentation
- Do comments exist and describe the intent of the code?
- Yes,但是不够详细,没有说明每一种功能该如何输入
- Are all functions commented?
- Yes
- Is any unusual behavior or edge-case handling described?
- No
- Is the use and function of third-party libraries documented?
- No
- Are data structures and units of measurement explained?
- Yes
- Is there any incomplete code? If so, should it be removed or flagged with a suitable marker like ‘TODO’?
- Yes,void GetShortestTravesal(int sour)还未完成,需要补充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.
- Yes
- Do tests exist and are they comprehensive? i.e. has at least your agreed on code coverage.
- No 没有覆盖性测试
- Are arrays checked for ‘out-of-bound’ errors?
- No
- Could any test code be replaced with the use of an existing API?
- No