[I.1] 个人作业:阅读和提问
个人作业:阅读和提问
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 首页 - 2025年春季软件工程(罗杰、任健) - 北京航空航天大学 - 班级博客 - 博客园 |
| 这个作业的要求在哪里 | [I.1] 个人作业:阅读和提问 |
| 我在这个课程的目标是 | 学习软件开发流程,完成一次完整的软件开发经历,提高开发和团队合作能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 了解软件工程总体框架、流程及其常见问题 |
阅读提问
问题1
在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。
文段非常生动地描述了在结对编程时双人团队的工作过程。但是,两人在同一台电脑前同时工作就意味着两人必须同时理解当前电脑屏幕上的代码,也就是说,当其中一人不了解有关技术栈时,结对编程就有可能退化成单人编程甚至更劣。按着这样理解,用结对编程理想的实现一个项目就需要两人都参与到全栈开发中。而参与课程的我们在组队时往往考虑的是在技术栈上有所互补的对象。这样,组队的结果,可能就无法真正实践结对编程所描绘的工作过程。或者说,也许结对编程还有其它的实践方法?
问题2
那怎么提高技能呢? 答案很简单, 通过不断的练习, 把那些低层次的问题都解决了, 变成不用经过大脑的自动操作, 然后才有时间和脑力来解决较高层次的问题。
年轻学生都志向远大, 上了一些课, 就很想解决高层次的问题。我最近碰到一些学生就非常想做高层次的“科研”,觉得“工程”是基础, 没意思。而且我“已经知道怎么做了”。
在ai可以参与帮助编写代码的现在,当我们所苦恼的低层次问题可由ai和智能插件辅助编写解决时,技能的提高是否就只是用“时间和脑力来解决较高层次的问题”呢?如果不是的话,不断“刷”低层次的问题是为了什么呢?若是为了能够更好提高对工具的熟练度的话,那编写高层次问题的代码不也可以起到作用吗?
问题3
如果你的团队很弱, 那么强行把Scrum (或者其它高级方法)套在上面也没有用, 也许还会适得其反,往往需要多次Sprint 才能让Scrum 走上正轨。换句话说, 如果你的团队已经是这么厉害 (self-managing, self-organizing, cross-functional)的一帮人, 那么用不用Scrum 都能写好软件!
诚如作者所言,拥有“self-managing, self-organizing, cross-functional”的团队,也许不需要什么指定的方法论就能有效率的完成任务指标.那么问题来了,对于作者所言“很弱”的团队(大学生临时组的队伍可能就会属于这种),他们又该如何实践scrum呢?
另一个改进是, 要在每一个任务中记载我们完成这个任务还需要多少时间。已经花了多少时间虽然重要, 但是不是关键 (那是沉没成本),关键是要看我们离最后目标有多远。
可以预见的是,scrum meeting有可能流于形式。作者提到的一个改进是记载完成还需多少时间。但是,作者在其他讲义中也提到过,我们有可能会对剩余时间产生误判。某个功能一开始被估计还需一天就能完成,但过了一天可能就发现还需要一天才能完成。
问题4
萌芽(Forming)阶段,就像小苗破土而出......团队缺少一个明确的领导,团队成员也非常依赖领导的指导。......在这一时期,领导要回答很多问题......没有太多时间进行详细讨论,得到一致共识,因此,要快刀斩乱麻地决定一些重要的问题。
作者在这一段中忽略了相当重要的一步:选出团队领导。那么谁来当领导呢?来自教师或是成绩的赋权或许很有信服力,但是忽视了领导者自身的意愿(领导者自身不想当领导者)或能力(领导者有技术,但自身没有领导能力)。来自团队中非正式的、在交流中默认选出的领导者,ta可能是一个技术大牛(ta如何兼顾项目开发与维持团队稳定、开展决策等领导者工作),可能是一个社交达人(ta能展现技术上的威信吗),可能是一个能激发人情绪的演讲家(ta会变成说自己是“鸡”的“鹦鹉”吗)。另一方面,团队出现多个领导者的竞争者,又该如何选取以维护团队稳定性呢?
问题5
那我们怎么提出新的创意, 怎么说服别人我的创意是靠谱的?
......
这些事情光靠拍脑袋和拍胸脯是不够的, “二拍" 的后果往往是第三拍 - 拍屁股走人. 有些同学可能还会遭到脑袋被砖头拍, 或者被胸袭的后果。 如果不能拍脑袋, 胸脯, 屁股, 那我们怎么才能想出靠谱的想法, 然后有条理地说服别人? 在宿舍里睡觉, 聚餐, 喝酒, 搞头脑风暴?
对于学生团队而言,在需求分析和项目建议时套用NABCD是一个很好的选择,但是得出的讨论结果往往并不能很快或无法转化成一个实际的成品。学生团队在此阶段往往是接触熟悉软件工程的开发流程,掌握基本方法,难有“独特的招数”,更难以讨论竞争。类似于问题3,我们究竟该如何实践NABCD呢?

浙公网安备 33010602011771号