软件工程第一次博客作业
第一次博客作业
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 2020春北航计算机学院软件工程(罗杰 任健) |
这个作业的要求在哪里 | 个人博客作业 |
我在这个课程的目标是 | 有更加清楚的自我认知并提高工程能力 |
这个作业在哪个具体方面帮助我实现目标 | 对软件工程有一个基本认知 |
1.对教材中内容的一些问题
(1)有关构建学生的学习环境的问题
- 邹老师在前言中认为:让学生自己构建知识体系是很重要的,鼓励学生多提问,而不是仅仅接受老师灌输的知识。然而邹老师也承认:构建知识体系的过程是非常缓慢的。这其中就有了矛盾,尤其是在我航6系体现得尤为明显。以我个人的经历为例,在前几个学期的《计算机组成原理》理论课中,对于像我一样第一次接触陌生的计算机领域专业知识的学生来说,能听懂老师课上教的知识已经很困难了,要是还想针对这一学科构建完整的知识体系,就必须得投入大量的实践与精力,然而,我航6系课业繁重程度有目共睹,更不要说对于我们这些理解理论知识都有困难的学生。想要腾出时间来巩固,势必要以牺牲其他课程的时间为代价。但即使对于那些没有那么重要的非专业课,也依旧在学分中占据很大的比例。在“好看的GPA”与“完整的知识体系”中,势必要有所侧重,但这个侧重的度究竟是怎样的?GPA与知识体系两者在未来对自身的影响究竟是怎样的?
(2)有关思维误区的问题
- 邹老师在3.2中提到了几种软件工程师的思维误区,包括分析麻痹、不分主次、过早优化以及泛化,仔细分析发现,这些问题在笔者的学习过程中也一直在犯,包括现在。以分析麻痹问题为例,邹老师举了“修木桶”的例子,十分生动。但虽然我们知道这种思维模式是一种误区,但如何走出这种误区却十分令人困扰。自从笔者接触计算机以来,完成的工作基本都是按这种模式:设计-实施-遇到问题-解决。一旦有解决不了的问题,回退到这个问题之前,想要找到另一种解决策略往往是很费时费力的。而且对于一些初学者来说,他甚至不知道哪些问题是不可以绕过的,哪些问题是可以解决的,哪些问题是很难解决的。那么对于不同的人来说,究竟该如何走出或者从根本上避免陷入类似的误区呢?
(3)有关“好的想法”的问题
- 邹老师在16.1.3中提出的历史遗留的“QWERT键盘“与更合乎人体工学的”Dvorak键盘“的比较,让我感触良多。在曾经的操作系统课上,孙老师也给我们提出了类似的问题:国产操作系统研发的阻力除了一些肉眼可见的原因外,历史问题也是很大的因素。即使研发出的国产操作系统,也没有配套的应用软件,即,“与目前的大众习惯不兼容”,我们该如何与Windows等有大量应用的成熟的系统竞争用户。用邹老师的话老说,即“先入为主”。虽然这个问题不完全属于软件领域,但也有很大的联系。虽然摆脱国外操作系统“垄断”,对于我们民族的伟大复兴来说,是很有意义的一步,但究竟应该如何做到呢?从更小的规模来说,如果创新者的研究方向恰好是已经几近于成熟的,那他的创新还有意义么?
(4)有关创新的价值评判的问题
- 邹老师在16章提到:一个大的创新往往都不是一个人的功劳,都是又许多人的小的创新凝聚而成,但往往最终的整合者能够名垂青史。对于这样的情况,我们究竟该如何在小的创新被整合之前,发现这些小的创新的价值?如果不对这些小的创新给与相应的激励,最终会不会形成一种不愿有人当创新者,都想去当“整合者”的风气?
(5)有关对成员的引导的问题
- 在17.2中,邹老师根据能力高及动力高低,把成员分为四个象限,对于四个象限不同类型的成员,领导者分别有针对性地引导与帮助,当然,这是在实际工作中的情况。但对于我们学生来说,也有着相同的状况。在大学中(或者是在某门具体的课程中),虽然说个人成长很大部分靠自学,但我认为一些引导与帮助也是不可或缺的。在一些学生遇到难题时,如何避免“高动力低能力”的学生,逐渐变为“低动力低能力”或者是“高能力低动力”的学生?谁来担当这个“领导者”的角色?有哪些有效的举措呢?
2.“软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
- 软件一词的提出说法不一,其中最有据可循的一种是:1958年,由John Wilder Tukey在论文《The Teaching of Concrete Mathematics》中提出的。(参考:维基百科:软件)
- 软件工程一词是由Margaret Hamilton在阿波罗计划中提出的,也有人认为其正式提出是在1968年秋季NATO(北约)科技委员会召集的一次会议上(参考:对Margaret Hamilton的采访,维基百科:软件工程)
3.请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
- Bug一词的由来(虽然时间上远早于软件工程的提出,但两者关系十分密切):
在20世纪40年代,当时的电子计算机都还非常庞大,数量也非常少,主要用在军事方面。1944年制造完成的Mark I,1946年2月开始运行的ENIAC和1947年完成的Mark II是其中赫赫有名的几台,Mark I是由哈佛大学的Howard Aiken教授设计,IBM公司制造的,Mark II是由美国海军出资制造的。与使用电子管制造的ENIAC不同,Mark I和Mark II主要是使用开关和继电器制造的。另外,它们都是从纸带或磁带上读取指令并执行的,因此,它们不属于从内存读取和执行指令的存储程序计算机(stored-program computer)。
1947年9月9日,当人们测试Mark II计算机时,它突然发生了故障。经过几个小时的检查后,工作人员发现了一只飞蛾被打死在面板F的第70号继电器中。当把这个飞蛾取出后,机器便恢复了正常。当时为Mark II计算机工作的著名女科学家Grace Hopper将这只飞蛾粘帖到当天的工作手册中,并在上面加了一行注释,“First actual case of bug being found”,当时的时间是15:45。随着这个故事的广为流传,越来越多的人开始使用Bug一词来指代计算机中的设计错误,并把Grace Hopper上登记的那只飞蛾看作是计算机里上第一个被记录在文档中的Bug。
(参考:简书:Bug一词的由来,《软件调试》)
4.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
下图来源(维基百科)
名称 | 优点 | 缺点 |
---|---|---|
Microsoft TFS | 任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。很重要的一点是与强大的VS搭配使用比较舒适。 | 对于普通开发者,很多功能用不到,上手难度高。 |
Git | 分布式;灵活;用户群体大,可靠;离线工作 | 上手难度比较高,保密性差 |
Mercurial |
分布式;跨平台 | 分支管理不够灵活 |
GitHub | 用户群体大,可靠 | 同Git;付费 |
BitBucket |
免费;Bug跟踪;项目Wiki | 不够稳定 |
Bugzilla | 免费;支持中文 | 正如其名,只能管理缺陷 |
5.调查完目前流行的源程序版本管理软件和项目管理软件后,请你选择其中至少2个软件来进行动手实践
(1)Git(最后还是交到GitHub上去了)
(2)GitHub
对于不需经本地的项目,直接在GitHub中操作完全可以