我的第一周作业
我的作业分为以下五个部分:
一.自我介绍及未来构想
二.评论师兄师姐作品
三.对师兄的采访
四.读构建之法有感
五.本周PSP
一.自我介绍及未来构想
1.自我介绍
我叫米赫,家在吉林松原,2016年毕业于长春工业大学计算机科学与技术专业,但因当年考研失败随即在校复习二战,然后今年再次站在失败的边缘,经历了艰苦的调剂过程终于在2017年来到了美丽的东北师范大学继续读书,我也很珍惜这次宝贵机会决定在研究生期间好好充实自己。
2.对这门课的畅想等
至于为什么选择计算机,多半是因为计算机行业的广阔前景吧,而且在东南沿海地区机会会更多一些。父辈们都说计算机难学计算机难懂,我就偏要试试看它到底有多难学懂,在高中时也了解过参加过程序设计竞赛,虽然没收获什么理想的名次,但是却激发了我对程序设计的兴趣,于是高考之后我便把计算机填写成为我的第一志愿。
本科期间通过老师的领路和指导,我首先接触到的是算法部分,对ACM程序设计竞赛产生了浓厚的兴趣,在大学四年都是ACM实验室里的活跃分子,对于诸如HTML、ASP、JSP等工程上的课程和内容便疏于了解,当时的我年轻气盛,甚至觉得工程上的东西没有什么用,只有算法才是产品的核心,便把自己的时间和精力都用在学习算法上边。直到上了长工大李万龙老师的软件工程课,才改变了我对软件工程的看法,李老师把软件工程概括为“啥们”:“有啥没啥啥是啥啥能干啥,啥和啥有啥关系,啥在啥时因为啥变成啥样,啥在啥时因为啥把啥变成啥样”,这种对概念的新颖概括很是吸引我,然后开始接触了软件工程,开始喜欢软件工程。我决定将我对算法的掌握和软件工程知识点结合在一起,这样才能做出优秀的软件。
3.自己具备了哪些能力,还欠缺哪些能力
大学四年里我一直在学习竞赛算法,对于数据结构算法等知识掌握还算可以,对编译器的使用比如vs,dev,codeblocks,eclipse比较熟悉,对于c和java的语法掌握不错,但并没有接触到太多工程上的东西,也不清楚如何开发一个产品的过程。知识终究要投入实践的,否则就都只是纸上谈兵。就像软件开发流程一样,对软件先进行需求分析,设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编码和调试、程序联调和测试以及编写、提交程序等一系列操作以满足客户的需求并且解决客户的问题,如果只是懂编码的话,是做不出优秀的软件的,模块设计、需求分析等等都对应着一大块的知识,联系到面向对象的思想等等,所以我要做的还有很多。
4.我的选择,以及本学期的规划
对照了前人的经历,我觉得兴趣是人最好的老师,我想我的兴趣还是在算法上面,可能会将更多的时间投入到对经典算法的研究和改进里。目前刚刚接触NP问题,打算本学期甚至硕士研究生的三年进行研究,希望老师的带领和我的努力下可以在此领域做出一些成果。但是我不会重蹈覆辙,想本科一样失去对知识的实践,我要更加均衡地学习计算机的知识,做一个全面的计算机从业者和研究者,所以在本学期我首先要认真听软件工程以及相关课程。争取在完成学业时将自己的研究成果,与软件工程的思想结合起来,开发出受人认可的优秀的软件产品。
5.对于本门课的期待及目标等
对于软件工程这门课,因为久仰杨老师的大名,我对它的期待还是蛮高的,希望在我的努力下可以从这门课中学到对工程的理解,加强自己的工程素养,还有通过课余时间对课上知识的拓展学习,开阔自己的眼界,提升自己的知识含量,以工程的思想辅助科研,并让我能把研究成果投入实践。我打算从第三周开始每周花10个小时来学习软件工程这门课,以及自学python语言。
二.评论历届师兄师姐软件
杜桥师兄——实现四则运算
http://www.cnblogs.com/duq11/p/5874163.html
初步看见这个题目,我脑海里也只是想出用中缀表达式逆波兰表达式等等表示输入数据,用栈等知识点来实现,但对于如何实现也是一头雾水,也仅限于顺序的程序设计。师兄用了出题和答题两个函数,可以对于题目进行修改,可以重新出题,这一点比较好。
但是通过我亲自运行这个程序,发现师兄的运行界面就只是采用命令行输出,有些单调,用户体验不是很好,而且在师兄的软件的测试样例截图中,并没有给出运行成功的截图,不太全面,也没有对边界进行分析,我想在这里可以稍加修改。
王森师兄——词频统计器
http://www.cnblogs.com/wangsen123/p/5909729.html
王森师兄这个软件利用了vector容器还有iterater迭代器,这是我不是很了解的地方,通过看书之后了解发现这样很合理,是很精彩的应用,还对于词频进行了排序和筛选。师兄将程序分块,符合了软件设计中的高内聚、低耦合的概念,我觉得非常好。我亲自测试了一下马丁路德金的我有一个梦想,得到实验结果如下:
王森师兄组——连连看的设计与实现
http://www.cnblogs.com/wangsen123/p/5917764.html
师兄的连连看具有该游戏的基本玩法,也做出了一些他们的改进和加入了自己的想法,其中我认为他们对与分享朋友圈进行网络推广这个想法非常值得学习,软件需要被人使用才有生命力,要被人使用首先就要被别人了解,分享到朋友圈就会被更多的人看到。师兄的玩法之一是可以让用户根据自己的喜好来更改游戏图片,这一点也非常好。师兄采用了NABCD的分析方法进行开发,值得学习。
我还有更多的想法,那就是如果可以加入用户自己设计的关卡,改变形状,加一些道具或者限制条件,会有更多玩法和乐趣。
三.对师兄的采访
这是一位现在在爱奇艺工作的师兄,感谢他愿意接受我的采访,也希望我以后能够和他一样优秀。
Q:师兄你当时的项目有多少用户,给用户多少价值? 现在还有人用吗?
A:在实习期间给一家互联网公司做过一个广告分成的项目,用户大概是1000多个合作方,到目前分成大概是3千多万,现在的合作方用户基本还是1000多人,比较稳定。
Q:源代码或者文档还有保存吗?能给我们继续开发吗?
A:代码与文档都是公司严格保密的,是不能对外公开的。
Q:在项目开发过程中有什么经验和教训吗?
A:经验的话,还是实战才能最快的学习方式,好多都是在学校学不到的,例如新的技术和处理工作的方式。还有就是在工作中认真与细心是非常重要的,特 别是与钱打交道的项目,一旦犯错就造成很严重的后果。还有就是要懂得不断地学习与创新,记得有一次,在项目在开发与测试的时候都比较顺,没什么问题,但是最后上线了才发现查询速度很慢,用户体验很不好,后来才发现,线上数据特别大表里面的数据达到6千多万条还有几个其他的表也达到千万级别,因为查询完还有一些逻辑处理,所以导致数据查询与处理很慢,后来优化了一些但还是不能满足用户的要求,最后我们引进了‘美团’公司使用过的一个数据库存储技术‘麒麟’,他采用预处理,完全解决了大数据查询的问题,这件事给我们的经验教训就是:一定要结合具体的需求和实际的数据去做,不要总使用老的套路要懂得创新。
Q:你对学好软件工程有什么建议吗?
A:基础的东西要好好学,但是除了课本上的知识以外还要有更多的实践,这样才能让一个以后从事互联网工作的人更快更系统的锻炼出互联网思维。
四.读构建之法有感
本周我利用每天一个小时的时间来读《构建之法》这本书,对于书中内容我有如下疑问和感想:
1.在5.3.6节中,有关于渐进交付的流程,产品团队得到用户的反馈太晚了,会造成很多的时间成本的浪费,用户不但不满意不领情,而且还需要修改很多地方甚至重新架构。而苹果团队从创意到研发直到产品公布于世,也没有向大众征询太多意见,是一种mbp产品,而我们大多数团队只能按照mvp的思路,那如何能做到既能充分吸收客户意见,又在发布之际收到广大客户的一致好评满足所有人的需求,如何在二者之间进行平衡和取舍?
2.在8.5节中提到了功能的定位和优先级,可以将功能分为杀手功能和外围功能,又可以将需求分成必要需求和辅助需求,如果我的软件的杀手功能就是需求里的辅助需求,即为书中介绍的坐标系的第四象限,我觉得是不是可以也应该做,不采用维持的方法,需求可以引导可以创造,但是功能也就是自己软件的亮点开发出来就是固定了无法改变。
3.在12.3节中提到了界面的评价标准,尽快提供可感触的反馈,比如我们在触摸屏移动设备上输入,屏幕上会显示输入的内容,输入设备也许会提供输入反馈告诉我们刚刚已经成功进行了输入,比如通过振动来进行反馈,我觉得用户也可以自行设置是否需要反馈,比如用户觉得不停震动会费电,这个和第三条用户有控制权有交叉。
4.在15.3节发布之后——事后诸葛亮会议,软件开发周期结束了,我了解到项目回顾的重要性,要多问为什么,层层推进,总结经验和教训,这也是当前很多团队不注意和轻视的环节,因为在软件开发的过程中,理想情况下职责划分应该是清晰的,但是本次开发过程中也许有一些任务由不是该职责所在的人来完成。划分职责不是互相推诿,清晰的划分可以提高工作效率,我在书中的这一部分获益匪浅。
5.在16.1节介绍it创新的迷思,书中提到彼得德鲁克说到的话,大致意思是突然想到的大创新通常会很快失败,所以我们应该脚踏实地,好高骛远的创新只是空想,对于需求的把握和技术的简单革新是我们目前需要做的,但是又不要害怕创新,创新也都是站在巨人的肩膀之上,更要敢想,找到创新的可实施计划,然后just do it。
五.本周PSP