软件工程第一次作业
-1.这是我编写的能够随机出题并计算的小学四则运算的软件,支持真分数和整数,并能判断对错。我用的语言是python。这是我的[作业coding地址] (https://coding.net/u/JusperLee/p/Arithmetic/git/blob/master/calculator.py?public=true)
下图为我的界面有些粗糙,第一次用python。
-2.在看完《构建之法》后我我觉得我有这六个问题需要解决,虽然我查阅了一些文章,但是我还是不是很深的能够明白这些问题。
- (1)在第三章中,我注意到了软件工程师的成长与自身编写项目的代码量是否有一定的关系,查阅资料后我发现在软件工程师的成长之路上,从小白到大神的经历,代码量是真的肯定会增多,但是到了大神的层次,就会用到许多的框架,但是我在想如果我们的代码高达100万行,或者好几百万的代码量,我们会用哪种方式去进行后期的 维护,修改bug呢?
- (2)在第四和第五章中,我有一个疑问,如果有了两人开发,是否还需要团队一起开发呢,如果团队一起开发,那么我们团队开发的话最多需要多少人,最少需要多少人,多少人最合适这个问题。我查了书以后发现两人合作实在团队的合作下进行的,只有有了良好的团队合作,才能能有两人合作的基础,因为两人合作的人数少,只能负责一个小方面,但是在后期的维护上面就体现出非常好的效率,与其把软件开发看做是造楼房,不如把软件开发视为写小说。看做造楼房,就会有许多加工人、赶进度的想法视为写小说,就不太会有:“多加几个作者每天多写几章出来”的奇葩要求。作为一个开发团队,必然存在新人加入、旧人离去、代码移交、绩效考核等诸多现实问题。查阅资料后发现针对一个软件项目的1个高效的软件开发团队的组成只应该有3-5人。一个核心程序员,一个主程序员,三个左右的程序员助手,主要负责维护和修改。
- (3)在第六章我我一直有个疑问对于“敏捷”,我的理解还是不是很清楚我翻阅了一些资料,敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。根据资料我了解到我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它会指导我们用规定的环节去一步一步完成项目的开发;而这种开发方式的主要驱动核心是人;它采用的是迭代式开发;Scrum的英文意思是橄榄球运动的一个专业术语,表示“争球”的动作;把一个开发流程的名字取名为Scrum,我想开发团队在开发一个项目时,大家像打橄榄球一样迅速、富有战斗激情、人人你争我抢地完成它,会感到非常兴奋的。而Scrum就是这样的一个开发流程,运用该流程,能看到你团队高效的工作。
- (4)在第八章中,如何更好地了解用户的需求,需要做哪些方面的努力呢?这是我自己的一些看法。有时候我总在想,为什么理解用户是很难的一件事,这就像常说的一句话,针不扎在你身上你不知道疼。其实要理解用户就是要去换位思考。你是代表官方的,在很大程度上跟用户是对立的立场。你希望的是用户帮你完成业绩目标,而用户需要你能够服务好他。所以,我们应该去换位思考。但是用户可能在一定程度上会因为种种原因,不能反馈给我们真实有用的信息,这就说明我们不能完全听从用户的声音。这个时候就需要我们去观察用户行为,用户的行为总是真实的。具体来说就是我们要分析监控用户,在我们的产品上的实际行为。以用户的真实行为做参照。比如说浏览器上有一个功能cookie这个就是记录用户的行为。
- (5)如何真正的成为一个软件开发着呢?我有我自己的看法,我觉得成为一名真正的软件工程师,需要的不仅是编程的能力,工程师注重解决问题,勇于承担责任,善于控制进度,工程师能够自由沟通,知道如何合理安排时间,实现的功能有什么意义。工程师会和PM认真交流需求,选择推进项目进度,善于总结问题和解决方案。我觉得优秀的程序员或者说是开发者,他们会有一种与客户交流并解决问题的能力,我觉得沟通和团队合作是一个优秀的软件开发者必须的基本素质。
- (6)在读过第九章之后,我想如何能成为一个项目经理,成为项目经理需要哪些品质或要求。书中列出了一些作者的看法:对上商业或者客户有很强的了解能力,有广泛的知识面和经验协调各部门资源,正确把握产品的定位和方向,等等。其实我觉得书上还有一些没有说到,我觉得学习也是一个必不可少的技能,因为计算机行业,技术的发展太快,需要我们时时刻刻的学习新的东西,比如说VR,AR,AI等一些新的技术或算法。而且一个项目经理要有担当精神,不能够推卸责任,制裁是一个领头人的品质。
-3.我选择了,游戏,手机应用,操作系统三类软件来说一说我的看法。
- (1)首先就他们是如何说服我们使用他们的软件,而且他们是如何进行盈利的。一个重要的方面就是游戏画面精美,故事/情节带入,可以迅速拉进用户与游戏之间的距离,让用户真正融入其中——成为游戏的主人翁,并产生情感上的交流。第二个我觉得就是能快速、简单上手,却有一定的难度。现在大部分游戏四五岁的小朋友都会玩,不需要什么难度的操作,或者需要很长时间的学习,才能够玩的游戏。我觉得一个好的游戏就是看起来简单,玩起来并不简单,这样游戏才更耐玩。比如说现在非常火的绝地求生,他就是抓住了用户希望体验真正的 枪感,一种特种兵的对战功能。而手机应用是如何捕获用户的心。其实也是很简单的事情。App的开发者一定要清楚市场最近的动向,流行趋势,把握住了这个,基本上就了解了用户的需求。对于 App 而言,App 是否成功在于获取了多少用户量, 因此在没有各种资源来推的情况下,唯有做好用户体验、深入的细节考虑来吸引用户,真正实现了让用户的满意的产品体验。 App 的界面、操作的难易程度,这是都能为用户体验添砖加瓦,不要停留在已有的设计上,要有不断变化的交互,这样整个设计的感觉都会不一样。不过一个 App 如果在配色、图片文字、界面的设计上,没办法得到用户的青睐,当然也很难长期留住他们的心。对于操作系统而言,其实也有以上两种类型的相同之处,对于操作系统而言,最主要的一个就是好看,对于大部分人而言现在很多人不会再使用Windows XP系统了吧,因为界面真的很丑,同样的为什么有一部分人喜欢用mac系统呢,只是因为其流畅性,这就是操作系统的第二个方面,流畅性。我相信大部分人换手机并不是手机坏了,而是手机非常卡,已经严重的影响我们的使用,我们才会考虑跟换手机。对于这三种软件,他们是怎么盈利的我觉得是1.游戏是怎么盈利的我觉得我不用多说,就我充钱啊,你充钱游戏厂商就赚钱。App的话主要是是各种服务,以及流量费,还有各种广告商费用,相比游戏来说我们在App上花的钱并不是很多。操作系统的话主要已经和电脑或者手机的费用已经绑定了,我不并不需要花额外的钱来支付操作系统的钱。
- (2)这些软件是如何到我们手里的,其实我们大部分游戏,App,或者操作系统。是直接在网上下载并不需要支付费用,尤其对于我们中国人来说下载盗版软件现在还是一种趋势。但是已经有大部分人支持正版软件,保护他人的知识产权。对于游戏来说,一般的游戏都是软件不要钱,游戏内付费的。不过还有一些单机游戏,或者一些其他的游戏,需要先付费在使用。对于操作系统的话我们一般都是再买电脑或手机的时候已经安装了操作系统并不要需要我们进行付费。而对于App来说一般只有一些办公软件,或者一些专业的软件需要付费,大部分的都不需要付费。
- (3)对于这三类的bug是如何处理的,如何更新版本。对于游戏来说,bug一般是由玩家最先发现,然后游戏厂商会进行测试,然后由一堆程序员通宵加班的修复bug,然后在官网上,发布公告,更新版本的话一般是热更新,就是不用再下客户端,直接覆盖bug就OK。对于App的话一般不使用热更新,就是直接下载新的客户端覆盖老版本客户端,达到更新的目的。对于操作系统的话一般是打补丁,就是会安装补丁,把漏洞补上,不需要改变操作系统。
- (4)对于同一类的软件是如何竞争的这有很多方法。我们就ofo和摩拜的竞争来看。实际来说,ofo就是做了个快车,摩拜做了个豪华车。他们是如何竞争的,通过很多轮融资,烧钱来达到净化竞争,还有介入微信,支付宝这些流量大的软件,来瓜分用户。我看了一篇新闻。近日,摩拜单车和ofo小黄车取消月卡优惠,从每月1元或2元变成每月20元、包年240元。对此,有业内人士称,此举预示着共享单车企业“烧钱”竞争的时代已经结束,恢复月卡价格也意味着行业回归理性竞争,共享单车在告别“价格战”后更应该做好服务,这才符合商业进化的历史必然性。这就是他们竞争后对整个市场的瓜分已经完毕。开始转换模式开始盈利。