重读《人月神话》(1)

前言

《人月神话》(The Mythical Man-Month)是由Frederick P. Brooks 撰写的一本软件工程学经典巨著。这是一本成书于 1975 年的关于软件工程的书。半个世纪以来,《人月神话》经久不衰,Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。

图片

图片

《人月神话》(The Mythical Man-Month)这本书主要基于布鲁克斯在IBM担任系统架构师期间的经验,特别是他在领导开发OS/360操作系统时所遭遇的问题及其反思。

书名中的“人月”(Man-month)是指衡量工作量的一个单位,即一个人一个月内完成的工作量。而“神话”则指的是一个普遍存在的错误观念,即增加人手就能相应加快软件项目的进度。实际上,在某些情况下,这样做反而会因为沟通成本增加而减缓进度。


在快节奏变化的时代背景下,《人月神话》这部经典之作,仍然闪耀着智慧之光。无论是对于刚踏入软件行业的新手,还是经验丰富的项目经理来说,《人月神话》都是一本值得反复咀嚼的好书。今天,让我们再次翻开这本书,结合自身在实际项目中的经历,重新审视那些曾经让我们眼前一亮的观点,看看它们是如何在现实世界中落地生根的。

时间未能改变的:软件工程中的那些顽疾

即便计算机领域已飞速发展了几十年,硬件越来越快、网络愈发迅捷、计算与存储资源日益丰富,再加上无数优秀的重用库、完善的框架、便捷的语言以及先进的思想等,这些都远超我们的想象。这一切似乎都在暗示,软件工程领域的种种难题应当早已迎刃而解,至少也应该换一批新问题来挑战我们。然而,现实却并非如此美好:

1. 工作量评估依然困难重重

尽管我们有了各种高级工具和技术手段,但在预测项目所需时间和资源方面,依然存在巨大不确定性。无论是敏捷开发还是瀑布模型,准确预估依然是个挑战。

2. 合理规划进度难上加难

制定出既能满足业务需求又能兼顾团队实际能力的时间表仍然是一项艰巨任务。如何在有限时间内完成尽可能多的功能,并保证质量,依然是每个项目经理头疼的问题。

3. 项目延期时,只能依靠加班或增员

当面临进度落后时,除了延长工作时间或增加人员投入外,似乎并没有更好的解决办法。这种方法不仅治标不治本,还可能进一步加剧团队疲劳及沟通成本。

4. BUG层出不穷

尽管测试技术和自动化工具不断进步,但软件缺陷依旧频繁出现。从设计到编码再到测试,任何一个环节出现问题都可能导致最终产品存在隐患。

5. 用户满意度低下

很多时候,辛辛苦苦开发出来的软件并不能真正打动用户的心。有时他们只用了其中一小部分功能,而对于其他大部分功能则置之不理。这反映出我们在理解用户需求方面还有很长的路要走。

6. 项目失败率居高不下

尽管有着丰富的经验和教训积累,但依然有大量软件项目最终以失败告终。无论是因为预算超支、需求变化还是技术难题,都说明了软件开发并非易事。

焦油坑:软件项目的无底深渊

为了更好地理解《人月神话》中所提到的“焦油坑”概念,我们可以借鉴一个自然界的例子——美国加州的拉布雷亚焦油坑。这是一个非常著名的天然冰河时代古生物化石库,自古以来就是一个巨大的生物陷阱。无数史前动物因陷入其中而无法脱身,最终丧生于此,包括近700种不同的物种,如智人、猛犸象、长毛犀、剑齿虎、巨型树懒以及恐狼等。

图片

图片

在软件工程领域,“焦油坑”用来比喻那些看似简单但实际上异常复杂且容易使人深陷其中难以自拔的项目。这类项目往往具有以下几个特征:

  • 表面简单:起初看起来似乎是小问题或易于解决的任务。

  • 隐藏风险:随着工作的深入,问题变得越来越复杂,解决起来也越来越困难。

  • 资源消耗:它会像真正的焦油坑一样,不断地吸引并吞噬更多的人力、物力和财力。

  • 难以脱身:一旦介入,便很难从中抽身而出,即使明知其风险也难以及时止损。

正如拉布雷亚焦油坑吞噬了无数史前生命一般,“焦油坑”类的软件项目也会让开发团队深陷其中,耗费大量宝贵资源却难以取得预期成果。因此,在软件开发过程中识别并避免“焦油坑”,对于项目成功至关重要。

《人月神话》中提到的许多观点至今仍具有深刻意义,提醒着我们在追求技术创新的同时,不应忽视软件工程本身固有的挑战。只有正视这些问题,并不断探索有效解决方案,才能逐步推动行业向前发展。

重读《人月神话》系列文章,让我们从不一样的视角重新探索软件工程。


☆☆☆☆☆☆☆☆☆☆☆☆☆公☆众☆号〖和码说〗☆☆☆☆☆☆☆☆☆☆☆☆☆☆

图片

如果觉得不错,关注,点赞,转发安排起来,公众号标记五角星,可以第一时间收到更新通知哟!

在Linux中,"重定向"(Redirection)是一种强大的I/O操作,它允许我们将标准输入、输出或错误流重新定向到文件、设备、管道或其他程序的输入。这在很多场景下非常有用,例如输出结果到文件、捕获程序的输出、修改输入数据等。这里简要介绍几个常见的重定向操作: 1. 输出重定向 (`>` 或 `>>`): - `>`:覆盖写入,如果文件已存在则先删除再写入。 - `>>`:追加写入,如果文件已存在则在末尾添加内容。 2. 输入重定向 (`<`): 用于将文件内容作为程序的输入,如 `command < inputfile`。 3. 标准错误重定向 (`2>` 或 `2>>`): - `2>`:类似输出重定向,将错误信息写入指定文件。 - `2>>`:追加错误信息到文件。 4. 输入输出重定向 (`<>` 或 `|`): - `<>`:通常用于替代环境变量 `$0`,如 `grep keyword <> file`。 - `|`:管道操作符,允许将一个命令的输出作为另一个命令的输入。 5. 输入输出重定向结合标准错误 (`>>&`): - `>>&`:将输出和错误同时重定向到同一个文件。 6. 临时文件重定向 (`<>` 结合 `mktemp`): 使用 `mktemp` 创建一个临时文件,并将其用于输入输出,如 `command <> $(mktemp)`。 7. 双向重定向 (`tee`): `command | tee outputfile`,将命令输出复制到屏幕和文件中。 了解这些基本的重定向操作后,你可以在编写脚本或日常命令行操作中灵活运用,以满足特定需求。如果你有更具体的问题或想深入了解某个方面,可以继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值