【软件工程】第一次阅读作业
内容说明
项目 | 内容 |
---|---|
这个作业属于哪个课程 | 罗杰 |
这个作业的要求在哪里 | 第一次阅读 |
看完《构建之法》后仍然不懂的问题
4.3.2 goto
函数最好有单一的出口,为了达到这一目的,可以使用goto。只要有助于程序逻辑的清晰体现,什么方法都可以使用,包括goto。
在我第一次接触c语言时,老师就力劝我们不要使用goto语句。这里使用goto语句的说法是从有助于程序逻辑的清晰体现的角度来看的,是否忽略了其他方面的问题呢?比如在一些比较复杂的代码块中,由于goto语句导致了程序结构的凌乱,而这还可能导致在某种情况下忘记执行在块中退出时的操作,如释放指针等。有时还会因为它可能跳过了某些对象的构造、变量的初始化、重要的计算等语句导致错误或留下隐患。
4.5.4 如何结对编程
书中说到,驾驶员负责写设计文档,进行编码和单元测试等XP开发流程。
关于这里我有一个疑问,就是设计文档应该是在设计阶段就已经完成的工作,具体的设计应该是在两个人沟通交流后达成的共识,设计文档的写作需要固定的分配给某个角色来完成吗(尤其这里驾驶员和领航员还不是固定的一个人,而是一段时间一轮换的)?
16.1.2 迷思之二:大家都喜欢创新
不但大众不喜欢创新,甚至连创新者自己都不例外,有些创新者甚至恨创新。我们设想一下:
假如你发明了电报,创办了电报公司,并花费毕生精力建起了覆盖全国的电报网。这时有个年轻的发明家上门推销了他的创新——电话。
在这里,个人认为“你”对推销新的发明的年轻人的恨(如果有的话),个人认为不主要是出于一个曾经的“创新者”对新的创新的不喜欢,而是既得利益者对变革的不满。
16.1.4 迷思之四:创新者都是一马当先
在这里,文中说到
其实,大部分成功的创新者都不是先行者,例如搜索引擎,Google是很晚才进入这个领域的。又如Apple的音乐播放器iPod,发布于2001年10月23日,在它之前市面上已经有很多同类的产品了。
Google和Apple等的确不是第一个进入该领域的,不能算是一马当先,但他们一定也会他们自己的独到之处,比该领域的第一个产品在某些方面有自己独到的创新。比如文中之后提到的,苹果公司推出iPod,通过iTunes提供高质量的音乐内容,打破了常规的商业模式,相对于先行者,苹果公司有了这些创新,借助这些综合手段才能后来居上。
17.4 关于猪、鸡和鹦鹉的故事
关于猪、鸡和鹦鹉的故事,书中说到:
猪:提供猪肉,做熏肉。
鸡:提供鸡蛋,做煎蛋。
鹦鹉:提供咨询,每天阅读大量博客,给其他团队成员提供建议,……
……
把一件事情做成需要很多人的帮助,创业者要不拘一格吸引人才。但是我们也要分清楚团队或成员的投入/承诺/责任属于哪个级别,哪些是猪,哪些是鸡,哪些是鹦鹉。一群猪全身心投入看似不错,但无论多么努力,猪没法下蛋。……
对于这一段的描述,我的理解是“猪”是全身心的投入项目中的人,“鸡”是由于某些不是特别重要的原因而加入项目中的“大佬”,“鹦鹉”是围观级别的参与者。“鸡”和“猪”的区别是在对项目的投入程度上,而不是在职业水平上的,那么“无论多么努力,猪没法下蛋”是否有失偏颇了?
请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
- 目前,许多人认为“软件”一词是由John Tukey于1958年的论文“The Teaching of Concrete Mathematics”中提出的。
- “软件工程”一词最早是由Margaret Hamilton在为阿波罗11号做软件开发的任务时提出来的。
大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
- Guido van Rossum喜欢看喜剧团体Monty Python,所以发明了一个编程语言叫作Python。同样的,Python自带的那个IDE,IDLE名字来源于该团体的成员Eric Idle。此外,用来表示垃圾邮件的单词spam也是出自Monty Python这部作品,而这个单词在剧中指的是Spam品牌的午餐肉。
- 编程语言Perl的名字来源于珍珠Pearl,发明者Larry希望给语言起一个简短而有积极含义的名称。受到这个影响,松本行弘在发明Ruby的时候也从珠宝中选择名字,并且选择了Ruby。松本还提到,Ruby还跟诞生石(birthstone)有关,可是生于4月的松本行弘为什么选择了七月份出生的同事的诞生石红宝石呢。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? 请按照最近一两年使用人数的多少, 从多到少排序并说明各自有多少用户(估计),工具的优缺点。
目前流行的源程序版本管理软件和项目管理软件的用户数排序
Name | Users | Projects |
---|---|---|
Assembla | Unknown | 526,581+ |
Phabricator | Unknown | Unknown |
GitHub | 31,000,000 | 100,000,000 |
Bitbucket | 5,000,000 | Unknown |
Launchpad | 3,965,288 | 40,881 |
SourceForge | 3,700,000 | 500,000 |
GitLab | 100,000 | 546,000 |
GNU Savannah | 93,346 | 3,848 |
OSDN | 54,826 | 6,294 |
Ourproject.org | 6,353 | 1,846 |
- GitHub
- 优点:GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
- 缺点:可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
- Trac
- 优点:非常灵活,可以随心所欲控制可以和SVN集成。
- 缺点:功能不是很强大。
- Bugzilla
- 优点:免费,有中文版支持。
- 缺点:快速搜索结果不准确。只能管理缺陷。
- Apple Xcode
- 优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。
- 缺点:更新版本后,某个插件可能会失效。
- Microsoft TFS
- 优点:是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。
- 缺点:能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。
参考资料
[1] John Tukey-wiki
[3] https://www.zhihu.com/question/19811764/answer/19136365