1.快速看完整部教材,列出你不懂的 5 - 10 个问题,发布在你的个人博客上。
在团队编程时,似乎是有人负责测试代码,有人写代码,但是我个人感觉我在阅读他人代码的时候会比阅读自己代码困难许多,为什么要分这样的职责?

在自己的设计理念和用户需求发生冲突时怎么办。

PM和普通coder谁比较难当,还是说仅仅是2种不同的职位。

如何给团队里编码能力不同的人分配工作。

我们以后在学习新的技术时,是否还要继续学习新的软件工程知识(软件工程是否像数据库一样已经十分成熟)?




2.请问 “软件” 和 “软件工程” 这些词汇是如何出现的 - 何时、何地、何人?
软件 :
        最早在出版物中出现是Richard R. Carhart 于1953年8月出版的书籍。
        而最早在论文中出现是美国数学家Tukey于1958年发布的论文"The Teaching of Concrete Mathematics"。
软件工程:
        最早由Margaret Hamilton在阿波罗计划中发明。她是一个自学程序设计,并且当上 MIT 软件工程测试实验室主任(也就是为美国太空总署 NASA 开发电脑系统的单位)的女性。




3.上网调查一下目前流行的源程序版本管理软件和项目管理软件都有哪些, 各有什么优缺点? (提示:搜索一下Microsoft TFS、Git、Mercurial、GitHub、Bitbucket、Trac、Bugzilla、Rationale,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:
优点:免费,有中文版支持

缺点:快速搜索结果不准确。只能管理缺陷。

Apple XCode:
优点:编译速度极快,每次操作都很快速和轻松。自动提供撤消、重做和保存功能,无需编写任何编码。

缺点:更新版本后,某个插件可能会失效。