Week3 博客阅读感想和代码复审

时间:2022-10-22 12:09:55

一、关于博客阅读感想

  阅读了十多篇老程序员(大多在计算机相关行业工作超过10年)关于自身经历的博客,很有感触。这里一方面总结一下看博客的收获,另一方面写点自己的感受。

  首先,这些博客不少涉及到了两大类的内容:作为一名程序员的成长经历和程序员的生涯。

  作为一名程序员,这些博主们的身份成长经历多种多样,既有小时候就兴趣浓厚,所处环境优越起步早的;也有高考的时候才填志愿进入到计算机专业学习了4年专业知识的;甚至有并不是科班出身而是半路出家转行当程序员的。然而虽然博主们的背景不同,但作为程序员的成长经历中却又不少相同之处。首先,无一例外地,他们的自学动力和能力都很强,自我驱动着去掌握更多的技术,或者是学习更多的知识,更多的动手锻炼。科班出身的程序员或许一开始有不少都是接受理论知识,但到了大概大二大三的时候无一例外的都开始更多的动手实践。所以作为一名合格/优秀的程序员很重要的一点是自我学习的动力和能力。然后,有不少博主提到的一点是本科计算机专业学习的内容有不少是理论性的,虽然计算机专业是偏重实践性的专业,但并不代表这些基础的理论性知识就没有用。有一位博主说的很有道理:“本科毕业出去找工作的人就是一张白纸,而这张白纸的吸墨能力决定了他能走多远。”并且,这里面提到的“吸墨能力”实际上是由本科阶段学习的知识是否扎实决定的。换一种说法,也就是虽然一些知识是理论性的,但学好这些知识有助于在实践中更快地上手具体的技术。

  博主们提到的另外一项内容就是程序员的生涯。从职业的角度来说,程序员不过是一项职业,同样要面临一般人面临的生涯规划、升职跳槽创业、结婚生子、买车买房等问题。首先当然的,在这一系列过程中肯定会遇到困难,怎么解决困难并不是讨论的重点。为什么?因为一来对于困难的具体解决办法没有通论,二来对于精神上的解决办法对于各种困难是通用的,不需要在这里讨论。那么重点讨论的是什么呢?我觉得是方向性的问题。首先大部分的博主都提到一点:要了解自己和了解行业。有一位博主总结得狠精辟“ 个人的职业规划就像软件工程。我们都知道软件项目最大的敌人是需求的不明确和需求的大面积变更,同样,在个人的职业规划中,自我需求的不明确和需求的变更也是非常危险的,尤其是在职业计划实施了四五年后需求的变动和改变”(原文链接:http://blog.csdn.net/haoel/article/details/1688104)。通俗的说,就是要了解自己。进入一个行业努力学习知识,然后逐渐了解到自己的兴趣和能力所在,选定好一个方向(自我需求)然后进行深入的设计和规划,然后执行这个设计,中途可能会有一些小的调整(补丁)。另一点,则是对于自己职业的大方向选择。主要是看自己对于技术是否有热情和自信,有的话可以选择一些节奏更快,更具有挑战的公司(甚至是自己开公司),没有的话或许选择一些*内的岗位会更好。这两者之间(或许)没有高下之分,但有是否更适合自己之分。

  然后,就是我个人的感悟了。对于入门来说,我是属于到了大学才开始真正学习计算机相关知识的一类人,在此之前的逻辑都是“计算机==玩游戏==洪水猛兽”。在大一大二的两年里,虽然确实在逐步积累着专业知识,但也由于自身的原因经历了不少颠簸。大三开始,排除了不少个人的问题,应该能够更为专注在学习与实践上面。自己对于计算机行业的了解也和博主们相近:偏重于实践,但是理论也不可缺少。对于自我的职业生涯规划,我或许还面临再多一个的选择。在现在的风气下,既有出来当程序员这一条更偏重于实践的道路,也有读研读博进行计算机科学研究的这条路。我对于自己想法/需求还了解的不够清楚,没有能够很好地做出决定。但毕竟已经到了大三,要抓紧进行抉择。

二、代码复审

注:这里参考的是一篇博客中提到的代码复审的方法(http://blog.fogcreek.com/increase-defect-detection-with-our-code-review-checklist-example/),复审的伙伴是李文涛。

General

  • Does the code work? Does it perform its intended function, the logic is correct etc.
  • Mostly yes.用我自己的测试用例进行测试,代码基本都能给出正确的结果。只有一个功能遗漏了就是在不带任何参数运行程序的时候应该是进入循环等待用户输入线路名称然后输出线路上的站点名称那个功能
  • 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.
  • Mostly yes.文涛大部分的书写习俗都和我相同,除了变量的命名方式略有区别(我采用的是多个单词首字母大写来区分单词,文涛采用的是下划线来区分单词)
  • Is there any redundant or duplicate code?
  • In my opinion, no.在我看来并没有重复/冗余的代码
  • Is the code as modular as possible?
  • So-so.核心的计算模块很好地模块化了,但是数据结构则没有,用面向对象的方式封装属性和方法会更好一些。
  • Can any global variables be replaced?
  • Yes.st_num(站点数量)和line_num(线路数量)这两个全局变量如果用vector而非链表进行存储的话是可以去掉的
  • 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?
  • 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.没有使用第三方的utilities。
  • Are output values checked and encoded?
  • No.没有对输出结果进行检查(说实话我没懂怎么个对输出结果进行检查法)
  • Are invalid parameter values handled?
  • Yes.有对非法参数的处理

Documentation

  • Do comments exist and describe the intent of the code?
  • No.没有相关的文档或者readme
  • Are all functions commented?
  • Yes.所有的函数都有注释
  • Is any unusual behavior or edge-case handling described?
  • Yes.对于输出结果中是否换乘的处理不具有扩展性,代码中包含了数据本身(是手动判断换乘站的……)
  • 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’?
  • No.代码是完整的

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.
  • Yes.测试代码存在,并且我认可
  • Do unit tests actually test that the code is performing the intended functionality?
  • Yes.
  • Are arrays checked for ‘out-of-bound’ errors?
  • No.没有检查越界错误(不过我也没找到哪里需要进行这样的检查)
  • Could any test code be replaced with the use of an existing API?
  • No.