软件工程实践总结——为学者不器

222000315_苏志毅 学生 2023-06-06 22:52:23
这个作业属于哪个课程2023春季软件工程实践-W班(福州大学)
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标总结一学期软工实践的收获与感悟
其他参考文献《构建之法》

 第一部分:课程回顾与总结

目录

 第一部分:课程回顾与总结

1.1半年前的思考

1.2对于课程开始前的问题,我有哪些新感悟?

1.3新的问题

 2、做中学——在实践中学习

2.1 需求阶段

2.2 设计阶段

2.3 实现阶段

2.4 测试阶段

2.5 发布阶段

 3、对于个人项目/结对编程/团队项目,我的理解与心得

一、控制情绪很重要

二、自学能力很重要

三、学会提问题

 4、七大课程目标

第二部分、个人技术总结


1.1半年前的思考

软件工程实践寒假作业

1.2对于课程开始前的问题,我有哪些新感悟?

问题一:个人在团队中角色就像是一个流水线上的机器吗?问题来源

       寒假作业中的回答:团队是由个人组成的,没错,但是人并不是机器——机器是死的,而人是活的。当团队遇到瓶颈时,可以考虑根据每个程序员不同的情况进行灵活调整,让团队尽量保持在较高的效率。而且作为一个团队,很重要的一点就是遇到问题应该及时沟通,保持团队内信息的一致。团队内每个人经历性格不同,水平也有高低,大家应该尽量帮助团队内的短板,这对保证整体效率也很重要。

       新的感悟:看完自己曾经的回答,我想说:回答得不错。但是当时的我好像没有get到这个问题的重点,或者说今天我想从一些角度回答这个问题:在开发过程中,程序员要不要有创新?我的回答是:不用。特别是上了软工的理论课——极限编程之后,我觉得程序员某种程度上就是要像流水线上的机器人一样,一分不多,一分不少的完成甲方的需求。在实践课程中,我们团队也经历了一天的极限编程。在实际生产中,面对非科班出身的甲方,随时要应对需求的变动,而如果程序员还随时“蹦出新点子”的话,无疑是在给整个团队挖坑,让原本难产的交付日期变得更加遥遥无期。个人需要做的就是快速响应变化并完成已有的任务,这样“机械”的日复一日的重复,最终的成果也会比较可观(α、β冲刺后的感悟)。

问题二: 代码量与个人的编码能力有直接关系吗?问题来源

       寒假作业中的回答:在我看来,代码量与个人编码能力一定是有一定关系的(至少在新手阶段),在大一的第一节专业课C语言上,老师就反复强调多敲代码的重要性(每节课都要提的程度,一位项目经验非常丰富的老师)。在代码量不断增长的过程中,由于自己的总结,思考,感悟会越来越多,对于编程可能会有一个同代码量低时截然不同的视角(量变产生质变)。但到了一定的水平,也许代码量可能也就不是最重要的了,也许是创造性?水平有限,咱暂时也不知道那时候得靠什么进一步提高能力。

        新的感悟:好,这个问题没有什么要补充的,现在的看法跟当时基本一致。

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

       寒假作业中的回答:其实不只是开发者,在这个时代,对脑力工作者的要求就是与时俱进,跟上时代与技术的发展。所以终身学习对于一个开发者,不应该只是口号,更应该是态度和习惯。庆幸的是,这是一个资源极大丰富的年代,互联网上有我一辈子都学不完的知识:b站,专业论坛等许多地方都有许多热心且专业知识过硬的人在分享知识。当然,也要懂得筛选,个人经验:在不断学习的过程中筛选能力也会跟着提升的。最重要的是:坚持学习!

       新的感悟:其实不止是互联网,身边的同学,工作后的同事,也应该跟他们多交流。上大学这三年来有一个很大的感悟:兴趣真的是最好的老师。软件工程其实是一个很大的概念,而每个人的兴趣又各有不同,所以会导致每个人在不同的技术方面差别很大。在α和β冲刺中,我就发现组内有一位同学游戏设计方面的知识远在组内其他同学平均水平之上,在两次冲刺跟他也学到了很多游戏设计方面的知识和技术。

问题四:对于一名工程师而言,究竟应该是更”专“一点好,还是更”广“一点好呢?问题来源

        寒假作业中的回答:我认为,应该“专广兼修”,但可以有先后之分,先精通某一项技能,再横向扩展其他技能,这里的广,可以在本领域内,也可以扩大到全部的知识。因为我有一个不成熟的想法:很多不同知识或者技能其实底层是一样的。把一项技能学精了之后,对于其他的知识也许可以触类旁通,很快上手。反过来对于已经精通的技能可能也有帮助。可以先在自己最感兴趣的领域或技能学到精通,再顺着兴趣延展。

       新的感悟:这个问题我的看法依然同当时差不多,或者说,就是要先精再广,如果二者只能选其一的话,那无疑是“精”,在实际开发中,是否精通一项技术,直接决定了你的工作效率与产出效果。

问题五:花费时间越多,代表工作量越高吗?

       寒假作业中的回答:Actually not.就我遇到的一个很典型的情况:完成工作需要的技能我不全会,这时候就需要现学,就造成了花费的时间比较多,但其实工作量可能并不大。可能还有其他的情况,如果是一个大型项目的话,并不全是编程方面的工作,需要综合考量。

     新的感悟: 哈哈,这个问题很有意思,唤起了很多该死 不好的回忆。在实际开发中,真的会遇到很多意料之外的情况,远远不止需要学习新技术的情况(这都算好的了),当时还是太naive。不管是结对编程,α,β甚至个人实战都遇到一个问题直接卡死进度的情况,还有团队git提交之后莫名丢失代码等一系列奇奇怪怪的问题,往往花了很多时间解决问题之后,项目才能继续进行,也就是说花了很多时间而工作量=0。但是无论如何,代码人永不停止脚步!

1.3新的问题

问题一:在一个团队中,每个人的技术水平、学习能力都不尽相同,但是在团队冲刺中我们组就出现了其实只有少数人在干活的情况,怎么样将一些任务分发到每一个人,让每一个人都有事可做,我觉得这是我们组做的不好的地方。

 2、做中学——在实践中学习

2.1 需求阶段

       在需求阶段,我觉得收获最大的还是通过nabcd模型来进行有条理有逻辑地分析,在每个点中深入思考,这样可以很大程度地避免很多“头脑一热的想法”,真正剖析用户的需求而不是开发人员一厢情愿的想法。把需求分析做好,也能使开发人员对项目有个更清晰的认识同时对项目有更多的信心。

2.2 设计阶段

       因为之前的项目经验很少,所以在这次实践课程中,是我第一次接触原型设计,相当于也是学习了一门新的技术,且也让我意识到设计在全流程中也是有很重要的地位的。一份好的原型设计,不仅能在展示的时候让被展示者快速的了解其中的功能,如果是甲方的话更可以在其中发现或许可以进一步完善的需求,为后续的工作减少一些模棱两可的内容。而在团队项目中设计类图时,我们也遇到了一些小小的状况:将游戏物品和装备两个类设计成继承关系。而当pre时被老师问到为何这样设计,却发现答不上来,因为我们当时只是想当然,并没有深入探究这两者有什么共同点。后面我们也将类图进行了一些修改,取消了无意义的继承。

2.3 实现阶段

       这个阶段于我个人而言,绝对是我收获最大的一个阶段。在过去几年的时间里,我接触到了一个全新的且我个人非常热爱的领域,于是我一股脑扎了进去。但其实与本专业的相关性不大,所以导致我本专业的学习有些偏废,且手敲的代码量也比不上同学,这就间接的导致了我对于本专业的学习有一些畏难心理。但是经过一次次的实践下来,过程中遇到了非常多的问题,但是我并没有逃避,而是主动解决,尽管这里面有一小部分至今依然不太懂,但这不重要,重要的是,我不再害怕遇到问题,这或许比实践中学到的技术:git管理、unity开发、网页前端设计等等于我而言更为宝贵。在这里呼应下标题——君子不器,这是一位老师送我的一句话,也送给每位看到这里的learner。希望我自己在今后的学习生活工作中,遇到新的知识便像海绵一样吸收,而不是“我又不是xx,我为什么要学xx”。

2.4 测试阶段

       在这次实践中,由于我只参加了很有限的测试工作,所以并没有太多收获,但同时也有一些感悟。测试其实也是一项非常重要的工作(以前的我会觉得开发才是最重要的),通过对软件的测试,可以及时发现问题,让开发人员对问题进行修复和优化,且越早发现对于整个项目的成本越低。

2.5 发布阶段

在这次实践之前,我并没有过发布相关的经验。不过在这次结对编程中,将我们两人的作品部署到了阿里云服务器上,完整的经历了买域名,注册,买服务器,部署项目的流程,算是初步的了解了上线项目的基本流程,也算是一种收获。

 3、对于个人项目/结对编程/团队项目,我的理解与心得

一、控制情绪很重要

       控制情绪很重要,有安抚别人情绪的能力也很重要,这是我回想结对编程时,脑海中蹦出的第一句话。距离ddl不远的一天,当天两人都结束了当天的开发,但是在git时出了一系列问题,也许是两人经历了几天的开发都有点累,当时在qq沟通的时候就发觉队友的情绪有一点不对,就去了隔壁看看他遇到了什么问题,问了下发现也不是什么大问题(ssh密钥的配置出错了好像)ps:这个问题我遇到了好几次,我便让他把电脑给我,然后出门透透气。后续两人调整下状态之后当天的工作也很快就结束了。但是回想一下,其实当时自己的状态也不太对劲,但是我并没有选择表现出来,反而是帮队友解决了问题之后,我的心情也舒畅了许多。想想那天之后两个人的合作状态好像也发生了一些微妙的向好的变化。我想说的是:其实开发过程中一定会经常碰到一些大大小小的问题,越是棘手,往往越需要冷静。Emotions make probs worse。

二、自学能力很重要

       之前读到一句诗,便常常在遇到难题时提醒自己:天下事有难易乎,为之,则难者亦易矣;不为,则易者亦难矣;如果记得没错的话,实践课程中的作业都有需要新学的技术,都有完全没了解过的部分,且有时候给的时间还很紧。这时候自学能力、信息检索能力的重要性就体现出来了,有时候一份靠谱的教程真的可以节省很多时间。我们团队项目做的是游戏,我之前完全没有接触过unity和游戏开发,不过bilibili的一位up主的教程真的帮了我大忙,让我得以快速入门,并很快亲手做出了第一份地图。

三、学会提问题

       如何准确地提出问题,其实是一项很重要但又常常被忽略的能力,在结对和团队编程中,经常发现自己没有办法很好的表达清楚我想问的问题,以致于有时候没有办法得到我想要的答案,包括有时候别人问我问题时我也会感到费解。我想这可能是由于技术储备的不足导致没办法直指核心,也有可能是与人交谈的能力还需要锻炼。

 4、七大课程目标

目标掌握程度解释
195%技术是中性的,好与坏的评价则是对人,平常不乏看到一些因技术锒铛入狱的例子,我自认为三观还算正直,也不会用学到的东西去做一些违背家国原则的事情,而留5%是因为时代在发展,需要时刻刷新认知,了解国情社情民情。
290%在需求分析这一块,可以较好地使用原型设计工具表达用户用需求,并及时进行沟通改进
375%这一部分应该是我最薄弱的环节,以后应当加强补齐短板。
480%自认为有一定的创新意识,有优选设计方案的能力,但是可能对于组件从阅读代码并给出技术评测上没有突出的能力
585%可以进行需求规格说明书、系统设计说明书、系统测试报告等文档的撰写,但是由于这部分的实践经历较少,所以与业界同行交流能力还有待考察
690%自认为这部分做的还是比较不错的,有什么问题都会及时跟团队成员进行沟通,虽然作为队员,有时候也会担任组织、安排任务的工作。
780%这一部分的能力还有待提升,因为自己项目经验有限,所以暂时没有办法根据不同的软件工程项目给出对应的很准确的工作量估算方法,但是可以给出大概的估算方法。

第二部分、个人技术总结

  • 概述

在使用unity引擎进行2d游戏(RougeLike)制作时,地图开发是最基础也是很重要的一个环节,游戏整体的可玩性与趣味性很大程度上取决于地图,而该环节的难度我认为主要在关卡的构思与地图中不同元素的具体布置。

  • 链接

 戳这里

...全文
121 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
SoftwareTeacher 2023-06-14
  • 打赏
  • 举报
回复

问题一:在一个团队中,每个人的技术水平、学习能力都不尽相同,但是在团队冲刺中我们组就出现了其实只有少数人在干活的情况,怎么样将一些任务分发到每一个人,让每一个人都有事可做,我觉得这是我们组做的不好的地方。


这个问题建议留到下一个学期, 让所有新同学来回答。

控制情绪很重要,有安抚别人情绪的能力也很重要,


非常优秀的学生!

688

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • 张书旖
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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