现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论
0. 为啥要讲人、绩效、和职业道德? 学好专业不就行了么,为啥要扯这么多?
用专业知识教育人是不够的。通过专业教育,他可以成为一种有用的机器,但是不能成为一个和谐发展的人。要使学生对价值有所理解并且产生热烈的感情,那是最基本的。他必须获得对美和道德上的善恶鲜明的辨别力。否则,他 —— 连同他的专业知识 —— 就更像一只受过很好训练的狗,而不像一个和谐发展的人。为了获得对别人和对集体的适当关系,他必须学习去了解人们的动机、他们的幻想和他们的疾苦。
---- 爱因斯坦
1. 比较不同团队的绩效评估方法,提出自己团队的绩效评估计划
用某一次《现代软件工程》课上的几个团队的博客做例子:
第一组(seven):
我们可以按照以上的9级来分,但是对于我们而言,大家在很大程度上都是同一级的劳动者……所以我们可以进一步细分同一级的排名,比如将整个任务分为等量的小任务,每个人负责其中的一个,而最终大家的排名可以通过完成这类任务的个数来决定。关于如何评价是否完成“任务”,可以通过功能性、是否准时来评价;当整个工程完结时,我们可以做一次评定(review),包括功能、性能和代码的评价,然后大家之间讨论互评。
第二组(霸王):
对于浮动分数,可以通过每个职位对团队的贡献来分配。队友之间根据各自的贡献给出排序,最后汇总得分。
第三组(铷铯):
一群学生做软工项目(PM、开发、测试),PM:0.3(n*30)分,开发:0.5(n*30)分,测试:0.2(n*30)分
第四组(take it & go):
在团队合作中,每个成员的贡献度不仅仅取决于其工作量,而且还取决于这份工作对团队的意义有多大。我们认为贡献度的计算应遵循如下公式:
贡献度 = 工作量×工作的影响力×工作的不可替代性
这个等式给我们的评测提供了一个方向。与直接估计贡献度相比,分别估计三个分量显得更易操作,准确性也更高。
//评点:如果大家都想做“不可替代的工作”,怎么办?
第五组(banana):
关于管理体系,可以天花乱坠地说很多,但实际和理论会差得很远,我们并不能完全按照一个专业团队去执行。大四是一段美好休闲的时光,很难要求大家训练有素地执行进度,我们只能尽可能友情提示大家一起干一些事,但我觉得做完整个工程应该没有问题。
//评点:我个人觉得第五组的同学最适合去垄断性国企。
如何衡量两个团队成员的劳动生产率呢?或者这已经超越了劳动生产率的范畴,到了知识产权,职业道德的领域?
2. 在团队中会不会出现 “劣币驱逐良币” 或者 “不敢犯错误” 的现象?
例如,在大家做任务估计的时候,那些给出非常乐观估计的成员会不会产生无形的压力,让一些实事求是的团队成员不得不调整他们原来比较靠谱的估计,最后导致整个团队的估计都是过于乐观, 客观(包括比较保守和悲观)的估计都消失了?
或者,在工作中太看重失误,惩罚失误,导致无人敢冒险?
请看这个例子: NBA 球星科比的投篮不中次数已经是历史第一,超越了大部分NBA 球员的所有投篮数:
http://china.nba.com/news/4/2014-11-12/1048/24547.html link2
这么多投篮不中,应该惩罚么? 如果要严厉惩罚的话,科比,或者球队会有更好的成绩么?
3. 请阅读驱动和责任[LL1] ,讨论团队如何能让所有人都明确驱动和责任
有极端的看法说任何与报酬挂钩的绩效评估都是有害的,你怎么看?
4. 采访并收集下面几类公司对员工绩效考核的做法:
- 已经上市多年的公司
- 刚刚上市或准备上市的公司
- 国有软件企业,
- 民营软件企业
- 初始的创业公司
5. 走出“自我”和“当下”
在授课过程中,我也看到不少同学还是只关注“自我”和“当下”,不善于跟别人合作,也不会估计别人会怎么想,或者估计“我们的团队将来会发生什么,我要如何应对”。造成这种现象的一部分原因是,不少同学从小就被灌输“搞好自己的学习就可以了”,“把眼下的考试考好,以后就好了”,另一部分原因是,同学们从来没有练习如何与别人合作,估计别人会想什么,估计团队以后会发生什么。
科学家认为,人类有别于其他动物的最大特点是人类大脑里有发达的部分在处理“别人在做什么”和“未来会发生什么”(Interpersonal Awareness & Social Awareness)这些事情。能摆脱[自我/当下]而考虑到[别人/将来],从而主动为群体和将来行动,这是人和其他动物不同的地方(来源: http://www.pbs.org/wnet/humanspark/)。
在成功的大型企业中,人际交流能力和人际觉察(Interpersonal competence, and Interpersonal Awareness)是员工素质培训的一个重要部分,它包括如何与别人建立平等而融洽的合作关系,如何处理矛盾与冲突,如何影响同事,如何给别人的工作做评价,如何能了解别人表面行动下的言外之意、隐含的动机等等。在前文提到的“黄金点游戏”这个场景中,一位参赛者需要了解一屋子的同学大概的思路 ,如何影响他们,自己才能增加获胜的希望。如果每个人独自埋头推导公式,而不管其他人在想什么,是得不出获胜的数字的。
一个软件团队,如果大家都不考虑“别人”、“未来”,光是每个人独立地搞自己眼前的一摊事,是不行的,把自己的代码重构出花来也不行,把SCRUM(史克朗姆)玩到极限也不行。这也是我觉得聪明的同学们欠缺较多的地方。所以《现代软件工程》课包括了很多“两人合作”、“黄金点游戏”以及估算工作量等练习[1]。
上这门课的同学,你觉得这些活动和练习有价值么?
人和人不一样, 你觉得程序员和自闭症的患者有什么联系么?
http://archive.wired.com/wired/archive/9.12/baron-cohen.html
如果把人按照 empathetic (有同理心的) -- systematic (系统思维的) 两极来分类, 有人画出了如下的分布示意图,你怎么看?
参考信息1: 通常人们都在路边招手叫出租车,只有很少的人打电话约车, 从2014年起,在很多叫车软件出现后, 在路边招手往往看到很多出租车不停车,因为它们已经被叫车软件订了。很多人说这对于没有打车软件的弱势群体不公平,你说呢?
12. 成长,责任,和公司的关系
绝大部分的工程师都在某一个企业工作,工程师的成长也和企业的兴衰有很大关系。企业兴旺,工程师也是与有荣焉,很多人觉得是自己的功劳,理所应当提薪升职;企业衰落,很多工程师未必觉得是自己的问题(我的代码很好的,都是经理,市场,老大的问题!); 企业最后要裁员,很多人为了一些补偿和企业产生纠纷。
几个例子:
http://weibo.com/1620213837/BgSGLhdAe
http://www.csdn.net/article/2014-09-29/2821931
http://www.csdn.net/article/2014-10-01/2821945
那么,软件工程师在企业中是劳动密集型的工人么,还是有独创性的专业人士? 他们对软件企业的成败负多大的责任?
13. 工程师单打独斗 - 接私活
和上面的讨论题目相关, 很多人把项目的不如意归结于团队,公司,等等个人之外的因素, 那么,当工程师一个人做全栈工程师,顺便把别的角色都搞定,是不是很爽呢? 当一个工程师直接在社会上拼搏的时候,会碰到什么有意思的事情呢? 我们看看 “接私活” 这个场景。 请看完下面的几个故事,谈谈 “接私活的软件工程要注意几个方面”:
http://www.cnblogs.com/geeking/p/3157744.html
http://www.cnblogs.com/txw1958/archive/2012/11/06/programmer-personal-work.html
http://www.cnblogs.com/yhyjy/p/4444094.html
http://www.cnblogs.com/myproj/p/3402928.html
http://www.cnblogs.com/toutou/archive/2013/05/06/4602685.html
http://www.cnblogs.com/shenyisyn/archive/2013/01/11/2856753.html
http://www.cnblogs.com/jj-fly/articles/2086838.html
http://www.cnblogs.com/adylee/archive/2009/06/05/1497022.html
===== 教材知识点之外的话题 =====
[1] 国外还有Social awareness + emotional skills = successful kids的说法, 据说此类教育在小孩到了高中甚至成年都有积极的影响。参见:http://www.apa.org/monitor/2010/04/classrooms.aspx