构建之法2017年秋(2) 对工程管理的训练

  1. 对工程管理的训练

吴军先生曾经提到,读大学的一大收获,是亲身经历在大师身边的过程,那些最重要的观点,往往不是在论文、材材、讲座里,而是在不经意地沟通之中。在计算机与数学在同一座楼里的时候,林老师在走廊拐角对我的教诲实证了这一点。林老师所说大意是,计算机根本不是一个独立的学科,它的核心是数学,硬件是物理,还剩下工程的部分,那是管理学。管理学?我当时还喃喃地重复了一遍。老师的话,在经典书里我后来又再次一读到,正是因为老师提到过所以格外注意。而且,当时林老师的话不啻惊雷。

我那么喜欢的计算机,居然是管理么。管理,在我的印象中,是人统治人的手段,是厚黑学,是政治和权术,总之就是骗人的。计算机这么神圣的名词的背后,也隐藏着管理这么阴暗的存在么?这个疑问保持了很多年。

微信图片_20180803182618

2.1 沟通

确实,在工程中不全是求真,也有利益相关人士、有人与人之间的关系,还有说服和角力。最近还有两三拨好友发起话题讨论如何与SB同事沟通,说着说着,网上就开始盛传产品经理与研发因为手机壳颜色能否识别动手打架,还有女职员用咖啡泼上级应该如何处理。不过这些,长久以来在我的眼中,都是肮脏低级无奈无聊的事情,怎么会与纯洁的计算机挂上勾呢。正如LY同学所说,我就想好好写个程序,为什么要摊上这样的人呢,纯粹浪费时间。这也长期是我的心态。

林老师指出了管理是计算机的一部分,而我花了很多年才体会到,管理也是科学,而不仅是政治和艺术。在软件工程课程中,同样也应该包含对工程管理的训练,比如沟通。这里的沟通不是指政治,更不是办公室政治,甚至不是如何说服别人(你怎么确信你就是对的?),而是指如何充分揭示事实,如何展示观点,还有如何对在共同利益的框架下分配责任和利益达成一致。

保持友善的沟通,在交流中少掺杂个人感情和对人的评价,而只基于共同认可的基础知识,用逻辑推理预测可能的结果。对于结果不确定的那些,由(任命或民主产生)授权的权威决策,大家服从或者反对直至退出团队。

微信图片_20180803182623

杠精怎么解决?杠精的目的可能只在于刷存在感,反对一切。杠精所指出的那些点,可能确实存在,比如当年据说有人指出赫胥黎认为昆虫与哺乳动物的相似太牵强了。那么,这些点可以视为我们继续改进加强的出发点,也可能是我们愿望承担的冒险的部分。杠精总不能被说服怎么办?方舟子有云,吵架的目的不是说服对方,而是展示给大家看。只要说服了大家,那么吵架/沟通的目的就实现了。在利益当前的时候,鲜有成年人承认自己错了的。杠精希望望证明自己一贯优秀,这也是利益所在。不过,大家认同,项目继续,也就完成了沟通的任务。沟通的任务并不是大家团结一致携手前行,而是大家合力打怪坐地分赃,然后和平分手各奔东西才是。

微信图片_20180803182620 以上这些人与人之间关系的训练,在课程中,贯穿了始终。在作业、作业点评、作业评分规则讨论、领跑衫发放办法讨论中,特别是在微信群里和在班级现场,是普遍存在的。所不足的是,从作业和回顾来看,同学们大多仍然认为沟通的结果才是课程的目的,而没有充分认识到沟通本身才是训练的任务,结果只是顺便产生的。同学们有这样的误解的原因,是因为作业并不考虑沟通本身,而是考核沟通的产物也就是作业和软件。所以,沟通被忽视了。

在现实中其他领域也普遍存在这种情况,本末倒置。选择这门课程,选择作为助教,选择作为教师,自信满满、信誓旦旦。我们期待的是同学们火热的激情,挥汗如雨地工作,大家收获满满。结果,甚至中间就发现,完全不是这样,原来的假设是一厢情愿。所以,退缩,畏难,怀疑当初的动机。事实上,你所看到的全部,本身就是收获。经历本身就是收获,而经历中所考核的那些,我们斤斤计较的那些,全都并不重要。

我在人事处工作的时候曾经有个疑问,政策一变再变,教师按旧规定努力的成果,在新规定中不算数,这让教师何去何从?很多年以后,我逐渐明白这个道理,原本就写在经典著作之中,只是我们并未当真。人,不应该接受来自人的评判。评判和考核的标准,甚至此行的目的,是我们自己决定的,而不是由他人规定的。当我们质疑他人的规定,对他人的评论如此认真地哭喊的时候,已经忘记了这一点。

如果能够在课程中考核沟通的过程而不仅仅结果,或者帮助同学们认识到这一点,也许课程对同学们的帮助会更大一些。

微信图片_20180803182609

2.2 进度

高效能的工程师和团队,应该是方差较小,能够稳定输出的单位。就像与GYB同学的讨论中提到的,“不听老人言吃亏在眼前”,是经验表明哪些方法会导致失败。工程技术手段的目的之一,是尽最大的可能降低失败的几率,虽然对于创新和提高成功的几率并无确切的承诺。

稳定输出要么来自信誉和经验,你一直以来就总是非常有非常优秀的成果。有些同学需要注意,这里说的是成果,而不是你认为自己优秀。凡不可度量的,就是主观的或者不存在的。你每次总是差那么一点点达到优秀,按理工科度量的铁律,就是不优秀。没有什么差一点点,更不是总差那么一点点。

稳定输出,要么来自频繁测量,在快速迭代中及时调整任务和期望。这需要使用工程管理工具,展示测量的结果,展示当前进度与期望间的差异,展示无论项目成功与否的当前收获。靠人工记忆,靠“我不会忘的”,就是依赖个人和艺术了。应该这样的假设,如果你明天就死了,那么此刻留下的中间产物,就是大家认识你工作的全部依据。你脑袋里像花儿一样美好的设想,并不存在,从不存在。

在课程中,同学们使用的工具包括 PSP表格、燃尽图、功能清单(及更新)、SCRUM站立会议报告、WBS表格及时间预估、NABCD、进度条、代码量和博客字数。这些内容迟至每周,快至每日需要更新。

与沟通类似,同学们执着于这些工具所制造出的产品——要发布的软件,而经常忽视工程管理训练本身是课程的重要目的。特别是当有些同学以“我的程序设计基础不够好”为借口的时候,他们假设的就是程序设计的结果在衡量成绩中占有重要比重。教师有意降低了程序设计难度在分值中的比重,希望同学们能够注意到及时合规的作业本身有很多分数、项目管理的中间产物,如同结果一样重要,甚至更重要。一个例子是燃尽图,在大家初次使用时,不太可能一下子学会如何划分功能点。教师赞同和鼓励在本周内修改功能点,以真实反应进度作为第一要务。项目管理工具是不是帮助项目做得更好,或者说项目是不是做得更好,并不重要。项目管理工具确实会帮助项目更好,但是项目更好依赖于很多其他因素,更多考虑那些因素不利于同学们对管理本身的价值建立起信心。

并且,教师一再地多次强调,工程管理本身是作业成绩的采分点,软件产品有多好,是一个独立的问题。这两部分是分别度量的,不会因为软件产品差而影响工程管理部分的成绩。在关注过程控制的作业中,工程管理部分的成绩比重,远比软件产品的难度带来的分数要高。对于程序设计基础不好的同学,教师特意援引以往沈柏杉同学组的例子。他们用web做了一个礼物推荐系统,功能简单,代码也不难,他们甚至拒绝了大家建议的所有稍微有点难度的特色功能。但是因为满足了有用这一特性,并且有特色、展示清楚,所以各组互评时一直排名靠前。计算机系普遍存在更难的就是更有价值这样的看法,需要一次次强调产品与科研和学习的差异,降低大家对于难度的价值认同。

微信图片_20180803182607为了帮助同学们更好的适应从更具有商务意义而不是记忆的角度掌握进度管理工具,教师在正式开发之前加了一周内容。这一周的内容表面上是选题,同学们要依据NABCD等介绍本团队希望研发的产品的优秀特性,实质的教学目的是迫使同学们开始使用上述进度管理工具开始工作。在这一迭代中,因为不涉及程序设计这样艰难可怕的知识点,而只涉及到文案、图示、视频这样不需要特殊技能的工作,同学们不那么恐惧,对要求在产生这些中间产物的过程中使用的进度管理工具也掌握得更好。

当我们介绍新的知识和技能的时候,在学生既有的知识结构基础上开始,通常效果更好。不过看起来,认为计算机系同学的知识结构基础是程序设计,是个错误的假设。他们的程序设计基础让他们自己害怕,文字、截图画图、做视频,更得心应手一些。也许,作为管理知识的引入,从这里开始更好。

微信图片_20180803182625

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]