软件工程实践总结——轻舟已过万重山

222100409任思泽 2024-06-06 23:26:07
这个作业属于哪个课程2302软件工程
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标完成对软件工程实践课程的总结、个人技术的总结
其他参考文献《构建之法》、CSDN

目录

  • 一、课程回顾与总结
  • 1、回顾自己思考过的5个问题
  • 1.1 以前思考问题的博客
  • 1.2 再解答
  • 1.3 新问题
  • 2、5个阶段的收获
  • 2.1 需求阶段
  • 2.2 设计阶段
  • 2.3 实现阶段
  • 2.4 测试阶段
  • 2.5 发布阶段
  • 3、结合经历谈谈心得
  • 3.1 个人项目
  • 3.2 结对编程
  • 3.3 团队项目
  • 4、对各个课程目标的掌握程度
  • 二、个人技术博客
  • 2.1 博客链接
  • 2.2 概述

一、课程回顾与总结

1、回顾自己思考过的5个问题

1.1 以前思考问题的博客

软件工程实践寒假作业

1.2 再解答

Q1:3.1 代码量与个人的编码能力有直接关系吗?

A1:
编写更多代码确实可以提升一个人的编码能力,尤其是在解决实际问题的过程中,通过不断地编码实践,我们能够积累经验、提高效率。然而,编码能力不仅仅是代码量的堆积,更需要注重质量和深度。高质量的代码不仅包括正确性,还需要良好的可读性、维护性和扩展性。在编写代码的过程中,思考如何优化算法、提高性能、设计更合理的架构也是非常重要的。此外,多样化的练习和挑战是必要的。除了常见的编程任务,还应该尝试不同领域的问题,如数据处理、网络编程、系统设计等。通过参与开源项目、进行代码审查和接受同行反馈,也能够大大提升编码能力和视野。综上所述,编码能力是多方面积累的结果,代码量只是其中的一个指标。

Q2:3.1 如何让自己能够跟上软件工程发展,做一个永不落伍的开发者呢?

A2:
要成为一名永不落伍的开发者,首先要保持持续学习的习惯。这不仅包括阅读技术书籍、参加培训课程和在线教育平台,还要关注行业权威博客、技术论坛和最新的研究论文。其次,参与开发社区和技术圈子是必不可少的。通过参加技术会议、研讨会、黑客马拉松等活动,可以与同行交流,了解最新的技术动态和趋势,分享经验和见解,拓展人脉。此外,实践是巩固和提升技能的关键。将学到的知识应用到实际项目中,尝试使用新的编程语言、框架和工具,解决实际问题。在实践中,参与开源项目和团队合作可以获得宝贵的经验和反馈。最后,制定并不断调整职业发展规划,设定明确的短期和长期目标,定期评估自己的技能和知识,寻找提升的机会。保持对新技术的敏感性,勇于尝试和创新,才能在快速变化的行业中保持领先地位。

Q3:3.4 低层次的问题能依赖工具解决么?

A3:
工具的使用应该是辅助,而不是依赖。通过工具我们可以提升效率,但也需要确保自己能够独立解决问题和理解其背后的逻辑。例如,在使用集成开发环境(IDE)时,虽然它们提供了大量便利功能,但我们仍然需要了解代码的底层执行机制和原理。通过这种方式,我们既能享受工具带来的便利,又能保持对基础知识的掌握,从而在未来面对更复杂的挑战时,具备足够的灵活性和深度理解能力。

Q4:1.1 如何区分一个好的程序员和不好的程序员呢?

A4:区分一名“好”的程序员和“不好”的程序员,可以从多个方面进行评估。首先,扎实的专业知识和编码能力是基础。好的程序员不仅能够编写高效、可读性强的代码,还能灵活运用设计模式和最佳实践来解决复杂问题。其次,良好的逻辑思维和独立解决问题的能力也是关键。优秀的程序员能够精准理解需求,设计合理的解决方案,并具备出色的调试和问题排查能力。

除此之外,团队合作和沟通能力不可或缺。好的程序员能够与团队成员有效沟通,理解并配合团队的目标,积极参与代码审查和技术讨论,共同提升团队整体水平。再者,持续学习和适应新技术的能力也是评判标准之一。技术不断发展,保持对新知识的敏感性和学习热情,能让程序员在快速变化的行业中始终保持竞争力。

最后,职业素养和态度同样重要。优秀的程序员具备责任感和职业道德,能够按时交付高质量的工作成果,积极主动地寻求改进和优化的机会。综合来看,一名“好”的程序员不仅在技术上过硬,更在沟通、协作和学习等方面全面发展。

Q5:3.1 对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?

A5:
实际上,专一和广泛并非完全对立。现代工程师应具备“T型”技能结构,即在一个领域具备深厚的专业知识,同时在多个相关领域拥有广泛的理解和技能。通过这种方式,工程师不仅能够在特定领域中精通,还能在广泛的技术环境中灵活应对,提供综合性解决方案。最终,工程师应根据自己的职业目标和兴趣,结合岗位需求,平衡专一性和广泛性的发展,实现个人与职业的最佳匹配。

1.3 新问题

针对个人、结对和团队开发我各自都提出了两个新问题。

  • Q1. 在软件开发过程中,如何有效地进行代码审查以保证代码质量?

  • Q2. 面对频繁变更的需求,如何在项目开发中保持代码的可维护性和灵活性?

  • Q3. 结对编程中如何有效分配Driver和Navigator的角色,以提高协作效率?

  • Q4. 结对编程如何在不同技能水平的开发人员之间实现知识共享和共同进步?

  • Q5. 如何通过持续集成和持续交付(CI/CD)来提高团队的开发效率和代码质量?

  • Q6. 如何在团队开发中建立和维护良好的文档文化,确保知识的共享和传承?

2、5个阶段的收获

2.1 需求阶段

  • 我从接触到能熟练使用 NABCD 模型去进行需求分析;
  • 在个人项目中,我初次接触了 NABCD 模型,
  • 团队项目中,我在和项目经理一起使用原型模型需求分析方法,以及从用户的角度思考的方式,和UI开发人员以及项目开发人员沟通交流,市场用户调查等方式,成功完成了需求分析文档的编写;
  • 我收获到了使用NABCD法和原型模型需求分析等方法来分析用户需求的能力。

2.2 设计阶段

  • 在设计阶段,我学会了如何进行原型设计、数据库设计和 UML 设计
  • 在结对编程和团队项目中,我学到了如何将整个项目的功能分成清晰的功能模块;

2.3 实现阶段

  • 在实现阶段,我负责的内容比较花样,主打的就是趁着软件工程实践这门课来体验各个角色。
  • 个人作业——文件读取,我进一步学习了java语言,掌握了使用FastJson进行JSON数据的解析等;
  • 在结对编程中,我使用了新学不久的golang语言,并配上了gin、viper的技术,学会了如何使用使用gin框架的binding注解进行参数校验以及利用go官方的encoding/json包将json数据解析成结构体等;
  • 在极限编程中,我参与了前端的开发,学习了 Vue3框架,完成了用户模块前端编码。学会了如何使用Vue + ElementUi进行页面设计与开发,并学会通过使用 Axios 库向后端接口发送 HTTP 请求来获取后台数据;
  • 在团队项目中,我主要负责各类博客以及PPT的撰写和 Unity 框架中事件类的设计,体验了产品经理的身份,设计了各式各样的事件类和不断学习了如燃尽图等各种新的制图技巧,除此之外,作为产品经理,协调队友和促进交流、平衡工作量等也给我带来了非常难忘的体验。

2.4 测试阶段

  • 个人作业——文件读取中,我学会了使用junit模块来对实现打印选手信息、打印比赛项目信息和详细信息功能的core进行单元测试和覆盖率测试。
  • 软件评测作业中,我通过测试多款智能 AI 语言模型,学会了压力测试和边界测试的技术。
  • 在团队项目alpha冲刺任务中,我针对我们团队的游戏《遗忘之海》从地图加载响应、按钮响应、帧率稳定性、高负载延迟等方面进行了性能测试。

2.5 发布阶段

  • 在个人项目中,我学会了将java程序打包成jar包的形式
  • 在结对编程中,我学会了部署服务器的方法(包括前端Vue打包,后端Golang的Maven打包)
  • 在团队项目中,由于我们团队制作的是单机游戏,所以没有部署到华为云服务器上,但是我学会并实践了推广产品和收集用户反馈等。

3、结合经历谈谈心得

3.1 个人项目

  • 在个人项目中,我深刻体会到了自我管理和时间规划的重要性。起初,因为项目布置在假期,我放松了警惕,导致项目进度一度滞后。然而,随着截止日期的临近,我意识到了紧迫性,开始加班加点地工作。这次经历教会了我,即使是个人项目,也需要有良好的规划和自律,以确保按时完成任务。
  • 技术层面上,我通过项目学习了JSON文件的解析、JUnit的单元测试、以及使用Maven进行项目管理。这些技能不仅提升了我的编程能力,也让我对Java开发有了更深入的理解。我意识到,不断学习和适应新技术是软件开发中不可或缺的一部分。

3.2 结对编程

  • 结对编程是一次全新的体验。与个人项目和团队项目都不同,这是新颖的两个人的小型合作任务,它要求我与队友紧密合作,共同完成项目设计和开发。相较于团队项目,在这个过程中,我更加深入地与另一名队友沟通想法,解决分歧,以及整合不同的工作风格。通过结对编程,我不仅提高了我的编程技巧,更重要的是,我学会了小型合作的有效沟通和协作。
  • 在技术选择上,设计阶段,我们第一次学习与实践了原型设计,借助墨刀这款软件我们设计了较为精美的原型。实现阶段,我第一次将 golang 用于实际项目开发,一边学习一边编写,这次经历让我认识到,勇于尝试新技术并快速适应是软件开发者的重要素质。

3.3 团队项目

  • 在团队项目中,我担任了产品经理的角色,这让我有机会更深入地了解项目需求和任务分配。通过与队友的紧密合作,我们建立了有效的沟通机制和任务管理流程,确保了项目的顺利进行。
  • 我深刻认识到,团队协作的关键在于每个成员的积极参与和对共同目标的承诺。即使在技术能力上有所差异,只要团队成员愿意学习、配合,每个人都能为项目的成功做出贡献。

4、对各个课程目标的掌握程度

目标掌握程度(百分制)解释
目标1:理解软件工程师的职业道德规范和实践要求,了解国情社情民情,理解软件产品对社会、健康文化等影响,树立积极向上的软件开发理念。93分我在软件开发中始终坚持职业道德规范,注重软件产品的社会影响,积极推动健康文化理念,致力于开发正能量软件产品。
目标2:掌握需求分析的全过程,能辨别客户表述的多样化要求,熟练使用需求表达工具,能够规范、准确地表达客户的需求,构建需求分析模型。91分在项目中,我能够准确捕捉需求,通过使用专业工具进行需求分析,并成功构建清晰的NABCD需求分析模型,确保项目按预期进行。
目标3:掌握软件开发的全过程,遵循体系结构设计方法和基本设计原则,通过正式的技术评审,完成从体系结构设计模型、数据设计模型和构件级设计模型,形成面向高效可靠的服务组件设计方案或软件系统设计方案。87分我能遵循体系结构设计方法,完成各级设计模型,并通过技术评审,为项目提供高效可靠的设计方案,确保系统设计的完整性和可靠性
目标4:能够执行从组件到软件系统的技术评测,具备设计模型的评判能力,具有创新设计意识,能够优选设计方案。92分在项目开发中,我能够编写规范的技术文档,确保文档的准确性和可读性,并具备与同行进行技术交流和协作的能力。
目标5:遵循软件开发各阶段文档标准,采用规范的表达,掌握需求规格说明书、系统设计说明书、系统测试报告等文档撰写方法,具备与业界同行交流能力。90分在团队项目的开发过程中,我都是采用需求规格说明书、系统设计说明书、数据库设计说明书等文档来攥写方法,能够有效与同行交流。
目标6:具有良好的团队意识和合作技能,能够与其他成员开展有效的沟通和协作;能够组织、协调或指挥团队开展工作。97分我在团队中不仅能与成员进行有效沟通,还能协助项目经理组织和协调团队工作,确保项目按计划顺利进行,并提升团队合作效率。
目标7:能够辨别具体软件项目管理中涉及的构成要素,掌握软件规模和工作量的估算方法,能够选择合适的工具规划软件进度并对项目管理过程进行配置,具备初步的管理复杂软件工程项目的能力。86分在项目管理方面,我能够识别关键要素并进行基本的工作量估算,但在实际应用中仍需更多经验。

二、个人技术博客

2.1 博客链接

个人技术总结——FastJSON处理JSON数据

2.2 概述

此次个人技术总结我选择了第一次个人实战中遇到的使用FastJSON处理JSON数据的技术总结。因为这是我与本学期软件工程实践课程第一次在代码上的邂逅,所以我也选择它来画上句号,这就是所谓的“轻舟已过万重山”。

在进行Java应用开发时,解析和生成JSON数据是一个非常常见的需求。而FastJSON作为一个高性能的JSON库,广泛应用于各种Java项目中。

FastJSON的优势在于其高效性和易用性,能够快速解析复杂的JSON结构,并且提供了丰富的功能来满足各种JSON操作需求。尤其是在处理嵌套JSON结构、数组以及日期格式等方面,FastJSON具有明显的优势。

然而,在实际使用过程中,我们可能会遇到一些挑战,比如如何处理复杂的嵌套JSON结构、如何确保日期格式的正确解析与生成,以及如何处理大数据量的JSON等问题。为此,掌握FastJSON的高级用法和最佳实践是非常必要的。因此,本篇个人技术总结博客将详细介绍FastJSON的基本使用方法及一些高级技巧,帮助开发者更好地应用FastJSON进行JSON数据的处理。

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

122

社区成员

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

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