项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020北航敏捷软件工程 |
这个作业的要求在哪里 | 个人阅读作业-提问回顾与个人总结 |
我在这个课程的目标是 | 回顾学期初的问题,总结个人收获 |
这个作业在哪个具体方面帮助我实现目标 | 理论分析与总结 |
学期初的提问博客:软件工程第一次作业
这个对基础认知的合适的状态要如何找到呢?我们是否有一些简单易行的方法去判断自己处于一个什么样的状态呢?
合适的尺度往往是需要具体的应用场景来衡量的,当一个开发者在完成开发任务的时候,对于经常用到的技能能够烂熟于心,对于不常用的技能也能知道大致的搜索方向即可。
在开发一个项目的实战演练中,可以统计搜索和学习所用的时间,与实际编码和调试的时间做对比。根据项目的情况和自身的情况给自己设定一个阈值,可以根据二者时间的比列与阈值做对比,来判断自己处于那种状态。阈值的设定可以横向对比自身已经熟练掌握的技能。比如,一个人原本熟悉python,后来开始学习java,那么可以用原先已经熟悉的在python中的时间比例来衡量新学习的java中的时间比例。
如何尽量减少自己被搭档的坏习惯影响?或如何避免自己的不良习惯影响到他人呢?
事实上,我们首先应该从理论的角度上出发,来判断一个习惯的好坏(例如,编码过程中所应注意的“高内聚、低耦合”原则)。通过这些原则来衡量一个习惯的好与坏。
那么如何减少影响呢?首先,在搭档的做法中发现相关问题时,要及时提醒搭档,必要时打回修改,争取让搭档改掉这样的坏习惯。
为了防止自己影响到他人,除了自己多注意之外,也要请搭档时时监督。
那么在前期计划时,我们该如何去衡量一个功能的效益呢?
这一点更多的是根据实际调研和经验,一个功能的效益受到的影响因素太多,往往不是设计一开始就能够准确估算的,和竞品、时事、政策都有关系。我们除了做好调研和分析外,最重要的是保证功能的灵活性。在设计之初要重复考虑扩展性,可以推广和扩展的功能,能够在开发的过程中及时调整,效益自然 会更好。
这些地域性差异应该在何时加入设计考虑方案?软件应该如何保持在这些方面上的灵活性?
一个常见的做法是分层,底层适配具有地域性差异的设备,中间层作为转换,上层实现具体功能。无论底层如何变化,上层依然岿然不动。但是,一个重要的问题是,分层往往会牺牲性能,这需要权衡和考量实际效益,尽可能优化。
也就是说,“千疮百孔”的树,即使根基深厚,是否也可能很容易被撼动?
会的,因为会有新的树取代原先的树木,展开枝叶。原先的数目在新木的阴影下再无阳光,失去营养,渐渐凋零,只待一阵风,又或者一片落叶,推到这一切。
当新的思想闪耀光芒,旧的一切都只需一阵风便会消散。
在这一阶段,我学会了使用NABCD方法对项目进行分析,这样的分析更加全面更有层次,目标更加明确。
同时我还学会了绘制用户画像,从用户的角度考虑问题,准确找到痛点和亮点。
在设计过程中我主要负责数据模型的设计,我使用了表格法,对数据模型有了直白的展示。
在项目实现的过程中,我的收获十分丰富。
我此前从未使用git仓库和其相关平台进行过团队合作与测试部署。在这学期的学习过程中,我现实自己完成了简单的测试部署任务,完整体验了部署和测试流程,还探索了不同平台花样繁多的部署方式。在团队项目中,我进一步规范了git的使用,包括分支的检出与合并、issue和pull request功能的使用等。这些技能为开发过程带来了极大方便。
此前使用django进行服务端的搭建时,并未使用过restful相关组件。直到本次团队项目,我才开始发现,原来在Django之上还有这样便捷的框架。Restful让我学会了Serializer层的构建,也让我对API的实现有了更深入的了解。
在以往的学习生活中,我是很不愿意做测试的人。然而,面临代码量巨大的、要求严格的团队项目,我开始习惯做单元测试,并认识到单元测试的重要性。
正如此前老师所预计的那样,我们的团队项目在发布后如何获得第一批原始用户积累是相当困难的。为了解决这些问题,我们不仅设计了发布方式和流程,建立了用户反馈通道,还从身边的熟人下手主动式、进攻式地宣传和推广。这些举措具有一定的效果,但是若说作为一个真正的软件发布,可能还是考虑得有些浅显。但不管怎样,这个过程中我们尽力了,也学到了很多。
维护的过程中,我们衡量各项功能的实际效益,看到原先设计的惊喜功能、基础功能、杀手功能与我们的预期有所偏差,并在此进行相关调整和改进。
软件工程这门课的学习过程还算是比较艰辛的。记得在结对项目时,我和搭档多次在新主楼爆肝的场景。那个时候,很多事感觉做不完,也做不到尽善尽美。但是后来,我们还是提交了一份比较满意的作业。尤其印象深刻的一天是提交前一天半夜我突发奇想,构造了一组数据,成功挂掉了我们的代码。当时心情十分紧张和焦躁。好在这个问题很快被修复了,只是现在想起来,当时那种困意和忐忑两种不同的味道同时在心中弥漫开来感觉,仍然萦绕心间。
团队项目的过程周期更长一些,准备的时间也更多一些。我的队友们有着丰富的经验,于是在团队中,我从队友身上汲取了很多经验。我学会了很多工具的使用技巧,也更加丰富了团队沟通的能力。我了解和见识了完整的团队开发流程,方才明白,编写代码只是开发中的一小部分。优秀的项目,要有风格良好、性能优越、功能齐全、安全性好、可读性高的代码,这就需要设计和测试这一前一后两个环节的充分保障。而项目的最终效果与否,又与设计、发布和维护环节密不可分。整个流程环环相扣,每一部分都需要精心完成。
最后,非常感谢本学期和我一同奋斗的结对搭档和团队队友,也感谢老师和助教的辛勤付出!