个人作业-Week1
快速看完整部教材,列出你仍然不懂的5到10个问题,发布在你的个人博客上。
1.第一次听到理想的师生关系为健身教练和健身学员的关系,感觉很新颖,我的问题是我们学生该如何做到像健身学员一样找到自身定位点,把握老师身上的那套健身资源,朝自己的目标前进呢?
2.看到书中提到阿超打印题目的例子,还有老师在课堂上也举例出四则运算题的例子,让我们能看到程序的可扩展性是多么的重要!那么我们在面对开始的需求时可以通过哪些方法增强程序的可扩展性呢?
3.书中提到:软件工程的一个重要任务,就是要决定一个软件在什么时候能“足够好”,可以发布。感觉很好奇,我们如何或者说通过什么来证明一个软件足够好,可以发布呢?希望通过后面的学习弄明白。
4.看书上提到的和我们课程中要求的结对项目和团队项目,个人感觉结对项目中两个人的角色定位和团队项目中的各个人的角色定位有些重叠的地方,那么我的问题是课程同时设置结对项目和团队项目的用意是什么?
5.书中提到了许多的软件团队模式,感觉我们的课程其实就是一种功能团队模式,每个人在这种模式中执行协作共同完成一个功能,那么刚开始学习软件工程这门课时面对后面的项目如何有法可循的发觉自己适合在这个团队中的职能。
6.软件工程开发过程其实是有许多人共同合作的开发完成和完善的,在这个过程中我们要如何处理好和客户,设计,测试的关系呢?
7.在产品开发的过程中PM起到了举足轻重的作用,那么如何才能做好一个PM而不是尽量不犯大错呢?
8.书中在后面提到了创新的重要性,前面又说到在现实中大部分都是面对用户需求利用现有的东西实现做好,那么这两者之间如何抉择呢?
9.书中提到的很多种对绩效的评价方法,但作者似乎对提到的那些方法都没有明确表示赞同,那么我想问是否存在好的又能够实践的好的绩效评价方法?
10.我们知道软件开发的过程有很多步骤,比如用户需求分析,设计文档,软件设计,用户体验,软件测试等等,那么我想问的是万一在实践过程中遇到时间不足的情况,如何有效的利用这些过程?
请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
“Software”:这个单词最早出现在出版物中是由Richard R. Carhart 于1953年8月出版的书籍。2000年,耶鲁法学院的图书管理员Fred Shapiro发表了一封信,这封信揭露了其在对JSTOR的电子档案的搜索中,发现在由美国数学家Tukey于1958年发布的论文"The Teaching of Concrete Mathematics"中,提到了对于单词“software”的用法。1995,Paul Niquette声称他在1953年十月最初创造了这个词,虽然他没能找到任何资料支持他的说法。
“Software Engineering”:是由 Margaret Hamilton 发明的, Hamilton是一个自学程序设计,并且当上 MIT 软件工程测试实验室主任(也就是为美国太空总署 NASA 开发电脑系统的单位)的女性。它在阿波罗计划期间发明了“Software Engineering”。
【附加题】:大家知道了软件和软件工程的起源,请问软件工程发展的过程中有什么你觉得有趣的冷知识和故事?
不久前,61岁的Java之父James Gosling在Facebook上发表了他所遭遇的年龄歧视:
我曾在面试的时候被HR告知,“通常我们不招你这种年龄的程序员,但你的情况特殊(指的是他Java之父的身份),所以对你特殊考虑。”在Google工作的时候,听到几个30多岁的人在讨论要去整容变得年轻点。
上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、Git、Mercurial、GitHub、Bitbucket、Trac、Bugzilla、Rational,Apple XCode)?
Microsoft TFS:
优点:是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。
缺点:能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。
Mercurial:
采用了分布式系统,因此更加健壮,管理更加轻松。
Git:
优点:适合分布式开发,强调个体。公共服务器压力和数据量都不会太大。速度快、灵活。任意两个开发者之间可以很容易的解决冲突。离线工作。
缺点:资料少(起码中文资料很少)。学习周期相对而言比较长。不符合常规思维。代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
GitHub:
优点:GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
缺点:可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
BitBucket:
BitBucket 是一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统。
优点:无限制的私有仓库个数,无限制的磁盘空间,同时支持https/ssh,Bug 跟踪,项目Wiki,API 支持,灵活的权限控制,可自定义域名,RSS 修改记录输出,自定义下载
Trac:
优点:非常灵活,可以随心所欲控制可以和SVN集成
缺点:功能不是很强大
Bugzilla:
优点:免费,有中文版支持
缺点:快速搜索结果不准确。只能管理缺陷。
Rationale
优点:简洁、实用
缺点:知名度不高
Apple XCode:
优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。
缺点:更新版本后,某个插件可能会失效。