[I.1] 个人作业:阅读和提问

项目 内容
这个作业属于哪个课程 2025年春季软件工程
这个作业的要求在哪里 [I.1] 个人作业:阅读和提问
我在这个课程的目标是 提升系统设计开发一款有实用价值软件的能力
这个作业在哪个具体方面帮助我实现目标 大体了解软件工程的总体架构,为接下来的任务打下良好的基础

存在的问题

1.结对编程是否能够提高编程效率?

书中提到结对编程可以让双方共同促进共同提高,然而,在结对编程中,当合作伙伴之间存在显著的技术水平差异时,可能出现以下矛盾:资深开发者(比如大佬)可能因ddl压力或惯性主导大部分工作(如主要负责写代码,仅让另一个人被动观察去debug),导致普通人参与感低,知识传递效果差。此时如果普通人频繁提问或试错可则能拖慢进度,而大佬直接接管任务虽能快速推进任务进度,却剥夺了普通人的实践机会。另一方面,大佬写了过多的代码可能会让他觉得任务分配不公,从而引发争吵。普通人可能因畏惧错误而沉默,大佬可能因缺乏耐心而削弱协作平等性,最终形成“师生关系”而非“伙伴关系”。

2.职业认证的有效性是否反映了工程教育与实践的脱节?

在第3章 软件工程师的成长中作者提到职业认证是“获得工作的敲门砖”,但根据调查和亲身体验,仅小部分开发者认为认证“非常重要”,如北航认证CSP上机作为复试成绩,而另外的绝大部分企业和导师更关注GitHub项目经验和CCF论文发表。因为在很多情况下即使获得认证也可能无法独立设计高可用架构,,独立或合作完成某个重大项目,仅擅长考试的题型。所以,我们国家现有的认证体系是否过度侧重理论而忽视实战?如何改革认证机制(如加入真实项目评估)以弥合产学差距?反观国外经验,目前Google的“专业机器学习工程师认证”要求提交Kaggle竞赛成绩,将笔试分数权重降至30%。在实习的面试时,经常忘却最基本的算法如二叉树。书中未批判认证的局限性,易误导学生陷入“考证陷阱”。

3.解决高层次问题是否必须先学会解决低层次问题?

在阅读了第二章个人开发技术后,作者用魔方比喻代码技术,认为必须先学会基础的魔方还原才可以进行下一步的学习,并且认为这种经验也可以应用到代码的学习中。然而,目前IDE日趋完善,不仅作者举例的忘了加分号,函数调用的具体名称忘记等语法错误编译器可以自动纠正,更加复杂的代码补全目前也可以通过人工智能的自动补全来完成。譬如现在即使对于Java的基础语法不甚了了,也可以利用IDEA进行编程。在这种情况下,我们是否应该更多地把精力放到项目的整体架构,算法的具体实现而不是在写代码时的细枝末节?

4.开发和测试的角色分配是否应该有所调整?

在书中,作者提到分工促进了人类社会的进步,分工越细,越有利于生产效率的提高,所以应该将开发与测试分开,然而,开发人员往往对代码结构本身更加熟悉,对于大学生软件工程这样的项目而言更是如此。将测试人员单独分开自然不错,不过,我认为除了专职的测试人员也可以再增加一些由开发人员兼任的岗位,可以极大地提高开发效率。

5.交响乐团模式是否会在实际工作中影响创新?

作者以微软Office为例说明该模式适合稳定期产品,但AI科研等创新项目需快速试错。例如,AlphaGo团队初期采用“黑客马拉松”式协作,后期模型优化阶段转向分工明确的流程。然而,我们是否应根据项目生命周期(探索期/成熟期)切换团队模式?如何设计切换触发条件(如用户增长曲线、技术不确定性指数)?特斯拉Autopilot团队在感知算法探索期采用功能团队模式,量产阶段转为交响乐团模式,他们各模块严格接口化。而哈佛商学院的“适应性领导力框架”提出,技术不确定性>50%时采用松散协作,<20%时强化流程。如果我们需要进行模式切换的话,书中未提供模式切换的方法论,需结合实践补充。

posted @ 2025-03-05 15:36  zzy2  阅读(50)  评论(0)    收藏  举报