软工实践个人总结
一、基本情况
1.1 请回望第一次作业,你对于软件工程课程的想象
1.1.1 对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,为什么?
在:
- 编程语言的锻炼(主要是Python)
- 目标检测算法的应用
- 项目规划和组织能力
- 抗压与学习能力
这四个方面达到了我的期待和目标。个人、结对、团队作业都锻炼了我的编程能力,其中团队作业尤其锻炼了我项目规划和组织能力,在我参与算法方面工作的时候,我对目标检测算法的应用得到了良好的实践,并且在各个科目和考试、作业的压力下,我的抗压能力、学习能力也得到了锻炼。在这四个方面的锻炼和收获基本达到了一开始的期待和目标。
1.1.2 哪些方面还存在哪些不足,为什么?
在:
- 算法的进一步优化
- 团队整合
- 项目完全实装
这三个方面仍然存在一些遗憾和不足。虽然在实践中,我对算法的应用得到了实践机会,但是同时也体会到了算法存在的局限性,由于时间和精力不足,没有做进一步优化和尝试有些遗憾;在团队整合方面,不足的地方是团队实践周期较短,没能进一步提高团队的凝聚力,没能进一步排解队友在完成任务过程中遇到的心理障碍;项目完全实装方面,考虑到完全实装会涉及到许多方面的协调,在和相关利益方讨论后感觉实在超出一个学生力所能及的范围,因此选择了退而求其次,以学习和技术储备为目的进行项目,最后没有实装,有点遗憾。
1.2 总结这门课程的实践总结和给你带来的提升:
- 在软工实践课程当中我编写了 约3000 行代码。
- 软工实践的各次作业分别花费的时间:
# 作业 花费时间(分钟) 1-2 个人编程作业 3800 3 结对编程作业 2600 4 团队介绍与选题报告 900 5 团队需求分析报告 900 6 团队项目之现场编程 180 7-13 Alpha冲刺(含总结) 1920 14-19 Beta冲刺(含总结) 900
- 讲述令你印象最深刻一次作业?为什么这次作业令你影响深刻?
印象最深的大概是:第一次个人编程作业
印象深的原因是:做了两遍,一遍C++一遍Python……此时回头一看,统计一下竟然个人编程是花的时间最多的……平均下来每天3.5个小时花在软工上。总结了一下最大的原因大概是“闲的”——学期初课少任务轻,闲下来没事就敲敲代码。本来第一阶段用C++做了75%左右,各种原因做不出来了,打算摆了,结果突然又多了一个星期,当即二话不说换语言继续肝。
那段时间大概是最快乐的,因为一方面学期初不像期中期末各个课程都有各种任务,另一方面软工作业确实是需要花一定量的时间的,因此非常心安理得地钻到软工作业里去了,除了写代码啥也不用想,就很开心。
相较而言,后面的结对和团队阶段(对我而言)的写代码环境就不是那么好了,一方面其它课程也有任务,另一方面团队阶段当队长,要操心太多代码外的事情,没法专心敲代码,很难受(虽然也有很多收获就是了)。
- 在软件工程课程上花费的时间(预计花费时间参考:同时贴出开篇博客“你打算平均每周拿出多少个小时用在这门课上”的回答)
开篇博客估计一周大约花10h,实际上平均下来每周花了15.5h,感觉差的并不多,多的时间主要被用到博客、PPT、企划书、走访、计划这些上面,原来估计的每周10h当时想的是纯代码时间,但是实际上除了代码外还有很多事情。
累计时间 实际周均时间 预计周均时间 187(h) 15.5(h) 10(h)
- 介绍学习到的新技术或生产力工具以及它们给你带来了哪方面的作用?
- Python。
软工初次使用Python写项目,确实是比C++和Java爽多了,而且API也更多更全。感觉用Python写代码效率突然高了几倍。- 性能分析工具。
很直观地展示出程序地的性能短板,能够定量地评估函数性能,是优化程序的利器。- 单元测试。
单元测试是测试的重要工具和方法,让我意识到了自己在写代码的时候各种思维漏洞,并且有助于全面测试程序、抓虫。- 原型设计工具(比如墨刀)。
墨刀是很方便的原型设计工具,特别是在组队编程的过程中,为团队成员的沟通提供软件原型,大大提高了沟通效率,降低了误解的发生率。也方便让不了解编程的利益方对产品有一个直观的认识,有助于使最终软件产品让各方面满意。- pygame。
Python的一个库,可以用来做各种小游戏,很有意思,是增加编程趣味性,培养编程兴趣的一个可靠途径。- Yolov5。
开源目标检测算法,帮助了我们团队项目的完成,使我对目标检测算法及其应用有了更深刻的理解。- UML图。
理清需求、流程、实例的重要方式,有助于把脑袋里的一团糊(说好听点叫一个模糊的想法)理清楚,大大地有助于后续开发。- 软件开发流程管理。
有助于软件开发流程的管理,避免了很多团队开发过程中可能出现的如互相推卸责任、摸鱼、拖延症、应付了事等问题的发生。- PSP表、学习进度条、燃尽图。
让我对自己学习、工作的进度有了更直观的记录,并且时刻提醒我是否在虚度光阴,每周甚至每天是否有学到新的知识,是否每一分钟都被明确地用于某项任务。有助于珍惜时间、提高效率、掌握进度。- 站立会议。
跟进进度,明确任务的好方法,能够频繁跟踪进度、监督工作、确定将要做的工作和已经完成的工作。可以说团队项目能够完成,站立会议这一机制功不可没。- 需求分析、企划书。
理清项目需求、目的的好方法好途径。并且为利益方、想要了解项目的人有一个比较正式的介绍,有助于项目的推广(正式场合下的)。- 代码规范。
以前总是按自己的习惯作为代码规范,但是团队合作中考虑到合作因素就需要有一套完整的代码规范来提高阅读效率。在学习代码规范的过程中也逆向学习到了很多“规范思维”,理解了“规范”这一概念的必要性和好处。
- 其他方面的提升。
- 抗压能力。当一堆考试、作业、实验和软工作业冲到一起时,就很考验抗压能力,挺过来就感觉海阔天空了,感觉抗压的阈值提高了。
- 危机处理能力。突发状况的处理能力在软工中得到了锻炼,我意识到了解决危机不仅要靠规划阶段的缜密思考,还要靠计划阶段为可能的危机预留时间,以及面临危机时“以利益方的利益为核心”的处理原则,还有果断做决定并承担责任的勇气。
二、总结与收获
2.1 个人或结对或团队项目实践中的经验总结+实例/例证结合的分析。
经验总结:
工欲善其事必先利其器
实例分析:
- 起初由于我急于求成,没有太多考虑就选择了大一大二使用的比较多的C++。结果到个人编程的中后期才意识到C++的一些局限性,如:比较复杂,实现一些基本功能的时候需要操心很多东西;在搜索引擎和github上找API的时候,找到的代码的数量和质量明显低于Java和Python……实例:在github上找一个功能的函数的时候,Java得到的结果有60+,Python有40+,但是C++只有11个,而且都是没什么star的,很崩溃。中后期非常想换语言,但是又苦于沉没成本。但是后来个人编程时间延长了,因此果断换了Python,即使把“第二次做同一道题”这个因素考虑进去,使用Python开发还是比C++快太多、轻松太多了,只恨一开始没有考虑仔细,用比较“锋利”的Python写项目。因此说“工欲善其事必先利其器”,工具的选择对于生产十分重要。
经验总结:
建立代码规范有助于捉虫与优化
实例分析:
- 个人项目的开始追求dirty and quick,只做了简单的注释,命名也是随心所欲地起,结果后期捉虫和优化的时候恨不得抽死几天前的自己。C++的代码比较复杂、冗长,再加上我注释没有写清楚、命名不规范,导致后期捉虫和优化的时候遇到很大的阻力,总是看个十分钟代码就晕头转向,降低了效率,增加了很多不必要的成本。实例:有一次找了一下午的BUG,然后才发现其实BUG很简单只是几个变量放错地方,但是由于代码杂乱看着看着心烦意乱,一直找不到问题所在,结果找了整整一下午才把这个简单的问题解决。深刻体会到代码规范的重要性。
经验总结:
站立式会议对项目管理至关重要
实例分析:
- 可以说从方法的角度看,本次项目之所以能够循序渐进、按部就班地完成,很大程度上归功于站立式会议。我们团队的站立式会议流程大致如下:①确定过去一至两天完成了什么(定量);②确定将来一至两天要完成什么(定量);③确定接下来各方面交接的内容和具体要求;④方面内、方面间就项目实现细节进行交流讨论。站立式会议帮助团队确定项目进度、明确阶段性目标、督促每个人完成工作、促进团队经验交流、避免误解和降低沟通成本。实例:数据库的建立和使用存在一定的出入,在站立式会议上的交流中发现这个问题后立即修正了。站立式会议从项目进度管理、项目内容交流等各方面而言都非常重要。
经验总结:
避免畏难情绪,进行有目的性的学习
实例分析:
- 面对不熟悉的工作的压力时,人总是容易有畏难心理。在这次的软工课程中我发现有的同学会希望从头到尾学完他所认为需要的技术,然后再来进行实践,随后我意识到自己曾经也有过这样的行为,并且最终任务没有顺利完成,所谓旁观者清,我趁着这次机会从旁观者的角度反思一下这样的处理方式。在我观察的几个实例中,他们学习的内容往往和实践所需的技术不够贴切(即使在知道这一点的情况下仍然坚持从头到尾学习某项技术),导致一方面花费大量时间在不一定马上用得上的技术上,另一方面后续实践的时候对真正所需技术还是一窍不通。我认为这是畏难心理所致,以学习为由不断推迟实践的到来,直到实践再也无法推迟,则开始发现实践仍然无从下手,从而焦虑和放弃。这样的实例提醒我应该时刻关注自己正在做的事情是否真的对自己的目标有帮助,亦或是在自我安慰与麻木。此外也应该及时请教比自己厉害的人,咨询技术建议,避免闭门造车。
三、致谢
- 最感谢的是:许嘉滨
- 想说的话:在做团队项目的时候,算法和前端基本算有经验可循,但是后端组里没啥人有经验,所以一开始我很担心后面项目能不能真正部署到服务器上。幸亏有了许嘉滨许大佬,扛起了后端80%的工作,才解决了后端的空白。并且在完成后端任务的同时,还积极为前端提供了技术建议,积极交流解决问题,为最终项目上线贡献了一份重要的力量。
- 也非常感谢比奇堡养老队的队友们。这是我第一次当队长,队友们对我的包涵与配合,构成了良性互动,通过九个人的齐心协力,让项目最终顺利上线。
- 感谢队友们对项目的认真态度:林经纬同学通宵做视频、前后端在交付前主动开会冲刺、刘昌隆和黄荣涛同学积极贡献算法功能与提供展示效果……这一份份贡献相信团队的每一个人都看在眼里,记在心里。
- 也感谢队友们对项目的不懈努力:虽然团队合作阶段与许多考试重合,但是队友们仍然齐心协力为团队项目贡献自己的一份重要的力量,项目之所以能有现在的完成度,离不开任何一位队友的努力。
- 稍微骄傲一点地说,我觉得我们的团队可以说是“软工梦之队”(除了我这个不太会鼓舞人的队长)——每位队友都有责任感、勇于学习创造、积极合作交流。
- 之后有机会的话希望仍然能和比奇堡养老队的队友们合作。