软工最后一周课程总结
回顾之前提出的目标,并与之对比
- 代码阅读能力:之前的水平是3分,目标是5分,由于在alpha阶段从零学习了一个比较成熟的tag_to_poem的LSTM项目,能力提升很多,在belta阶段没有这方面的困扰,应该有5分水平。
- 代码设计能力:在belta项目中engine的开发主要锻炼了这个能力,之前很差,后来在实战中锻炼了不少,应该能力是3,和目标的4还有不小的差距。
- 实现能力:由于开发engine的代码量并不大,算上之前的黄金点和关键词统计,应该略微提高,之前是2,现在是3,和目标的5差距不小。
- 自学能力:之前是3,目标是5,在实际代码过程中,跟大佬们学到了很多如何进入一个未知的领域的能力,现在应该能够达到目标。
《构建之法》自问自答
-
但是对于同一一件事交给两个人同时做,本身就会进行大量重复思考,如果再牵扯进来两个人的优劣势互补,两人配合协作问题,可能效益会打不少折扣,除非是要完成的任务对成品率要求很高 && 两人都不能独立完成任务,否则不见得一定提高整体效率,那么实际开发中这种情况很多吗?
这种情况发生的前提是:两个人做同样一件事,一般都是两个人都半斤八两,此时合作更容易攻坚克难,当然还有一个前提是两个人都容易互相处得来。
-
时间驱动固然能够激发团队的热情,但也是一件非常有风险的事情,比如发生问题需要解决,而不能保证每个人都能快速解决,如果需要学习新东西该怎么办,或者如果团队进度不统一,某个人的激情程度不够,这样风险也是不小的。那决定敏捷模型是如何保证这些风险的呢?
感觉这个问题涉及到敏捷流程的核心,就是增加迭代速度和反馈频率,更快的发现不足,补全,debug,设计开发。当然大前提是不完全推荐几个新手一起敏捷,一个架构师很重要。
-
按照老师的认为,PM是“舵手”的作用,用来维系整个团队合理的运营。但是一定的专业能力如何去评估呢,如果在几个方向非常强,又能快速观察学习理解,也能分析管理团队,跟老板客户沟通,这样的复合型人才的价值一定很大,但同时也比较难得,那么又怎么保证和其他成员同等地位呢?如果专业能力没那么强,那会出现跟一线创造价值的程序员在专业问题上出现扯皮该怎么办呢?所以不太理解一定的专业能力是怎么界定的呢?
一般这样的人会升级为架构师,PM只负责团队进程和其他沟通上的任务,技术壁垒应该请教架构师。当然架构师的地位会高不少。
-
衡量每个程序员产出的多少,本身就是一个多元多方面的事情。如果涉及到分工的不通,如何量化又变成了一个问题,因此看完教材后还是不太理解成熟的公司管理制度应该怎么去考核绩效才能达到合理激励督促员工。
考核KPI可以通过上下级,同行互相审核来保证公平性
-
如果发生前人经验没那么多,那么怎么确定前人所估计得时间现在的人做要多久呢?因为高手和菜鸟对同一件事情的难易程度的判断一般是大相径庭的,如果自己的人做过类似的事情,那么又如何保证所用工具/人员的记忆程度/做事的方法是否足够先进等不确定的因素呢?
好的架构师可以极大缓解这个问题,不过帮助最大的是增加迭代的频率。
新的问题
如果一个bug涉及到几个单元模块的拼接,比如需要三个人合力去解决这个问题,凑齐三个人的时间和心思又不是非常容易,那么该如何去把任务推进下去呢,我们项目主要吃亏在这里。
对“事后诸葛亮”的感想
软件开发有着自己的方法和思路,比如每日例会,权责到人等非常重要。在这样一个时间有限(相对任务量),每个人都必须要开发一个不是很难的任务模式下,合理的设计,分工,debug,快速的迭代周期显得非常重要。当然没有一个一定能够解决问题的招式方法,因为涉及到任务的难度还有人员的水平能力时间等因素,但正确的冲刺模式,分工合作的方式同样是致胜的关键因素。
其他的以及不能用数字衡量的提高
通过这样一次软件工程的训练,我了解到如何进行合适的代码管理,代码复审,测试模块的重要意义,生产开发环境的分离的重要性。
不能用数字衡量的收获,比如如何去入手思考一个团队项目,如何和他人合作沟通,合作开发代码等。
意见和建议
- 这门课应该开设在类似大二下学期这样的时间节点,同学们对于基础编程语言,计算机,web等基本知识有了一定的理解,能够上手去开发一些简单的代码。同时带来的思考复杂项目并且与他人合作的能力在之后的道路大有裨益
- 如果学生们的时间有限,可以考虑一起做一个做了一半的软工项目,或者调低任务工作量和难度,但是必须要求每个成员必须有分工,可以按照KPI来分配成绩。