第4章 两人合作
书中引用:函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰提现,什么方法都可以使用,包括goto。
——P69
疑问1:在实际的项目中,真的建议使用goto吗?
想法:在大一的C语言课堂上,老师告诉我们尽量不要使用goto,因为goto跳来跳去,会影响程序的可读性,显得很乱,而且goto可以被其他语句代替。因此我对goto也有了“偏见”,而在《构建之法》中竟提及goto有助于程序逻辑的清晰提现,我便不得不重新认识一下goto。我在知乎上看了各路大神的回答,这是相应的链接https://www.zhihu.com/question/27922046,截几张图比较有代表性的回答:
将所有回答都浏览了一遍后,我对goto有一个比较初步的了解,不知对不对:goto主要用于跳出多重循环和性能提升,而且常见于底层代码。而在实际的普通项目开发中,goto是很少用的,虽然它逻辑性强,但因为他的可读性不高(尤其对同事来说),可维护性也不高,而且它可以被do while break代替,因此平时的开发中是不建议使用goto的,但这并不代表goto没用。
书中引用:
复审者:你在这里申请了这个资源,你是如何保证它在所有路径下都能正确释放的?
复审者:这一段代码可能会被多个线程调用,代码是线程安全的么?我怎么没看到对共享资源的保护?
复审者:这么修改之后,有没有别的功能会受影响?
复审者:项目中还有别的地方需要类似的修改么?
复审者:有没有留下足够的说明,让将来维护代码时不会出现问题?
复审者:对于这样的修改,有没有别的成员需要告知?
——75
团队复审的缺点在于:
(1)要找到一个所有人都能出席的时间并不容易。
(2)牵涉的人员众多,理解程度不一,复审的速度和效果不能得到有效的平衡。
(3)由于成本问题,无法对所有的设计和代码进行深入的复审。
(4)由于人员众多,有面子问题。
——P80
疑问2:对于结对项目,代码复审的效率很高,但在普通的团队开发要如何做到高效的代码复审呢?
想法:在结对项目中,每一行代码都由两个人思考过,且双方都十分熟悉代码,所以不必过多的介绍就可以开始进行细致的复审。而在团队合作中,往往是一人负责一个模块,其他人对自己的代码没有深入的了解,在《构建之法》书中对团队复审的描述中,并没有让复审者详细了解代码细节,而是让程序员自己先一行行测试,然后再去找复审者对程序员提出一系列问题,可我认为光问这些问题并不能很好的起到复审的作用,最多起到提醒的作用,因为复审者并没有了解代码细节,很难发现逻辑上的错误及优化的空间等。我觉得复审者不能只提问,在提问后应该具体检查代码,因为很多问题程序员都认为自己做好了,但其实并没有做好,然而他并没意识到自己没做好,回答复审者的问题时却说做好了。再加上引用中提到的团队复审的缺点,我认为团队复审的效率很低。不知真正的企业团队都是怎样进行高效的团队复审呢,会让复审者一行行检查代码,还是只是看程序员演示+提问呢?
第17章 人,绩效和职业道德
书中引用:
一个团队即使业绩不好,团队领导也不会承认自己团队有问题,而是找很多别的理由。在绩效评估的时候,每个成员被展示为高大全的英雄人物,都要排在别的团队人员的前面。
——386
其次是要完善团队业绩和个人绩效相结合的考评体系,最大限度地调用团队成员的积极性。
——392
问题3:在一个团队中,个人绩效应处于什么地位,发挥着什么作用?
想法:本章多次提到个人绩效的考评,可见个人绩效考评是团队中一项重要的环节。书中提到了多种个人绩效考评方式,个人比较推崇的是进行两个维度的评价:完成任务维度和团队贡献维度,随后评出团队中最好的20%、中间的70%、最需要改进的10%。但个人绩效公布后,它应该处于什么地位,对团队的影响如何呢?我搜索了相关的资料https://www.zhihu.com/question/19995922,对其中一个回答比较赞同:
看完这段话后,我对团队的个人绩效考评有了新的看法:个人绩效考评是为了提高团队效率,但要采用恰当的方式,否则会适得其反。过于量化指标其实对团队的效率并没有好处,反而会增加许多繁琐的工作,且会加强团队成员的竞争关系,可事实上团队成员是合作关系,竞争氛围过于浓厚会影响团队成员之间的交流与互帮互助。我更倾向于基本量化指标+领导的观察评判+团队成员互评的模式,但即便如此,个人绩效仅做一个参考,起到提醒和驱动的作用,不能被过度放大,否则绩效高的成员容易骄傲,绩效低的成员容易失去信心。因为一个团队更重要的是合作精神,而不是个人主义。
书中引用:
原则1 公众:软件工程师的行为应与公众利益一致。
原则2 客户与雇主:软件工程师以其客户和雇主利益最大化的方式做事,与公众利益保持一致。
——406
问题4:如何做到与公众利益一致?
想法:我觉得软件产品很难顾及到所有人的利益,往往对公众利益的利与弊是相伴而生的,关键是看它的利是否大于弊及社会接受度。如淘宝的出现,让大量实体商家受挫甚至倒闭,却又衍生出了快递行业,给予了更多人工作的机会,显然淘宝改变了人们的生活方式,它的利是大于弊的,因此被社会接受。再如即将来临的人工智能时代,机器人代替工作的时代,定会使更多基层人员失业,那我们如何衡量人工智能是否与公众利益一致?肯定会有一部分人从中受益,也会有一部分人因此失业,它并不能完全地做到与公众利益一致。我的观点是,只要不违背基本道德,那么我就能接受这款产品的存在。因为公众利益十分复杂,并不能完全地兼顾,关键还在于它的社会接受度和贡献度。
以上就是我的疑问和想法,感谢阅读!