第96期:《软件设计的哲学(第 2 版)》

Part.1 AI不是银弹

五十年前,软件工程大神 FrederickP.Brooks 在《人月神话》一书中提出一个观点:没有一种能够解决软件工程中所有问题的技术或方法。即没有“银弹”能杀死软件本身的复杂性这头可怕的“人狼”。
五十年后,AI 技术的突破又激起了各界的想象与期待,AI 会是那枚银弹吗?
在某乎上有一篇很有意思的问答,问题是“为什么我觉得 AI 写代码纯属添乱?” 有几个高赞的回答都不约而同地提到,AIGC 工具确实可以大大提高日常的开发效率,但并不能解决软件设计中的核心问题。
因为随着时间的推移,软件需求的变更、模块间的调用关系、软件体系架构都会使得软件系统的复杂性不断累积。
如果开发人员自身都无法掌控软件的复杂性,那么他也无法向 AI 准确描述问题,所以 AI 不是银弹。
要从根本上解决软件系统的复杂性问题,程序员应当掌握软件设计的底层逻辑。
《软件设计的哲学(第 2 版)》这本经典之作,就揭示了一系列在软件设计时应当遵循的原则,这些原则在 AI 时代仍然是适用的,也是助力程序员获得职场成功的基本“哲学”。

我们先来探讨一个问题,为什么技术工具发展得如此强大了,软件开发还是会失败?

Part.2 软件开发为什么会失败?

在软件工程的早期阶段,瀑布模型盛极一时,它的主要思想是将软件开发过程分成若干独立的阶段,例如需求分析、设计、编码、测试等。上一阶段工作全部完成,就进入下一阶段。

这个过程看起来和建筑工程类似,建筑图,就可以预估材料、人力、施工进度等,然后在统一的管理下逐步推进实施。

但遗憾的是,软件开发的历史上充斥着失败的案例,其中不乏拥有巨额投入的明星团队,这是为什么?

一个显著的原因,是瀑布模型难以适应软件需求的灵活变更。书中有一个很精彩的譬喻,就是建筑架构师不会轻易给一个盖好的高楼挖个地下室,但是软件架构师却经常干这样的事。

d2b5ca33bd20241128104515

所以业界有识之士在反思后,基于实践经验提出了敏捷软件开发理念,这是一种增量式方法,通过对功能的不断迭代,使得软件逐渐成型。
软件的设计、编码、测试、发布贯穿整个生命周期。这意味着开发者要时刻思考软件的设计,并降低软件的复杂性。
《软件设计的哲学(第 2 版)》就是讲述如何在软件的整个生命周期中,利用复杂性来指导软件设计。
本书有两大目标

第一,描述软件复杂性的本质;

第二,介绍在软件开发过程中可以将复杂性最小化的技术。

本书作者 John Ousterhout 是斯坦福大学计算机科学系的教授,为了探索软件设计的教学方式,他向学生提出一套软件设计原则,然后学生们通过一系列项目来吸收和实践这些原则。
在课程中,学生从零开始构建一个大型软件,在开发过程中会进行大量的代码评审并找出设计问题,学生则会遵循设计原则去修改他们的项目以解决问题。Ousterhout 教授将多次授课经验复盘整理后,提炼为这本《软件设计的哲学(第 2 版)》。
Ousterhout 教授不仅在学界硕果累累,还曾是一名业界老兵他在耶鲁大学获得了物理学学士学位,后在卡内基梅隆大学获得了计算机科学博士学位,他是 Tcl 脚本语言的创建者,并且以在分布式操作系统和存储系统中的工作而闻名,曾创办了 Scriptics 和 Electric Cloud 这两家公司。
Ousterhout 教授还是美国国家工程院院士,各种专业大奖更是拿到手软,包括 ACM 软件系统奖、ACM Grace Murray Hopper 奖、美国国家科学基金会总统年轻研究者奖和 UC Berkeley 杰出教学奖。
我们现在就来跟随 Ousterhout 大神的脚步,吃透软件设计的哲学。

社区赠书

最后,本次福利将送出:《软件设计的哲学(第 2 版)》 * 5 

截止时间还需要支付积分,就还有赠书额度,先到先得

领取方式

  1. 支付积分即可兑换,复制 “ 积分支付订单号 ”
  2. 在本站中私信我这些内容:积分支付订单号、活动书名、快递信息(姓名、电话、地址)
THE END
喜欢就支持一下吧
点赞4 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容