- 这个作业属于哪个课程:软件工程1916|W
- 这个作业要求在哪里:个人作业——软件工程实践总结作业
- 学号:221600126
- 这个作业的目标:对过去四个月以来的软工的课程做一个总结
Part 1 - 回忆篇
再翻回自己最早的那篇博客,不得不说,里面的某些东西确实应验了:我还真的去搞了 Android 开发(在后期换人的时候,我被换到了一个 Android 项目里)。中途换组给我带来的一个好处就是我(被迫)学了两套技术栈,但劣势也挺明显,整个软工实践的流程走下来,我发现自己确实会 Java Web,也确实会 Android,但都不算精通。两个项目没有给我带来双份成就,于我而言,可能全程把一个项目跟完,对我的提升会更大些。
整个实践过程中的代码量?
翻了一下自己在 GitHub 上的提交记录。两个项目总的代码提交行数大约在 3500 行左右。挺讽刺的对吧?一个别人口中的“大佬”,最后完成的代码量才这么一点?再回过头来想想其实也不奇怪。前期在“修!咻咻!”团队的时候,数据库那部分的代码不是我写的(那个时候项目还没引入任何 ORM 框架,所以这部分的代码量挺多),我在那个项目里实际负责的就是一个用户申请预约,填写预约单的那个功能的前台页面和后端代码(前端的页面是我传的还是其它组员统一传的,有点没印象了)。后面到“火鸡堂”团队,接手他们代码的时候,我发现那个项目的代码简直是一滩烂泥,同时又没什么完成度,所以引入了 LitePal 把项目的数据库部分重写了一遍,然后又引入 MPAndroidChart 并完成了图表视图的编写。
归结起来,自己的代码量偏少,应该有如下两个原因:
- 自己承包的功能偏小。不参与项目的核心编程
- 成熟的第三方库的引入,使得需要自己写的代码变少了。
各项作业所花费的时间
作业 | 时间(小时) |
---|---|
结对第一次 | 7.25 |
结对第二次 | 20.08 |
团队选题 | 2 |
团队原型设计 | 10 |
团队需求分析 | 5 |
团队系统设计与数据库设计 | 3 |
团队 GitHub 实训 | 13.5 |
团队 Alpha 冲刺 | 52 |
团队事后诸葛亮 | 3 |
团队 Beta 冲刺 | 44 |
共计时间 | 119.83 |
单算完成这些作业的时间,大概累计在这上面花费了约 120 个小时。
印象最深刻的作业?
个人认为应该是团队 GitHub 实训的那次作业,那次作业让我意识到在没有事先规约的情况下做出来的项目会有多爆炸。我自己完成的那部分东西其实已经是提前准备好的,但是拿到实训现场才发现和他们所设想的功能有所出入,所以还得再去做出修改,也是因为这个问题,在半夜十二点还被叫去改代码。
学习和使用,并掌握的东西?
- Git(当然后期的开发主要还是依托 IDE 内建的对 Git 的支持,真要掌握的话还是需要在以后的工作中碰一下命令行)。
- 画原型的时候用到了 Axure RP,简单的原型可以画画,但是涉及到复杂的交互逻辑还是得找一下资料
- Kotlin & Android 开发:我寒假接触 Android 就是使用 Kotlin 作为编程语言,确实也用在了后期 Beta 冲刺的项目中
- Bootstrap(网页 UI 库):在 Alpha 阶段团队发现原型不能直接使用的时候,为了重构页面学习的东西(当时提出用这个 UI 库的是我,后期的页面是由另一个组员提供了模板,我们在那模板上改的)
- MPAndroidChart & LitePal:两个 Android 库,前者用于绘制图表,后者为 SQLite 的 ORM 框架。在 Beta 冲刺中用上了,不过 LitePal 由于 API 文档没有部署在网站上,我得手动点开源码才能看到它的 Javadoc 注释,开发过程中也踩了不少坑。
Part 2 - 属于自己的“人月神话”
印象最深的一次应该是在 Alpha 冲刺的时候。前文提到我在 Alpha 阶段负责的是用户填写预约单的那个界面。但是其中有一个地方:在选择电脑问题那里有两个下拉列表:一个是选择“硬件问题”和“软件问题”,另外一个的内容根据前面的选择进行动态更新。这个问题一直卡到 Alpha 冲刺结束都没有得到解决。那时候我天真的以为这个问题容易解决,那时候队员也在忙其他的,就想着自己研究,也没求助任何人。最后的结果就是那个问题没有解决出来,那个选项在 Beta 冲刺的产品里被去掉了(改为只选择“硬件问题”和“软件问题”)。然后就赶上我被换组,在“事后诸葛亮”的会议上,黄权焕(修!咻咻!项目组的组长)和我说,他并不希望我在这个小问题上钻牛角尖,他本来想给我安排其它任务,但碍于我的情面,他没有提出来。我当时在想,你要早点提出来的话我就直接过去了,我都快被这个问题搞得抑郁了,早就想换件事情做了。
这件事情从一方面影响了项目的进度,另外一方面也暴露出我的一个问题(这也是黄权焕同学提出来的),我不够洒脱,有困难时应该提出来,让大家知道。另外就是有点钻牛角尖,我习惯于把 20% 的部分做精做好,但没意识到项目真正需要的是 80% 的那部分。我想如果我能在 Alpha 冲刺之前能够悟到这一点,我的 Alpha 冲刺应该能做得更好一些
Part 3 - 想对下一次课程说的……
首先想吐槽的一点就是作业的布置。我知道老师和助教都想直接复用上一次课程的作业,但是在发布作业之前能不能先看一眼,没有问题了再发出来,不然我们还要在理解题意上在群上吵半天(就比如一开始的那两次结对编程的作业,后面听计算机的同学说他们也是在这个作业上起了很大争执,既然在上一次课程中出现了问题,为什么不能在这一次课程中尽可能规避呢)
然今后我想对下一届同学说:内心不够强大者,慎选这门课(或者说,慎选汪老师)。固然,我确实在这门课中收获了不少,但这四个月下来,我过得挺压抑的,尤其是宿舍其它五人组成一队,完成作业的时候,他们能在宿舍一起完成,但是我做不到,我不是他们这一组的,于我而言,如果我没有加入一场谈论,那么这场谈论于我而言与噪音无疑。再碰上作业遇到困难的时候,更是心理堵得慌,每次都被迫跑到隔壁一个安静一点的宿舍,或者是图书馆。有那么一段时间,老是想着自己要不然就“福大教学楼,一跃解千愁”,在心理预约场场爆满,又找不到任何可倾诉的对象的情况下,我是真不知道自己是怎么撑过来的。所幸,目前课程已经结束,不过软工实践在今后的一段时间内依然会成为梦魇。
然后就是最关键的问题:要不要换组。作为换组的“牺牲品”,虽然被换组这件事情搞得整个人都不好了,但我认为,换组可以换,不过我严重反对这种随机换组的行为,无论是对个人还是团队都太伤了。在换组这件事情上,我咨询过上届的一个学姐(也是采用《构建之法》的教学模式),学姐说她们换组的时候就是由个小组自行决定要被换出去的人。退一万步说,哪怕一定要执行随机换人,也应该要做到被换组的同学,其主攻方向保持不变或变化很小。这点我想可以通过在 Alpha 阶段组员的分工,或者说在准备篇里说明一下自己擅长的领域。另外我也赞同黄权焕同学的观点,把换组的时间提前到 GitHub 实战,这时候还没开始进行编码工作(当然部分组可能已经开始了),换组的影响确实不大。
以上只是我的个人见解。最后我想说的是,哪怕老师和助教还是要坚持这种我认为不合理的换组方式,还是务必照顾一下被换组的同学的心理,毕竟像“以后你们工作了,你们会感激你们有过这段经历”这类话,在我看来起不到任何安抚作用。
Part 4 - 评价一下自己的团队
由于我经历过被换组,所以这部分我打算同时评价一下我待过的这两个团队
“修!咻咻!”团队
我在这个团队待到了 Alpha 冲刺结束。按照团队发展的几个阶段来看,个人认为这个团队目前已经完成了磨合阶段。那个组的选题是我提出来的,在项目的各个阶段,大家的活一部分是自己揽下,一部分由组长分配。在 Alpha 冲刺阶段,每天的例会上互相之间都能比较有效地交流。哪怕是在我离队之后,项目发展得仍然不错。同时我想在这里再次感谢这个团队的队长——黄权焕同学,我认为他是一个合格的项目管理者,他在我离队的时候说这个团队对不住我,其实我觉得是我对不住它们,我在 Alpha 冲刺阶段贡献不是很多,我想对他们表达抱歉。
“火鸡堂”团队
我是在 Beta 冲刺阶段进入到这个项目组。也许是因为我对换组仍然有一种怨念,所以可能对这个新团队的评价有失偏颇(也可以理解为是我先入为主)。但说实话,我一开始加入这个团队时,我并没有感受到一个团队的氛围(新团队里没有一个人主动联系我,和我讨论交接事宜,我只能自己联系队长)。在和队长聊天的过程中,他告诉我这个项目 Alpha 冲刺阶段的进展几乎为 0。我后面也了解到团队里队员的水平普遍不高,但是我依旧无法理解为什么他们的 Alpha 阶段几乎是 0 进展。既然在选题的阶段就定下来做 Android APP,那么对于 Android 开发应该提早做准备才是。我也不确定我在 Beta 阶段要做什么,最后只能从别人都没动的图表展示入手,以及重构数据库的部分。(我觉得自己作为一个完全的“外行人”,如果从改代码开始,可能会把项目越搞越糟)。
总得来说,这个团队目前还是处于一种磨合阶段,队长还有待锻炼。至于为什么我没去选择申请做组长,理由见上一段的最后一句。
Part 5 - 证明自己学会了软件工程
软件工程这门课所带给我的,我想主要体现在对产品可维护性上的思考,这点在 Beta 冲刺阶段体现得比较明显。我尽力让我自己写的每份代码都有 Javadoc 的注释,同时保证自己的代码能够自解读的。同时我让我的代码符合编程规约,并尽力消除 IDE 爆出的各种 warning。最后我还给项目加上了测试文档(虽然很简单)。最后就是 Beta 阶段尽力让自己每天写出的代码都能有一个可见的结果。真要找什么具体数据的话,可以在火鸡堂团队的博客,有几篇冲刺随笔里有我的进展的截图,以及在总结随笔中有我的“测试报告”。
Part 6 - 最后的最后
Everything that kills me makes me feel alive.
所有的绝地,都使我逢生。
—— OneRepublic - Counting Stars
被软工实践折磨了四个月,几近让我想着一了百了。四个月后再回过头来,才发现其实也没什么大不了,那些比我强得多的 dalao,他们也被这个折磨了四个月,他们既然还没发言,我想目前还轮不到我说话。最后给大家分享一句歌词。既然困难没有把你击倒(实际上这个算困难吗?)那么你就一定会因这个困难变得更加强大。很快地,今年 7 月份,我就要去博思软件进行我的实习。希望自己的实习能够顺利,也希望这四个月的经历,能够让我在日后的工作中有所思考,有所启发。