学期回顾
1.1 我对软件工程的想象
Love At First Imagine
毫不夸张的说,我对软件工程这门课程是抱有100%的期待的,至少在素未谋面的时候是这样的。专业前两个学年的课程需要的代码量实在不多,大多也是单独编写算法。因此我很希望能够在这门课程上学到软件、平台的开发,学习具有框架的编程(对于强迫症来说看起来真是善心悦目:D),学会团队合作,学会使用高效的工具,结识朋友...(还有太多已经忘记)。但是课程真的是和我想象的一样吗?
bushi
初见
第一次遇见它,编写一个博客主页?还是轻轻松松完成了,但是不够美观啊,得提升一下审美!
第二次看到它,编写一个羊了个羊?小游戏有意思!但pygame是什么,从未使用过,GPT救我狗命,东问西学,也算完成。留了些许时间美化(还是不好看...)
第三次经过它,编写一个项目平台?html?js?css?php?java?flask?...设计、选型、学习、实践...对于两个毫无前后端经验的人,已有些许焦头烂额,甚至在最后几天还在技术选型,最后也算交了个粗糙的应用上去。温水煮青蛙初见端倪。
第四次撞见它,编写一个基于LLM应用?组队、讨论方向、分工...开会开会开会开会开会...写屎山写屎山写屎山...史上雕花史上雕花史上雕花史上雕花...太多了欲知后事如何,烦请老师继续查看
所学所得与反思
与软工相处一个学期,虽然课程紧张,时间还少,但还是颇有收获。首先是申请到了copilot大爹,为我的编程之路保驾护航。接着自己单独开发了一款小游戏,锻炼我如何使用高效的工具开始编程。然后是结对与团队作业,在这两个作业中我体验到了框架学习、开发平台与团队合作。但是事实上由于时间紧张,框架只是匆匆略过。由于自己不善交流与合作,团队合作中更多是一人单打独斗,遇到问题可能解决的也较满。也许,交流与团队合作会使这个项目更加完善?谁也不知道,那都是后话了...
1.2 只有键盘知道——投入与产出
在软工实践课程当中我编写了8888行代码。具体多少也实在不是很清楚,大几千接近一万吧,挑个8888吉利数,祝看到的老师/助教/同学,赚大米OvO。
忽略下载包的几万行代码
在结对项目中我参与了ProjectPartner的设计与开发,我在其中主要承担了后端开发的任务。
(我有话要说!非常好结对作业放国庆,使我假期旋转QAQ!!!!)
国庆出去看了几天世界,感谢队友!
结对作业都是我和我队友第一次进行软件开发,对前后端具体是什么都不太了解,对前后端在应用中各自应该完成的是什么也只是稍有听闻。恰逢祖国妈妈的生日,谁又想读书呢orz。于是,我们到了DDL的最后几天仍然在技术选型...队友学习了php,我看了flask...一点不知道怎么结合,最后队友又用上了前端三件套,总算是让应用初步跑起来了。但是时间紧任务重人还菜,原型设计中给自己画的大饼都得自己嚼下去,最后放弃了部分功能,完成了一个寻找项目搭子的应用。
这次任务,其实产出比较一般,因为大部分时间都是在学习前后端开发的相关知识。但是结对作业的完成为后面的团队作业打下了不错的基础,至少团队作业代码编写不再是从零开始。^ ^
在团队项目中我参与了行趣的设计与开发,我在其中作为后端组组长主要承担了后端开发的任务。
组长发了个分工意向就成了后端组组长,实在是让我有点心虚,只能现学现卖了。但是后面的结果证明当组长,虽然很累但是确实学到了更多的东西。
团队作业一开始是大家一起讨论应该怎么将LLM应用在软件中,最终选择了旅游规划为背景的应用并结合LLM进行功能的扩展。
在需求分析任务中,我负责制作调查问卷并发放,通过调差问卷的结果进行初步功能的取舍。
也许你想看看?
需求分析完成后就是设计组在墨刀上进行原型设计,这一阶段我们后端组主要与前端组沟通选择的技术架构和接口讨论等等,并且在每次开会上针对最新的原型提出各自的意见。
原型设计完成80%我们便开始了编程实现,本次项目采用了HXbuilder一个高度集成的IDE,可以很方便的发布软件。虽然后端使用到的技术是nodejs与之前的flask不同,但是有了先前的经验,对后端要做什么有了更清晰的认识。
编写代码的过程真实在是枯枯又燥燥,也是遇到了各种各样的一环扣一环的问题,但是好在通过不断熬大夜基本都算解决了。最大的问题便是API调用,有的API部分平台都可以使用,而有的在各种平台的使用方法都不同。一开始都按在web上的调用方法编写,最后发现在手机上实现不了,通过查找资料与各种尝试,最终使用webview技术实现了API的正常调用。但是这种相当于曲线救国的方法也带来了很多的麻烦,比如界面显示、在web上无法模拟运行...好在也算一步步解决了。
软工实践的各次作业分别花费的时间:
作业 | 花费时间 |
---|---|
第一次个人作业 | 4h |
第二次个人作业 | 35h |
第一次结对作业 | 22h |
第二次结对作业 | 48h |
第一次团队作业 | 15h |
第二次团队作业 | 15h |
现场编程作业 | 5h |
团队作业beta冲刺 | 80h |
在软件工程课程上花费的时间
累计时间 | 实际周均时间 | 预计周均时间 |
---|---|---|
250h | 15.6h | 10h |
1.3 拨云见日——记最后一次答辩
这次课程中令我印象深刻的作业有很多,小游戏的有趣,现场编程的紧张,行趣大厦的不断构建...最令我印象深刻的还是行趣的最后一次答辩。
答辩前夕
2024/11/29 20:39
:debug来不及啦,你先看看,我还有数据库大作业
答辩当日
2024/11/30 10:56
终于将软件打包出来
已经是万不得已,软件还会出现莫名其妙的bug,即偶尔能用,偶尔不能用,但是下午要演示,已经快要来不及了。此时对于一个卷绩选手,已经心如死灰,已经开始规划进哪个厂搓螺丝..
寄时已到
2024/11/30 14:00
ppt也是前天赶出来的,组长坐在我的旁边也是焦头烂额,更不幸的是在班上有三组包括我们自己选择了这个主题,俗话说没有对比没有伤害,2个小时的调整,我已些许释然,做好最坏的打算,完成就算成功。不幸中的万幸是抽到了最后几组,可以参考大家的发言进行临时的调整。
最后一舞
2024/11/30 16:30
终于到了我们组,整个汇报我其实经常走神,一方面是在赶着另一课程的大作业,一方面是不断的给自己做心里建设。到了我们组上场,既有将要结束了的释然也有不得不面对的苦涩。因为是最后几组,大家都听累了,纵使组长讲的清晰完整,反馈也是寥寥。尘埃落定之时是开心还是难过,现已记不太清,应是百感交集。
难以言表
2024/11/30 17:30
每个组都尽心尽力的展示了各自团队一个多月的心血,时间也是来到了最后,还记得吴越钟老师和助教在电脑前统分,管理教师的老师多次在后门张望,此刻比答辩时更加安静且漫长。准备报告结果了,不带一句假话的说,在那个时刻,我对我们在哪个位置,取得什么成绩,有什么样的结果已不是很在意,只是坐在位置上等待课程的结束。一等奖是,;二等奖是,,6...卧槽?啊?三等奖是...最佳经理是..6...啊???我靠...
拨云见日
2024/11/30 17:51
答辩结束,我靠真的吗,没在做梦吧。有时候真的分不清楚运气在事情发展中的占比了,尽管组长在事后一直说:这都是努力的成功,他们没实现的我们都实现了,他们前期画的饼砍了一堆,我们虽然前期功能没那么丰富但是基本都完成了,还有一些他们没有的功能。也许是这样呢,尽管前面9999滴水没能够穿石,也许我唯一能做的是坚信下一滴水一定能够做到。
答辩当日 天也温柔 地也温柔
总结收获
2.1 我的软工实践故事
首先是个人编程,给我的经验是,针对项目大小,决定编码方式。一个小游戏,简单的话几百行代码就能完成的东西,我却在思考一堆架构上的问题,其实根本没必要。也许好的架构能在后续的深度开发中提供更多的便捷,但是它只是一个小游戏,过后谁又知道它是什么呢?最重要的是短时间内丰富功能与美化界面而不是去思考如何让一个小体量的东西运行的更快更稳。简而言之,杀鸡焉用牛刀。
附上一些游戏图片 用上了自己拍的照片ovo
再者是结对编程,黑猫白猫能抓到老鼠就是好猫。不必太纠结于各种实现方法的好坏,时间紧张的任务就应该以实现为最终目标,技术选型进行的再充分,对于零基础来说也都是AI编程。
然后是现场编程,是的选好一个好的工具是很重要的,更重要的不要重复造轮子。对于一个即时就要实现的东西,首先要思考的就是有无现成的模块可以使用,不仅仅是应用开发,包括在科研上面也是如此,用对用好前人的结论可以大大提高实验的进度。
一些原型展示
最后就是团队项目,沟通决定成败!无效的沟通带来毁灭性的后果,包括但不仅限于误解和浪费时间。比如一个接口上的规范,一个界面的跳转逻辑、一个界面需要的功能、一个功能需要实现的功能等等。上述种种都是我们跳过的坑。但是好在我们也是关关难过关关过,大家都积极调整,不互相抱怨,从最开始大家沉默寡言到最后大家各抒己见,彼此之间的联系也像我们的应用一样逐渐搭建了起来。
我们和我们的成果!
2.2 新技术及帮助
- git/github:github提供了非常好的版本控制和多人协作开发,帮助我们团队前后端及时的代码交流和进行回档。
- 墨刀:一个原型设计软件,简洁明了的使用方法,强大的组件支持,在原型模型开发中起到了巨大的作用。
- copilot:伟大无需多言。
- flask:基于
python
的轻量应用后端开发工具,使用方便,在结对作业的小应用上帮助很大。 - HXbuilder:伟大无需多言。一个高度集成的IDE,拥有较好的生态支持如
unicloud
,uniapp
等,完美的简单应用入门开发工具,团队作业的主力军。 - nodejs:一个前端后端都可以使用的开发环境,拥有很好的包管理器
npm
,大大提高开发中的速度,避免重复造轮子。
2.3 技术之外
- 解决问题的能力:面对完全陌生领域,应该怎么有效的解决问题。首先肯定是自己在浏览器上搜索,GPT等AI出现之后,检索效率更是大大提升;再者可以积极在社区中寻找答案如
CSDN
、StackOverflow
,都是很好用的平台,或者是相关问题更细化的社区;最后都无法走通的话,那就要向此领域大佬谦虚的询问求解。通过以上步骤既能高效解决问题,又能避免向别人询问很呆的问题。 - 团队合作:其实我是一个享受独自工作的人,但是这次的团队作业让我对团队合作的容忍度更高了。正如软件工程中所说,编码是一个人的事,而软件工程是一个团队的事。团队将繁多的工作分块,让每个人都处理自己擅长的事务。团队中不同的思想能够及时的发现问题,修正问题,避免一个人的一条路走到黑。
- 沟通:沟通是我觉得我还要继续学习的地方,可能有时候我的表述不太完整,或者我觉得对方能懂但是其实对方不懂。有效的沟通能减少人与人之间的隔阂,能提高团队的效率。
- 心态:保持良好的心态,既不要半场开香槟,也不要自暴自弃,谁知道最后结果出来会是怎么样呢?
- 及时止损:不要过于盲目的相信自己或者相信一个东西,一头栽下去只会得到的是更多的沉没成本!
- 提前做好全局计划:对于较大的工程,尽量不要一边计划一边实施,万一做一半发现要全部推翻呢?
2.4 Patience is Key in Life
本来此段是最开始就想写的,但是感觉思路不够清晰,写了一半就停下了。再次动笔已是最后,回顾实践历程,熬夜编写代码和站立会议的场景又一次次浮现在我眼前,所思所想都在回忆中尽述于前文,再写些什么就似无病呻吟,遂就留下一些图片应能引起些许共鸣。想对学弟/学妹们说的:体验一下你就老实了^ ^。想认真做的话你应该能了解到许多方面的内容,不想认真做的话就抱紧大腿。
软工回忆录
- 出门拍摄vlog 摆拍中O.o
- 不知道跑通了啥 已经神志不清了
- 答辩前夕debug 已疯故拍照留恋
- 点击查看睡眠质量 这辈子有了
- woc成绩比想象中好 开香槟!
致谢
首先感谢张栋老师在软件工程这门课上的悉心教导,虽然课程本身较为枯燥,但是老师幽默的语言和例子、激昂顿挫的语调、偶尔的玩笑、平易近人的性格还是给这门课程带来了不少欢笑声。同时感谢吴越钟老师在软件工程实践上的方向指导,在实践中选取紧随时代的题目,为枯燥的编码增加了不少乐趣;及时的点拨为我们修正开发的方向、提供开发的思路。感谢听我们答辩、为我们作业打分的助教学长/学姐,在匆忙的科研中挤出时间查看我简陋不成熟的博客,希望没有让你们觉得味同嚼蜡。
感谢我的队友兼组长施靖杰,在我事务繁忙时间较少的时候挑上了担子,为我们的结对作业兜底。在团队项目中,认真阅读每次任务的要求,为我们积极合理的分配任务,承担了作业中大部分的撰写工作,为我们提供了项目的完整框架,做出了一次又一次完美的答辩。在项目进度较慢,开发受阻的时候迅速寻找对策,各方调动,完全尽到了做组长的职责。
感谢我十光年团队的队友,缺少他们任何一个人的努力都无法完成这个应用的开发。
感谢我自己,在繁重的任务中坚持了下来,不断学习进步,相信下一秒总是更好。