这是现代软件工程课程最后一周总结。
在我当初提到的五项我最需要提升的技能(软件实现、测试、效能分析、行业洞察力、项目管理)中,我在软件工程课程上主要提升了项目管理能力。通过在 alpha 阶段担任一个很有难度的项目的 PM,以及在 beta 阶段担任一个我较为熟练的项目的架构师,我觉得我体验了两类截然不同的项目的管理。不过,离 5 分(能通过面试)还是很遥远的。
当初我估计每周拿出 10 小时左右花在这门课程上,从 11 月中旬我开始记录工作时间到现在,在这门课程相关的事情上总共花费了约 100 小时,符合最初的计划。
你在课程开始快速浏览了《构建之法》,提了 5 个问题,请回顾那些问题,自己回答它们。如果不能回答,为何软件工程课不能让你回答这些问题?
第一个问题“怎么做测试”我与邹老师讨论过两次,然而这个问题毕竟太大了,还是需要写过许多实际项目才能有足够的经验的。这次软件工程课程我尽量少直接参与编码,所以没有针对这方面进行研究。
第二个问题“怎么在开发前期确保代码的可扩展性”我仍然在思考,很遗憾软件工程课程并未涉及这种关于架构的内容,没讲过高层次的软件开发模式,或者诸如怎样分析问题、怎样设计微服务、怎样解耦各层次、怎样管理开发-测试-部署流程等。大概这也是需要从许许多多实际项目中才能学到的吧。
另外五个问题中,三个是关于《构建之法》本身的,并不需要回答。另外两个都是较小的问题,我当时已经阐述了我在相应问题上的看法,只是想知道有没有更多其他想法,在这门课程中没有得到其他不同的想法,所以维持原来的看法未变。
看看还有什么新的问题产生,请列出来,建议列出 2-3 个新问题。可以让老师和助教来回答
在 alpha 阶段我就意识到了一个严重影响团队的因素:团队成员在物理上相隔很远,不能方便地交流,也没有偶然性的互动。我很怀念在学校时我和其他几个朋友每天都在社团的活动室里工作、学习和打游戏,到饭点时一起约饭,无论是谁在开发什么或者研究什么有趣的问题,大家都乐于参与进来并随时了解进展。我觉得这种随时能互动的条件对于人际关系是非常重要的,但 Xu Cao 在开会时提到,现在有很多公司完全在家办公(比如 GitLab),依赖各种工具进行进度追踪和讨论,同样非常顺利、成功,我觉得也有道理。从软件工程课程给我们的要求来看,显然也是希望我们尝试克服这个困难,形成良好的团队并完成开发目标。但是《人件》中将物理分隔列为了杀死团队的一大方法,呼吁项目经理抵制来自高层的压力并为团队形成创造条件。其中写道“没有团队的空间,没有团队的即时互动,也就没有形成团队文化的可能。……在物理上分隔需要紧密交流的人本来就不合理。”这和我一直以来的观点是一致的。究竟应该如何看待这个问题呢?
你看了一些软件工程的文献,你的团队也做了一两次“事后诸葛亮”分析,可以再去看一遍,现在有什么新的感想?
上面算是一个对于《人件》的新感想了。对于《有人负责,才有质量:写给在集市中迷失的一代》,我现在意识到处理 bug 也是如此,如果没有将任务分配到人,很容易造成 bug“大家都知道、大家都等着修”的局面。为每个项目、每个模块、每件任务都设置一个负责人对质量控制非常有意义。
对比一下技能评价表,你有什么提高?还有什么收获是不能用数字衡量的?
除了上面提到的五项,我认为在团队合作能力方面我有不少提高。这是我第二次真正参与团队开发,第一次在大家会写好代码的情况下参与团队开发,从这次课程项目中我收获了不少关于团队开发的感悟。
设想一年之后,你到了你职业发展的下一个阶段(高年级,读研,工作),回头看这门课,你对于这门课的教学方法,老师和助教的工作,和其他课程的衔接,有什么意见和建议?
……目前感受不多,或许等我到职业发展的下一个阶段时,有了更广的眼界和更丰富的经验后,会有更具体的体会和建议。