个人作业——软件工程实践总结作业
个人作业——软件工程实践总结作业
一、请回望暑假时的第一次作业,你对于软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
Answer: 回想当初选这门课的初衷,就是想在实践中应用自己所学的知识去做一些有意义的东西,通过实践来测验自己对已经掌握知识的程度吧。更重要的是自己想通过这门课来做到两年来对计算机专业的“第一次真正的入门”。首先,实践的程度已经大概满足了我的需求,甚至是超额?(从来没有一门两学分的实践课是那么累)。在软工实践过程中,锻炼了我java程序的独立编写能力以及结队编程能力,团队合作的意识和能力,以及初步了解和使用软件开发中的各种工具,相信这对我以后的工作生活将有莫大的帮助,另外我觉得最重要的一点,软工教会了我独立解决问题的能力,计算机的水很深,这辈子都不可能把所有的知识都学完,实践中遇到问题的次数也非常多,包括以后的工作,这样子独立解决问题的能力就显得至关重要。至于在哪些方面的不足,我觉得我会更加倾向于前端的开发而非后端,因此我应该在以后的学习生活中多去了解和学习这些方面相关的知识,比如说css,html,js等等,以及安卓中常用的一些前端框架。
2)总结这门课程的实践总结和给你带来的提升,包括以下内容:
- 统计一下,你在这门软件工程实践中,完成了多少行的代码;
Answer: 包括个人作业,结队作业,以及软件工程团队作业,我想一共可能会1000行左右的代码量。(由于在团队中是做美工方面的工作,因此在团队中编码量相对较少)
- 软工实践的各次作业分别花了多少时间?
Answer:
作业 | 花费时间 |
---|---|
软工实践第一次作业 | 2小时 |
个人项目实战随机数独生成 | 14小时 |
结队项目第一次作业 | 4小时 |
结队项目第二次作业 | 12小时 |
个人技术博客 | 3小时 |
个人作业-软件产品案例分析 | 11小时 |
- 哪一次作业让你印象最深刻?为什么?
Answer:
使我印象最深刻的,我觉得应该是结队项目的两次作业吧。第一次作业,我学会了原型工具的使用,做出一个可视化的软件精美模板,我觉得这非常有趣。另外在第二次作业中,我了解了json格式的网络传输数据,对于json的解析封装等等,自己动手写部门和学生的分配代码,这算是我第一次接触的一个小项目吧,不管自己代码质量如何,最终评分如何,我觉得自己独立完成这么一个小东西,是非常有实际意义和成就感的吧。
- 累计花了多少个小时在软工实践上?平均每周花多少个小时?
Answer:
包括团队作业的两阶段冲刺,以及个人作业结队作业可能有120个小时了吧,平均每周花10个小时左右吧。
- 学习和使用的新软件、新工具;
Answer:
华为软件开发云,墨刀,axure RP,PS,android studio,eclipse,processOn,exe4j。
- 学习和掌握的新语言、新平台;
Answer:
java,xml,华为软件开发云。
- 学习和掌握的新方法;
Answer:
单元测试,覆盖率测试等等。
- 其他方面的提升。
Answer:
独立解决问题的能力,团队沟通和团队合作。
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
Answer: 就拿第一次的个人项目实战--数独,开始说起吧。这个也可以算是大学以来对于自己来说遇到的第一个相对比较难的项目吧,刚刚开始的时候是手忙脚乱的,在脑袋里拼命的构想数独生成的算法机制,并且考虑算法的有效性从而考虑算法的有效率。然而就这么空想了很久也没有想出个所以然来。之后,我就果断的“参考”别人的做法,从网络上了解了很多数独构成算法的思想以及效率分析,之后便着手开始编码,终于是有了一些成效。由于自己是个什么都不懂的freshman,因此遇到后面的单元测试,覆盖率测试以及github的更新签入记录,甚至github的基本使用对我来说问题都是很大的,但是后面通过看网上的资料以及询问其他同学或者学长,也都相继解决了。就从这点来看,一个很重要的经验总结就是,遇到问题自己想了很久也没有答案之后,可以去参考别人的做法,试着自己动手实现他们的想法,并在他们的想法上加以优化和改进,这样子是一种不错的学习和实践的方法,记得上次华为软件开发云交流会上,华为大佬有提到过,企业里面遇到问题并且解决问题的能力是非常重要的,自己想不通的问题如果不及时和其他人交流的话是会严重拖累项目的进程的。因此个人觉得这也是非常重要的一种能力吧。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?对于后来人的期许。 特别地,特别地,下一届要不要中途换队员?
Answer: 首先,作为一个过来人,先庆祝一下自己,软工终于结束了,而且也如愿以偿的学到了点东西。计算机的课程很多,再配上软工这么耗时间的实践,我觉得自己能坚持下来已经很不错了。对于软工的每次作业以及总体流程下来,基本上是对软件开发流程以及人员配置,团队内的分工合作有了初步的认识,从刚刚开始大家一起天马行空的讨论我们该做什么样的软件才比较具有创新意义,之后大家一起构想软件的雏形,从需求文档编写,原型设计,系统结构设计再到后来分工合作,代码编写阶段等等,这些都是最初我报这门实践所想要了解的东西,这门实践真的是物超所值。对于下一届实践的建议,我觉得可以更早的开始(比如暑假就开始,提前分组,提前学习需要掌握的知识和技术),并且留有足够的时间完成作业,不至于太紧而熬夜。我觉得后面完成的app有的还是挺粗糙的,可以尝试着做出一款实用可以上应用商店的产品(并且值得后期维护的)(可能有点天马行空)。最后,对于下一届要不要中途换队员的问题,我个人觉得是不要,因为学校的环境跟现实企业中是非常不同的,作为大学生的我们,以后还有非常多的交集,而组长在这种情况下也是左右为难(比如本来已经合作的很好,并且没有队员主动想离队的情况下)我觉得软工实践主要在锻炼同学的能力,使得同学们能了解到学到一些开发方面的技术,而不是单纯的只为模拟企业中跳槽的情景。再者,学生还有很多很多功课要学,很多很多除软工之外的实践要做,跳槽的新的团队中需要重新了解新团队的项目并着手做一些事情,如果自己本身的技能并不适合新团队所要在项目上做的一些优化,那就很尴尬了。综上这些原因我觉得是不应该换人的(当然如果能够保证学生时间充裕的话可以考虑换人)。
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
Answer: 对于自己所在的团队,充满感激,这是一个有活力,向上的团队,每个人都积极参与并且完成自己的工作,富余之时,都会帮助其他的组员(我们的队长是一个非常大佬的大佬并且团队里的其他组员学习能力都非常强)。在软工实践期间,每个人都过得很充实,并且学会了很多,无论是技术上的还是做人做事上的,软工虽然结束了,但是我们的友谊不散。记得其中有一次现场编程实战作业----同学录,在队长的调配下,每个人分工明确,从早上8点,到晚上8点(由于中途代码合并的时候出了点小问题,每个人都在努力的帮忙找存在的bug),每个人都在为项目努力,虽然累,但是却过得非常开心,最终我们也顺利完成了这个项目。总而言之,我们的团队,是一个非常富有凝聚力且积极向上的。
构建之法提到,团队的几个发展阶段,如 萌芽阶段,磨合阶段,规范阶段,创造阶段。对于萌芽阶段,我们的团队毫无疑问是经历过的,每个人都在互相认识,了解对方的性格以及能力,等到每个组员基本适应了新的环境之后,队长便开始组织和讨论我们要做的项目了。之后,我们也很快度过了磨合阶段,最重要的一点是来源于团队之间成员的信任,互相帮助,当讨论中发生冲突时,我们也能好好的聆听别人的看法,分析对团队的利弊,做出对团队最有利的决定。当承诺做下某件事,每个人都能担得起责任,在约定的时间内完成,也取得了好的结果。最后我觉得我们的团队也度过了规范阶段,进入创造阶段。团队中的每个都知道明确自己的目标在哪里,共同的远景不再是空话,而是实实在在的阶段性成果但是对于自治以及角色和职责的自然转换,我们还需更加努力才行。总之,我们的团队目前初步达到了创造阶段,在向“完美的创造阶段”努力奋斗。
五、怎样证明你学会了软件工程?
-
研发出符合用户需求的软件
必须公开发布,有实际的用户,一定的用户量和持续使用量 (3 天后能保持10 - 100个用户);而不是: 做没有用户使用的软件 -
通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
有项目规划/需求/设计/实现/发布/维护,有定时的进度发布 ; 而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄 -
并且通过数据展现软件是可以维护和继续发展的。
而不是 找不到源代码,代码无文档,代码不能编译,没有task/bug 等项目的发展资料
Answer: 对于第一点和第三点,目前学士之路已经在安卓园上发布了,并且由于软件开发整个流程都是按照博客作业的流程一步一步下来的,因此项目github上也有相关的文档,代码,以及代码签入更新等记录,相对还是比较完善的。而对于第二点,个人觉得我们的团队应该是非常团结的,冲刺阶段基本上每天都会有一次站立式小会议,每人每天都会有进度更新。并且整个过程有项目规划需求设计实现以及按时的发布,更新进度,完成task等,基本上没有通过临时熬夜,延迟交付等方式糊弄。最后在alpha阶段以及beta阶段结束,我们也发布了在冲刺开始前满足既定的目标的app。