软件工程第1次我的做业

项目 内容
本次做业所属课程 2019BUAA软件工程
本次做业要求 第1次我的做业
我在本课程的目标 熟悉和实践软件工程流程,适应团队开发
本次做业的帮助 帮助理解《构建之法》

1、快速看完整部教材,列出你仍然不懂的5到10个问题

  • 4.2.6 “命名”中提到了一些命名规则,对此我有一些疑问:html

    “在变量名中不要提到类型或其余语法方面的描述,如arraylistOfHolidays写成holidays。”linux

    相信没有人会给一个类型彻底没有歧义的变量起名为“int_index”,当咱们试图在变量名中加入类型时,每每是有必定目的的。我在实现部分机器学习算法时,用到了不少诸如dataFrame、array、list、mat格式的变量,而当程序思路正确却没法运行时,最多的错误就是维度问题和类型问题,不少error发生在*和np.dot混淆、array和list混淆的状况下。印象中我在某个课上见过刘禹老师示范的C#代码,彷佛也在容易混淆类型的变量名中加入了类型。所以我以为,若是在变量名中加入类型对程序有帮助,也是值得推荐的代码风格。git

  • 4.3.2 “goto”提到了:github

    "只要有助于程序逻辑的清晰体现,什么方法均可以使用,包括goto。"算法

    咱们在初学代码时,就被告知“避免一切goto”,其缘由应该是防止初学者乱用goto下降了代码的可读性,也难以debug。事实上,goto在异常处理时很好用(如goto fail;),并且若是goto是前进式的结构,代码可读性也很强,这恐怕就是做者说的“有助于程序逻辑的清晰体现”了。但实际上,我认为在除此以外,能避免使用goto的地方,都应当用其余结构代替。我看到了这篇关于苹果公司漏洞的讨论,彷佛性能上的优势也不能做为使用goto的借口。相反,过多的goto使用,让代码更加不易读懂,这样写出来的代码,就和IOCCC没什么区别了。’编程

  • 16.1.4 “迷信之四:创新者都是身先士卒”中,举了iPod、Gmail的例子,来讲明创新者不必定是第一个提出创新想法的人。然而,这些后来跟进的人可以战胜其余人,想必也是有了一些其余竞品没有的体验或功能。是否是也能够说,这些帮助他们战胜对手的特色,也是创新呢?因此创新者应当是在关键功能上第一个提出并实现创新想法的人,他们一样是身先士卒,但不必定是开创了一个行业,或许只是开创了行业里最优质的服务和最吸引人的关键特色。服务器

  • 17.1 “领导力”中,强调了团队领导的重要性。联想到即将开始的团队编程,领导该如何肯定?极可能出现两种状况:一种是团队里有个大牛,因为他的技术最好,你们都听他的。另外一种是你们互相讨论,少数服从多数,实际上没有一个真正的领导。实际上,因为你们都是技术人员,对项目方向上的把控水平可能都差很少,因此我认为没有领导的小团队,应该也是能够的吧?dom

  • 9.3 “PM作开发和测试以外的全部事情”,提到了PM须要的能力和职责。现实中,PM具体如何保证项目进度?若是遇到技术人员广泛落后进度,PM会怎么作?机器学习

2、请问 “软件” 和 “软件工程” 这些词汇是如何出现的(什么时候、何地、何人)?

“软件”:1953年,Richard R.Carhart在兰德公司的备忘录中首次使用这个词。也有人认为,是John Tukey在一篇1958年的论文"The Teaching of Concrete Mathematics"中首次使用。分布式

“软件工程”Margaret H.Hamilton声称本身在阿波罗计划期间发明了软件工程一词。实际上,这个概念是在1968年由NATO(北约)科技委员会在前联邦德国的会议中提出,当时定义为“研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把通过时间考验而证实正确的管理技术和当前可以获得的最好的技术方法结合起来的学科”。

3、知道了软件和软件工程的起源,请问软件工程发展的过程当中有什么你以为有趣的冷知识和故事?

git名字由来:git由linux的发明者Linus发明,这个词自己的意思是饭桶、烂人。在github上咱们能够找到git的来源

The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood):

random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant.

stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang.

"global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room.

"goddamn idiotic truckload of sh*t": when it breaks

总而言之,没什么优美的解释。

4、上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?

我并无找到各个版本管理软件的具体使用人数,但根据这份2015年stack overflow的调查结果和近几年的趋势来看,榜单中github的使用率应当会更高。

source control

git

  • 能够服务器上克隆完整的Git仓库到本地。由于分支在本地,分支切换更快。

  • 各版本commit在本地,能够随时提交。易于代码的分支化管理。

  • 有优秀的开源社区github。

  • 分布式提交,可能出现冲突,须要先解决冲突再提交。

  • 使用难度大。

SVN

  • 对中文支持好,操做简单。

  • 较好的权限管理功能,能够精确控制每一个目录的权限。

  • 集中式,若是中心服务器出现问题,全部人都不能正常工做。

  • commit必需要求联网。

TFS

  • 不只支持集中式代码库,还支持分布式的源代码库。

  • 高度集成主流的开发工具和常见的办公工具。

  • 搭建、维护比较复杂,硬件要求较高。

Mercurial

  • 采用了分布式系统,管理更加轻松。

  • 不须要按期维护资料库。

  • 在合并时只容许两层父阶层版本异动。