这是北航计算机学院软件工程课程2020春罗杰老师班个人博客作业。
| 项目 | 内容 |
|---|---|
| 这个作业属于哪个课程 | 课程链接 |
| 这个作业的要求在哪里 | 作业链接 |
| 我在这个课程的目标是 | 获取软件开发经验,提高开发和团队协作能力 |
| 这个作业在哪个具体方面帮助我实现目标 | 快速阅读《构建之法》,了解软件工程的各种概念及软件工程的开发方法 |
1.快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上
代码设计规范
4.3.2一节中提到
函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto
这个问题有关代码规范,在我目前学习和使用经验中都是极力避免使用goto的,各种资料说goto语句 破坏程序的结构化,降低了程序的可读性,我上学期的编译器中有使用goto的需求,但最后基本通过循环或增加变量的方式避免了。所以我对程序的逻辑结构、清晰可读性的具体方向还有疑问。
风险管理
风险是在正常软件生命周期事件之外的、可能发生的影响项目的成功的事件。 风险管理
美国公共政策和风险管理领域的专家艾伦·威尔达夫斯基(Aaron Wildavsky)说过:没有风险,就是最大的风险。
这句话一般被理解为生于忧患死于安乐,但在本节我觉得这个解释不很合适。个人的理解是工程本身就意味着要承担一定的风险,如果非要追求万无一失、没有任何风险,恐怕将会面临更大的风险,如坐失发展机会、丧失决断力的风险等等。 作者此次想表达的应该与之相同?
Tell mode vs. Ask mode
在讨论如何避免在产品开发后期不断有重大修改,导致其它模块的连锁反应?时书中给出:
在项目早期,如果大家觉得要做一个设计变更,便可以采用告知模式(Tell-mode)的形式,也就是说,修改方必须通告所有关系人:“我在这里修改了某某界面, 我在某个API 增加了一个参数。”但是修改方不必取得其他关系人(或者模块)的事先同意,就是说可以先行设计并编码。当然,如果其他关系人不同意,修改还是不能签入。
当项目进行到稳定阶段,例如达到了代码完成(CC)阶段,Tell-mode 要改为请求模式(Ask-mode),这时,修改方必须先问“我是否可以在这里修改某某界面?”(当然还要有更详尽和充分的理由),得到肯定的答复后,才能进行修改。这时的默认回答是“不”。
如果其他关系人不同意,修改还是不能签入,那告知模式会不会导致项目进度拖延?更严重的如果关键API必须修改,会不会导致大范围重构?
创新迷思之三
作者认为好的想法不一定会赢,举了键盘布局和美国度量标准的例子,提出
对利益相关人要讲清楚“你能从中得到什么”。
创新的想法和目前流行的做法相比,有什么相对优势,能让别人清楚地看到这 个区别,并能够尝试。
创新和目前大众习惯、已有系统是否兼容。
避免过度描述复杂的技术。
这两个例子似乎都只是不符合大众习惯,因而没有成功。从个人看来创新应该具有颠覆性,如苹果公司多次重新定义智能手机,从而取得成功,越颠覆的产品越能占据市场份额。所以创新应该如何处理旧习惯,怎么考虑兼容性的问题?
赢者通吃
这个游戏规定第一名得到全部的分数,第二名(不管多接近)到倒数第二名都是0分,最后一名还要倒扣分。软件行业就是一个赢者通吃的环境,最后一名还要把自己的身家倒贴进去。
在这种环境下中小创业者如何发展,竞争软件一定能分出赢者吗?这里赢者吃掉的是定位完全一致的对手,还是行业内的所有软件?用经济学的话说,作者说软件行业是一个垄断行业,那么这种垄断是完全垄断,寡头垄断还是垄断竞争的类型?
2.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
软件一词是John Turkey在一篇论文《The teaching of concrete mathematics》中首次使用的,
软件工程是阿波罗11号的软件开发期间,Margaret Hamilton提出用来与硬件还有其他工程学类做出区别的。
3.知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
1978年,Brain Kernighan在他和Dennis Ritchie合作撰写的C语言圣经“The C Programming Language”中,延用了“hello,world”句式,作为开篇第一个程序。在这个程序里,输出的”hello,world”#include <stdio.h>int main(){print ("hello,world");return 0;}由于C语言在程序界里绝对大佬的地位,使得本书中这第一个程序成为了经典,让无数编程恐惧症患者得以顺利写出第一个程序,从而走上大神的不归路!
后面C++ php这些在C语言基础上发展而来的编程语言,各类教材都是以hello world做为开篇。以致于只要了解编程的人,都会知道hello world的梗!
参考文献:Hello world的起源
4.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点?
-
Git
-
使用人数多,环境好,速度快,体积小
-
学习成本高,需要理解git分支概念
-
-
Microsoft TFS
-
有图形界面,中文支持好
-
集中式管理,需要连接中心服务器
-
Mercurial
-
有较好的封装
-
分支管理不如git灵活
-
-
GitHub
- 有大量开源项目可供学习
- 学习成本高,
国内速度慢
-
Bitbucket
- 功能丰富,为团队开发设计,无限制的私有仓库个数,磁盘空间,同时支持https/ssh
- 开源代码比Github少
-
Trac
- 权限体系完整,可以扩展自定义功能
- 不支持中文,功能少
-
Apple XCode
- 自带各种工具,辅助开发,自由撤销。
- 不能编辑, 更新版本后,某个插件可能会失效。
由于wiki因某原因无法进入,各工具的使用人数参考了以前同学的博客。
动手实践
Git的使用
使用git添加一个bugfix的commit,之后回退到init的commit。
Bitbucket的使用
使用Bitbucket创建了一个项目,添加文件,创建分支,进行版本控制。