高级软件工程总结
一、请回望第一次作业,你对于高级软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
在开篇博客当中,我提到我很满意我的本科生活,唯一的遗憾是没有认真学过代码,敲过代码。提到计算机领域目前不是我擅长的领域,但会认真变成自己擅长的领域。本科没学好,如今有这方面的课程和有同一届的同学、实验室的学长学姐带着自己,所以一直庆幸有从头再学的机会,也就更加珍惜。我想从高级软件工程开课以来,我正在往我想要靠近的计算机领域慢慢靠近,开课以来,学习了设计模式让我更加了解面向对象是怎么回事和更加明白了软件工程的思想,和团队一起开发项目,也从中学到了许多,从不会打断点,到能够轻松的找到代码问题所在,从不知道java中map是什么,到能够轻松运用map和list集合,从不知道数据库语句怎么写,到能够从多个表查询数据,从不知道遇到一点小问题就要询问,到能够自己百度查资料解决,这些都是我的期待和目标。
我的不足:项目中用到的SpringMVC框架,angular.js看似好像会用了,但是遇到新东西,仍然会不知所措,不知道从何下手,代码之路还很长。学习了设计模式,看似好像会做题目了,看似好像理解设计模式的思想了,但在实际运用中,依然非常艰辛,好像生搬硬套,也很难套进去,说到底,是理解的不够透彻。
2)总结这门课程的实践总结和给你带来的提升,包括以下内容:
1、统计一下,你在这门高级软件工程实践中,完成了多少行的代码;
Java代码,js代码,HTML代码合计大约15000行
2、高级软工实践的各次作业分别花了多少时间?(做一个列表)
作业 | 花费时间 | 作业 | 花费时间 |
高级软件工程第一次作业 | 2h | 项目Alpha冲刺Day11 | 0.8h |
高级软件工程第二次作业 | 7h | 项目Alpha冲刺Day12 | 0.7h |
第一次结对作业 | 8h | 设计模式第三次作业 | 7h |
高级软件工程第一次作业 | 1.5h | 测试随笔 | 2h |
第二次结对作业 | 24h | 总结随笔 | 1.5h |
团队选题报告 | 3h | 集合随笔 | 0.4h |
设计模式第一次作业 | 4h | 城市安全风险管理项目Postmortem结果 | 1h |
团队项目-需求分析 | 3h | 项目Beta预备 | 1h |
设计模式第二次作业 | 8h | Beta冲刺第一天 | 0.5h |
项目Alpha冲刺Day1 | 0.8h | Beta冲刺第二天 | 0.5h |
项目Alpha冲刺Day2 | 0.7h | Beta冲刺第三天 | 0.5h |
项目Alpha冲刺Day3 | 0.8h | Beta冲刺第四天 | 0.5h |
项目Alpha冲刺Day4 | 0.6h | Beta冲刺第五天 | 0.5h |
项目Alpha冲刺Day5 | 0.5h | Beta冲刺第六天 | 0.5h |
项目Alpha冲刺Day6 | 0.7h | Beta冲刺第七天 | 0.5h |
项目Alpha冲刺Day7 | 0.8h | Beta冲刺总结 | 1.5h |
项目Alpha冲刺Day8 | 0.8h | 用户调查报告 | 3h |
项目Alpha冲刺Day9 | 0.7h | Beta冲刺集合 | 0.5h |
项目Alpha冲刺Day10 | 0.7h |
3、哪一次作业让你印象最深刻?为什么?
第二次设计模式让自己最为深刻,由于当时比较忙碌,第一次的设计模式作业草草写完,当时交完之后,在同学的提醒下,说可以写个client端测试一下,诶,当时恍然大悟的样子,原来可以这样,可以说是对java、对设计模式一窍不通了,在做第二次设计模式的时候,找了设计模式比较出名的一本书来看,叫《设计模式之禅》,看了受益匪浅,也认真的写了设计模式的client端代码进行代码测试,深入研究一下,发现,诶,面向对象是这么回事,对相应的设计模式也就有了更深入的了解。
4、累计花了多少个小时在高级软工实践上?平均每周花多少个小时?
5、学习和使用的新软件;
Axure原型工具、SQL Serve数据库、Idea开发工具、navicat for mysql(数据库管理工具)
6、学习和使用的新工具;
Axure原型工具、SQL Serve数据库、Idea开发工具、navicat for mysql(数据库管理工具)
7、学习和掌握的新语言、新平台;
新语言:Java Angular 新平台:Idea
8、学习和掌握的新方法;
学习和熟悉了后台的Java的SpringMVC框架,前端的angular.js框架
9、其他方面的提升。
思维逻辑、考虑问题有所进步
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
人月神话当中,人是程序员,月是时间,人月神话中主要强调的是软件工程的执行效率。巴比伦塔的管理教训里面的一句总结巴比伦塔为什么是一个失败的工程:那为什么项目还会失败?他们还缺乏什么?
两个方面:交流、以及交流的结果——组织。
在我们项目当中,出现由于沟通不足,导致表和表之间的联系理解不够,或者说是没有真正的理解需求是什么、按照自己的理解去做,后期就会出现大的出入,当出现出入的时候就需要再次沟通,再次去迭代修改代码,这就会直接导致效率低下。
在人月神话当中,强调了制定进度表很重要。在这次的团队项目实践中对这一点也有了更深刻的理解,在刚开始的Alpha阶段,要求画燃尽图,通过燃尽图就能够更加的直观看到每天的完成量,更好的去掌控接下来的进度,对时间有一个更好的预估。关于燃尽图的理想工作量,要么到达,要么没到达,不应该是80%到达。
人话神话当中,作者强调了一个词“文档”。他曾很勤奋的向软件工程师讲述文档的必要性以及优秀文档所具有的特点方面的讲座。关于“文档”这一点,我相信很多程序员都不是很注重写文档,觉得自己会写代码、会开发就够了,在我们团队当中,也是这个样子,大家都不喜欢写文档,但是文档又是必须的,抱着无可奈何的心情去写,心里想着“怎么这么多事”,但是在人月神话中,描述的是一个优秀的程序员那么他的文档能力一定也很强。写一份好的需求说明文档,有利于接下来程序员接下来的开发,写一份好的测试文档,有利于接下来程序员对bug的修复,写一份好的用户操作手册,有利于用户的使用,带来好的用户体验。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?
- 对于开学初的你,我想和你说恭喜你来到这,如果以前的你学的不够好,现在不要再重蹈覆辙,很幸运,你有了重新开始学习的机会,校园生活比社会单纯许多,在校园里面,想要学习,就真的有时间有精力再去重头学习,社会里面,工作了就是完全不一样的性质,忙碌生活的你、忙碌工作的你就很难再花时间去学习自己想学的事情。
- 一定要多学习多独立思考,想要成为优秀的程序员,一定要有足够的代码量
- 在自己的代码完成之后,可以去看看别人的代码写的如何,最后实现的功能一样,但是会发现代码有很大出入,别人的代码是不是更简洁更易懂,是不是可以学习一下别人的思维方式
- 去参与项目的实践,才能把学到的东西真正用到实际用途。
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
《构建之法》上说的团队发展阶段有萌芽阶段、磨合阶段、规范阶段、创造阶段四个阶段
我的团队都经历过,我相信很多团队的组成成员来自于不熟悉的人,每个团队都会有相应的萌芽阶段,团队成员去相识,去互相适应,去学会担起自己相应的责任,磨合阶段也是不可避免的,当意见不一致的时候,就必定需要有人去妥协,每个人都希望自己是主角,当同样优秀的人,谁来当队长呢,这个文档不好写,谁都不愿意主动去担下来,难道就真的没人写了吗,在交流的过程中,难免发生冲突,这些都需要团队的成员之间互相磨合和包容,进入规范阶段,团队成员之间定位的角色和相应的职责也相对比较清晰,最后到达创造阶段,产生了我们的项目——城市安全风险管理系统。
五、怎样证明你学会了软件工程?
1)研发出符合用户需求的软件
我们的项目是城市安全风险管理系统,面向用户是“政府人员”、“企业人员”、“第三方人员”,会有一定的用户量和持续使用量
2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
初期的时候有制定一份需求说明文档,根据这个需求说明文档来规划进度,使用SVN版本管理来管理我们的代码,每天合计每个人一天的工作量,进行绘制相应的燃尽图,根据燃尽图来控制接下来的进度。
3)并且通过数据展现软件是可以维护和继续发展的。
请在随笔中用数据证明上述内容或侧重选择之一。
六、个性发挥,包括图文、照片和创意等
四个人第一次的影子合照
四个人团队Alpha阶段的讨论照片