构建之法阅读笔记(二)
构建之法阅读笔记(二)
———————————————————————————————————
第四章 两人合作
第十七章 人、绩效和职业道德
———————————————————————————————————
【第四章】
〖关于断言〗
一、原文
书中第四章在“错误处理”一节中提到了“断言”这个词语:“如何验证正确性?那就要用断言。断言和错误处理是什么关系?”我也尝试着查找相关资料希望能解决这几个问题。
二、我的学习
1.编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。
2.使用断言的几个原则[1]
①使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
②使用断言对函数的参数进行确认。 这也是书中提到的断言的一种作用——验证参数正确性。
③在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。
④一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。
3.异常与断言的异同[2][3]
序号 |
异常 |
断言 |
1 |
异常被捕获后可以不作处理,程序从捕获位置继续执行 |
断言是完全无法忽略的,程序在断言失败处立即终止 |
2 |
异常用于处理正确程序中的运行期问题(比如内存分配失败,,打开文件失败),以尽可能恢复,而不是终止程序 |
断言通常用于调试版本,用来发现程序中的逻辑错误 |
3 |
异常处理用于对程序发生异常情况的处理,增强程序的健壮性和容错性 |
断言是用来检查非法情况而不是错误情况的,用来帮开发者快速定位问题的位置 |
Ps:这是我总结了几篇篇博客后得到的答案
三、我的问题
我虽然解决了关于断言的一些问题,但是接下来的一句话我还是不太明白“如果你认为某事可能会发生,这时就要写代码来处理可能发生的错误情况”,但是如果提前预想到“可能发生的错误情况”,不是又和异常处理一样了吗?可能是因为我对异常和断言还是不能够分清楚,所以想问问老师,应当怎么在实际的程序中理解异常和断言呢?
—————————————————————————————————————————
〖关于代码审查〗
一、我的学习
在代码审查方面,《构建之法》一书已经有了相当清楚的解释,我的学习也主要是依靠书来进行的。
Code Review 的实际操作建议[4]
1.代码审查是应该在互相沟通中进行讨论的,而不是相互对抗。预先确定哪些是要点哪些不是,可以减少冲突并拟定预期;
2.经常进行Code Review, 不要攒了1w行才让同事帮你review, 这是坑队友;
3.Code Review不要太正式,而且要短;
4.尽可能的让不同的人Reivew你的代码(不要超过3个人);
5.保持积极的正面的态度;
6.学会享受Code Reivew;
二、我的学习
所以我的问题也很简单:在第二个阶段磨合期,当我们双方都有一些固定的习惯,比如说用不同的编译器或者命名风格不同等问题,而且由于和队友并不算很熟,在短时间内很难立刻统一但是双方都没有什么错误时,应当怎么解决呢?
—————————————————————————————————————————
【第十七章】
一、我的学习
如果说第四章是为了对我们的结对作业有所帮助的话,那么第七章主要是在团队项目中给我们一些启发。与结对项目两个人相比,团队项目更加充满了未知与挑战,甚至每一次的讨论都能摩擦出一些火花。所以如何有效地提升个人及团体的能力与效率是很重要的。第十七章提出了“绩效考核”这个概念,由于书中没有明确给出定义,所以我自己查找资料了解了一下。
绩效是一个组织或个人在一定时期内的投入产出情况,投入指的是人力、物力、时间等物质资源,或个人的情感、情绪等精神资源,产出指的是工作任务在数量、质量及效率方面的完成情况。 由此衍生出了绩效管理的概念。所谓绩效管理,是指各级管理者和员工为了达到组织目标共同参与的绩效计划制定、绩效辅导沟通、绩效考核评价、绩效结果应用、绩效目标提升的持续循环过程,绩效管理的目的是持续提升个人、部门和组织的绩效。
除了书中提到的RASCI模型,还有一个模型也可以给我们的个人绩效管理中的绩效考核给予一定的帮助。
KPI是“Key Performance Indicator”的缩写,称之为“关键绩效指标”或“关键业绩指标”。
KPI考核的7个步骤[5]
① 选定考核指标
② 明确考核目标值
③ 制定评分标准
④ 制定评分挂钩办法
⑤ 签订考核表
⑥ 数据收集和评分
⑦ 绩效结果应用与辅导改善
二、我的问题
那么我的问题是:绩效管理包括个人绩效和团队绩效,很多时候团队绩效应当是重于个人绩效的。那么在实际的项目(比如这次的团队作业)中可以通过哪些方面来评估个人绩效与团队绩效呢?如何看待他们之间的关系?
—————————————————————————————————————————
〖关于职业道德〗
一、我的想法
这一部分有很多同学的博客都谈到了,而且在咱们的微信群里也有许多相关的讨论。作为一个学生,我很难站在一个公平的位置(即使是我认为的“公平”也只是我认知范围内的)来进行说明。但是我认为有许多问题我们不能只是简单地说:“啊你这是不对的,怎么能这么做”“你这样违反了职业道德”等等。有一篇很有意思的文章《不要用你的“道德”去评判极客工程师!“IT工程师”需要一份新型职业责任险!》[6]
二、我的问题
以阿里巴巴安全部门的月饼事件为例,我个人觉得很难做出评论,欢迎有感兴趣的小伙伴一起讨论。[7]
【附录】
[1] 断言assert 的作用
https://blog.csdn.net/zhouchao001/article/details/52096613
[2] 异常和断言的区别
https://blog.csdn.net/sushengmiyan/article/details/7382957
[3] 断言(Assert)与异常(Exception)
https://blog.csdn.net/zhaofuxiang/article/details/53379394
[4] 代码审查如何做
https://blog.csdn.net/wzzfeitian/article/details/54673360
[5] 一个完善的KPI考核需要满足什么条件?不同行业的KPI考核不同点在哪?
https://www.zhihu.com/question/33261647/answer/56142767
[6] “IT工程师”需要一份新型职业责任险!
https://zhuanlan.zhihu.com/p/22445114
[7] 如何看待阿里巴巴安全部门的月饼事件?
https://www.zhihu.com/question/50600301