一、请回望暑假时的第一次作业,你对于软件工程课程的想象
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等项目的发展资料