代码改变世界

软件工程作业

2019-09-08 19:32  sweee  阅读(352)  评论(2编辑  收藏  举报
这个作业属于哪个课程 <软件工程基础>
这个作业要求在哪里 <第一次个人作业:阅读与准备>
我在这个课程的目标是 使用Markdown编写一篇博客,了解软件开发分享平台博客园,对软件工程这门课有一个全面的认识
这个作业在哪个具体方面帮助我实现目标 正常使用Markdown编写博客,借鉴前人的博客,从里面吸取经验,开始写自己的博客,并在一次次修改后变得越来越完美,并且可以收到他人的评价
其他参考文献 GitHub优缺点

一、博客地址以及个人简介

1、博客地址:https://www.cnblogs.com/zlpp/

2、个人简介:我是来自计算机科学与技术2018级的张丽萍。我对计算机有非常浓厚的兴趣。我尤其喜欢编程,可以让我发现一个新的世界。我也愿意为了我爱的事业努力奋斗。我是一个非常努力的人,不管干什么,都会竭尽自己最大的能力去做。从大一开始就把自己的每门专业课程学地特别精通。学校开设的一些基础课,我也会认认真真地学习。在学习上,我愿意花费自己的很多时间去学习,在生活上我是个积极乐观的人,永远相信会有好运降临。我除了在学校努力地去做好每一件事情之外,我还会在学校外去找一些兼职来做,这学期的周末也在外面做着家教的工作,老板对我认可度也很高,既锻炼了我的社会能力,也可以减轻我父母的负担。

二.阅读与思考

(1)回想一下你初入大学时对计算机科学与技术专业的畅想

1、当初你是如何做出选择计算机科学与技术专业的决定的?

  我只所以选报这个专业,是因为我从小到大对计算机有浓厚的兴趣。其次呢,是因为填报志愿的时候去了解了一下计算机的就业前景,计算机的就业前景是非常好的。计算是一门非常考究逻辑与数学知识的学科,而我恰好也很擅长数学。然后又了解到计算机以后的薪酬会比较让人满意,工作环境也很好。而且很重要的是,计算机是一门不会过时的行业,如果来学习计算机的话,我以后工作领域也比较广,可以涉及到教育,医疗等等,所以我以后如果去从事各行各业的工作,计算机也是一个很好的选择!

2、你认为过去两年中接触到的课程是否符合你对计算机科学与技术专业的期待,为什么?

  符合。在过去一两年中,我接收了基本的培训,了解到了一些计算机的基本知识,然后自己课后也去图书馆查阅了很多关于计算机的知识,了解到了计算机的前世今生。找到了一个大的方向,给自己定位也更加明确,知道自己以后要从事的领域可能是人工智能方向,而这些是我的专业可以带给我的!所以我目前,对于自己的专业的话还是比较认可的,我这两年呢,在课堂上接触到的课程,主要有编程语言,数据结构,软件工程,这些课程都能够大大地增强我的计算机能力。

3、你觉得计算机科学与技术是你喜欢的领域吗,它是你擅长的领域吗?

  我觉得计算机科学与技术是我喜欢的领域,也是我擅长的领域。因为我比较喜欢一些数学类的东西,然后我也希望能够把数学应用到现实生活中,而计算机恰好就能帮我完成这个理想。我从小到大学数学都是比较轻松的,也学地比较好。所以的话我还是挺擅长这种逻辑性很强的学科—计算机。

4、将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因

我将来会从事软件开发相关的工作,我最开始想是去当一名程序员,先调试然后编程,希望能在5年内,做到项目经理,我想去的城市是浙江,想去腾讯公司。

(2)对照前人们走过的路和描述未来发展,现在的你

1、自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。

  我现在的话是掌握了基本的专业知识,清楚地知道编程是一个怎样的流程,但是具体的代码实现不是很清楚,会编写简单的程序。技能是会分析程序的代码结构,会调试,能找出其中存在的错误。有可以独立编写出一个程序的能力,但速度和质量都有待提高,还远远不够,我写过的代码量大概是5千行左右,我现在做过一个最复杂的项目是贪吃蛇游戏,实现了一些基本功能,如吃苹果变长,吃到毒药死亡,两人pk等。

2、离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?

  我希望能通过接下来两年的学习,能够成为一名合格的毕业生。我觉得作为一个合格的本科毕业生的话,在专业知识方面,准确无误的记得所有知识点!而且需要一个不断学习的过程。在技能方面,至少是要会写基本的项目,然后对编码掌握的十分到到位,我希望我不仅能够敲代码,而且还会敲出高质量的代码,关于能力的话,还有待提高,需要增强与同伴的交流能力,在代码完善,代码漏洞都存在一些问题。

(3)目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。

1、对照以上你阅读的前人们的经历,你的选择是什么?

 博客D的作者认为“事实上,我们日常储备的知识当中,90%是靠自学得来的,所以学习主要还是得靠自己。’,我对此有一个问题:上课认真听讲对本科生是否重要?对于这个问题:首先,我同意作者强调的“学习主要还是得靠自己”。但就如博客E的作者所说“以前我怎么也不明白的东西,我发现没有好的老师,自己模仿视频是不行的。”,同时,我也采访了一些高年级学长,他们的建议也是“编程绝大部分靠自学,但是老师上课说的内容也很重要,可能是你下来怎么都学不到的。”所以综合上述观点,我认为,自学能力很重要,但是上课也是很重要的!
 对照前人的经验,我还是想先考研,先深化一下自己,再出来工作!

2、在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?

 我觉得我的主要优势就是数学能力和逻辑能力也比较强,我能很快的把代码的大概过程写出来。我的劣势是代码的具体实现还存在很多问题,而且会在很多小细节上出差错,会选择在大三或者大四就去些。软件公司实习,希望能够在他们那儿获得更多的经验,获得更多的项目经验。

3、针对你的选择,你给自己的大三设定的规划安排是什么?

我会选择在大三就去软件公司实习,希望能够在他们那儿获得更多的项目经验,同时也会备战考研。

4、你对于实现自己的梦想已经做了或者计划做什么样的准备?

我就是为了以后能够去软件公司实习,现在去学习了大量专业知识,储备很多基础知识,也去了解了很多公司的实习岗位。

三. 提出的问题

问题一、

①问题一的来源:在《软件工程》第49页书中写到,优化是一切罪恶的根源。

②问题一的具体阐述:我并不赞同这个观点,我觉得只要有优化的空间,我们就需要去优化,这样就能得到高质量的代码。

③对于问题一的个人思考:如果等我们真的把一个程序写完了之后,再来优化,我觉得这个时候已经来不及了,很多地方我们可能已经不知道是不是该优化了。
作为一个软件公司来说,如果要去开发软件,一定是一个很大的软件。我们在开始开发软件的时候,如果发现代码有可以来优化的空间,我们就需要对他及时进行优化,因为可能到我们编程到后面的时候,太多模块需要优化了,我们并不能确定哪些模块需要优化,我们可能优化到的只是一部分,而还有很多功能,我们并没有把它优化出来,这个时候呢代码质量相对就会降低很多了,而如果我们当时就进行了及时的优化的话,这并不需要太多的时间,这只是举手之劳。综上,我觉得合理的优化是任何时候任何地方都可以做的事情,如果不确定局部优化会不会带来整体的优化,我们不妨把可以优化的地方先备注下。

问题二、

①问题二的来源:在软件工程第110页书中写道,“在复杂的项目里,要让一线团队成员做决定。”

②问题二的具体阐述:而我们知道在大多数公司里面的话,这些决定都是需要老板来做的,在和老板意见不一致时,而老板态度很强硬,我们应该顺从老板还是坚持自己的想法?

③对于问题二的个人思考:对于这个问题,我一直感到很不解,因为我觉得就是在一个复杂的项目里面,肯定是需要员工和老板共同做决定的,一线团队成员单方面做的决定可能不能达到更高的要求,因为一线团队成员可能对代码实现和功能很了解,但他们可能对客户需求,对法律都没有老板了解地清楚。

问题三、

①问题三的来源:在软件工程202页中书中写道,“用户的原望100%的实现了,并不是很好的。”

②问题三的具体阐述:他其中用了一个插图,一个人去剪发型,其中模型图片只照了一半的发型,然后理发师按着模型图片剪头发,给他弄了一个图片照到的发型,我觉得这个举例就有一点牵强,因为图片中没照到的部分难道理发师就会把它修剪了吗?何况按照常理也没有人会这样做。

③对于问题三的个人思考:在现实中,一定不会发生这样的事情,除非理发师脑子不是很清醒。我觉得用户至上,用户给你提到的要求不可能涵盖所有功能,一些基础功能他并不会提,你只需要按照一般软件的模式设计即可,比如,进入程序,只需点击就可。你只要去满足用户的愿望,就是满足的越多越好。而不是说你要去猜测他的想法,每个人的需求都不同,你猜测的可能不是对的,那最后,代码就算写对了,但是实现的功能并不是客户想要的,这也不能达到最好的结果。

问题四、

①问题四的来源:在《软件工程》305页书中写道,团队眼看完不成预定的任务,只好花钱请第三方来完成工作,从而付出巨大成本,影响团队的业绩。

②问题四的具体阐述:我认为这个并不是绝对的啊,因为可能有些项目,确实不需要我们全部亲自完成,会花费我们的许多时间,而带给我们的效益可能并没有那么大,这个时候我们不妨去花一些钱去请别人来帮忙。

③对于问题四的个人思考: 有了别人的帮忙,我们可以按时按量的完成我们最终的工作,从而用一笔钱去换取更大的收益。因为在软件开发中,时间也是一个很重要的因素,在这个更新速度非常快的社会,软件开发的时间过长,我们的软件很可能被其他公司抢先研发出来,这样得不偿失。综上,我们付出一定的成本,可能会得到更大的收益,所以请人帮忙不一定影响效率。

问题五、

①问题五的来源:《软件工程》314页,提及到画地为牢的分工,作者说道,每个功能都做得很卖力,但是整体就是不太行,明显看起来是费了老大的劲给强行集成起来的。
②问题五的具体阐述:在工作中,我觉得很重要的就是要明确分工,只有当分工明确了之后,每个人才知道自己责任是什么,大部分人都觉得只需要承担自己该承担的。
③对于问题五的个人思考: 如果是边缘问题的话,他们可能并不会有人想去承担,就算承担了,也是草草了事,出了事也没有责任承担。这个时候我们可以不妨再重新安排一个人去管理这种边缘问题,而不是说要他们一起去管理边缘问题,因为这个时候会出现推责任的情况。所以我觉得最好的方法就是再重新安排一个员工专门来解决这种边缘问题。

四.了解和调查源程序版本管理工具

1、GitHub

优点:1、作为一个分布式的版本控制系统,在Git中并不存在主库这样的概念,每一份 复制出的库都可以独立使用,任何两个库之间的不一致之处都可以进行合并。
2、GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。
3、在GitHub,用户可以十分轻易地找到海量的开源代码。
来源:https://baike.sogou.com/v10763190.htm?fromTitle=github

缺点: 1.GitHub 使用 git 分布式版本控制系统,而 git 最初是 Linus Torvalds 为帮助Linux开发而创造的,它针对的是 Linux 平台,git 和 Windows 从来不是最好的朋友,因为它一点也不像 Windows。GitHub 发布了GitHub for Windows,为 Windows 平台开发者提供了一个易于使用的 Git 图形客户端。
2.国内访问速度太慢,经常出现connect time-out
3.不能很好的解决GB2312/GBK,对中文不够友好
4.wiki功能太弱,直接导致文档(对于开源项目很重要)经常被分离到一个独立站点(对企业而言)
5.免费套餐不支持私有项目,无非解决企业内部的需求,github:fi价格过高(最便宜要$5,000/年)
6.基于git,学习曲线陡峭,企业大规模用git根本不现实。
7.github有时可能被墙,或者不稳定
8.没有集成社交分享功能。
来源:https://www.cnblogs.com/yilinwei/p/5283675.html

2、Trac

优点:1、Trac做一个SCM配置管理平台,意味着它有良好的扩充性。通过WebAdmin界面中的Plugin功能,可以很方便的安装下载的插件,也可以通过此功能查看已经安装的插件,并可对其中的插件进行启用或停用操作。
2、Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有团队的开发过程。
来源:https://baike.sogou.com/v8877234.htm?fromTitle=trac
缺点:1、不支持多项目,
2、需求和缺陷没有分离,
3、用 wiki 来替代 Word 等工具编写文档对于产品策划来说门槛太高了,
4、中文化不完整,美术人员接触起来困难重重,
5、不显示中文名,本地化做得很差,
6、核心功能很少,不安装插件基本上没法用。
来源:https://blog.csdn.net/gzlaiyonghao/article/details/6609256

3、rational

优点:1、Rational是提供基于业界开放标准的工具、最佳方案和服务,用于开发商业应用和构建软件产品及系统,包括移动电话和医疗系统等设备使用的嵌入式软件。
2、IBM 的 Rational 软件可以帮助各组织机构创造商业价值。
3、Rational 平台从根本上改善了各组织机构的软件构建方法。
来源:https://baike.sogou.com/v8400546.htm?fromTitle=rational
缺点:无限制的私有仓库个数

4、Bitbucket

优点:1、无限制的磁盘空间
2、同时支持https/ssh
3、Bug 跟踪
4、项目Wiki
5、API 支持
6、灵活的权限控制
7、可自定义域名
8、RSS 修改记录输出
9、自定义下载
来源:https://baike.sogou.com/v69651571.htm?fromTitle=bitbucket

缺点:1、不开源
   2、系统不稳定