软工第1次个人作业

软工第1次个人作业

项目 内容
所属课程 2019春季计算机学院软件工程(任健)
所属作业 第1次作业
课程目标 理解软件工程的作用和重要性,提升工程能力,团队协作能力
作业目标 阅读构建之法并有所体会

一、快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。

1. goto语句

函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。——《构建之法》P69 4.3.2

goto语句在c语言中难以操纵,初衷可能是添加一两个goto为了体现程序逻辑,如书中提到的单一出口设计。但一旦函数的逻辑比较复杂,使用goto是否会反而破坏程序的条理性呢?

2. 全栈工程师

当一个运维工程师在维护一套系统的时候,运维团队要了解各个模块的作用、维护知识,以及和硬件、商业模式相关的各种事件的需求。如果这大部分运维工作都是由一个工程师来完成,那么这位工程师的确是“全栈”。P53 3.3

书中文字给人一种现在是个人就敢说自己是全栈工程师的感觉,可能作者对身边存在的这样一种浮躁的现象有一些自己的思考和驳斥。

考虑这样几种情况:某职工曾在多家互联网公司任职,在A公司做过后端,在B公司做过前端,在C公司做过服务器维护,在D公司又负责写算法,所以他在投给E公司的简历上写——我是全栈工程师。

某独立开发者自己维护了一个开源项目并且有着一些稳定的用户,这个开源项目部署在了网站上并且该项目的前端后端都是由该开发者自行搭建,并在网站上贴上了自己的支付宝收款码求各位大爷们救济。碰巧该开发者看了《构建之法》这一段,于是心里闪过——我是全栈工程师。

请问职工A和开发者B,究竟谁的技术更好?A作为一个有广泛工作经验的职工,他可能有着极强的工程能力和编码能力;而B可能只是一个刚毕业的研究生,有着维护自己开源项目的爱好。

这是否意味着,全栈工程师在不同的情境下有着不同的意味,而不代表着一个技术上更高一层的阶级呢?

3. 软件测试

我曾经了解到在如今BAT的大部分项目里,也没有建立良好的Code Review制度,Unit Test也仅仅有重要模块会做。那么对于这样大型项目的覆盖性测试,其花费的人力成本是否会得到相应的回报呢?如果做工程的最终目的是为了盈利的话,软件测试的全面性在实际应用中是否并不被重视呢,而我们在完成作业时却还要为逻辑简单明了但构造测试样例却有难度的那些分支去做100%覆盖,是否是教育的过度形式化的一种体现呢?

4. 人类学调查

我平时接触的同学都是计算机专业的,……,我从来没为软件或服务付过费。——《构建之法》P159

据书中提到,这是某计算机系的同学,这里我要提出一些自己的见解。

该同学觉得自己每天FQ上外网看quora,表姐父母却天天hao123,QQ秀,话语中体现出自己比海量的中国用户不知高到哪里去了。

如果他觉得站在墙外就更懂计算机,我还可以理解,但是他认为自己从来没为软件或服务付过费是一种很hacker的行为我就很奇怪了。上百度搜个注册机破解码就觉得自己比那些不愿意花钱干等着的人高半头?作为计算机未来的从业者,自己想用软件不花钱,自己写软件的时候你也别想着赚别人的钱啊?如果可以培养一些高素质人群的付费使用习惯,我认为这是可以促进现有软件工程的质量的。如果大家都想不花钱用,那软件提供商就只能在软件上挂广告,大家都不舒服,何必呢?

5. 大马哈鱼洄游模型

P416

书中提到了一些软件工程课的一些现象,看起来软件工程这门课似乎并不完善,这似乎主要是因为同学们的水平比较低(上课睡觉),还有一些课程安排方面过于高屋建瓴,没有落实到地。

比如本次博客作业,要大家在比较短时间内浏览完邹欣老师的《构建之法》这本书,这一看,上周课上的PPT基本上就是构建之法的扫描件嘛。书中安排了健身学员的身份给大家,你读完,你就是很想提高自己,你不想读,就是想把健身卡垫桌脚。那既然我们大家都读完构建之法了,是不是我们就已经大致了解软件工程理论,只需要等着编码实践了呢?那么如果未来的课程还只是构建之法的扫描缩印,那理论课的课程内容在第一次博客作业时就已经学习完毕了,理论课的内容是否显得空虚了一些呢?如果课程设计时知道大家在这很短的时间内看不明白构建之法的软工精髓,那么留本次博客作业让大家看完这本书是否合理,又是否自相矛盾呢?

如果不能解决上述问题,就盲目地认为是因为学生没有学好软工就是因为用健身卡垫桌脚了,是不是有些不妥呢?

2. 请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?

软件:John Tukey在1958年的论文"The Teaching of Concrete Mathematics"中,首次提到了software即“软件”一词。但在工程背景上,最早出现“软件”一词是在1953年8月由Richard R. Carhart在兰德公司提出。

软件工程:一说“软件工程”这个词在1965年6月就在计算机与自动化的期刊被提出。在1968年由NATO科技委员会在前联邦德国的会议中提出,当时定义为“研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科”。

3. 大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?

在程序中bug一词用于技术错误。这一术语最初由爱迪生在1878年提出的,但当时并没有流行起来。在这的几年之后,美国上将Grace Hopper在她的日志本中,写下了她在Mark II电脑上发现的一项bug。不过实际上,她说的真的是“虫子”问题,因为一只蛾子被困在电脑的继电器中,导致电脑的操作无法正常运行,“这是我在电脑上发现的第一个bug”。

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

  1. github目前已经有了超过3100万开发者。
  2. BitBucket目前有超过100万个团队以及600万名开发者。
  3. gitlab目前已经有了超过10万个组织。
软件 优点 缺点
Microsoft TFS 支持数据库版本管理,自带很多工具;支持代码审阅讨论、邮件通知、web访问与管理 搭建起来复杂,难以维护,团队邮件细节配置复杂
Git 分布式版本控制;易于控制,非常灵活;速度快,可以离线工作 学习难度大
Mercurial 命令封装性好、有双字母简称、兼容svn 服务器部署容易 分支管理不灵活 执着于向后兼容
GitHub 免费 开源 有大量优秀的开源项目和良好的社区环境 同Git
Bitbucket 支持Git 免费闭源 限制人数
posted @ 2019-03-05 03:15  SephyLi  阅读(263)  评论(3编辑  收藏  举报