586
社区成员




这个作业属于哪个课程 | 软件工程-23年春季学期软件工程 |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术总结 |
这个作业的目标 | 1、课程回顾与总结 2、个人技术总结 |
其他参考文献 | CSDN、《构建之法》 |
Q1:代码量与个人的编码能力有直接关系吗?
NewA1:我依然认为代码量可以作为个人编程能力的参考指标,但是个人的编程能力不能通过代码量直接衡量。在实际的编程过程中,通过编写大量的代码来解决问题可以加深对编程语言、算法和数据结构等方面的理解,提高个人的编程能力。然而,个人的编程能力不仅仅是指写代码的能力,还包括问题分析和解决的能力、设计和架构能力、代码的质量和可维护性等方面。编程是一个综合性的技能,需要综合考虑多个因素。另外,不同编程语言和不同项目的代码行数是无法进行直接比较的,因为它们的复杂性和需求差异很大。因此,代码量只能作为参考,不能单独用于衡量个人的编程能力。更重要的是注重代码质量、解决问题的能力和持续学习的态度,以全面评估和提升个人的编程能力。
- 这是我在整个软工实践过程中慢慢体会到的。
Q2:个人在团队中角色就像是一个流水线上的机器吗?
NewA2:在软件开发中,团队合作和交流是非常重要的。个人的思想碰撞可以激发创新和创造力,带来更好的解决方案和设计。人们的情感和思维能力使得团队更加有机灵活,能够适应变化和应对挑战。相比之下,机器虽然可以执行预定的任务和程序,但它们缺乏情感和创造力,无法进行独立的思考和判断。机器无法像人类一样进行真正的思想碰撞和智慧交流,无法产生新的想法和创意。因此,在软件开发中,团队成员之间的交流、合作和思想碰撞是不可或缺的。人类的情感和思想使得团队能够更好地协同工作,共同追求创新和卓越。
- 这是我在结对编程和团队编程中,通过团队合作和交流提高效率后,得到的体会。
Q3:程序员是否有必要为满足小部分人的需求去做软件,或者为软件添加某些功能?
NewA3:对于这个问题,我想到了软件工程课程上林老师讲到的“David Hooker的7个关注软件工程整体实践原则”,第一原则就是“存在价值”(一个软件系统因能给用户提供价值而具有存在价值,所有的决定都应该基于这个思想),其他六条原则都以这条原则为基础。如果不能为用户提供价值,那么就坚决不做这个软件,如果能为小部分人提供价值,那就是有存在价值。
作为程序员,我们的目标是为用户提供有价值的软件解决方案。虽然每个人的需求可能不同,但在开发软件时,我们通常会考虑满足尽可能广泛的用户需求,而不仅仅是小部分人的需求。有时候,为了满足特定的需求或添加某些功能,可能需要额外的努力和投入,但如果这些功能对用户群体来说是有价值的,并且能够提升整体的用户体验,那么这样的努力是值得的。
- 这是我在老师授课时体会到的。
Q4:结对编程中,应选择与自己能力互补的搭档比较好还是与自己能力相近的搭档比较好?
NewA4:在本次结对编程中,我很荣幸地找到了与自己能力相近又与自己能力互补的好搭档,😜也深切体会到了能力相近与能力互补各自的好处。
在编程前期,我们都是前端方面的菜鸡,在前端方面能力相近,一起学习vue,一起处理遇到的问题,我们更容易理解彼此的代码和思维过程,减少了交流的成本。
在编程后期,我们遇到了不得不使用前后端交互的情况,但问题是我们没有人会后端,于是我的好搭档迅速成功转型,我继续留在前端,而她转去后端。因此,我深深体会到了能力互补的好处,这种互补性可以提高开发速度和代码质量。
- 这是我在结对编程中,深深深深深刻体会到的~
Q5:对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?
NewA5:综合发展、拥有广度和深度的技能是非常重要的。保持广度可以让你了解多个领域的知识和技术趋势,也能更好地与不同领域的人进行合作和沟通,提高团队协作的效率。同时,专精至少一门技术也是非常重要的。深入研究和精通某个领域的技术可以使你成为该领域的专家,并在该领域内提供高质量的解决方案。深度的专业知识和经验可以让你在特定领域中更有竞争力,能够解决复杂的问题,并为公司或团队带来价值。
- 这是我在整个软工实践过程中慢慢体会到的。
Q1:在团队合作中,专业能力和团队协作能力哪个更为重要?
Q2:工程师应该如何平衡自己的专业技能发展和团队合作能力的培养?
Q3:在编程能力的提升过程中,通过实际项目的实践来积累经验更重要,还是通过系统学习和深入理解编程原理和概念来提升自己的技能更重要?
在需求阶段,我们团队进行了原型设计,团队每个成员共同参与原型设计过程,更好地理解和讨论了各个功能模块的交互方式,设计出了各个模块的页面,不断提出改进建议,并协调不同需求之间的冲突。我认为原型设计是一个强大的需求分析工具,它能够帮助我们更好地理解用户需求,通过原型,可以大致预览和了解最终产品的外观、功能和交互方式,也对接下来的工作量有了大致的估计。
在设计阶段,我们对功能模块、接口、数据库等进行了设计。由于初次设计,很多都没有经验,我们只能一步一步探索。尤其在对接口进行设计时,团队比较迷茫,缺乏经验和指导导致我们的初次设计不完善,需要后续的修改和调整。因此,在后面的编码阶段,几乎每个接口都重新改过,但这也让我们更加熟悉接口设计的方法和技术,逐渐掌握接口设计的技巧和经验。
在实现阶段,我学到了很多知识或能力。首先是uniapp技术,uniapp提供了一套丰富的 API 和插件生态系统,且在之前vue的基础下,我迅速上手并很快地熟练掌握了uniapp技术。其次是与后端交互的能力,虽然我们采用了unicloud,使得前后端交互变得简单了一点,但是由于接口设计有问题,所以前后端交互花了很多时间去磨合,在磨合的过程中,我也进一步掌握了前后端交互的技巧和经验。
在测试阶段,我学到的最大的能力就是拥抱错误。进入测试阶段后,发现了很多错误,在修改bug的过程中,我也慢慢地意识到错误是开发过程中的一部分,不要将错误视为失败或挫折,而是将其视为改进和学习的机会。接受错误存在的事实,学会拥抱错误,会在修改bug的过程中成长很多。
在发布阶段,项目发布后,我们邀请了许多人对我们的产品进行使用,也向他们投放了调查问卷。在处理调查问卷时,我学会了如何处理用户的反馈,如何分类和优先级排序问题,以及如何与用户进行有效的沟通和协作。同时,我也对整个项目做了回顾与总结,回顾项目的整个开发过程,总结经验教训和成功经验。
在进行个人项目时,由于对数据处理流程的不熟悉,以及基础知识不扎实,再加上项目开始的时间比较晚,所以这次作业的难度对我来说有亿点大。但是无论如何,总得迎难而上,学会了json解析之后,一切就明朗了。我学会了数据的爬取,对json解析更加熟悉了,学会了如何进行单元测试,学会了如何打包jar,深刻感受到了性能提升的重要性等等。总之,我在个人项目中取得了很大的进步,不仅掌握了新的技能,还锻炼了解决问题的能力和积极的学习态度。这些技能和经验的掌握在未来的结对编程和团队项目中为我提供了很好的基础。
在结对编程中,我和队友采用vue框架,但是由于对vue的知识储备不多,所以一开始手忙脚乱,为了实现各种功能,疯狂地在网上搜索资料,在选择vue组件时,也不知道哪个组件是最佳选择。在技术方面,我最大的体悟是,如果时间允许,能够花一些时间系统地学习和了解所需的技术,将会更有利于后续的开发工作,否则过程将十分痛苦。尽管赶鸭子上架式的编程方法在某些情况下可能能够快速入门和解决问题,但它通常并不是一个持久和可持续的学习和开发方式。
在团队项目中,我很幸运遇到了全都认真负责的队友,和有困难是真的上的队长,在alpha阶段,我们团队八人每天准时上班打卡,一起聚在小小的活动室打代码。每天面对面编程,让我们团队成员可以相互交流和讨论问题,分享知识和经验,这促进了我们加快问题解决的速度和提高了项目进展的效率,在alpha阶段结束后,我们产品的所有预期功能均实现。从组建团队开始到结尾,我们亲自见证了一个产品从无到有,我们很完整地走完了软件开发的全过程,我很庆幸,遇到了超级超级超级好的团队!!!
目标1: 理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。
掌握程度: 100%
对于我来说,理解软件工程师的职业道德规范和实践要求,了解国情社情民情,以及树立积极向上的软件开发理念,是软件工程师职业发展中不可忽视的方面。这些因素能够帮助工程师在工作中保持诚信、责任和创新,以及为社会创造积极的影响,是对一名软件工程师最基本的要求。
目标2: 掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。
掌握程度: 90%
在需求分析中,我熟练掌握了原型设计这一需求表达工具,将用户需求转化为具体的界面设计。同时,我也积极参与了需求分析,与队员一同探讨得出了初步的需求模型,最终进一步细化得出更准确和完善的需求模型。
目标3: 掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。
掌握程度: 85%
在本次团队项目中,我们完整地进行了数据库设计、接口设计、体系结构设计、功能模块设计等,为后续项目的实施奠定了坚实的基础。
目标4: 能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。
掌握程度: 90%
在项目中我对设计方案进行了部分优化,和团队一起讨论和确定了我们产品的创新点。我学会了充分分析和评估现有方案,提出创新思路,并与团队协作将这些思路转化为实际的设计方案。
目标5: 遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。
掌握程度: 90%
在团队开发中,我们撰写了需求规格说明书、系统设计说明书、系统测试报告等文档,严格遵守规范和标准,确保文档的一致性和可读性。
目标6: 具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。
掌握程度: 95%
在项目中,虽然不是队长,但是我能做到服从队长的安排,配合其他成员的工作。我们都是面对面编程,所以能与其他成员进行有效的沟通和协作,发现问题直接找相关的成员解决。
目标7: 能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。
掌握程度: 90%
掌握了将个人的工作划分成小模块,更清晰地了解每个小模块的范围和需求,并评估各个小模块所需的工作量。掌握了通过git分支对项目进行管理。
uni-popup 是基于 uni-app 框架提供的弹出层组件,用于在页面中显示各种类型的弹窗。它提供了多种功能和配置选项,可以灵活地创建不同样式和行为的弹出层。
在技术方面,我最大的体悟是,如果时间允许,能够花一些时间系统地学习和了解所需的技术,将会更有利于后续的开发工作,否则过程将十分痛苦。
如何保证 “时间允许” 呢? 你在大学的上课学习, 了解了各种技术了么?