软件工程——个人总结

目录

一、回顾

二、耕耘

三、收获

四、结构化的理解

五、属于我们的人月神话

六、对团队的分析

七、证明学会了软件工程

八、建议


一、回顾

1.对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?

在本学期的软件工程实践课程中,我认为大部分达到了我的期待。在过程中学习到了许多对我而言是全新的知识和技术,虽然当中有很多是在很短的时间内速成的,学习的也不是很扎实,但比起开学初的自己还是收获了不少。

在几次的结对作业中,通过阅读代码,提高了代码阅读能力,学习了许多工具的使用。收获了关于软件工程的知识,在阅读代码的过程中,对于书上课堂上的一些理论知识有了更深刻的印象和更透彻的理解,参与了团队项目,作为上大学以来历时最久团队项目,从中收获了很多团队交流沟通的经验和方法。

但在收获之外,仍有一些不足之处。

因为个人原因导致后期对于团队项目的计划和时间安排不够合理,出现匆忙赶工的现象,导致做出来的成果并不能令人很满意,存在很多瑕疵。由于学习的知识和技术时间较短,并没有系统地进行学习,因此许多知识和技术只是似懂非懂,理解不够透彻,掌握不够熟练,运用起来仍常常出错。有时的总结出的经验教训到下一次并没有及时改正,仍会出现同样的问题。对于团队沟通也只是有了一些经验,在团队项目中也还是有出现沟通不畅、双方理解不同导致的问题。

希望能够充分利用这些收获、总结这些不足,在将来继续学习与改善。

2.哪一次作业让你印象最深刻?为什么?

早期的结对作业让我印象比较深刻,在作业过程中知道了一些工具的使用,比如使用SonarQube对代码进行分析,使用git对项目进行管理,使用墨刀进行设计等。还有就是当时要求画的用例图,体系结构图,类之间的调用图,因为之前对于画图分析这种概念比较模糊,分析一段代码就干瞪眼看,容易看晕,通过画图分析比自己干瞪眼看代码效率更高,更容易理解代码。

二、耕耘

请说明你付出了多少时间,写了多少代码,多少注释,多少文档,多少次签入,最好用折线图或其他合适的图形/表格的方式展现

作业结对作业团队项目
注释+代码450550
时间10h42h
三、收获

1. 所做工作的具体成就,软件的用户有多少,公开的源代码有什么影响力

实现了贪心算法对于2048的自动游玩。通过分享给周围家人朋友,粗略估计有20几个人游玩。虽然开源代码关注的人不多,但是如果代码有什么不好的地方还是欢迎大家的批评指正。

2.你在哪些技能上有提高?请列举出来。

学习了python这门新语言

熟练了makdown的编辑,虽然在学习面向对象程序设计时也使用了,但只是会最基本的操作,而且时间久远忘了不少。使用了Markdown后写出来的文本更加规范,不会出现混乱的排版和空行。

提升了搜索信息、查询问题的能力。在个人编程、结对编程与团队项目中都出现了很多不懂的问题,需要经常上网查找,因此逐渐掌握了一些搜索的技巧。

3.使用了哪些软件/工具

墨刀,SonarQube,Xmind,idea,vscode,markdown编辑器,Process on等等。

四、结构化的理解

当我们平时理解一些新事物时,我们的理解大多是离散的,即兴的,能否在一个良好定义的体系中把自己的理解整理一下?

1.知识(Knowledge):就是记忆、认识,能回忆重要名词、事实、方法、规准、原理原则等;

例如:软件工程的名词,原理,能回忆编程语言的某种知识

要求:写出你印象最深的几个知识点

还是当时要求画的用例图,体系结构图,类之间的调用图,因为当时花了比较多的时间去学习

1.用例图(use case diagram):是用户与系统交互的最简表示形式,展现了用户和与他相关的用例之间的关系。通过用例图,人们可以获知系统不同种类的用户和用例。用例图也经常和其他图表配合使用。

2.类图(Class diagram):是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换成编程代码。类图也可用于数据建模

3.类之间的调用图:可以体现体现类与类之间的关系

2.理解(Comprehension):是要能对重要名词、概念之意义有所掌握,能转译、解释;

例如:名词、原理的解释, 能理解单元测试、效能分析工具是怎么帮助工作

要求:写出你如何掌握了几个名词、概念。

如果在作业中遇到新的名词概念,我一般是在网上的一些平台进行搜索,比如CSDN,博客园,哔哩哔哩等。对搜索的结果进行筛选学习,直到彻底理解。

3.应用(Application):是要能将所学到的知识概念、方法、步骤、原则通则等等应用到不同的情境中;

把原则应用到各种情境场景中,能开发各种类型的应用程序,和不同类型的人合作

要求:写出你怎么在不同场景中应用技能的

以我新学习的python为例,python可以应用的场景有很多

1. 数据分析:Python 的 pandas 和 numpy 库使得数据处理和分析变得非常方便。可以使用它们来处理大量的数据,进行统计分析,或者进行数据可视化。

2. 网络爬虫:Python 的 requests 和 BeautifulSoup 库可以用来抓取和解析网页内容。

3.机器学习:Python 的 scikit-learn 和 TensorFlow 库可以用来进行机器学习和深度学习。

4.Web 开发:Python 的 Django 和 Flask 库可以用来开发 Web 应用。

还有游戏开发、图形用户界面开发、科学计算、嵌入式系统等等。

4.分析(Analysis):是要将知识的某些讯息,所包含的成分、元素、关系、组织原理等等分解出来,重新加以组合,并厘清之间的关系;

能将用户需求分解为不同优先级,厘清功能之间的依赖关系

要求:对一个局部领域,写出你的分析

比如设计2048这个游戏,要实现的基本用户需求为

1. 游戏状态:游戏状态可以用一个4x4的矩阵来表示,其中每个元素代表一个方块的值。初始状态下,矩阵中的大部分元素都是0,表示空格,只有一两个元素是2或4。

2. 用户操作:用户可以进行上、下、左、右四个方向的滑动操作。滑动操作会导致方块向滑动方向移动,并且相同数字的方块会合并。

3. 游戏规则:每次用户操作后,所有的方块都会向操作方向靠拢,空位会被新的2或4填充。如果用户无法进行任何操作(即所有方向的滑动操作都无法改变游戏状态),则游戏结束。

4. 得分计算:每次合并方块,得分就会增加合并后的方块值。例如,两个值为2的方块合并后,得分会增加4。

此外还有提供退步功能;提供排行榜功能;提供计时功能等等一些扩展功能。

5.综合(Synthesis):是能将知识讯息的某些要素重新安排或合并为有组织的整体,或呈现其间的关系; 例如,用WBS 等方法把项目的目标细化,分配到人,能用燃尽图展现项目进度

要求:写出你在这方面的具体收获

1. 明确的目标和责任:通过WBS,可以将大的项目目标细化为更小、更具体的任务,并将这些任务具体分配给团队各个成员。这样可以确保每个人都明确自己的责任,知道他们需要完成什么。

2. 更好的进度跟踪:燃尽图可以清楚地显示项目的进度,可以看到团队已完成的任务和剩余的任务。这可以帮助了解项目是否按计划进行,如果有延误,或者发生意外,可以及时调整计划。

3. 提高团队的协作效率:当团队每个成员都清楚自己的任务和项目的整体进度时,团队的协作效率会提高。每个成员都可以看到他们的工作如何影响整个项目,这可以提高他们的动力和参与度。

6.评价(Evaluation):是要依照某规律和准则对讯息做评价或比较。例如,能够评价别的项目的软件工程的质量,能分析一些关于软件工程的说法是否有道理,能分析市面上流行软件的优劣并探究深层原因,能对自己项目进行回顾分析,并提出改进。

要求:选一个你感受较深的领域,说一下你的感受

我感受最深的是能够评价别的项目的软件工程的质量

评价其他项目的软件工程质量时,我会关注以下几个关键点:

1. 代码质量:代码是否易于理解和维护?是否遵循了一致的编码风格和最佳实践?是否有足够的注释和文档?

2. 测试:是否有充足的单元测试和集成测试?测试覆盖率如何?测试是否能有效地捕获错误和回归?

3. 架构和设计:软件的架构是否合理?是否易于扩展和修改?是否遵循了SOLID等设计原则?

4. 性能:软件的运行效率如何?是否有性能瓶颈或资源浪费?

5. 安全性:是否考虑了安全性?是否有防止常见安全威胁的措施?

6. 项目管理:是否使用了有效的项目管理工具和方法,如敏捷开发、燃尽图等?团队的协作效率如何?

然后通过评价其他项目的软件工程可以带来很多收获:

1. 学习新的技术和方法:通过评价其他项目,可以了解到新的编程语言、框架、工具和方法,可以增强自己的技能和知识。

2. 理解不同的设计和架构:每个项目都有其独特的设计和架构。通过评价其他项目,可以了解到不同的设计模式和架构风格,有助于在自己的项目中做出更好的设计决策。

3. 提高代码质量:通过评价其他项目的代码,可以了解到什么是好的代码,什么是不好的代码。有助于提高自己的编码技巧,写出更高质量的代码。

4. 提高项目管理能力:通过评价其他项目的管理方法,如敏捷开发、燃尽图等,可以了解到如何更有效地管理项目。这可以提高自己的项目管理能力。

五、属于我们的人月神话

写下属于自己的人月神话——结对或团队项目实践中的经验总结+实例/例证结合的分析

在结对编程中,体会到了要提前安排好时间、做好计划,否则会出现前期过于散漫,后期过于紧张的现象,导致做出的成果不尽人意。在结对编程刚开始时,没有意识到计划的重要性,都只是随意地找一些资料学习,直到时间过半时才意识到要来不及了,在导致最后在的时候匆忙赶工。
要系统学习知识,只了解零零散散的碎片知识会导致在实际操作的时候不停地出错,然后回头重新学习,反而更加浪费时间。


在团队项目中感受到了团队沟通的重要性。在alpha冲刺时前后端一开始是各做各的,没有及时沟通,最后合并对接的时候才发现各自的逻辑不同,需要大幅进行修改,增加了时间和精力的开销,降低了效率。

六、对团队的分析

分析一下自己所处的团队和团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建之法》第17章 人、绩效和职业道德)

1. 形成阶段:这是团队建立的初期,成员们正在了解彼此,还在寻找自己在团队中的位置。

2. 磨合阶段:在这个阶段,团队成员开始对任务、角色和团队规则产生不同的看法,可能会出现冲突。

3. 规范阶段:在这个阶段,团队成员开始达成共识,明确各自的角色和任务,团队规则也开始稳定下来。

4. 执行阶段:在这个阶段,团队已经形成了稳定的工作模式,成员们可以有效地完成任务。

团结经历基本上与描述的差不多

七、证明学会了软件工程

回顾《构建之法》第一章概论P17中三个目标,检验自己是否做到这三点

在《构建之法》第一章概论P17中,提到了软件构建的三个目标:满足需求、控制复杂性和满足构建的经济性。

1. 满足需求:

 我们对于用户需求进行深入的需求分析和需求管理,确保理解用户的真实需求。使用敏捷开发方法,以便快速响应需求变化。与用户保持紧密的沟通,以便及时获取反馈并调整方向。

2. 控制复杂性:

 我们使用模块化和面向对象的设计,将大的问题分解为小的、可管理的部分。使用自动化工具,如静态代码分析工具,来帮助识别和减少复杂性。

3. 满足构建的经济性:

我们使用敏捷开发和持续集成/持续部署(CI/CD)流程,以便快速发现和修复问题,减少浪费。使用自动化测试,以减少手动测试的时间和成本。

八、建议

对下一届实践的建议,对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?对于后来人的期许。

对于即将开始大学生活的学弟学妹,以及对于开学初的我的建议:

1. 建立与保持良好的学习习惯:大学的学习方式可能与高中有所不同,需要更多的自主学习。同时也要保持高中的学习习惯,而不是到了大学就放开了,开始爽玩。

2. 学会自我管理:大学生活相比于高中,会有更多的自由和自主权。学会自我管理,包括时间管理、财务管理等,是非常重要的,不要月初山珍海味,月底荒野求生。

3. 保持开放和好奇心:大学是一个全新的环境,有很多新的知识和经验等待你去探索。保持开放和好奇心,不要害怕尝试新的事物。

4. 注意身体健康:保持良好的生活习惯,如定期运动、保证充足的睡眠等,是非常重要的。熬夜只有一次和无数次,如果熬夜再想调整正常作息就很难了。

5. 别忘了享受大学生活:大学不仅仅是学习,也是人生的一部分。别忘了享受大学生活,做一些你喜欢的事情。

  • 34
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值