软件工程实践总结——凡事发生皆有利于我

222100205鄢林丹 2024-06-06 21:20:57
这个作业属于哪个课程2302软件工程
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标实践总结
其他参考文献《构建之法》

@

目录

  • 1、课程回顾与总结
  • 1.1温故知新
  • 1.1.1 当时的博客
  • 1.1.2 问题重现
  • 1.1.3新的思考
  • 1.2做中学
  • 1.2.1需求阶段
  • 1.2.2设计阶段
  • 1.2.3实现阶段
  • 1.2.4测试阶段
  • 1.2.5发布阶段
  • 1.3心得体会
  • 1.4自我评分
  • 2、个人技术总结

1、课程回顾与总结

1.1温故知新

1.1.1 当时的博客

软件工程实践寒假作业

1.1.2 问题重现

Q1:软件开发是年轻人的饭碗,吃的是青春饭?那年纪大的程序员经验丰富但是快速学习能力拼不过年轻程序员的时候该怎么办呢?

原回答:
软件开发确实是一个相对年轻人活跃的领域,而且很多人将其称之为青春饭。年轻的程序员通常能够更快地学习新技术,对新概念更敏感,也更容易适应变化。但是对于年纪较大但经验丰富的程序员,他们同样有着独特的优势。年纪大的程序员通常在工作中积累了丰富的经验,可以通过分享这些经验来指导团队。他们在解决问题和决策方面可能更为成熟,这是一个巨大的优势。而且年纪大的程序员可以选择在某个领域深入专研,成为该领域的专家。深度的专业知识可以在特定领域中提供更高的价值,而这种深度的专业知识不是年轻程序员轻松获得的。还有就是老程序员可以利用丰富的职业经验,建立广泛的人际关系网络。在现代社会中,人脉关系可以在职业生涯中提供支持和机会。所以我认为在职业生涯中,不同年龄段的程序员都有机会取得成功。

现回答:
软件开发不仅仅是年轻人的领域,它是一个需要持续学习、适应和创新的行业。年轻程序员的确在快速学习新技术和适应新环境方面有着天然的优势,但随着经验的积累,年长的程序员在项目规划、团队协作、系统架构设计以及问题解决等方面展现出了不可替代的价值。
年长的程序员可以通过以下几个方面来提升自己的竞争力:
终身学习:保持好奇心和学习热情,不断更新自己的知识库,学习新的编程语言和技术。
经验分享:利用自己丰富的经验来指导年轻程序员,帮助他们快速成长,同时也能巩固自己的知识。
领域专家:深入研究某个特定领域,成为该领域的专家,提供深度的专业知识和解决方案。
人脉网络:建立和维护良好的人际关系网络,这不仅可以带来新的职业机会,还能在需要时获得支持和帮助。
创新思维:即使经验丰富,也要保持创新思维,敢于尝试新的方法和思路,以适应不断变化的技术环境。
软件开发是一个多元化的行业,不同的角色和不同的技能都能找到自己的位置。年长的程序员通过不断学习和适应,完全可以在职业生涯中保持竞争力,甚至发挥更大的作用。

Q2:AI辅助编程,是一个银弹么?

原回答:
我觉得并不是,因为编程不仅仅是一种机械的任务,还涉及到创造性和问题解决。AI目前还难以完全模拟人类的创造性思维和直觉,特别是需要创造性解决方案的情况下,AI的作用是有限的。而且编程不仅仅是写代码,还需要理解业务需求、用户体验等方面的内容,AI在理解复杂的业务逻辑和上下文方面还有待提高。再说在使用AI辅助编程工具时,可能涉及到敏感信息和数据隐私的问题,用AI辅助编程很难保证数据安全。

现回答:
AI辅助编程,真的好用!(对于我们学生来说)AI在编程领域的应用,如自动代码补全、错误检测、代码生成等,又提高开发效率,减少重复性工作,帮助程序员更快地编写代码。代码报错出现问题运行不动,网上搜索出来五花八门的解决办法,令人眼花缭乱,但是只要问问我们伟大的gpt,问题迎刃而解!然而,编程工作远不止于此。编程涉及到的不仅仅是代码的编写,还包括需求分析、设计、测试、维护等多个方面。这些方面往往需要深入理解业务逻辑、用户体验、系统架构等复杂问题,需要程序员的创造性思维、批判性思考和决策能力。这些是目前AI难以完全替代的。

Q3:软件的行为和用户的期望值不一样,就一定是 Bug 吗?

原回答:
不一定。软件的某些功能可能被设计成满足一些用户群体的需求,而不是所有用户的期望,这可能导致在某些情况下行为不同于用户的期望。如果用户对软件的使用或功能理解存在歧义,也可能导致用户期望与实际行为不一致,这并不能说是一个Bug。

现回答:
我还是觉得软件的行为和用户的期望值不一样,不一定是 Bug 。有很多原因导致用户期望与实际行为不一致,一大部分是因为界面不够明晰,如果用户体验不佳,用户也可能感觉软件存在问题。这可能需要通过改进用户界面(UI)或用户体验(UX)来解决,而不仅仅是修复Bug。
Q4:结对编程总能做到1 + 1 > 2 吗?

原回答:

我认为结对编程并不能保证始终能够做到 "1 + 1 > 2"。结对编程是一种软件开发实践,其中两个程序员共同协作来完成一个编程任务,一个人写代码,另一个人进行实时的代码审查和反馈。尽管结对编程有助于提高代码质量、减少错误、促进知识共享和团队协作,但并不是说结对编程就能够自动使得两个人的工作效率总是超过单独工作的效率。实际上,结对编程的效果取决于多个因素,包括团队成员之间的沟通、相互信任、技术水平等。在某些情况下,可能由于沟通成本、意见不一致等原因,结对编程的效果可能并不明显。因此,结对编程并不是一个绝对保证 "1 + 1 > 2" 的银弹,而是一种需要根据具体情况和团队特点来评估和选择的开发实践。

现回答:
我还是和之前的回答一样,结对编程的效果确实在很大程度上取决于合作伙伴的选择。如果合作伙伴之间的技能水平存在较大差异,或者在编程理念和方法上存在显著分歧,那么结对编程可能不会带来预期的增效,甚至可能出现效率低于单独工作的情况,即所谓的"1+1<2"。

Q5: 写博客也会花挺多时间的,如果把这些时间花在写代码上面会不会更好?

原回答:
我觉得写博客是一种分享知识、经验和见解的方式,有助于提高自己对技术的理解,并能够帮助他人。我遇到困难的时候也会去看别人的博客,所以我也希望自己写的博客能够帮助别人。而且通过分享,可以在技术社区中建立声誉,拓展人脉。通过写博客,可能会更深入地学习和总结自己的知识,这有助于加深对某一主题的理解,并能够更好地应用到实际项目中。写博客也是一种创造力的发泄方式,有助于表达自己对技术或行业的独特见解,同时提升写作能力。

现回答:
我觉得写博客很重要,根据这一学期的学习,每次作业后都写总结博客,它不仅帮助我巩固和深化了对编程知识的理解,而且通过反思和总结,我能够更好地梳理思路和提升表达能力。这个过程虽然耗时,但它使我能够记录下自己的学习历程和成长轨迹,更方便以后再次回看工作,同时分享知识和经验,与更广泛的社区进行交流。

1.1.3新的思考

  • 作为”卑微“的乙方,开发团队该如何面对变化无常的需求?
  • 如何预估任务所需要花费的时间?在软工实践开发过程中对功能所需要的工作量和所需要花费的时间的评估还是不够准确,经常会出现早于预估时间完成或者晚于预估时间完成的情况。

    1.2做中学

    1.2.1需求阶段

    在这个阶段,我学到了如何与客户或团队成员进行有效沟通,以准确理解项目目标和用户需求。我学会了使用用例、用户故事和需求文档等工具来捕捉需求,并理解了需求分析的重要性,以及如何平衡功能性和可行性。

    1.2.2设计阶段

    设计阶段让我认识到了系统架构和详细设计的重要性。我学会了如何创建概念模型、类图和序列图等设计文档,并使用墨刀来完成原型设计,设计过程中难免会遇到需求变化,如何面对这些需求变化是一个小小挑战。

    1.2.3实现阶段

    最大的收获是快速上手一门技术的能力,其实在这个项目之前我并没有接触过相关工具,在实践的过程中也用到了非常多没用过的第三方库,需要在各个文档中切换学习。在编码过程中,我深化了对编程语言和开发工具的理解。这个阶段强调了代码质量,包括编写清晰、高效和可维护的代码。我也学会了如何使用版本控制系统,如Git,来管理代码变更和团队协作。

    1.2.4测试阶段

    测试阶段教会了我软件质量保证的重要性。我学习了不同类型的测试方法,如单元测试、集成测试和系统测试,并理解了自动化测试的价值。但是还是模拟用户各种操作这种测试使用得多,这个阶段提升了我的分析和调试能力,还有观察能力。

    1.2.5发布阶段

    发布阶段让我了解到项目管理和产品生命周期管理的知识。我学会了如何准备发布计划,进行版本控制和变更管理,并理解了持续集成和持续部署(CI/CD)的概念。这个阶段提升了我的项目管理能力,让我学会了如何有效地将产品推向市场。

    1.3心得体会

个人项目
这次的任务主要挑战我认为包括对JSON数据的解析、单元测试的编写以及打包文件的处理。在解析JSON数据时,需要处理各种可能的情况,确保程序在面对异常输入时能够正确输出结果。单元测试的编写也是一个关键步骤,需要覆盖各种情况,包括正常情况和异常情况,以确保代码的健壮性。此外,打包文件为JAR包时常常伴随着各种奇怪的问题,需要投入大量的时间来处理。这可能包括依赖项的管理、文件结构的调整以适应JAR包的要求,以及一些与特定构建工具或环境相关的问题。
总体而言,任务虽然在题目分析上并不复杂,但在实际编写过程中可能会遇到各种琐碎的问题,需要不断查找和解决。我在此期间通过上网查资料,问同学等方法慢慢解决了这些问题。不过经过这次作业,我已经可以解决对对JSON数据的解析、单元测试的编写、性能优化以及打包文件的处理等问题,并且了解到了PSP表格如何填写,以及第一次实现项目和文档共同构建,还是收获很大。

结对编程
通过结对编程,我学会了从不同的角度思考问题,这极大地拓宽了我的视野。当遇到难题时,我的队友能够用不同的思路来审视问题,这种多元化的视角常常能够迅速找到问题的症结所在,进而提出有效的解决方案。这种协作不仅提高了解决问题的效率,也促进了知识的共享和个人的成长。
此外,结对编程还教会了我如何更有效地沟通和表达自己的想法,这对于团队合作至关重要。我学会了倾听队友的意见,尊重不同的观点,并在决策过程中考虑团队的整体利益。

团队项目
第一次接触这种大型的多人项目,经历了一个软件开发的全过程,对软件开发周期和阶段有了明确的认识。团队项目的经历让我深刻体会到了团队协作的力量和重要性。在团队项目的过程中,我与队友共同面对挑战,分担任务,这不仅提高了工作效率,也使得整个编程过程变得更加愉快和富有成效。我们相互之间的沟通和协作帮助我们快速解决了一些棘手的问题,这些问题如果仅凭一己之力,可能需要更长的时间去解决。团队一起解决问题,不仅锻炼了我的能力,也让我学会了在压力下保持冷静。这次经历对我的技术提升和职业发展都有很大帮助,更让我深刻感受到团队协作的重要性。

1.4自我评分

目标内容评分解释
1理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。94我已对软件工程师的职业道德和软件开发的社会影响有了深入理解,但缺乏在专业公司团队中的实践经验,因此仍需在真实工作环境中进一步深化认识。
2掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。90我掌握了需求分析的基本技能,但在实际应用中,理解并准确表达客户的多样化需求仍具有挑战性,需要进一步的专业训练和实践。
3掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。92在实践课中,我对软件开发的全过程有了全面的认识和实践,能够遵循设计原则完成设计模型,但在技术评审和方案优化方面还有提升空间。
4能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。91经过软件评测实践,我基本具备了评测软件质量得能力
5遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。95我在团队开发中已经能够熟练遵循文档标准并规范撰写各类文档,有效提升了与业界同行的交流能力。
6具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。90我在团队项目中展现出良好的团队合作精神和沟通能力,能够协调团队成员共同推进项目进展,但仍需在领导力方面进一步提升。
7能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。89我对软件项目管理的构成要素和工作量估算有了初步了解,但在实际应用和工具选择方面还不够熟练,需要更多实践来加强项目管理能力。

2、个人技术总结

Spring框架中的事务管理

概述:Spring框架的事务管理是确保数据一致性的关键机制。学习Spring事务管理是因为在企业级应用中,事务控制是必不可少的。技术难点在于理解事务的传播行为和隔离级别。

博客链接: https://bbs.csdn.net/topics/618862947

...全文
58 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧