高级软件工程第8次作业

一、请参考第一次作业,当初你对课程的承诺和期望都兑现了吗?

第一次作业我对这门课的期望做了一点规划:

对这门课我希望学到一点有意思的并且感兴趣的知识。正如前面所提到的,我觉得能够在老师的指导下做一个让我感兴趣的项目是非常值得的,我肯定会为此付出精力。

虽然一直觉得这门课工作量大占用时间多,但是回首一看,短短的两个多月也是实打实地完成了五个大的项目。不仅如此,这些作业由浅至深,从一开始的命令行完成的小程序,到后来的产品实现,再到结对编程、团队项目,之中所经历的实践过程以及所学习的新工具新平台等知识远远超出了之前所期望的“做出一个大的项目”这个要求。

二、总结这门课程的实践给你带来的提升。

学习掌握的新框架

python网页开发的flask框架。这个框架能够用python语言搭建网页后台,并对前端提供强大的逻辑支持。在上这门课之前我也一直存在这个疑问,由于之前用过pyQT、wxpython都不尽如人意,不知道如何去用python写一个好看的用户界面。而flask通过让我实践告诉我答案:最简单的就是网页实现。

掌握的新工具
  • github平台。以前也接触过这个平台,但是老实说没怎么去用过,这一次老师要求的github管理让我不得不重温github的各种操作,并且熟悉了更多之前没有了解过的用法。
  • leangoo敏捷项目协作工具。这个工具在管理团队项目敏捷开发的过程中提供了卡片管理及燃尽图等功能,方便简洁。
    python单元测试工具pyunittest。以前写代码没用过测试工具觉得单元测试耗时又没有作用,用过之后才发现代码的哪个地方效能不好一目了然。
完成了多少行的代码

大概5000行左右,随着项目难度的提高,代码的累计速度也是循序渐进的。除此之外,还有不少文档以及软件工程的博客均是一个字一个字码起来,花的功夫很足。

学习和掌握的新方法
  • 团队协作的方法。在最后两次作业中,在助教的指导下我们使用了github的team协作功能,利用这个工具我们轻松地共享团队进度,快速实现开发过程。
  • PSP时间预估。在项目开展前,通过PSP方法对每一个阶段的时间进行大致的预估,保证项目的高效进行。
其他的提升
  • 编程能力。毋庸置疑,这几次大作业下来大家的代码量都会得到显著的提升。在编程中遇到的困难,解决的方法以及最后提升代码遇到的瓶颈等等都会成为经验和能力,为我未来的工作铺路。
  • 时间管理能力。紧凑的项目时间控制使我不得不控制自己的时间来完成分配的任务,因此也慢慢地学会了自己控制时间。
  • 代码质量。学会了测试工具后,经常用于调整自己代码的效能,为此发现了不少以往常用的但是性能很差的方法。

三、项目实践中的经验总结+实例分析

  1. 一定要自己多动手。刚开始拿到第一个题目写四则运算器的时候,感觉挺简单,一个逆波兰算法实现了就可以搞定。写着写着就发现,自己太自信了,很多情况例如分数,括号等,一加入到考虑范畴之内就会将问题的难度提升一个数量级。这个项目从开始到完成一共花了四天的时间,比刚开始的预计时间慢了四倍,其中有很大一部分时间在debug。这也从一个方面告诉了我,动手能力还不是那么充足,需要继续勤加练习。
  2. 1+1>2。很早就听到过这个理论,但真正经历过实践过之后才知道两个人的配合多么重要。在结对编程的作业中,我和搭档都不熟悉python的网页编程,一度陷入很艰难的瓶颈期。慢慢地,我们发现了自己在项目中的侧重点,我比较擅长后端的数据库搭建,逻辑编写,而她之前做过前段的网页设计,熟悉前端工具且有很好的设计能力。在项目中期实现的过程中,我们在自己擅长的领域钻研学习,并相互取长补短,最终成功地在预期时间内完成项目。
  3. 在做团队项目的过程中一定要有明确的计划及分工安排。以前的大作业也按照小组分工,但是由于疏于管理加上觉得写文档白白浪费时间,导致最后作业基本落在一个人头上,其他人也不知道怎么插手。我们项目的成功完成最主要要归功于我们的PM,在开发之前对每一个成员的能力作了详细地了解,并做到了科学的分工。在项目开展的过程中,每天组织大家展开讨论,明确任务。我们每一天都能够从她的文档中看到项目的进程,很大程度上提高了项目的进行效率。所以我认为团队之中有一个强大的管理规范系统的作用大于所有其他因素。

四、分析一下自己所处的团队。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?

  • 萌芽阶段:刚刚组建团队的时候还经历了一点小波折,我们团队本来是分到了两个组,但是由于在结对作业中用到的语言及框架一致,我们向老师和助教提议才换到了一个组。团队项目的提出是因为大家坐在一块讨论,发现了对目前所用的博客园评价十分一致,才提出了该项目。
  • 磨合阶段:项目的四个人每个人的能力以及偏重的场景都不相同,但是又刚好适应了项目开发的各个部分。通过不断的磨合我们已经掌握了事半功倍的方法。
  • 规范阶段:通过PM的要求及github的管理,我们每天需要对伙伴的代码格式及逻辑进行反复阅读,这也促使我们不断规范自己的代码,使其更具有逻辑性及重构性,保证不会对团队造成困扰。
  • 创造阶段:我认为我们达到了创造阶段,在经过Alpha阶段的鼓舞之后,我们每个人都有一个项目的愿景作为自己开发的动力。在Beta阶段中,每一位成员都可以独立地将自己的进度push到项目中来,并且在可行范围内能够自然地转换功能。

五、在今后的教学中,老师们还将根据同学们的基础、期望达到的目标,在教学内容和作业量上做更多的调整,争取为大家提供一个更加个性化的学习过程。你对课程设计(授课内容、方式、作业内容)有什么建议吗?另外,作为学长的你,对后面的学弟学妹们有什么建议?

对课程的建议

在我看来,这门课的设定宗旨在于,让同学们通过自己的实践来领悟软件工程的知识。通过这两个月的学习我认为,相比于以往枯燥无味的教学来比,这门课不仅更能让我学到知识,还能实打实地增长见识以及提高动手能力。但是九周的学习也产生了一个问题,就是我们的时间被压缩得特别紧,作为研究生,在一开始不熟悉课程节奏的那一个月里,为了高品质完成课程任务,导师安排的事情基本没做,这也让导师产生了不小的不满。希望以后的课程能够尽量拉长时间线,本身五个项目循序渐进对我们十分有帮助,我也不希望这个作业量减少多少,但是全部挤成两个月我认为是没有必要的。

对学弟学妹们的建议

希望大家勤奋动手,高水准高品质完成任务,踏踏实实得做苦活肯定是是很苦的,也可能一开始会非常抵触,但是当这些全部结束的时候你回首看这两个月的足迹,一定会让你很庆幸当初选了这门课。

六、助教老师为课程的顺利开展做了很多工作,与老师们的交流也让大家获益匪浅。你对助教老师的工作可以提一些意见和建议吗?

助教老师可以说是到目前为止最负责的助教老师了。印象最深的是我的第三次作业四则运算GUI,当时写了一个网页的四则运算项目,由于学院网的限制,打开的服务器只能在学校内的ip访问,助教的ip没有办法登陆。助教看这个问题没有办法解决,竟然通过我的github在他的本地搭建了服务器并测试我的程序,最后我都沉寂在可能得0分的绝望中居然意外地看到了一个67/70的分数,欣喜之余也很感激助教的负责。
希望助教老师能够继续保持这份负责任的工作态度,平常也多跟同学们交流沟通,在同学们遇到困难的时候及时帮助同学们,会有更多的同学感谢您。

posted @ 2017-11-11 17:43  waple  阅读(263)  评论(2编辑  收藏  举报