从“bug”到“成就感”——软件工程大冒险

news/2024/12/18 23:58:16/文章来源:https://www.cnblogs.com/--xxxx-----/p/18614862

从“bug”到“成就感”——软件工程大冒险

这一学期的《软件工程》简直可以称为我的“技术冒险之旅”。从最初的迷茫,到逐渐掌握核心技能,再到团队合作中的互助与共识,到最后顺利完成项目时的“轻舟已过万重山”,经历了从“bug”到“成就感”的转变,既有汗水,也有欢笑。回顾整个过程,收获满满,但也不乏一波三折的挑战。

知识的“破茧”时刻:软件工程的系统思维

一开始,我对软件工程的很多概念感到困惑,比如需求分析、系统设计、开发流程等,感觉这些都非常抽象。但随着课程进度的推进,这些看似复杂的理论知识,竟然在实际项目中找到了自己应有的位置。尤其是在团队项目中,我开始体会到软件工程的真正内涵——它不仅仅是技术的堆砌,更是如何合理地组织与规划这些技术,使其服务于实际需求。

记得第一次独立设计软件时,我的脑袋几乎要炸开。每个模块、每个接口都需要反复思考和调整,这一过程虽然痛苦,但也让我明白,所有复杂的理论,最终都需要通过实践来转化为实际能力。一开始觉得它们很抽象,现在才发现,它们其实是帮助我们在实践中找到解决方案的指南。

技术的“蜕变”之旅:从迷茫到自信

在刚接触软件工程时,面对各种编程语言、工具和框架,我的内心充满了迷茫和焦虑。每当看到复杂的代码和技术难题,我总是觉得自己无法掌握这些技术,甚至在结对作业初次项目开发时,很多技术障碍让我怀疑自己是否适合从事开发工作。但随着学习的深入,尤其是经历了几次团队协作和项目开发后,我发现自己的技术心态发生了巨大变化。

最初,写项目代码让我感到焦虑与压力,无从下手。然而,随着一次次的调试和修复bug的过程,我逐渐理解到,写代码其实是一个不断试错、调整和完善的过程。每次遇到瓶颈时,我学会了冷静思考,慢慢地,我不再害怕bug,相反,我开始享受解决问题的过程,就像是一场场“迷宫冒险”,每次解开一个难题,都是一种成就感的升华。

如今,回头看,曾经那些令我感到头痛的技术难题,已经成为了我成长路上的标志。每一次成功的调试和功能实现,都让我更深刻地理解了“bug”不仅仅是问题,更是技术成长的催化剂。

1. AIGC加持的创意体验

在第一次个人作业中,我进行搭建了个人GitHub主页,介绍了自己以及掌握的技能,还通过AIGC图像生成工具为自己的GitHub和博客园账号设计了一个独特的个人Logo。这一任务让我感受到了人工智能在创意设计领域的强大能力。我使用了Craiyon工具,通过简单的文字描述,成功生成了符合我风格的个人Logo,整个设计过程充满了探索性和创意。

作业中还有一个自我评估的环节,要求我们写下“目前的代码量”和“本学期希望达到的代码量”。当时只道是寻常,我简单地写下了希望提升50%左右的目标。然而,回顾这学期的学习和项目实践,我发现自己远远超出了这个目标————简直是日日夜夜为软件工程奋斗。从最初的“希望提升”到现在的“不断突破”,我的代码量和技术能力都得到了显著提升。

2. 游戏开发初次启程

第二次个人作业是开发一个“羊了个羊”风格的消除类小游戏。通过Python和GitHub Copilot等AIGC工具,我顺利完成了游戏的基本功能。然而,最终成果虽然代码功能上基本达标,整个游戏的呈现却显得有些简单和粗糙。游戏的交互性和流畅度有所欠缺,图像设计也较为基础,导致玩家体验没有达到理想中的水平。

这次作业让我意识到,完成一个项目的基础功能只是开始,后期需要更多精细的优化和完善,才能让项目更具吸引力和可玩性。

3. 设计原型的协作试炼

第一次结对作业中,我与队友共同设计了一个名为“Campus Linker”的项目原型,目标是解决大学中跨专业合作所面临的诸多挑战。我们通过调研用户需求,设计了系统的功能模块和流程,明确了不同角色(学生、教师、管理员)的权限与操作。这个原型模拟了一个跨学科团队如何协作推进项目,从需求讨论到功能设计,再到最终的方案优化。

在设计过程中,虽然我们在一些功能和UI设计上产生了分歧,但通过有效的沟通和协作,最终找到了一个双方都满意的解决方案。这次作业不仅让我体会到了团队合作的力量,也让我学到了如何合理分配任务、如何通过有效的沟通解决问题。

特别是在面对面编程和在线合作的过程中,我们意识到及时调整和反馈对项目的顺利推进至关重要。通过这次作业,我不仅体验到了原型设计的挑战,更学会了在团队中如何协调与配合。

4.原型落地编码行动

在第二次结对作业中,我们将之前的原型设计转化为实际可用的微信小程序,通过微信开发者工具和云开发实现了基本功能。我负责的模块包括项目模块,消息聊天模块和个人中心模块,其中实时聊天的实现过程相当棘手,一度卡在技术实现的瓶颈上。

随着开发的深入,我们渐渐意识到,原型设计和实际落地之间有着巨大的差距。将抽象的设计思想转化为具体可行的代码是一项充满挑战的任务。尤其是在使用微信小程序开发时,我们遇到了很多我们之前未曾预料到的技术问题,解决这些问题不仅考验了我们的编程能力,也挑战了我们的耐心和协作能力。

这个项目的开发过程中恰逢国庆假期,队友为了项目提前返校,而我也牺牲了宝贵的假期进行项目开发。尽管面临时间和技术上的多重挑战,我们依然通过协作和不断调整,逐步推进了项目的实施。除了开发工作外,我们还编写了项目文档(README)和单元测试,确保项目的可维护性和稳定性。

在这次作业中,我们首次使用GitHub进行团队协作和版本管理,起初对其不熟悉,但随着项目进展,我们逐渐能够熟练地处理冲突并进行有效管理。

尽管我们在时间管理上存在一定失误,低估了项目所需的工作量,导致项目进度拖延,最终的交付版本仍显得较为粗糙,很多功能未能完成,博客也匆忙提交。

然而,这次经历让我深入理解了时间管理、团队协作和项目开发流程的重要性。

5. 福小研 is all you need

在第一次团队作业中,我们的任务是开发一个基于LLM(大语言模型)接口的软件,为传统的软件赋予全新的功能和体验。经过团队的集思广益,我们决定设计一款面向考研学生的app——“福小研”,这款应用通过LLM智能AI助手为考生提供全天候的服务,涵盖解答疑难问题、情感陪伴、学习建议以及资源推荐等多个方面。

“福小研”不仅仅是一个简单的学习工具,它更像是一个全方位的备考伙伴,时刻陪伴在考生的学习旅程中。通过自然语言处理技术,AI助手能精准理解用户的需求,提供个性化的学习方案,并且在考研过程中给予心理支持和鼓励,极大地提升了备考的体验感和效率。

在确定设计方向后,我们发起了问卷调查,进一步了解考生的具体需求。根据收集到的反馈信息,我们设计了五个核心板块:读书魂、小研帮、小研圈、上岸人、以及研小fu(智能AI助手)。这些板块分别涵盖了学习进度管理、资源获取、考生互动、成就追踪等多个方面,为考生提供全方位的支持。

此外,我们还精心设计了产品logo和队名队徽,以便赋予项目独特的品牌形象。由于这是一个由9人组成的大型团队,前期每个成员都非常积极,大家的配合效率高,工作进展也非常迅速。为了提高工作效率,我们将团队分为若干小组,我与另外两位队友组成了原型设计小组,专注于项目原型的设计。

由于我们没有完全理解任务要求,提前完成了第二阶段的原型设计任务,并且设计成果令人非常满意。

这次团队合作不仅让我深刻体验到了分工合作的力量,也让我对原型设计和用户需求的转化有了更深的理解,是一次很棒的团队体验。

6.功能板块大开发

因为上个阶段项目原型设计就已经基本完成,因此我们的任务是对原型进行进一步的优化和完善,同时完成管理员界面的设计。此次任务团队内依然分为多个小组,由三位同学负责概要设计,其余同学提前进行了软件的开发。这次开发两个板块:上岸人小研圈。我和另外两位队友负责上岸人板块的开发

我们发现“上岸人”板块竟然包含了三十多个页面,最后经过讨论,最终决定砍掉不必要的消息模块。在这里面我主要负责登录注册、福币榜、每日任务、我的福币页面的开发设计。

我们这次采用了HBuliderX的vue3进行前端开发,后端则采用了阿里云,前后端不分离。得益于之前结对开发的经验,这次上手相对较快,开发进度也比较顺利,实现的页面UI和功能效果也比较好。在项目截止前,我们初步完成了小组负责的板块。但由于时间有限,我们没有将各自开发的页面进行完整串联,每个页面也存在一些细节问题和bug。
由于我们小组成员之间的合作较为紧密,交流也很顺畅,因此开发过程中的协作非常高效,大家能够及时讨论并解决问题。


7. 现场编程极速挑战

这次任务是现场编程,要求开发一个简单的个人记账本,帮助用户记录收入和支出,并进行基本的统计和查看。由于现场编程的时间限制,我们快速确定了每个人的分工,迅速投入开发工作。由于时间紧迫,我们迅速明确了每个人的分工,立即投入开发。起初,每个人都因为时间压力而感到有些慌乱,担心不能按时完成。然而,随着时间的推移,大家冷静下来,工作效率逐渐提升。大家互相帮助,优势互补,最终顺利完成了记账本的基本功能。

第一次参与现场编程,真的是一种全新的刺激体验,紧张又充实。

8. 编程不止眼前的代码还有无限的debug

进入Alpha冲刺阶段,我们对项目的亮点与不足进行了全面总结和反思,随后进入了全力开发模式。随着所有模块的串联,debug成了我们的日常工作,好痛苦,有种拆了东墙补西墙的无力感。为了记录这段紧张而充实的时光,我们还拍摄了每日冲刺的vlog。拍摄过程中笑点不断,视频因过长被“精简”成了“2倍速投胎风”。
真的每天都在争分夺秒写代码,睁眼是你,闭眼也是你————软件工程。

9. Beta冲刺与终极代码之战

在最后的Beta冲刺阶段,我们针对Alpha阶段暴露出来的问题进行了集中攻克与优化,并重点分析了我们的“杀手功能”。单元测试也在同步进行。

最后的Beta冲刺以产品发布会的形式进行,各个团队进行自己产品的sale,每个团队的演讲都很精彩,我们组更是"强中强",凭借出色的表现拿下了老师颁发的多个奖项。

MVP结算时刻:从“破防”到成就

回顾整个软件工程课程,真的是一场大冒险,涵盖了各个方面的挑战与成长。从最初的技术探索,到如今的团队协作与项目管理,每一步都让人感慨万千。最初接触这门课程时,我对它的理解仅停留在编程层面,觉得它只是一个学习如何写代码、掌握编程技巧的过程。但随着课程的深入,我逐渐意识到,软件工程不仅仅是写代码,它更注重如何在团队中有效协作,如何进行需求分析、版本控制、测试、以及合理管理项目。这些都直接影响了软件的质量与开发效率。

从最初的“破防”时刻到如今的“蜕变”,我在这门课程中经历了技术与心态上的双重成长。

编写的代码行数: 在这门课程中,我编写了大约 1w 行代码。这个数字包含了从个人作业到团队项目开发中的代码量,涵盖了前端设计、后端实现以及部分功能测试代码。这个数字远远超出了在课程开始我给自己设定的目标,现在回想还是很惊讶,软件工程真的写了很多代码!!但是确实在这个过程中,看到了自己技术的成长。

软工实践的各次作业花费的时间:

作业 花费时间
第一次个人作业 4h
第二次个人作业 7h
第一次结对作业 10h
第二次结对作业 30h
第一次团队作业 15h
第二次团队作业 30h
现场编程作业 3h
团队作业 beta 冲刺 35h

在软件工程课程上花费的时间:

累计时间 实际周均时间 预计周均时间
134(h) 13.4(h) 12(h)

通过记录这些花费的时间,我意识到课程的每一个环节都没有浪费,都是自己成长的印记。

最深刻的作业/答辩:
我印象最深刻的是最后beta 冲刺的产品发布会答辩。看到大家的项目从最初的构想到最终的落地,能够实际演示并体验,真的是一种很奇妙的感觉。

我们的“福小研”也经历了不断的编码和调整,逐渐从一个初步的设想到最终的完整项目。每一次修改和优化,都让它变得更加完善。

当项目顺利完成,所有的bug都解决,系统运行起来的时候,心中的那份成就感简直无法用言语形容。那一刻,我明白了所有的努力和付出都是值得的。“轻舟已过万重山”,虽然过程中有过无数次的跌倒和失败,但最终收获的,是那种“全身心投入后的喜悦”。

介绍学习到的新技术或生产力工具以及它们给你带来了哪方面的帮助?

  • Git 和 GitHub:学习了版本控制工具 Git 和团队协作平台 GitHub,能够有效管理代码版本并进行多人协作。通过在项目中使用 Git 进行分支管理、冲突解决,提升了团队协作的效率。

  • 微信小程序开发:掌握了微信小程序开发框架,学习了如何使用微信开发者工具进行前端开发,并利用云开发实现后端数据存储和实时通信等功能。

  • Vue 3 和 HBuilderX:在团队开发中,我们使用 Vue 3 和 HBuilderX 进行前端开发,Vue 3 的响应式设计和组件化开发提高了代码的可维护性,同时 HBuilderX 提供的高效开发环境加速了我们的开发进度。

  • 阿里云云服务:学习了使用阿里云提供的后端服务,处理云数据库的管理、存储和访问等功能,简化了项目的后端开发。

  • 单元测试和调试工具:在项目中接触到单元测试,学习了如何通过编写测试用例保证代码的稳定性,同时掌握了调试工具的使用,提高了开发过程中的问题定位效率。

技术之外,这门课程还给你带来了哪些方面的提升?

  • 团队协作能力:通过团队作业和结对编程,提升了与队友的沟通和协作能力。在项目中每个人都有不同的分工和角色,学会了如何在团队内协作,协调各自的工作进度。

  • 时间管理和任务分配:在课程的多个阶段中,我们学会了合理安排时间和分配任务,特别是在紧张的Beta冲刺阶段,能够在规定时间内完成任务,提高了自己的时间管理能力。

  • 解决问题的能力:在开发过程中遇到各种技术难题和挑战,经过不断调试和学习,逐步解决问题,增强了面对问题时的冷静和解决问题的能力。

  • 抗压能力和耐心:每个项目和任务都有紧迫的截止日期,学习如何在压力下保持冷静并高效完成工作。特别是在调试和单元测试阶段,学会了如何耐心地处理问题,避免焦虑。

  • 创新思维:在设计和开发过程中,尤其是功能的创新和优化上,学会了如何从用户需求出发,提出新的创意并有效实现,提升了创新的能力。

如果还有什么想记录的或者想说的,就写在这儿吧!

  • 对未来专业道路的影响:通过这门课程,我对软件工程的理解更加深入,尤其是团队开发和项目管理的经历,使我对未来在软件开发和技术管理方面的职业方向产生了更清晰的规划。我现在更加确定自己想要继续深耕这个领域,在未来的工作中更多地参与到开发和项目管理中。

  • 最有趣的课程片段:在团队作业的Beta冲刺阶段,大家为了完成项目而全力以赴,常常加班到深夜,虽然充满压力,但每当我们解决一个难题,看到项目逐渐成型时,成就感和团队的凝聚力是非常有趣的。

  • 照片或截图:这里可以插入一些课程中的照片、团队合作的截图,或者项目的展示截图,以此来记录这段难忘的时光。

感谢的“最后一程”:从团队合作到成长的共鸣

在这个学期的软工实践课程中,有很多人值得我特别感谢。

首先要感谢我的团队成员,结对编程的搭档王露洁以及“研途无忧”团队的每一位成员。项目的成功离不开每个人的努力。每一次编程任务中,大家都充满热情,尽管也遇到了不少冲突、摩擦和技术难题,但每当遇到困难,我们都能齐心协力,迅速找到解决方案。通过这段经历,我深刻感受到了团队合作的愉悦与力量。

感谢张栋老师和吴越钟老师,感谢他们在课程中的耐心指导,以及给我们提供的技术提升与合作展示的平台。在每一次的答辩和项目展示中,老师们提出的意见让我们看到了自己项目的不足,并不断激励我们不断提升。

感谢软工课程中的每一位同学,大家的项目都充满创意,每次看到大家的答辩都让我受益匪浅,有很多特别好的idea。

感谢自己。回顾整个学期,虽然常常被代码困住、为项目奋战到“天亮”,有过迷茫和疲惫,但每一次的挑战和困难都让我不断成长。感谢自己,真的辛苦了!这段经历不仅让我掌握了新技术,锻炼了软件工程的系统思维,也提升了我的心态,并让我更清楚地认识到自己在软件开发领域的兴趣和未来发展的方向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855108.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI安全漏洞】VLLM反序列化漏洞分析与保姆级复现(附批量利用)

#CVE-2024-9052环境需要 Linux(这里使用kali)、Anaconda首先安装Anaconda 前言 最好使用linux,如果使用windows可能会产生各种报错(各种各种各种!!!),最好使用Anaconda,方便独立管理虚拟机 使用conda创建虚拟机、python要求3.10 conda create -n vllm_beam python=3.…

动态数据源 @DS 注解源码解析

参考:动态数据源切换——@DS 注解源码解析前言 借助 dynamic-datasource 可实现多数据源读写,其核心注解@DS用来动态切换数据源。 下面介绍@DS注解的实现原理。 如何使用 在 pom 中引入依赖: <!-- spring-boot 1.5.x 2.x.x --> <dependency><groupId>com.…

【开源系列】CentOS7下Docker环境搭建开源堡垒机Apache Guacamole

Apache Guacamole 是一个无客户端远程桌面网关。它支持 VNC、RDP 和 SSH 等标准协议。不需要插件或客户端软件。借助 HTML5,一旦在服务器上安装了 Guacamole,只需使用 Web 浏览器即可访问桌面。 1.Guacamole的架构介绍 Guacamole不是一个独立的网络应用程序,而是由多个部分组…

ThreeJs-07操控物体实现家具编辑器

本章节实现效果,通过gui快速添加场景,家具,并且可以快速设置家具实现一个编辑器效果一.基础设置与物体添加列表 用之前做过的一个案例来改首先不要这个模型,然后换个背景颜色,并且添加一个网格辅助器1.1 添加场景 先往事件对象里面添加一个函数,到时候点击就会调用这个函…

数据集划分;参数超参数;交叉验证

在机器学习和深度学习中,将数据分为训练集(Training Set)、验证集(Validation Set)和测试集(Test Set)是常见的做法,每部分数据承担不同的任务: 一.基本概念 1.训练集(Training Set):训练集用于训练模型,即通过算法调整模型的参数以最小化损失函数(Loss Function…

爱米导航网(imi),您的互联网书签搭子

爱米导航(Imi)网是一个综合性的互联网资源聚合平台,它以其丰富的内容和便捷的服务受到了广大用户的喜爱。该网站收录了数千个不同类型的互联网工具网站,覆盖了AI工具、自媒体运营工具、产品经理工具以及UI设计师工具等多个领域,为用户提供了一个一站式的解决方案。 爱米导…

记录一次springboot启动流程不完整版

1.Sort ApplicationInitializer:2.sort Listener:3.getRunListener:4.eventPublishingRunListener.starting 发布启动中事件; 构建 ApplicationArguments 参数, 4.1prepareEnvement: [StubPropertySource {name=servletConfigInitParams}, StubPropertySource {name=servletC…

键盘连击软件解决方案

解决的问题 jjjjjjjjjjjjjjjj键盘连击了,windows系统中的“筛选键”功能就能短暂解决这个问题,可是筛选的时间太长无法在面板设置更短的时间,但可以使用软件解决。 方法一 系统 筛选键 win+i 打开设置 -> 搜索“筛选键” -> 打开筛选键开关 使用限制:重复键最低只能设…

【建议收藏】最新版IDEA2024.3及 AI Assistant 一键激活到2099

成功永久激活 一、支持的IDE和版本支持JB家族所有IDE激活 支持版本为2021.3~2024.1二、如何破解激活 第一步:激活工具下载 为了防止破解工具被删除,通过公众号回复“「永久激活」”获取下载最新工具(如过期,请记得提醒我哦) 关注公众号后台回复“「永久激活」”,获取最新…

《平衡树》读后感

第一框,世界属于fhq-treap 是什么? 你说的对,但是《fhq-treap》是由范浩强自主研发的一款全新树形数据结构。数据结构发生在一个被称作「二叉搜索树」的幻想世界,在这里,被人创造的节点将被授予「随机优先级」,导引期望 \(O(\log n)\) 之力。treap 将扮演一位名为「根据优…

虚拟机unraid系统安装

首先下载unraid文件https://unraid.net/getting-started windows系统使用vmware虚拟机 创建虚拟机过程中注意usb的不同协议 2.0 3.0 由于unraid系统只能识别fat32协议的文件系统,因此需要将u盘格式化 可以使用easeus 或者 傲梅 https://www.easeus.com/partition-manager/ htt…

基于.NET WinForm开发的一款硬件及协议通讯工具

前言 今天大姚给大家分享一款基于.NET WinForm开发的一款硬件及协议通讯工具:PLC-CommunTools。 项目介绍 PLC-CommunTools是一款基于.NET WinForm开发的一款硬件及协议通讯工具,包含各类厂商的PLC协议及基础的TCP、串口通讯、IO口通讯等协议通讯功能的实现整合,注意还有一部…