主要包括七个部分:
1.自我介绍
2.对这门课的期待
3.《构建之法》读后感
4.采访往届历年学生记录
5.历年软件作品点评
6.动手实现四则运算
7.每周例行报告
一.自我介绍
我的名字叫胡佑蓉,是东北师范大学信息科学与技术学院软件工程专业的研究生,现在正研一,我来自于湖南——毛主席的故乡。
我的本科也是东北师大计算机科学与技术专业的学生,当初之所以选择计算机专业,是因为我比较喜欢数学,觉得计算机和数学紧密联系。其实第一志愿是数学,因为分数不够,所以调剂到计算机专业。
大学四年接触到的课程,并不太符合我对计算机专业的课程的期待,大多课程是偏于理论的,实践性的课程很少。有的话我的实践能力也没有得到真正的提高,原因有多种,我觉得最重要的原因,是对自己不够狠,不肯坐在电脑前坐上十几个小时去码字,而更乐意去看看剧,旅行。接触计算机这个领域后,我觉得我对电脑上呈现的所有的东西有了完全不一样的认知,我喜欢计算机,有多种原因,因为通过计算机可以获得很多我需要的资源,学习自己想学的东西,来提升自己,但我并不擅长计算机。经过大学四年,我的专业知识还算扎实,能够阅读一些简单的英文文献,认识了多种语言,如:c,c++,Java,c#,Python等,但也仅仅只是认识的层面,简单的hello world用这些语言都能写出,简单一点如四则运算,鸡兔同笼,简单递归,排序的问题也能解决,要我一个人用一种语言去完成一个稍大项目却很难,主要是缺少编码经验吧,本科坐在电脑前的时间太少了。在人生选择的十字路口,考研,工作,考公,出国,我最后选择的是考研,之所以考研,是觉得自己的能力和知识水平都有待提高,希望能在研究生阶段,改掉自己懒惰的习惯,让自己能够坐在电脑前安静码字,实践能力得到提高。在考研这种选择下,相对其他选择的同学,我的优势是有三年校园时光,一个比较单纯的环境下学习,锻炼自己的能力,并且可以获得一个相对本科高一点的学历,以后出去工作会相对有优势一点。劣势没有工作经验,没有在社会上如何生存的能力,对于外界还是一张白纸。
二.对这门课的期待
选择这门课,主要是这节课的老师是杨老师,出于个人崇拜。当然我也很想知道,软件工程这门被吐槽为空洞乏味的课是如何被杨老师讲得生动有趣起来的,听杨老师讲了一节课,总会被他带动起来,觉得这门课很生动活泼,还有那么一点点好玩儿,并且在课堂上收获不一样的思维和知识。
对这门课的具体期待,因为一开始被作业量给吓到了,当然希望作业能够少一点了,或者是可以放宽时限。但是被作为工程师培养的我们,这两个要求都不是被允许的,所以我也只是说说而已。
看了邹欣老师的专访,看到他对后生的寄语和忠告:写一万行代码,再说其他。
杨老师在课堂上也问过我们,我们写一万行代码需要多久?
我想当我写上一万行代码后,我的代码动手实践能力就真的提高了一个水平。
我打算平均每周拿出至少10个小时用在这门软件工程课上,一周七天,平均下来每天至少1-2个小时。
三.《构建之法》读后感
粗略的翻阅了一些《构建之法》这本书,这本书介绍了很多理论和技术,也说了很多个人经验和小故事。看完了不理解的东西很多。
1.RUP(Rational Unified Process)统一流程。书中介绍RUP把软件开发的各个阶段整合在一个统一的框架里。要完成一个复杂的软件项目,团队的各种成员要在不同的阶段做不同的事情,这些不同类型的工作在RUP中叫做规程(Discipline)或者工作流(Workflow)。专业术语太多,不能理解。
2.敏捷流程
书中讲解“敏捷流程”是一系列价值观和方法论的集合。为什么流程和敏捷可以整合在一起成为一个名词,并且还是价值观和方法论的集合?不理解,希望有人解答一下。
3.NABCD(Need ,Approach,Benefit,Competitor,Delivery)模型
N(Need ,需求):了解用户的需求
A(approach,方法):找到了需求,就需要自己独特的方法去解决用户的困难。
B(Benefit,好处):有了解决的办法,那做出的产品会给客户/用户带来什么好处?
C(Competitor,竞争):如何让自己的产品具有竞争力,有优势,留住客户/用户。
D(Delivery,推广):当你有好的产品如何去推广,让别人去使用你的产品。
感觉这个模型很好。
4.四象限分析
杀手功能,外围功能,必要需求,辅助需求这四种划分结合起来,就得到了功能分析的四个象限。
对于这个功能分析我不太理解。
5.UML(Unified Modeling Language).这本书上解释为统一的表达方式。上杨老师面向对象分析与设计的课,大家在课堂上讨论UML是语言,还是规范。
语言可以拿来表达,规范却不可以,规范是已经形成的一种大家公认的规则,规则需要被遵循,所以我觉得UML是一种统一建模语言更为贴切。
四.采访往届历年学生记录
首先衷心感谢夏一鸣师兄在百忙之中接受我的采访,在此献上我诚挚的谢意。
这次采访,夏一鸣师兄为口述,我做记录。现在把采访内容展现出来,供大家参考学习:
问题一:
huyr: 师兄,上软件工程的课你做的比较好的项目是什么?当时的用户有多少?给用户多少价值?现在还有人用吗?
xiaym: 当时做的是一个记账本,用户大概12-15人,给用户的价值没有统计过,现在已经没有人用了。
huyr:为什么没有人用了?
xiaym:当初是为了完成学习任务,并且现在app上有更好的记账本,直接下载即可,我们做的记账本,并没有太大优势,现在没有人用情有可原。
问题二:
huyr:这个项目能否给我们这一届学生继续开发,源代码/文档还有保存吗?
xiaym:可以给你们继续开发。源代码还有,可以发给你,文档是没有了。冉华当时还参与这个项目,不明白的可以细问他。
huyr:文档为什么没有了?没有用GitHub等工具去保存源码和文档吗?
xiaym:当时的文档因为方便小组讨论都是直接 在演示板或者纸上画出来的,然后照着画的做东西,有拍照,博客上有记录保存,但是没有电子版文档,所以文档没有了。当时用了GitHub之类的工具,主要用于保存代码,有些文档也是有的。
问题三:
huyr:项目开发过程中有什么经验和教训吗?师兄,可以详细回答一下吗?
xiaym:高风险的事情要最先开始做。
huyr:高风险的事情具体是指什么?
xiaym:我们之前在记账本开发的时候,在后台数据库那段,到最后要发布的时候才开始做,那时候因为时间比较赶,并没有做出来,第一次发布就失败了,数据库没有连接成功。高风险的事情就是指如果这件事不完成,这个项目就不算是完整的,还有指难度大的事情,这些事情就得提前准备,凡事预则立。
huyr:还有什么经验教训吗?
xiaym:项目最好以团队一起开发。
huyr:是指合作的重要性是吧?
xiaym:团队一组四个人,每天早上开小会,把项目甘特图,燃尽图等都画出来。合作的过程中,得把工作分配好,比如一个人做前端,一个人做后台,其他人给意见,不能参与到写代码的过程中,参与的话,也要有序参与。最好选一个组长,组长主要负责分配任务,尽量根据每个人的情况来分配任务。
huyr:还有什么特别重要的吗?
xiaym:还有一点就是在最开始讨论需求的时候,讨论完之后就不要变,也就是需求冻结。还有在第一次发布的时候要拿出一个可运行的程序。在做项目的时候可以为产品添加一些亮点,比如我们在做记账本的时候,加了一个摇一摇,在摇的过程中就会出现一个记账数据。加亮点就是在你上台发布的时候,会有很多人问你这个项目有什么不同,有什么亮点?所以你可以为项目加一些无关痛痒的亮点。
问题四:
huyr:师兄,对我们学习软件工程有什么好的建议吗?
xiaym:这门课程,我的建议就是坚持吧,坚持到最后就是胜利!最后不管成功与失败,尽力就行,也不要沮丧,持续下去就会有收获。
huyr:谢谢师兄!
xiaym:加油!
huyr:我会加油的!
通过对师兄的采访,知道了就算我再差,只要坚持下去做一件事,一定会有所收获有所进步。
我很喜欢一句话:“成功者永不放弃,放弃者永不成功,看清自己。”
五.历年软件作品点评
1.抢答器
这是东北师范大学的杨老师学生耐撕团队设计的一个抢答器
Coding地址:https://coding.net/u/zhengrui0452/p/QiangDaQi/git/tree/master/qijl/Week5th
部署手册地址:[https://coding.net/u/zhengrui0452/p/QiangDaQi/git]
点评:
看了一下师兄师姐的代码,这个是基于Android手机的抢答器,服务端为tomcat。整体界面做得比较简洁美观,客户端登录界面需要用户名(username)和服务端的IP地址。当你从客户端登录进去,就会出现题目,这时候就可以通过按钮进行抢答,按钮由绿变为红,说明你抢到题了,有5s的时间回答。若没有回答,则进行下一题,若在5s内回答,服务端会为你点击下一题,进入下一轮的抢答。并且还提供了弹幕的功能,很有特色。这个抢答器做得虽简洁,却很实用,且占用很少的系统内存,很适合小型抢答比赛时使用。但个人感觉服务器反应速度有些慢,会有延迟,最后猜测是因为校园网速问题和电脑cpu占用率过高。
2.游戏子系统
这是北京工业大学杨红丽老师的学生设计的游戏
注册游戏子系统的设计:http://www.cnblogs.com/bjut13062222/p/5590999.html
游戏子系统的设计上:http://www.cnblogs.com/bjut13062222/p/5591018.html
游戏子系统的设计中:http://www.cnblogs.com/bjut13062222/p/5591037.html
游戏子系统的设计下:http://www.cnblogs.com/bjut13062222/p/5591096.html
点评:
看见这个游戏子系统的规则,觉得这个游戏的创意很新颖。主要是看了这个产品的框架与规划。
注册子系统负责让玩家注册新的账号并创建新的人物角色,注册子系统包括连接服务器、进入登录界面、进入注册界面、选择人物并输入名称、进入游戏世界5个步骤。
玩家开始游戏后,首先连接服务器,然后进入登录界面,从登录界面点击“注册”按钮进入注册界面,输入新账号和密码后提交给服务器,检验成功后进入选择人物界面。玩家选择自己的人物形象并输入自己的名称,检验成功后进入游戏场景。
游戏子系统以世界子系统(CWorld)为中心,实现人物与其他子系统间的交互,如人物行走,人物与NPC的交互,人物使用主菜单,人物更换物品背包,人物用技能攻击怪物,以及玩家通过聊天系统一起互动等功能。
这个游戏子系统与现在比较火的手游王者荣耀比较相似,对玩家互动,游戏体验的要求完善的比较好,一款游戏能够让大家爱不释手,就是需要让用户的体验感觉好,不仅需要优美的游戏画面感,还有流畅度,反应速度,人物特效等各种体验,人物互动,通过游戏交友也很重要,可以让更多的玩家加入进来。
希望以后能和小伙伴们设计自己的小游戏。
3.微信 抢票
相关链接:https://blog.nullspace.cn/2016/11/wechat-ticket/
性能调优笔记:https://blog.nullspace.cn/2016/10/django-performance-tuning/
点评:
这是清华大学的两个学生完成的一个小项目,是基于 django 框架的一个抢票系统。这个项目的特点是逻辑比较简单、并发要求高。要求是可支持 1000 个用户并发访问,响应时间小于 5 秒,错误率 0。为了提高并发数,减少响应时间和降低错误率,他们历时5周完成了这个前面的要求,在实现的过程中不断的进行测试和优化, 不断调整配置参数,优化数据库,进行了优化数据库锁的操作和优化数据库索引,虽然没有看见作者的源码,但是看见他们的笔记,知道了完成一个项目的艰辛。一个项目的完成,不仅需要好的需求分析,软件设计,团队流程,更多的是测试和改进的过程,在完成过程中不放弃,要么0要么1,成功与失败只有一步。
评论截图如下:
找作者要了源码,没有收到回复。
六.动手实现混合运算
一周前,我刚把邹欣老师的《构建之法》拿到手的时候,翻阅第一章就看见练习与讨论的第1题。对于编程能力不好的我,决定拿这道题目练一下手,但过了一周也没有真正动手编程,果然人天生就是惰性的,我就是个例子。
题目如下:
像阿超那样,花20分钟写一个能自动生成小学四则运算题目的程序。然后在此基础上扩展:
(1)除了整数以外,还要支持真分数的四则运算。
(2)程序支持判断对错,累计分数,倒计时。
(3)支持多个运算符。
(4)支持括号。
(5)用户界面可以有用户选择用中文,英文或者日文。
(6)把上面的功能都移植到一个网页程序上。和同学们比较一下各自程序的功能,实现方法的异同等等。
下面我就来讲我做题的历程和成果。
在实现之前,我首先想了一下,要达到怎样的效果,完成上面的要求,又应该选择什么语言实现比较简单。最后,我决定使用Java语言完成这个题目。以模拟计算器的形式来完成这个四则运算的部分,不过又与计算器不同,比如得加上支持判断对错,累计分数,倒计时,可选择语言中/英文的功能。
我的开发环境是eclipse。Luna版本,JDK版本1.7
因为要实现图形界面的设计,所以在eclipse上安装了插件WindowBuilder。
安装插件教程我参考的链接如下:http://blog.csdn.net/kagoy/article/details/17465615
下载, 配置和安装环境大概花了三个小时。
图形界面设计图如下:
功能完成还有待实现,还在继续码字实现功能中。
因为这两天比较忙,所以还没有完成,这个我需要检讨。
七.每周例行报告
1.PSP(personal software process )个人软件过程。
老师上课说了时间规划图,关于类别(class/catalog),任务(task),开始时间(start time),结束时间(stop time),被打扰的时间(interrupting time),花费时间(spend time)这几方面。
做了一个简洁的
类别 | 任务 | 开始时间 | 结束时间 | 被打扰时间 | 花费时间 |
写作 | 写随笔 | 2017.9.7 21:00 | 2017.9.7 23:00 | 打电话5min,洗漱20min | 95min |
阅读《构建之法》 | 提5个问题 | 一周前 | 2017.9.7 | 并没有一直在看,偶尔翻阅 | <20h |
阅读源代码和博客 | 历年学生软件作品点评 | 2017.9.8 10:00 | 2017.9.8 15:00 | 吃中饭1h,睡觉30min,聊天30min | 3h |
写代码 | 自己加的完成四则运算 | 2017.9.9 13:00 | 2017.9.9 17:40 | 图像采集1h | 3h40min |
采访 | 采访往届学生 | 2017.9.9 21:30 | 2017.9.9 22:00 | 无 | 30min |
写作 | 写随笔汇总 | 2017.9.11 22:00 | 2017.9.11 22.40 | 无 | 40min |
2.进度条
代码行 | 博文字数 | 知识点 | |
第一周 | 0 | 600 | 见博客软件工程-东北师大站-第一次作业 |
0 | 800 | 见博客历年学生软件作品点评 | |
0 | 700 | 见博客软件工程作业-采访本课程往届学生记录 | |
185 | 400 | 见博客动手实现混合运算 | |
185 | 2000 |
见博客软件工程-第一周作业汇总 |
3.累计进度图和PSP饼状图
说明:折线图x轴是指2017.9.7开始计数的天数