当前位置: 首页 > news >正文

超越时间与人力的软件开发智慧:《人月神话》

在这里插入图片描述

目录

    • 1、写在前面
    • 2、沟通!沟通!沟通!
    • 3、“银弹论”
    • 4、“人月神话”不能成立的原因
    • 5、影响力
    • 6、图书推荐


1、写在前面

《人月神话》是由计算机科学家弗雷德里克·布鲁克斯所著的一本经典著作,首次出版于1975年。这本书以一个个小故事的方式描述了软件工程中存在的现象,探讨软件工程的管理问题 ,并且以其深入的见解和实践经验在软件开发领域产生了广泛的影响和重要性。
在这里插入图片描述

2、沟通!沟通!沟通!

《人月神话》以巴比伦塔建设失败的的神话故事引出了“沟通”重要性。当上帝消除了统一的语言,人们失去了交流的手段,即使其他条件都能满足,巴比伦塔也以失败告终。”沟通”是确保团队思想统一、目标一致的最重要手段。

即使再过分的强调沟通的重要性,但是由于主观或者客观的原因,在实际项目过程中还是会发现沟通不足导致的问题。《人月神话》中也提出了几种方式如何减少沟通也能达到有效协作的目标:

  • 每个人不是必须关注所有的内容,各个部分应该只暴露对外表现,而内部实现应该封装不对外暴露。这段内容体现到代码上就是:针对接口编程,不要依赖实现逻辑。
  • 小而精的团队搭配,保持一个首席程序员完成所有的设计和代码编写工作,其他人进行辅助配合,确保概念的完整性和一致性,减少沟通。
  • 团队协作就要形成组织结构,团队组织的目的是为了减少必要的交流和协作量,人力划分和职责范围必须明确并且清晰。团队中禁止双重领导,团队是树状结构,交流是网状结构,需要补充特殊组织机制来克服树状组织结构中缺乏交流的困难。

3、“银弹论”

“银弹论”是布鲁克斯提出的另一个重要观点。他指出,目前还没有一种“银弹”方法能够彻底解决软件开发中的所有问题。他认为,软件开发是一个极其复杂的过程,没有一种简单的解决方案可以解决所有的难题。

布鲁克斯提到,开发人员和管理者不应过于依赖一种“银弹”方法,而是应该根据具体情况采用不同的工具和技术,结合实践经验来解决问题。他强调了软件开发中的不确定性和复杂性,认为只有通过持续的实践和学习,才能逐渐积累解决问题的经验和方法。

“银弹论”提醒我们,软件开发并没有一种简单的解决方案,需要灵活运用不同的方法和工具,结合实践经验来解决具体的问题。

4、“人月神话”不能成立的原因

“人月神话”是指一种常见的误解,即增加开发人员数量可以缩短项目的时间。布鲁克斯在书中指出,由于引入新人员需要时间来培训和协调,人员增加并不能线性地减少项目的时间。他认为,过多的人员反而会导致沟通成本增加、团队协作受阻,从而延长项目的开发时间。

布鲁克斯通过一个著名的例子来解释这个概念:一个女人可以在九个月内生一个孩子,但如果增加九个女人并让她们一起工作,就不能在一个月内生出一个孩子。

“人月神话”提醒我们,在软件开发中,增加人员并不一定会加速项目进度,相反,过多的人员可能会导致沟通和协调困难,从而延长项目的时间。

原因

  • 当任务由于次序上的限制不能分解时,人手的添加对进度没有帮助。
  • 对于可以分解,但子任务之间需要相互沟通和交流的任务,必须在计划工作中考虑沟通的工作量。

5、影响力

1999年,本书作者布鲁克斯获得图灵奖,评选委员会主席的致辞中说:

“今天我们所看到的计算机体系结构、软件工程,以及三维计算机图形,均受惠于布鲁克斯的开创性工作,是他改变了这些领域的面貌。”

6、图书推荐

图灵奖得主、“IBM 360系统之父”作者Brooks颠覆了项目管理领域,长久不衰传奇经典!软件开发人员、软件项目经理、系统分析师等IT从业者必藏之软工!
畅销全球48年!新版再发行 !购书连接:《人月神话》

“站在巨人的肩膀上,我才能看的更远”。在软件工程领域,前任的经验值得我们学习,更何况这本书更是经验中的精粹,所以说无论你是在校大学生,还是在职工作的同志,我都推荐大家读一读,相信它会让大家受益良多~
在这里插入图片描述

http://www.lryc.cn/news/156528.html

相关文章:

  • Java Stream 流对象(实用技巧)
  • 【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏
  • 简易版人脸识别qt opencv
  • 如何系统地学习 JavaScript?
  • 对称二叉树(Leetcode 101)
  • 动手学深度学习(2)-3.5 图像分类数据集
  • C标准输入与标准输出——stdin,stdout
  • 如何将home目录空间扩充到根目录下
  • Ceph PG Peering数据修复
  • 服务器上使用screen和linux的基本操作
  • Kafka3.0.0版本——文件存储机制
  • Linux如何安装MySQL
  • 确保网络的安全技术介绍
  • 机器学习练习
  • 算法通关村第十九关——最小路径和
  • Linux 访问进程地址空间函数 access_process_vm
  • selenium 动态爬取页面使用教程以及使用案例
  • 小程序中如何查看会员的积分和变更记录
  • 音视频 ffmpeg命令直播拉流推流
  • Python钢筋混凝土结构计算.pdf-T001-混凝土强度设计值
  • 长风破浪会有时,直挂云帆济沧海!(工作室年会总结)
  • (数字图像处理MATLAB+Python)第十一章图像描述与分析-第五、六节:边界描述和矩描述
  • Redis之bigkey问题解读
  • ElementUI浅尝辄止27:Steps 步骤条
  • React 18 迁移状态逻辑至 Reducer 中
  • 【SA8295P 源码分析】89 - QNX AIS Camera qcarcam_test 可执行程序 main() 函数 源代码流程分析
  • STM32屏幕计时器
  • MRI多任务技术及应用
  • app自动化测试(Android)
  • 【力扣每日一题】2023.9.3 消灭怪物的最大数量