在读了第四章和第十七章后,在对代码的规范和设计风格上有了新的认识,对结对编程有了一定的认识;同时对程序员在未来公司中的工作状况有了一定的了解,在对绩效和职业道德上有了新的认知。
第四章:两人合作
一、书中75页4.3.2goto一节中提到:函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现。什么方法都可以使用,包括goto。我有一些疑惑,在大一上学期我们学习C语言的时候,当时对goto语句的印象是认为goto语句不建议使用。于是我上网查了一些资料,有以下两种说法。
(一)建议使用goto语句
goto语句使用起来比较灵活,而且有些情形能够提高程序的效率。如果一味强调删除goto语句,有些情形反而会使程序过于复杂,增加一些不必要的计算量【2】。在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。【1】
(二)建议废除goto语句
goto语句是对程序结构影响最大的一种有害语句;他们的主要理由是:goto语句使程序的静态结构和程序的动态执行之间有很大的差别,这样使程序难以阅读,难以查错。对一个程序来说,人们最关心的是他运行的正确与否,去掉goto语句后,可以直接从程序结构上反映程序的运行过程。这样,不仅使程序的结构清晰、便于阅读,便于查错,而且也有利于程序正确性的证明。【2】
D.E.Knuth (算法界的超级大牛,The art of computer programming 的作者)对于goto语句的争论作了全面的公正的评述,他的基本观点是:不加限制地使用goto语句,特别是使用往回跳的goto语句,会使程序的结构难于理解,这种情形应该尽量避免使用goto语句;另外,为了提高程序的效率,同时又不破坏程序的良好结构,有控制地使用一些goto语句是有必要的。用他的话来说:“有些情形,我主张废除转向语句,有些情形我主张引进转向语句。”(见D.E.Knuth的大作:《带有转向语句的结构化程序设计》)
综合以上说法,我认为我们应该谨慎的使用goto语句。goto语句的设计自身是没问题的,之所以建议避免,我觉得这是一个软件工程的问题。比如说,容易破坏代码的模块化组织结构,容易降低代码的可读性,以及代码增长到一定规模后的可控性等等。毕竟,在一个团队中,项目的代码不总是一个人维护的,你的goto你懂,但不代表别人也懂,而且大家技术水平以及对代码的理解谁也不能保证步调一致,滥用goto,会提升项目出现bug的概率。【3】
ps:什么情况下用到goto:
当程序有多层嵌套,当处在嵌套内的逻辑判断为真或为假时,需要彻底或者连续跳出几层循环时,一般考虑使用goto,因为break一次只能跳出一层,并且需要跳出多层循环时需要假如更多的判断逻辑,这种情况下,会考虑使用goto,还有就是在大型程序中处理复杂逻辑时,一般也会考虑使用goto。【4】
二、书中88页4.6:疑问:当结对编程时双方在磨合阶段发生意见难以调和,难以过渡到规范阶段,此时应该怎么处理?
第十七章:人,绩效和职业道德
一、书中400页中提到:重大决定应该由“猪”来定夺,这与我的观点不同,从技术角度来讲,研发和市场的第一线全心投入的人,他们在技术最有发言权和决定权,但是从现实角度来讲,做决定的往往应该是领导阶级,因为他们在项目的未来发展上更具有市场前瞻性和掌控全局的能力,我认为领导应做重大决定,这样能更好的引领整个工程的发展。
二、书中402页17.6绩效管理部分关于如何才能更好的衡量技术人员的工作量以及如何分配工资,我有一些想法。一开始我认为在一个团队中,经过一段时间的磨合,每一个技术人员的能力和工作量想必团队的每个人都心知肚明,背对背的评比我认为是比较合适的,但是确实又存在“小团体现象”,于是我上网查阅了相关资料,找到了认为比较合适的方法:主客观相结合、合理量化、双向和多向评价:对于上级对下级可以直接给予评价的行为,下级应该也能集体给上级打分。对于主观考核部分,应该做到360度测评,对某个开发人员的评价,可以先由开发人员自己给自己的主观评价部分打分,再由主管、团队内同事review评价,综合确定最终评价、考核程序员的侧重点应该放在过程上,而不是业务的结果上、参与了多少项目,写了多少代码和文档,多少测试代码,完成多少模块和用例,解决了多少问题,bug率多少,reopen的bug率多少,多少次工作交付延期,多少次工作失误,内部做了多少次技术交流分享。等等在研发过程中的工作度量、制度考勤。【5】
但很遗憾的是至今没有任何可行的具体测量方法能精确的评估程序员个体的贡献度。并没有解决这个问题的“银弹”。只能综合各方面,尽量的达到公平化以及合理化,最大限度的激励技术人员。
参考博文
【1】goto语句百度百科https://baike.baidu.com/item/goto%E8%AF%AD%E5%8F%A5/7603004?fr=aladdin
【2】关于goto语句,https://blog.csdn.net/starfish/article/details/10599
【3】作者:张国钰,来源:知乎,链接:https://www.zhihu.com/question/21981058/answer/19931297
【4】 C语言之goto浅,https://www.cnblogs.com/newbeeyu/p/5837347.html
【5】谈谈程序员的绩效考核,https://blog.csdn.net/kimmking/article/details/9946319