3.25读书笔记

news/2025/3/25 21:05:09/文章来源:https://www.cnblogs.com/K-wc2024/p/18792329

《人月神话》读书笔记

《人月神话》是软件工程领域的经典著作,作者 Frederick P.Brooks Jr.以他在 IBM 管理 OS/360 项目时的经历为蓝本,深入剖析了软件开发过程中的种种问题。这本书不仅让我对软件项目管理有了全新的认识,更让我对团队协作、项目规划以及技术发展的复杂性有了深刻的理解。

一、核心观点与启示

(一)人月的误区

书中最著名的论断之一是“人月并非衡量生产率的合理单位”。Brooks 博士指出,增加人手并不一定能缩短项目时间。软件开发中存在大量的沟通成本和协调工作,团队规模扩大时,成员之间的沟通复杂度呈指数级增长,反而会降低整体效率。这让我想起曾经参与的一个项目,当时为了赶进度,管理层决定增加人手。结果,新成员需要时间熟悉项目,老成员又要花大量时间培训和协调,项目进度非但没有加快,反而更加混乱。这充分说明了人月神话的不合理性,也让我明白在项目管理中,合理规划团队规模和人员分工的重要性。

(二)沟通的重要性

书中以巴比伦塔的故事为例,强调了沟通在项目中的关键作用。当人们失去了共同的语言,即使其他条件再优越,也无法完成复杂的任务。在软件开发中,团队成员之间的有效沟通能够确保目标一致、减少误解和重复劳动。非正式的交流沟通非常重要,比如面对面的讨论、电话沟通等,同时交流的内容最好形成文字记录,以便后续查阅和追溯。在实际工作中,我深刻体会到沟通的重要性。一个项目团队成员来自不同的专业背景,如果没有及时有效的沟通,很容易导致需求理解偏差、功能实现错误等问题。因此,我学会了定期组织团队会议,鼓励成员之间多交流,及时解决沟通中的问题。

(三)概念的完整性和一致性

Brooks 博士认为这是系统设计中最重要的考虑因素之一。一个软件系统应该有一个清晰、一致的概念框架,所有设计和开发工作都应该围绕这个框架展开。即使是大型团队,设计结果也应由一两个人来完成,以确保概念的完整性和一致性。例如,一个电商系统的概念框架可能包括用户管理、商品管理、订单处理等核心模块,所有功能的开发都应该围绕这些模块进行,避免出现概念上的冲突和混乱。这让我明白,在项目初期,一定要花时间梳理清楚项目的目标和核心概念,形成统一的设计框架。在后续的开发过程中,严格遵循这个框架,避免随意更改设计,这样才能保证软件的质量和可维护性。

二、实践建议与应用

(一)外科手术队伍模式

作者提出了一种高效的团队组织方式,即“外科手术队伍”。这种团队以一个主程序员为核心,配合其他专业人员,如副手、管理员、编辑、文秘、程序职员、工具维护人员、测试人员和语言专家等。主程序员负责决策和核心编程工作,其他人员则提供辅助支持。这种模式可以减少不必要的交流成本,提高团队的整体效率。不过,这种模式在现代企业中可能难以完全实现,但其核心思想仍然具有借鉴意义,即尽量减少决策和设计的参与人数,以保证概念的完整性和一致性。在实际工作中,我尝试在项目中引入类似的理念。对于一些关键模块的设计,尽量由少数核心成员完成,减少多人参与带来的沟通成本和设计冲突。同时,充分发挥其他成员的专业优势,为项目提供支持。实践证明,这种方式在一定程度上提高了项目的开发效率和质量。

(二)计划抛弃第一代产品

在软件开发过程中,作者建议要有计划地抛弃第一代产品。因为第一代产品往往是用来探索需求、验证技术可行性的,它可能存在很多问题和缺陷。通过开发第一代产品,团队可以积累经验,更好地理解用户需求和项目的技术难点,从而为第二代产品的开发打下坚实的基础。这种做法虽然看起来有些浪费,但从长远来看,可以提高软件的质量和开发效率。这让我想起一些互联网公司的产品开发模式,他们先推出一个基础版本的产品,通过用户反馈和市场检验,不断优化和改进产品。这种方式实际上就是计划抛弃第一代产品的体现。在自己的项目中,我也开始尝试这种分阶段开发的模式。先快速开发一个最小可行产品,上线后收集用户反馈,然后根据反馈进行迭代优化。通过这种方式,我们能够更快地响应市场变化,满足用户需求。

(三)文档的重要性

Brooks 博士强调了文档在软件开发中的重要性。良好的文档可以帮助团队成员更好地理解项目的目标、需求、设计和技术细节,减少沟通成本和误解。文档应该包括需求文档、设计文档、代码文档、测试文档等,而且文档应该保持更新,与项目的实际进展保持一致。在以往的项目中,我常常忽视文档的作用,认为只要代码能运行就行。但随着项目规模的增大和团队成员的增多,我发现没有完善的文档,新成员很难快速融入项目,项目维护也变得困难重重。因此,我开始重视文档的编写和管理。在项目初期,详细编写需求文档和设计文档,让团队成员对项目有清晰的认识。在开发过程中,及时更新代码文档,记录关键代码的逻辑和功能。在项目结束后,整理测试文档和用户手册,方便后续的维护和使用。通过这些措施,项目的整体质量和团队协作效率都有了显著提升。

三、对现代软件开发的启示

尽管《人月神话》是在几十年前出版的,但书中所描述的许多问题和现象在当今的软件开发中依然存在。例如,我们仍然难以准确评估工作量、进行合理的进度安排,项目落后时也常常只能被动地延长工作时间或增加人力,大量的 BUG 反复出现,开发的软件不能完全满足用户需求等。这说明软件工程的根本问题并没有得到很好的解决,我们需要不断地学习和借鉴前人的经验,同时结合现代技术的发展,探索更加有效的软件开发方法和管理策略。

书中的一些观点和建议在现代敏捷开发中也得到了体现。例如,敏捷开发强调小团队、快速迭代、持续沟通和文档的简洁性,这与《人月神话》中提倡的外科手术队伍模式和计划抛弃第一代产品的思想不谋而合。敏捷开发中的迭代开发可以看作是一种计划抛弃第一代产品的实践,通过快速迭代,团队可以不断改进产品,逐步满足用户需求。同时,敏捷开发中的每日站会、迭代回顾等机制也体现了沟通的重要性,通过频繁的沟通,团队可以及时发现和解决问题,减少误解和重复劳动。

四、总结

《人月神话》是一本值得每一位软件从业人员反复阅读的经典著作。它不仅让我们对软件开发中的管理问题有了更深刻的认识,还为我们提供了一系列的实践建议和方法。虽然时代在发展,技术在进步,但书中所揭示的软件开发的本质和规律依然没有改变。我们应该从书中汲取智慧,结合现代技术的发展,不断探索和改进软件开发的方法和管理策略,提高软件开发的效率和质量,更好地满足用户的需求。在今后的工作中,我将继续深入学习书中的理念,并将其应用到实际项目中,努力成为一名更优秀的软件工程师。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905652.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue+leaflet示例:地图截图批量导出(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

智能Agent如何改造传统工作流:从搜索到全能助手

智能Agent如何改造传统工作流:从搜索到全能助手 引言:当AI遇上工作流 还记得我们以前搜索信息的方式吗?输入关键词,浏览大量结果,筛选有用内容,再整合成我们需要的答案。这个过程不仅耗时,还常常让人感到疲惫。 如今,智能Agent的出现正在彻底改变这一切。想象一下,你只…

vue+leaflet示例:拓展wms以及wmts地图范围裁剪(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:快速渲染聚合矢量瓦片(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:热力图(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:地图全图以及框选截图导出功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:聚合图功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:结合geoserver利用WFS服务实现图层新增功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

vue+leaflet示例:结合geoserver利用WFS服务实现图层编辑功能(附源码下载)

demo源码运行环境以及配置运行环境:依赖Node安装环境,demo本地Node版本:14.19.1。 运行工具:vscode或者其他工具。 配置方式:下载demo源码,vscode打开,然后顺序执行以下命令: (1)下载demo环境依赖包命令:npm i (2)启动demo命令:npm run dev (3)打包demo命令: n…

IDEA使用Docker插件打包+推送+部署

前提条件:在服务器或者虚拟机中已经安装好了Docker1、确认是否安装插件2、配置SSH链接信息3、构建一个简单的SpringBootDemo工程4、编写一点测试代码 @RestController public class HelloController {@GetMapping("/hello")public String hello(){return "<…

蓝桥真题

有奖问答 这种选择导致分支可以使用递归 我个人觉得洛谷的答案错了,如果按能得到洛谷答案的代码,改成求30题对30道,最多对30道的话,得到的是0,应该把限制条件改为能计算答对10道题的方案,因为最多十道题不是不能达到10道题DFS #include <bits/stdc++.h> using name…

day:29 python接口测试——断言、封装、关联接口

一.request断言 1、if断言 代码: if wb["msg"]=="登录成功!":print("ok") else:print("no")案例:import requests s=requests.Session() url1="http://49.233.201.254:8080/cms/manage/loginJump.do" data1={userAccou…