人月神话读后感
只看这个名字,实在联想不到更多的和计算机软件的关系。一开始以为作者起了一个文艺的名字,真正读起这本书来却是理解了人和月。两个完成软件工程的重要因素--人员团队和时间的关系。这本书以形象的比喻,风趣的语言和直击要害的说明向我们展示了软件制作的一个庞大的过程。本书的目录就是一篇十分精简的笔记,作者将软件过程所需要注意的重点都提炼到了目录里面,让人一目了然。
焦油坑:编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。我在编程方面是十分不在行的,现在虽然说不上职业的烦恼,但是学习的烦恼也是比比皆是。记录下这句话,也许能给我一个培养编程兴趣的理由。有兴趣的东西,不用像被赶毛驴那样受督促而学。
软件形成是一个非常庞大而复杂的过程。避免空泛的估算更防止对软件的估算上的乐观主义。这往往造成重复产生的进度,使软件进程一拖再拖。对于人员也是要求多多,在一个软件参与人员中。人员精练虽然优秀,但人员之间的沟通能力才是最最至关重要的。由此以外科手术队伍来作比喻,Mills给出了划分成外科医生。副手。管理员。编辑。两个秘书。程序职员。工具维护人员。测试人员。语言专家以及其团队的扩建等分块负责沟通合作的建议。
在系统设计中,概念完整性应该是最重要的考虑因素。对于非常大型的项目,将设计方法、体系结构方面的工作与具体实现相分离是获得概念完整性的强有力方法。结构师的工作,是运用专业技术知识来支持用户的真正利益,而不是维护销售人员所鼓吹的利益。创造性活动包括了三个独立的阶段:体系结构、设计实现、物理实现。在实际情况中,它们往往可以同时开始和并发地进行。
画蛇添足:结构师的交互准则和机制来约束结构师的创造性热情。第一个系统和第二个系统都要充分的简洁和控制来契合成本要求。
明确了人员和软件目标范围就是贯彻执行了。其中手册不但要描述包括所有界面在内的用户可见的一切,它同时还要避免描述用户看不见的事物。规格说明的风格必须清晰、完整和准确。比如利用形式化标记方法。通过直接整合,多次会议的沟通和表达融合,多重实现,电话日志来保证这个手册的规范化。产品测试来寻找和弥补软件的不足之处。
巴比伦塔的失败:大型编程项目中的交流(人员交往活动、项目工作手册的编写)和组织架构(人力划分和限定职责范围)是非常重要的。胸有成竹:通过各种计算方法得出的软件制造的时间估算来确定效率。削足适履:一个软件工程是由一定的成本、时间、空间限制的。这些限制决定了软件的功能在一定程度上的局限性。也促成了软件核心的形成和保留。
计算机产品的文档包括目标、技术说明、进度时间表、预算、组织机构图、工作空间的分配、报价预测价格等。大学科系的文档包括目标、课程描述、学位要求、研究报告、课程表及课程安排、预算、教室分配、教师和研究生助手的分配等。软件项目的文档包括目标、产品技术说明、时间进度表、资金预算、工作空间分配和人员组织图。正式的文档来提纲挈领。便于保存和分析。
系统软件开发是减少混乱度(减少熵)的过程,所以它本身是处于亚稳态的。软件维护是提高混乱度(增加熵)的过程,即使是最熟练的软件维护工作,也只是放缓了系统退化到非稳态的进程。未雨绸缪就是对这个演化的过程进行推测和措施实行。有了理论基础和人员准备,巧匠难为无米之炊。机器等硬件方面的装置也要与时俱进,以服务于软件的制作。
整体部分就相当于软件工程概论这本书的精华版了。通过对剔除bug的设计,构件单元测试、系统集成调试等方面完成软件的制作和测试修改。祸起萧墙给出了软件错误和反面的方向。软件没有完美的,注定带着许多的错误。另外一面就是通过文档和流程图来进行软件的过程记录和架构。而没有银弹则侧重于暴露软件的根本和衍生的问题。
通过这些章节,已经基本把软件工程所需要和注意的事项涵盖其内。这是一本有意思而且理论和实践共同说明的书。以一种有趣的方式让我更加了解了软件工程。