BUAA 软工 个人博客作业(一)
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春季计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人博客作业 |
我在这个课程的目标是 | 通过阅读《构建之法》大致了解软件工程 |
这个作业在哪个具体方面帮助我实现目标 | 对个人开发流程有一个初步认知 |
一、思考与疑问
-
对大学生来说,是否应该追求热门领域
邹欣老师在IT行业的创新这一章中对于想开作坊的人给出了这样一个建议:
专注于你自己真正想做的事,也许比较寂寞,因为他不是网上热捧的“高科技”。
其实对于这个问题我自己一直也有疑惑或者说是矛盾。在刚进入计算机学院的时候,我们的班主任就问我们“有多少人以后想研究人工智能?”,他也提到在进行研究生时面试的时候大部分都是冲着人工智能而来,以至于当一位面试的同学说自己是为了研究其他方向而来时,老师们都充满了好奇,让他赶紧继续讲下去。现在人工智能这么火热,让人有一种很多领域都想“蹭一蹭”热度的感觉。不仅仅是人工智能,很多在网上被热捧的高科技都吸引着大批人,“专注于自己真正想做的事”对于一个对自己想要研究的领域有深入了解和明确目标的人来说也许不是问题,但对于我们这些在大学里学习了一两年专业知识,对各个领域了解尚浅,缺乏经验的大学生来说,应该如何选择呢?
-
结对编程适用于什么样的项目
老师在介绍结对编程这一部分的时候分析很多结对编程的好处,也指出了结对编程的条件:
结对编程是个渐进的过程——
有效率的结对编程不是一天就能做到的。结对编程是一个相互学习、相互磨合的渐进过程。开发人员需要时间来适应这种新的开发模式。刚开始的结对编程很可能不比单独开发效率更高。但是在度过了学习阶段后,结对编程小组的开发质量、开发时间通常比两人单独开发有明显的改善。
那么对于这种需要一定时间来适应、磨合,且相比于多人合作,合作者联系更加紧密但分工上没有多人合作细致的方式,适用于完成什么样的项目呢?(比如从工作量等方面考虑?)
-
老师翻译的敏捷开发原则中有一条我很好奇:
经常发布可用的软件,发布间隔可以从几周到几个月,能短则短。
那么请问,在这种追求经常发布的前提下,这个可用的软件应该达到怎样的标准?在这里,“可用”的定义又是什么。对于这个原则我其实是不能特别理解的。感觉这条原则有些为发布软件而发布软件?按照我的理解,软件的多次发布应该是出于修复原有bug,增加新功能,改善用户体验等原因,当我们有这些需要时再去进行改进并发布,而不是追求高频率的发布?
-
在团队的合作阶段这一部分,我们可以很清楚地了解到领导在一个团队中起到的作用,和其重要性。一个好的领导对于团队的作用是不言而喻的。那么,作为团队成员,应该如何去选择自己的领导?或者说应以什么作为最重要的选择标准?一般我们可能都倾向于选择技术比较强的同学,但这些同学却不一定能组织协调好大家。有些人愿意选择最善于调动团队氛围,搞好人际关系的人,但这些人却不一定有足够高的眼光在项目上为大家制定目标。虽然不排除有全才的存在,但事实总是不尽如人意,每个人都会有长处有短处,这种时候,我们应该如何选择?
-
在IT行业的创新这一部分,老师提到了不能只热衷于技术和技术的创新,而忘记目标用户的需求。我由此想到的问题是,如果某一软件以及拥有了完备且成熟的技术,各方面功能都已实现,那我们在之后对其再进行技术上的创新意义大吗?比如说我们现在的词典app,我认为它已经足够满足日常需求了,那如果再对它进行某种创新,考虑到成本,会不会有些得不偿失。
二、请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
- 美国数学家Tukey1958发表的paper "The Teaching of Concrete Mathematics"中最早使用到了"software"这一概念。这个单词最早出现在出版物中是由Richard R. Carhart 于1953年8月出版的书籍。
- “软件工程”这一词由数学与电脑科学先锋— Margaret Hamilton在为阿波罗 11 号开发软件期间发明出,以使得软件工程与硬件还有其他工程学类做出区别。1968年,NATO在联邦德国举行的关于软件开发的会议上,首次提出了软件工程的术语,标志着软件工程作为一门学科的正式出现,至今已有40年的历史。其目的是倡导以工程的原理、原则和方法进行软件开发,以解决软件危机。
三、大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
第一个写软件的人是Ada(Augusta Ada Lovelace),在1860年代她尝试为 Babbage(Charles Babbage)的机械式计算机写软件。尽管他们的努力失败了,但他们的名字永远载入了计算机发展的史册。她的父亲就是那个狂热的,不趋炎附势的激进诗人和冒险家拜伦。她本身也是一个光彩照人的人物—数学尖子和某种程度上的赌徒。她最重要的贡献来自于与发明家Charles Babbage的合作,从而设计出世界上首批大型计算机—Difference Engine和Analytical Engine。她甚至认为如果有正确的指令,Babbage的机器可以用来作曲,这是一个多么疯狂的想法,因为当时大多数人只把它看成是一个机械化算盘,而她却有渲染力和感召力来传播她的思想。
四、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
1. 优缺点
-
-
优点:功能设计简洁实用上手很快、可用性好、pull request功能强大、方便互相学习交流
-
缺点:国内访问速度太慢、对于公司团队来说培训成本较高、文件大小不能超过100Mb,存储库可以托管信息1Gb
-
-
- 优点:免费支持私有仓库、同时支持 hg / git、支持5人以内的合作开发、支持中文
- 缺点:不开源、系统不稳定
-
- 优点:性能高、简便、可靠、有误删除恢复保护、可进行自动构建、功能覆盖了软件研发过程中的所有环节
- 缺点:操作复杂、学习成本较高
-
- 优点:适合分布式开发、强调个体、分支能力强大,体验好,支持离线提交,分布式推送拉取,代码层面的协作流畅
- 缺点:学习周期相对较长、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息
-
- 优点:免费的分布式源代码管理管理工具、它可以有效地处理任何规模的项目,并提供简单直观的界面、支持多种工作流程、可通过扩展轻松增强其功能、易于学习
- 缺点:分支管理不灵活、支持社区略差
-
- 优点:灵活、拥有完备的权限体系、扩展性良好
- 缺点:不支持多项目、核心功能很少、必须得安装插件
-
- 优点:定制功能强大、免费、有中文版
- 缺点:快速搜索结果准确性不高、搜索结果不合理、不支持批量编辑和删除bug
-
Rational
- 优点:支持跨平台、灵活、自由度大
-
- 优点:界面美观流程、适用于开发Mac或者iOS的app/手游项目
- 缺点:局限性太大、不适合用来写Objective-C/Swift之外的语言,C++体验极差
2. 排名
相关数据全部来源于Comparison of source-code-hosting facilities中的Popularity,此处按用户数量进行排名
Name | Users | Projects | Alexa rank (lower = more popular) |
---|---|---|---|
Assembla | Unknown | 526,581+[45] | 23,052 as of 9 September 2019[46] |
Buddy | Unknown | Unknown | 73,518 as of 9 September 2019[49] |
CloudForge | Unknown | Unknown | 339,271 as of 9 September 2019[50] |
Gitea | Unknown | Unknown | 209,697 as of 9 September 2019[51] |
OW2 Consortium | Unknown | Unknown | 610,052 as of 9 September 2019[66] |
Rosetta code | Unknown | Unknown | 62,045 as of 9 September 2019[67] |
SEUL | Unknown | Unknown | 1,268,571 as of 9 September 2019[68] |
GitHub | 31,000,000[52] | 100,000,000[52] | 65 as of 9 September 2019[53] |
Bitbucket | 5,000,000[47] | Unknown | 989 as of 9 September 2019[48] |
Launchpad | 3,965,288[59] | 40,881[60] | 12,344 as of 9 September 2019[61] |
SourceForge | 3,700,000[69] | 500,000[69] | 407 as of 9 September 2019[70] |
GitLab | 100,000[54] | 546,000[55][k] | 2,146 as of 9 September 2019[56] |
GNU Savannah | 93,346[57] | 3,848[57] | 100,244 as of 9 September 2019[58] |
OSDN | 54,826[62] | 6,294[62] | 8,529 as of 9 September 2019[63] |
Ourproject.org | 6,353[64] | 1,846[64] | 1,191,954 as of 9 September 2019[65] |
Name | Users | Projects | Alexa rank (lower = more popular) |
五、调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践
-
GitHub
对于每个在计算机系学习过两年的人来说,GitHub并不陌生。它比较常为人所道道一个功能就是Pull Request。这里引用来自知乎的一段解释:我尝试用类比的方法来解释一下 pull reqeust。想想我们中学考试,老师改卷的场景吧。你做的试卷就像仓库,你的试卷肯定会有很多错误,就相当于程序里的 bug。老师把你的试卷拿过来,相当于先 fork。在你的卷子上做一些修改批注,相当于 git commit。最后把改好的试卷给你,相当于发 pull request,你拿到试卷重新改正错误,相当于 merge。
先fork一个仓库,现在项目已经到了我个人的账号下(可以查看账号名) 然后git clone这个仓库,随便做点改动(由于这里clone到本地速度很慢,迟迟没有进度,之前的calculater热身作业已经做过这一步了,所以接下来的图片部分就意思一下)
如果提交成功后回到github就会发现页面刷新了,之后选择pull request,确认提交。我这里由于仓库一直clone不下来就放一张未成功照片
-
Git
利用Git可以创建版本库,并提交文档。
选择一个合适的地方,创建一个空目录,然后通过git init
命令把这个目录变成Git可以管理的仓库,接着写一个readme文件并通过add commit提交到仓库。
可以看到提交成功后会自动反馈给我们信息,被改动文件个数以及一些详细情况都可以清晰地列出,这种反馈非常有利于我们每次进行改动后对改动信息进一步确认。