个人作业——软件工程实践总结作业

一、请回望暑假时的第一次作业,你对于软件工程课程的想象

1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?

当初的目标与期待:

提升个人能力。实践课首要目的是从实践中提升自学能力和独立解决or合作解决问题能力,希望通过这门课,能让我在今后的项目开发路中更平坦一些。
提升团队合作水平。项目大多不是由一个人就可以完成的,怎么在一个team中完成好自己的部分并与队友无缝衔接,是我之前在项目开发中碰到过很头疼的事情,由于队友和自己都是新手,在项目开始前没有清晰明确的分工,出现了走完一步再计划下一步的问题,导致了很多工作的多人重复完成,以至于效率低下。期待在软工实践课中,我能与队友合作得更加顺利和愉快。
玩出真正有趣的花样。隔壁k班的老师也很会玩,然而我一直觉得他的玩法无法激起我的兴趣,希望栋哥能带我们玩出真正有意思的花样,具体建议...我也不知道了哈哈,别让我们在等日出的时候太枯燥就行
能跟群里的大牛有所学有所得。本人比较孤陋寡闻,进群之前没听闻过几位老师,希望日后能有机会接触并请教!

完成的方面:

  • 提升了web端的技能。学习了vue框架的使用,深化了对javascript的理解,提高了debug的能力
  • 提升了团队协作能力。掌握了github的团队项目合作的使用方法,在与队友的合作中提高了前后端交接的能力

不足:

  • 没能跟群里的大牛学到许多经验
  • 没有完全理解vue框架的使用,只停留在vue组件和基本路由的使用上
  • 由于时间有限,没有涉足后端的技术开发

这次软工实践,由于我个人的时间原因,没能按期初的个人要求,每天投入到足够的时间中,这是比较遗憾的地方。然而通过一学期的软工实践,我除了技术方面的提高之外,对自己的个人发展前景有了不少的认知。我期初的计划是,这学期好好搞软工,做技术开发,如果绩点不高的话,就选择毕业后直接就业。然而通过整个软工实践的过程,我认识到,或许读研才是我的最佳选择。首先是就业选择方面,我不希望自己只是普通211毕业,然后找一份前端开发亦或安卓开发的普通工作,然后经常熬夜加班,我的个人身体健康条件无法支持我完成如此高强度的工作,本学期的数次熬夜已让我身体出现了几次不良症状。其次,我想要拓宽就业选择,读研后如果能往人工智能、大数据等方向研究并感兴趣的话,我会选择就业;如果没能力掌握或是不感兴趣这方面,我可能会选择不在计算机领域就业与发展。对于个人前途的重新认识或许是我软工的最大收获吧,读研才是我的出路。

附上我请教学长时的部分聊天记录orz:

2)总结这门课程的实践总结和给你带来的提升,包括以下内容:

1、统计一下,你在这门软件工程实践中,完成了多少行的代码

  • 个人作业 132行
  • 结对作业 867行
  • 团队作业 2116行
  • 总计 3115行

2、软工实践的各次作业分别花了多少时间?

作业内容 时间(分钟)
第一次作业 240
第二次作业 个人项目实战 720
第一次结对作业 800
第二次结对作业 1020
团队作业 选题报告 300
团队作业 需求规格说明书 580
团队作业 系统设计 120
团队作业 UML设计 120
团队作业 Alpha冲刺 2500
团队作业 随堂小测(同学录) 660
个人作业 软件产品案例分析 300
团队作业 Beta冲刺 600
个人作业 软工实践总结作业 300
总计 8060

3、哪一次作业让你印象最深刻?为什么?

Alpha冲刺阶段。第一次如此系统地计划并执行每天的任务,同时与队友完成的部分交互,有种完成一份工作、收获大于一的感觉;第一次同时和6、7位同学在一块编码的感觉很奇妙,键盘声,讨论声,充盈耳畔;第一次连续10天站立式会议,每天都能及时汇报个人的完成情况,队友出现的问题也能及时地解决,为下一天的进程做好铺垫;第一次连续几天不是因为躺床上玩手机而感受到福大的凌晨……

4、累计花了多少个小时在软工实践上?平均每周花多少个小时?

表格中已提现,共134个小时左右,按照实际有做软工的周数算的话,每周约26小时

5、6、学习和使用的新软件、新工具

编辑器:Visual Studio code
IDE:Visual Studio 2017
协作: Teambition
绘图:Mockplus ProcessOn
搜索: Everything
框架: vue
组件库:iview

7、学习和掌握的新语言、新平台

  • c++
  • java
  • html5
  • css3
  • javascript

8、学习和掌握的新方法

  • 单元测试
  • github团队协作
  • NABCD大法

9、其他方面的提升

  • 原型设计
  • 需求分析能力
  • 代码规范
  • 团队合作
  • 啃文档
  • debug
  • 合理利用时间

二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析

1、个人作业与结对作业

1)算法与数据结构是每个程序员的必修课。

个人的数独作业是我的一大难题,以我在大二时学的算法与数据结构的知识,只能用DFS完成部分,后来我上网查了很多方法后,才学着自己模仿了一个算法出来实现数独盘的生成,然而时间效率奇差,没过几个测试点。结对作业中,部门的选择需要用算法来优化,我也想不出来什么招,很大程度上靠队友完成了部门选择的这部分内容。我打算在接下来的学习中,提升自己的算法能力,掌握一些基础问题的算法优化,相信这也对今后的职场面试很有帮助。

2)细节决定成败

由于粗心,在完成数独作业时审题不认真,先后修改了三次作业才提交,都是非常低级的错误,特别是其中一次,根据个人的学号末尾设初值,结果我居然算错了自己的学号...导致得分非常的低。当时觉得非常不甘心,但是想想,如果以后在大型项目开发中,因为粗心的问题,没通过测试, 导致产生反复检查的工作量,那代价才是更加沉重的。

2、团队作业

1)需求分析要考虑得细致入微

在开发的过程中,会产生各式各样的原因,例如技术无法实现、实现逻辑与初衷产生冲突等,导致我们的产品功能、数据库结构设计等内容多次修改,这对于后端开发的代价是十分大的,也会对团队的前进方向影响很大,给队友产生一种已经搞不清楚我们的产品作用是什么的感觉,从而导致团队凝聚力下降。

2)认真阅读官方文档

每一门技术,每一个语言,最规范的介绍永远是它的官方文档,尽管这类文档大部分是英文,然而阅读最权威的文档永远是一个程序员的最佳选择。我在完成图片和文件上传的内容时,由于自己的javascript掌握得不是很好,就想走捷径,直接去看CSDN上其他人写好的代码,然而就出现了套用到自己的代码里无法使用的问题,于是换个文档、仍然不能用,继续换、继续失败……后来还是无奈选择了去看官方文档,尽管啃英文的过程很痛苦,然而在理解了语法内容之后,解决起来还是效率比较高的。(事实上,大部分英文网页右上角都还是有一个“上帝制造的一键翻译网页按钮”hahaha)

3)团队沟通

一加一大于二在团队作业中的效果是最明显的,我们每个人对技术的掌握程度不一,对项目的看法也有偏差,在每天的站立式会议中,我们能有效地进行团队的交流沟通,在早期及时发现了需求的问题,中后期及时交流了技术方面的问题,大幅提高了开发的效率。我们团队的分工也算是比较合理的,两个美工,两个安卓前端,两个web前端,两个后端,每个模块都有队友可以交流,在开发过程中互相帮助,对自己的技术提升也非常快。

三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?对于后来人的期许。 特别地,特别地,下一届要不要中途换队员?

1、认清软工实践于己身的重要性

不是无脑地将软工实践视为自己这学期最重要、最值得投入的事情,要结合个人实际情况。如果确定自己以后要从事开发岗位,那用心投入于软工实践,认真完成每次作业和任务,会有充实的收获,特别是对于没参加过软件杯、服务外包比赛等的同学,这可能是你本科阶段最宝贵的项目经验了。如果自己不打算从事开发岗位,亦或不想从事计算机领域,并且课余时间不多,那好好读书刷绩点,做些学生工作打好自己的关系网和培养其他方面的能力,没必要强求自己像大多人一样大量投入软工实践。

2、在团队组建之前充分认识到自己已掌握的能力和想要发挥的作用

认清自己拥有的和想要的十分重要。例如,有些人在加入团队前,想要学JAVA,做安卓开发,在讨论完软件需求后,因为团队其他成员的能力原因,被迫去做数据库的构建和接口设计。这样一方面,可能打压个人开发的积极性,另一方面,在这学期从头学习一门之前从未接触过的新语言,可能会影响团队的开发进度和软件的整体性能。我在组队开始前,认清了自己之前做过web开发,就加入了有这样需求的团队,并负责前端开发的工作,这是我庆幸的地方。或许有些人想加入强大的团队抱大腿得高分,然而我认为,找到适合自己的团队,提高个人的技能、素质才是首要的。软工实践中,自己选择的方向,很有可能影响到本科就业的选择,一定要慎重考虑。

3、充分利用时间

熬夜的情况在软工实践中比较普遍,然而也不是必须的,若是在每个作业布置后的第一天就认真开始完成,充分利用白天的时间,就极有可能避免在每个Deadline之前再通宵达旦的情况。大三的确课程和考试非常多,多得让人一有课余时间都巴不得抛下代码丢掉课本去疯去浪,然而若是能真的静下心来好好安排课余时间,还是能有足够的时间和精力投入于软工实践并收获满满的。

换队员的问题

换队员的情况仅适用于极少数学习能力或是代码基础非常好的同学,对于百分之八十的同学是不适用的,并且对于仅有5天的beta阶段,同时逼近期末各种考试的时期,换队员的效果就更加微乎其微。不建议。

四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了 “创造” 阶段了么?(参考《构建之法》第 17 章 人、绩效和职业道德)

前三个阶段大致都经历过了。
萌芽阶段,团队刚刚组建时大家都不太了解,包括需求分析时,没有每个人都大胆提出自己的想法。
磨合阶段,在原型设计,撰写需求说明书时,我们开始讨论合作分工,同时也出现矛盾冲突,对分工产生意见。
规范阶段,在beta阶段的代码整合与功能完善时,体现了“规范”
然而创造阶段,貌似还没有达到。

五、怎样证明你学会了软件工程?

1)研发出符合用户需求的软件,必须公开发布,有实际的用户,一定的用户量和持续使用量(3 天后能保持 10 - 100 个用户);而不是:做没有用户使用的软件

我们在概率论这门课上投入使用,有50名注册学生加上一名老师

2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件,有项目规划 / 需求 / 设计 / 实现 / 发布 / 维护,有定时的进度发布;而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄


3)并且通过数据展现软件是可以维护和继续发展的。而不是找不到源代码,代码无文档,代码不能编译,没有 task/bug等项目的发展资料


posted @ 2017-12-26 23:23  Mr.who  阅读(319)  评论(2编辑  收藏  举报