路漫漫其修远兮,吾将上下而求索---软件工程实践总结&个人技术博客

路漫漫其修远兮,吾将上下而求索

这个作业属于哪个课程 2021春软件工程实践|W班(福州大学)
这个作业要求在哪里 软件工程实践总结&个人技术博客
这个作业的目标 回顾本学期,总结自己的成长和进步

课程回顾与总结

提出问题的作业链接:寒假作业2/2

1、尝试解决自己之前提出的问题

问题1:如何避免过早地优化

当时的问题:P53写到,过早优化:一个工程师在写程序的时候,经常容易在某一个局部问题上陷进去,花大量时间对其进行优化;无视这个模块对全局的重要性,甚至还不知道这个“全局”是怎么样的。这个毛病早就被归纳为“过早的优化是一切罪恶的根源”。

当时提出这个问题是自己对软件工程还没有一个大概的理解,所以到底如何避免过早的优化呢?

​ 经过一个学期的自主学习,我认为需要先想清楚几个问题:优化有什么好处?具体到,优化是否可以减少代码量?优化的地方是软件系统的瓶颈吗?优化方案中,是否会给系统增加限制或者增加隐藏条件?
​ 在我个人的开发中,我也经常出现过早优化的经历,但由于自己或多或少的缺乏思考,总是会在优化的时候觉得优化的很有道理,自己做的真好,但当整个软件或者项目完成开发时才发现,自己在优化过程中增加了系统限制,于是返回去一步步改,徒增很多工作量,也让自己感到烦躁。我想,以后我会先问自己上述的几个问题,再决定是否进行优化。开发时多采用敏捷开发的方法,先完成一个粗糙的系统,再一步步优化调优,此时对系统软件有一个大局把控后,优化会做的更加合理。

问题2:代码量与成长的关系

当时的疑惑:如何平衡好单纯调用封装好的库和彻底了解源码的关系,因为在认识不全面的时候似乎读源码花费的时间和得到的收获并不成正比。

经过本学期软工实践的历练,我想自己对这个问题有了更深层的认识。上学期自己在一科研团队里做数据处理的时候自己曾接触过NLTK等NLP库,当时只是单纯的调用,并不知所以然,只是觉得封装这个python库的程序员真的很牛。
但在本学期β冲刺中,我在负责处理前端回传的中文信息转化为拼音时,我就通过利用上学期使用过的snowNLP库,仅以9行代码就完成了信息转义,并让前后端接口得以正常连接。
这一经历让我认识到,可能在第一次应用的时候,出于未知可能程序员会对其产生恐惧或是退却的心理(至少当时知识储备匮乏的我是如此),但是去调用过一次,当第二次调用他的时候你就会有一种莫名的熟悉感,也会更自如的调用并更好的依照文档去创新代码,以符合自己的需要。
回到这个问题上,我认为第一次运用封装好的库的时候,不用过于纠结是否读库的源码,可以对库有一定了解之后,再去读源码或者挖底层,此时效果可能会事半功倍。

问题3:结对编程

在学期之初,由于没有过结对编程的经历,所以会疑惑结对编程究竟是什么样的。

经过本学期的两次结对编程,我认为选择技术栈互补的搭档来进行结对编程,工作效率是会大大提高的,在我和我的搭档龚海旭同学结对编程的过程中,我们在线下高效沟通,工作起来犯错少、进度快,技术栈的互补也让我们的学习成本大大降低,我们各自完成自己较为熟悉的部分,偶尔客串对方的实现,在两次结对编程的过程中,龚海旭同学都给了我十分好的结对体验。

问题4:典型用户

当时提出的问题是:“典型用户的定义和删除让我觉得非常奇怪,典型用户在何种情况下需要进行删除呢?”

提出的原因是当时对典型用户的定义不甚理解,在有了几次团队作业的需求分析会议后,我对这个问题有了初步的认识,如P218所说,小李的第一个典型用户,吴石头好像不喜欢上网,他事实上不太会用电脑,也搞不懂如何上传照片。所以凡是和网络相关的事情,都交给了他的儿子。所以小李不得不把吴石头从典型用户中删除。

所以我想典型用户的删除,应该是建立在团队对最初的典型用户设定有了偏差,或者说后续的典型用户群体中,有部分个体由于某种原因成为了这个群体的一员,然而并不是我们的主要服务对象,此时我们就应该把他从典型用户中删除。

问题5:创新者与先行者

当时提出的问题是,在市场上出现过的种种案例中,我观察到很多创新者都不是先行者,所以进而思考到了先发优势(FMA)和后发优势(SMA)的关系。

经过几次团队作业的协作,从最初的定题讨论,到后面的竞品分析,以及具体实现,我认识到,先发优势和后发优势可能更多取决于开发者有没有认真的去思考。比如说我们outfits团队,做的是智能衣柜,将衣物上传到app后经过抠图处理,最后通过算法给用户提供搭配。在和竞品stylebook和小红书进行对标后,我们就有了些许所谓的后发优势,这边的后发优势更多的可能是点子上的创新。但像如微信打败米聊依靠的是QQ庞大的用户基数,这种总公司原先积累的巨大优势也是不容忽视的,所以每个软件或者说企业的成功都是由很多因素综合影响的。、

2、5个阶段中,每个阶段收获最大的知识或能力是什么?

需求

需求阶段中,我参与了需求规格说明书中软件可用性、产品使用说明书、界面验收标准的编写,这个阶段是我们团队整体进行最多的交流的阶段。也是我们整个团队刚刚开始,我们经常开会,畅谈各自的想法,完善整个软件的制作。

这个阶段中收获最大的是设计和分析能力,还有团队间的协作能力。首次经历10个人的多人团队,我也明白,一个人的想法是有局限性的,需要广泛的采纳别人的意见。

当然过程中我们也有争吵,由于我主要负责算法部分的实现,需求时团队定了较多的算法,给了我比较大的压力,后来通过和林子鹏同学的沟通和向他学习,我也有了进一步的实现思路,也感激队友对我的包容。

设计

设计阶段我主要进行辅助原型的设计,和团队其他成员商讨后,那阶段我主要在考虑温度推荐算法以及抠图算法的实现。由于我在这学期前没有很深入的接触过机器学习相关算法的开发和调用,所以当时我看了不少的博客和论文进行了一些知识储备,也为我后续的算法开发打下了不错的基础。

我的收获:需求文档十分重要,有了完善的需求文档,原型设计也会更加顺利。

实现

实现方面,我是负责app的大部分算法设计和算法部分的接口编写。这一部分是我经过阅读大量文献完成的,其中温度推荐算法是借鉴学习了天津大学的一篇硕士论文,抠图算法是通过在知乎、CSDN等平台阅读相关博客,后借鉴GitHub的多份项目文件和文档修改成了一个独立抠图算法。除抠图算法的app接口,其余与算法相关的部分都是我独自完成的。
最大的挑战是:在实现温度推荐算法的时候,借鉴的天津大学硕士论文中有部分参数有误,以至于搭建了一个不完全正确的模型。此时整个模型已经尽数完成搭载,若是推倒重建将会带来巨大的时间和人力损失。后来我经过多元回归的方法,并多次测试后,修正出一个相对正确的模型。

最大的感悟就是,读研的时候一定不能学术造假吧,不然真的可能会给后来者带来不小的麻烦。

测试

测试阶段主要进行接口测试以及界面运行测试。我最大的一个感受是测试一定要留下足够的时间。在β冲刺的开发结束后,由于我们组的测试时间所剩下不多,在测试阶段,我们发现页面缺少了加载页和错误页。导致最后一天进行了很多的修改。在最后一天手忙脚乱,也给几个开发主力带来了额外的不小的工作量。

发布

发布阶段主要是寻找用户使用app,制作问卷进行反馈收集。在问卷收集后,我们收获了不少宝贵的意见。也发现了一部分我们在开发时,团队内部没有发现的问题,比如注册时没指名要求用手机号,这边的前端设计不尽合理;上传衣物太过麻烦,可能会耗费初次使用的用户一部分使用热情等。也临时发现一些bug,比如数据显示太长超出屏幕,博客正文莫名多出双引号等。

有机会的话还是想把outfits这个项目好好维护,做成一个像样点的app。

3、结合自己在个人项目/结对编程/团队项目的经历,谈谈自己的理解或心得

个人项目

个人项目中我主要初步学习了《构建之法》,制定了本学期的学习路线(大方向上未偏离),编程实现wordcount程序。

读了构建之法后我才对软件工程有了一个初步的认识。编写wordcount程序时,因为自己Java的基础比较薄弱,花了一部分时间去温习Java的相关知识,加之对GitHub工具的生疏,也给这次作业带来了不小的阻力,所幸自己通过查阅博客、请教同学,最终也完成了这次作业,虽然最终完成的效果不是很好,但是过程中我学会了GitHub的使用、也巩固了Java的知识,我想和自己比有进步就好了,每个人的技术栈不同,我也很高兴自己有了进步和收获,希望自己能够继续加油。

结对编程

两次结对编程我主要负责前端部分。

第一次进行原型设计,第一次使用原型设计工具,感觉真的很不错,无需代码架构,就可以通过部件的组合初步形成一个可视化的界面,这对我们后期的开发也减少了许多意见上的分歧。对我而言最难的地方就是第一次使用墨刀,觉得有些吃力了。

第二次结对作业中,我主要负责用VUE框架完成对前端代码的编写,过程中自己学会了初步使用VUE,自己的技术栈也有了进一步的扩充,虽然过程艰辛,但获得进步也让我感到喜悦。

结对给我带来的收获主要就是两个技术栈互补的人在一起配合,可以大大提高开发效率,不然自己一个人要开发一个系统需要把自己打磨成全栈工程师,学习成本有些过高了...我也很感激我的队友,过程中我在他身上也学到很多。

团队项目

我在团队项目中学习到很多,通过这次团队项目,我接触到了后端接口的编写,服务器的搭建,虽然我不全有参与其中,但如果不是这次机会,我可能不会去接触这些知识,我也感谢我的队友能够在我不懂的时候耐心的教我相关知识。

团队项目中,我主要负责算法的开发的搭建,过程中我对算法有了进一步的理解,并第一次尝试并成功用Java调用python脚本,并成功完成传参,这种跨语言调用还是让我成就感满满的。

总体而言,虽然很累也有矛盾,但团队项目还是给我带来很多宝贵的经验和财富,并收获到了很多。

个人技术总结

这些博客是我本学期在一团队中负责计算机视觉算法开发时,学习整理的一些markdown笔记,供自己有需要时翻看学习。

“扫一扫”模型

CenterNet算法介绍

PyTorch搭载CenterNet算法环境配置

车牌识别小结

posted @ 2021-07-08 22:01  淡水蓝鲸  阅读(82)  评论(0编辑  收藏  举报