超越时间与人力的软件开发智慧:《人月神话》
目录
- 1、写在前面
- 2、沟通!沟通!沟通!
- 3、“银弹论”
- 4、“人月神话”不能成立的原因
- 5、影响力
- 6、图书推荐
1、写在前面
《人月神话》是由计算机科学家弗雷德里克·布鲁克斯所著的一本经典著作,首次出版于1975年。这本书以一个个小故事的方式描述了软件工程中存在的现象,探讨软件工程的管理问题 ,并且以其深入的见解和实践经验在软件开发领域产生了广泛的影响和重要性。
2、沟通!沟通!沟通!
《人月神话》以
巴比伦塔建设失败
的的神话故事引出了“沟通”重要性
。当上帝消除了统一的语言,人们失去了交流的手段,即使其他条件都能满足,巴比伦塔也以失败告终。”沟通”是确保团队思想统一、目标一致的最重要手段。
即使再过分的强调沟通的重要性,但是由于主观或者客观的原因,在实际项目过程中还是会发现沟通不足导致的问题。《人月神话》中也提出了几种方式如何减少沟通也能达到有效协作的目标:
- 每个人不是必须关注所有的内容,各个部分应该只暴露对外表现,而内部实现应该封装不对外暴露。这段内容体现到代码上就是:针对接口编程,不要依赖实现逻辑。
- 小而精的团队搭配,保持一个首席程序员完成所有的设计和代码编写工作,其他人进行辅助配合,确保概念的完整性和一致性,减少沟通。
- 团队协作就要形成组织结构,团队组织的目的是为了减少必要的交流和协作量,人力划分和职责范围必须明确并且清晰。团队中禁止双重领导,团队是树状结构,交流是网状结构,需要补充特殊组织机制来克服树状组织结构中缺乏交流的困难。
3、“银弹论”
“银弹论”是布鲁克斯提出的另一个重要观点。他指出,目前还没有一种“银弹”方法能够彻底解决软件开发中的所有问题。他认为,软件开发是一个极其复杂的过程,没有一种简单的解决方案可以解决所有的难题。
布鲁克斯提到,开发人员和管理者不应过于依赖一种“银弹”方法,而是应该根据具体情况采用不同的工具和技术,结合实践经验来解决问题。他强调了软件开发中的不确定性和复杂性,认为只有通过持续的实践和学习,才能逐渐积累解决问题的经验和方法。
“银弹论”提醒我们,软件开发并没有一种简单的解决方案,需要灵活运用不同的方法和工具,结合实践经验来解决具体的问题。
4、“人月神话”不能成立的原因
“人月神话”是指一种常见的误解,即增加开发人员数量可以缩短项目的时间。布鲁克斯在书中指出,由于引入新人员需要时间来培训和协调,人员增加并不能线性地减少项目的时间。他认为,过多的人员反而会导致沟通成本增加、团队协作受阻,从而延长项目的开发时间。
布鲁克斯通过一个著名的例子来解释这个概念:一个女人可以在九个月内生一个孩子,但如果增加九个女人并让她们一起工作,就不能在一个月内生出一个孩子。
“人月神话”提醒我们,在软件开发中,增加人员并不一定会加速项目进度,相反,过多的人员可能会导致沟通和协调困难,从而延长项目的时间。
原因
当任务由于次序上的限制不能分解时,人手的添加对进度没有帮助。
对于可以分解,但子任务之间需要相互沟通和交流的任务,必须在计划工作中考虑沟通的工作量。
5、影响力
1999年,本书作者布鲁克斯获得图灵奖,评选委员会主席的致辞中说:
“今天我们所看到的计算机体系结构、软件工程,以及三维计算机图形,均受惠于布鲁克斯的开创性工作,是他改变了这些领域的面貌。”
6、图书推荐
图灵奖得主、“IBM 360系统之父”作者Brooks颠覆了项目管理领域,长久不衰传奇经典!软件开发人员、软件项目经理、系统分析师等IT从业者必藏之软工!
畅销全球48年!新版再发行 !购书连接:《人月神话》
“站在巨人的肩膀上,我才能看的更远”。在软件工程领域,前任的经验值得我们学习,更何况这本书更是经验中的精粹,所以说无论你是在校大学生,还是在职工作的同志,我都推荐大家读一读,相信它会让大家受益良多~
相关文章:

超越时间与人力的软件开发智慧:《人月神话》
目录 1、写在前面2、沟通!沟通!沟通!3、“银弹论”4、“人月神话”不能成立的原因5、影响力6、图书推荐 1、写在前面 《人月神话》是由计算机科学家弗雷德里克布鲁克斯所著的一本经典著作,首次出版于1975年。这本书以一个个小故事…...

Java Stream 流对象(实用技巧)
目录 一、InputStream & OutputStream 1.1、InputStream 和 OutputStream 一般使用 1.2、特殊使用 1.2.1、如何表示文件读取完毕?(DataInputStream) 1.2.2、字符读取/文本数据读取(Scanner) 1.2.3、文件的随机…...

【用unity实现100个游戏之8】用Unity制作一个炸弹人游戏
文章目录 前言素材开始一、绘制地图二、玩家设置三、玩家移动四、玩家四方向动画运动切换 五、放置炸弹六、生成爆炸效果七、墙壁和可破坏障碍物的判断八、道具生成和效果九、玩家死亡十、简单的敌人AI十一、简单敌人AI十二、随机绘制地图十三、虚拟摇杆 最终效果待续源码完结 …...

简易版人脸识别qt opencv
1、配置文件.pro #------------------------------------------------- # # Project created by QtCreator 2023-09-05T19:00:36 # #-------------------------------------------------QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsTARGET 01_face TEMP…...
如何系统地学习 JavaScript?
前言 在学习JavaScript前需要先将Html和Css的相关知识点弄清楚,Js的很多操作是要结合Html和Css,下面我总结了Html、Css和Js的相关学习知识点供参考,希望对你有所帮助喔~ Html 文档学习 【HTML 】w3school教程 :https://www.w3school.com.…...
对称二叉树(Leetcode 101)
题目 101. 对称二叉树 思路 使用层序遍历,遍历当前层的节点时,如该节点的左(右)孩子为空,在list中添加null,否则加入左(右)孩子的值。每遍历完一层则对当前list进行判断,…...
动手学深度学习(2)-3.5 图像分类数据集
文章目录 引言正文图像分类数据集主要包介绍主要流程具体代码练习 总结 引言 这里主要是看一下如何加载数据集,并且生成批次训练的数据。最大的收获是,知道了如何在训练阶段提高模型训练的性能 增加batch_size增加num_worker数据预加载 正文 图像分类…...

C标准输入与标准输出——stdin,stdout
🔗 《C语言趣味教程》👈 猛戳订阅!!! —— 热门专栏《维生素C语言》的重制版 —— 💭 写在前面:这是一套 C 语言趣味教学专栏,目前正在火热连载中,欢迎猛戳订阅&#…...

如何将home目录空间扩充到根目录下
目录 1、查看查看磁盘使用情况2、扩容思路3、卸载并删除/home4、扩大/root逻辑卷5、扩大/文件系统6、重建/home逻辑卷7、创建/home文件系统8、将新建的文件系统挂载到/home目录下9、恢复/home并删除备份10、再次查看看磁盘存储 系统:centos7.9 1、查看查看磁盘使用…...

Ceph PG Peering数据修复
ceph数据修复 当PG完成了Peering过程后,处于Active状态的PG就可以对外提供服务了。如果该PG的各个副本上有不一致的对象,就需要进行修复。 Ceph的修复过程有两种:Recovery和Backfill。 Recovery是仅依据PG日志中的缺失记录来修复不一致的对…...

服务器上使用screen和linux的基本操作
临时换源 pip install torch1.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package pip install torch1.7.1 -i http://pypi.douban.com/simple some-package临时清华源和豆瓣源 配环境的一点小问题 我们尽量是去配置能满足代码的环境,而不要想着修改…...

Kafka3.0.0版本——文件存储机制
这里写木目录标题 一、Topic 数据的存储机制1.1、Topic 数据的存储机制的概述1.2、Topic 数据的存储机制的图解1.3、Topic 数据的存储机制的文件解释 二、Topic数据的存储位置示例 一、Topic 数据的存储机制 1.1、Topic 数据的存储机制的概述 Topic是逻辑上的概念,…...

Linux如何安装MySQL
Linux安装MySQL5.7 1、下载 官网下载地址:http://dev.mysql.com/downloads/mysql/ 2、复制下面几个文件 3、检查当前系统是否安装过mysql、检查当前mysql依赖环境、检查/tmp文件夹权限 1)检查当前系统是否安装过mysql,执行安装命令前&am…...
确保网络的安全技术介绍
防火墙技术 防火墙是隔离本地网络与外界网络的一道防御系统。通常用于内部局域网 与外部广域网之间,通过限制外部网络用户以非法手段来访问内部资源,来达到保 护内部网络的安全。根据安全规则,防火墙对任何外部网络访问内部网络的行为进 …...

机器学习练习
原文章添加链接描述...

算法通关村第十九关——最小路径和
LeetCode64. 给定一个包含非负整数的 m n 网格 grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 输入:grid[[1,3,1],[1,5,1],[4,2,1]] 输出:7 解释:因为路径1→3→1→1→1的总和最小。 public int minPath…...
Linux 访问进程地址空间函数 access_process_vm
文章目录 一、源码解析二、Linux内核 用途2.1 ptrace请求2.2 进程的命令行 参考资料 一、源码解析 /*** get_task_mm - acquire a reference to the tasks mm** Returns %NULL if the task has no mm. Checks PF_KTHREAD (meaning* this kernel workthread has transiently a…...

selenium 动态爬取页面使用教程以及使用案例
Selenium 介绍 概述 Selenium是一款功能强大的自动化Web浏览器交互工具。它可以模拟真实用户在网页上的操作,例如点击、滚动、输入等等。Selenium可以爬取其他库难以爬取的网站,特别是那些需要登录或使用JavaScript的网站。Selenium可以自动地从Web页面…...

小程序中如何查看会员的积分和变更记录
积分是会员卡的一个重要功能,可以用于激励会员消费和提升用户粘性。在小程序中,商家可以方便地查看会员卡的积分和变更记录,以便更好地了解会员的消费行为和积分变动情况。下面将介绍如何在小程序中查看会员卡的积分和变更记录。 1. 找到指…...
音视频 ffmpeg命令直播拉流推流
直播拉流 ffplay rtmp://server/live/streamName ffmpeg -i rtmp://server/live/streamName -c copy dump.flv对于不是rtmp的协议 -c copy要谨慎使用 直播推流 ffmpeg -re -i out.mp4 -c copy flvrtmp://server/live/streamName参数:-re,表示按时间戳读取文件 参…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验
Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
创客匠人:如何通过创始人IP打造实现知识变现与IP变现的长效增长?
在流量红利逐渐消退的当下,创始人IP的价值愈发凸显。它不仅能够帮助中小企业及个人创业者突破竞争壁垒,还能成为企业品牌影响力的核心资产。然而,市场上IP孵化机构鱼龙混杂,如何选择一家真正具备长期价值的合作伙伴?创…...