[I.3] 个人作业:结课总结
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 2025年春季软件工程 |
| 这个作业的要求在哪里 | [I.3] 个人作业:结课总结 |
| 我在这个课程的目标是 | 提升系统设计开发一款有实用价值软件的能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 总结本课程的理解与收获,提升对于软件工程的总体理解 |
提问博客
问题解答
1.结对编程是否能够提高编程效率?
在结对编程中,我和我的同伴的水平相近,并没有出现我设想的这个问题,但是出现了一人努力写代码一人摆烂的问题。后来我们调整了做法————让两人轮换写代码/监督。这样即使摆烂的人也被“逼”得必须思考。我认为在水平相差大的情况下,结对编程如果缺少轮换与交流制度,会降低教学与协作效率,只提升短期编程速度,不利于双方长期成长。 这也是XP(eXtreme Programming)里推崇“driver-navigator交替”规则的原因。
2.职业认证的有效性是否反映了工程教育与实践的脱节?
这个问题在我撰写简历、准备实习面试的时候深有感触。其实,国内CSP、软考证书含金量并不大,GitHub活跃项目和技术博客更能打动面试官。有一说一,我国认证体系确实偏重理论与考点,忽视了产学脱节问题。实践项目、开源贡献、团队协作能力未被纳入认证体系——导致“考而不会做”现象普遍。国外一些认证已开始加入项目制评分(例如AWS、Google的认证课程后需提交真实Lab作业),这种方式值得借鉴。
3.解决高层次问题是否必须先学会解决低层次问题?
我在实际操作中确实发现:现代IDE和AI工具正在削弱“底层技能”的必要性。现在即使不熟悉某种语言的具体语法,通过Copilot、自动补全、AI生成代码块,我们也能完成一些高阶设计任务(手动狗头)。但另一方面,在复杂项目、调试、性能优化、Bug追踪时,底层知识依旧不可或缺。比如内存泄漏、指针引用错误、线程同步问题等,AI也无法自动解决(这里的底层知识不是语法,而是一些编译的基础内容)。这也是为什么高级工程师仍强调“基础训练”——即使写项目时不手写细节,也必须理解原理。
4.开发和测试的角色分配是否应该有所调整?
在我们团队的项目开发时体验到,自己写单元测试远比交给别人更快、更懂代码背景,我们组虽然设置了一名后端人员兼职测试,但是他本身不熟悉前端代码,也很难对前端进行有效的测试,最多只能下载安装包后进行直观的测试,这和普通用户没有区别。所以,适当让开发人员承担一部分普通测试任务,如单元测试、接口测试而保留专职测试做压力、安全测试,能提高开发效率。
5.交响乐团模式是否会在实际工作中影响创新?
书中没指出交响乐团模式的“适应范围”。但是在实际项目中我们觉得“黑客马拉松”式自由协作在算法验证期效率高,但当系统走向产品化则必须采用“模块化+接口标准”————即交响乐团模式。
新的问题
在结对编程中虽然不存在高低搭配的问题,但是仍然很难解决一个人摆烂一个人卷的问题,因为本身结对编程要求两个人在同一台电脑上进行操作,要求必须有大段的时间两个人在一起操作,而这是很难实现的。所以,在实际实践中往往沦为两个分别完成结对编程的一部分,而不是真正的结对编程。
知识点
1.需求阶段
构思与实际落地之间有着很大的鸿沟,构思的很理想,但是在实际写代码中往往难以实现,所以要提出合理的需求,不能好高骛远。
2.设计阶段
高内聚低耦合,我们一开始设计的模块很粗略,在后面开发中带来了严重的问题。
3.实现阶段
快速学习了一门新语言Dart,提高了自学能力,加深了对于面向对象概念的理解。
4.测试阶段
开发时我们一开始边写边测,导致Bug频发,难以定位错误来源。后来改用单元测试优先,先写好单元测试脚本,再编写业务逻辑,明显减少了后期测试难度。
5.发布阶段
深刻理解了CI/CD的重要性,我们没有自动部署,导致每次后端push了新的代码,都必须手动打包到服务器上,无形中加大了前后端相互沟通的成本。
6.维护阶段
在项目上线后,用户需求变更(如修改bug、新增功能)让我们意识到——早期设计没考虑可扩展性,功能加不上,只好重构。这时才明白书里“预留扩展点”建议的意义。维护期的变动往往比初期开发还累,如果架构设计封闭,后期维护代价巨大。这个知识点,是在项目维护时“被迫”返工、重构中痛苦领悟的。
理解心得
在我们组的团队项目中,我主要负责前端开发,这让我深刻理解了前后端接口设计的重要性。刚开始α阶段时,接口文档不完整,导致我经常猜测后端返回的数据格式,前端开发进度被拖慢。后来在β阶段中,我们团队前端先向后端提出所需的API接口,并且在实际开发过程中随时更新,后端按照我们的需求去进行修改,而且团队统一了接口文档(包括字段、数据类型、错误码),我才真正感受到:良好的接口设计是前后端配合顺畅的前提,能极大提升开发效率,避免无效返工。这是我之前在个人项目中很少遇到的问题,只有在实际团队协作中才真正体会到这一点。另外,实际项目中前端还要兼顾用户体验(如页面响应、交互友好),这些细节和个人练习时简单完成功能完全不同。书上说“软件是为人服务的”在这次项目中被我真实理解了。
浙公网安备 33010602011771号