人月神话心得

人月神话心得

#第一章:编程的乐趣:
创建事物
开发对他人有用的东西
组装
持续学习
思考相对来说容易驾驭
编程的苦恼:
正确的代码
由他人来设定目标、提供资源、提供信息
改bug
被更优秀的产品替代
在资源范围内寻找可行方案
第二章:合理的安排计划非常重要:“一切都将运作良好,任务不会超时”是错误的看法(15),其具有限定的概率。使用人月来衡量工作量是危险的做法,暗示人员数量和时间是可以互相替换的。由于程序相互练习开发人员之间需要交流(16),新人员需要培训,之前旧工作会被中断,这一估计技术并不可取。
第三章:经验和实际的表现没有相互联系(存疑),关键还是编程速度和质量(30)。简单的结论:让最能干的项目经理来编程开发(30)。
第四章:创造性活动的三个阶段:Blaauw(49):体系结构→设计实现→物理实现如果想提高开发效率,这三步可以并行。例如,在外部说明已经有雏形的时候,设计实现人员就可以开始设计模块的变节、表结构、路径和阶段能分解、算法以及所用工具了(49)。
第五章:探讨预估工时、“冗余功能”如何防止出现由于结构师的创造性热情造成的冗余功能?基本回答是结构师和建筑人员之间彻底、谨慎、和谐的交流。(54)
第六章:贯彻执行:编程实现人员理解结构师的决策;结构师保持系统概念上的完整性。文档是结构师主要的工作产物,为自己描述的任何特性准备一种实现方法,但是不应该试图支配具体的实现过程(62)建立模块间接口语法(66)。
第七章:反思项目为何失败依旧是交流问题。
第八章,第九章:提高效率工作量越大,效率就越低(8th);除了考虑局部优化,也要考虑改动对用户的整体影响(243);使用表数据的效率要高于流程图(9 - 102),数据的表现形式是编程的根本(244)。
第十章:准备文档文档组成:目标、技术说明、进度、预算、工作分配文档目的:记录内容、以明朗矛盾、沟通渠道、作为数据基础和检查列表。
第十一章:对软件进行升级以及修改bug
软件的构建人员特别容易面临永恒的需求变更(247)。
随着版本号的提高,受到影响的模块数量增加了,所有修改有倾向于破坏系统的架构(122)。最后,对于系统的重新设计变成了一项必须完成的步骤(246)。
管理人员和技术人员需要有互换性(120)。
第十二章:选择工具计算机、操作系统语言程序、调试程序(热加载)、测试用例生成程序、字处理系统
第十三章:整体和部分散乱且难以整理
第十四章:如何防止项目超时延期
1. 使用清晰设立的里程碑
2. 使用PERT图: Program_evaluation_and_review_technique
3. 花费一定的资源进行计划和控制
第十五章:如何了解全局这一章作者认为自生成文档比较好,这样开发者就不用维护两个地方了。
第十六章、第十七章:如何快速降低软件成本
解决灾难的第一步是将大块项目进行分解为每一个步骤(185)
软件实体的概念结构包括:数据集合、数据条目之间的关系、算法和功能调用等。作者认为,软件开发中困难的部分是对这些概念的说明、设计和测试,而不是对概念的实现。
软件内在特性:
复杂度:没有两个软件的部分是相同的,软件不存在重复的部分。软件实体的扩展会导致软件元素一非线性递增的方式交互,软件必然会越来越复杂。复杂度不仅导致技术产生苦难,还引发了很多管理上的问题。因为管理者越来越难以完整的理解问题。
一致性:软件领域不存在像物理学那样“对于事物简化的解释”,软件的复杂度是随心所欲、毫无规则所言的。
可变性:软件的修改成本相对于汽车、建筑要低很多。软件产品扎根于文化母体中,例如用户、社会规律、计算机硬件等。后者不断变化要求了前者也要跟着变。
不可见性:软件客观上不具有抽象模型,这种缺憾限制了个人的设计过程,也阻止了思路互相之间的交流。
目前的一些创新:高级编程语言,面向对象编程,广义人工智能,专家系统:接受数据和条件,通过规则推到逻辑结果,提出结论和建议。(194),自动编程,图形化编程,程序验证(工作量和验证不匹配,198),数据环境、工作站。
作者认为的根本的方法:
不要定制(重新开发)软件,而是要购买现成软件或者开发可重用的组件(227),以降低开发成本;
建立快速的原型:软件开发人员为客户所承担的最重要的职能是不断重复的抽取和细化产品的需求(202)。复杂的软件往往是活动的、变化的系统,需要让客户和设计人员之间进行多次广泛的交流沟通。原型是应用程序的功能主线,但是不处理任何无效输入、退出清除等异常情况,用于让客户测试可用性和一致性。
增量开发
使用卓越的设计人员,寻求培养卓越设计人员的途径:指派职业导师、制定和维护职业计划、提供交流机会
“点石成金时人类存粹信仰的体现,人们花费大量的时间和精力来认可和接受这个无法解决的问题。即使被证明是不存在的,那种寻找出路和希望能一劳永逸的愿望,依然十分强烈……所以,将圆形变方的论文被发表,抑制脱发的洗液被研制,提高软件生产率的方法被推销。”
图形界面成功的意义在于其易用性概念(266)。
我们行业的主要问题实质上更侧重于社会学而不是科学技术,管理人员的职责不是要人们去工作,而是创造工作的可能(280)。任务可以成功的转移,但是对于项目的转移,即使拥有良好的文档、先进的设计以及保留部分原有人员,新队伍实际上依然是重新开始。我认为正是由于破坏了原有团队的整体性,导致产品雏形的夭折,项目重新开始(281)。对争论进行仲裁的不应该是老板,而是团队(282)。
个人计算机的普遍存在导致了全新创造性活动介质的出现(285)。
软件工程行业需要:持续的发展;学习使用更大的要素来开发;新工具的最佳使用;经论证的工程姑那里方法的最佳应用;良好的自我判断;谦卑。
因为开发人员唯一能控制的是质量,当他们不得不牺牲质量,痛苦地面对自己的工作,践踏工作的乐趣时,可以想像项目成本会大大增加,并且项目的发布往往伴随着一大批程序员的倒下。(319)

猜你喜欢

转载自blog.csdn.net/qq_36580022/article/details/127965252