现代软件工程

[美] 戴维·法利(David Farley)

出版时间

2023-06-20

ISBN

9787115599582

评分

★★★★★
书籍介绍

*内容简介

本书探讨了软件工程的真正含义,汇集了一些重要的软件开发基本原则,将它们紧密结合成一个一致的模型,旨在帮助读者有效、快速地构建软件。全书共4个部分:第1部分探讨软件工程的真正含义,以及如何将工程的原则和原理应用到软件开发中;第2部分讲述运用科学思想优化软件开发过程的方法,包括迭代式、增量式工作,获得并利用快速、高质量的反馈,采用实验性和经验主义的科学方法;第3部分介绍管理软件复杂性的方法,深入探讨模块化、内聚力、关注点分离、信息隐藏和抽象、管理耦合等原则;第4部分介绍支持软件工程的工具,以及一些贯穿本书的软件开发理念,包括可测试性、可部署性、速度、控制变量、持续交付等。

*编辑推荐

(1)持续交付先驱戴维·法利全新力作。曾与耶斯·亨布尔(JezHumble)共同撰写了获Jolt大奖的图书《持续交付:发布可靠软件的系统方法》。

(2)改进复杂软件系统的工程实践指南。纠正人们对软件工程的传统认知误区,阐述生产力和创造力在软件工程中缺一不可的辩证关系;跳出特定的工具或技术,抽象、提炼、连贯为一套具有普适性、基础性的现代软件工程思想和范式;以实用有效的方法为重点,讲解科学原理、工程技术如何应用于软件开发。

(3)广泛适用于各类软件开发团队。书中提及的“道法术器”,对于初创公司或大型企业都适用,促进软件组织更加可靠、高效、高质量地构建软件,交付业务价值,激发创新活力。

(4)国家卫星气象中心风云四号气象卫星地面系统副总设计师 杨磊、中国信息通信研究院云计算与大数据研究所副总工程师 陈屹力等业界学者、实践者亲笔推荐。

*专业书评

我们处在信息化时代中,软件技术正在影响着我们现在的生活,对未来也会产生深远的影响,从人工智能、商业航天到我们的手机、计算机、电动汽车、智能家电等。信息化时代的开启,软件工程在其中起着不可估量的作用。软件工程又是一门理论性和实践性都很强的学科,它采用工程化的概念、理论、技术和方法来指导开发与维护计算机软件。《现代软件工程:如何高效构建软件》通过探讨软件工程的真正含义、利用科学思想优化开发过程、管理软件复杂性,汇集了软件开发中的一些基本原则,能够帮助读者快速、有效地构建现代软件。这本书可作为高等院校、继续教育院校“软件工程”课程的教材和教学参考书,也可供有一定实践经验的软件开发人员和管理人员参考。

——杨磊,国家卫星气象中心风云四号气象卫星地面系统副总设计师

近年来,随着云计算、人工智能、大数据、区块链等新一代信息技术的发展,传统软件形态发生变化,新型智能化应用和产品呈现爆发式增长。软件架构向分布式、松耦合和工程化等方向演进,快速变化的业务需求亟需高效的软件构建来支撑。这本书从纠正人们对软件工程的传统认知误区出发,阐述生产力和创造力在软件工程中缺一不可的辩证关系,并跳出特定的工具或技术,抽象、提炼、连贯为一套具有普适性、基础性的现代软件工程思想和范式;进而以实用有效的方法为重点,讲解科学原理、工程技术如何应用于软件开发。书中提及的现代软件工程“道法术器”,广泛适用于各类软件开发团队,无论是初创公司还是大型企业,对于改进复杂软件系统的工程实践十分有帮助,促进软件组织更加可靠、高效、高质量地构建软件,交付业务价值,激发创新活力。

——陈屹力,中国信息通信研究院云计算与大数据研究所副总工程师

经历了上百个软件项目后,在“如何高效地构建软件、保质保量地交付软件产品”方面我有了一些体会,但却感觉知识、经验零散,不成体系。于是我迫切地想找到一套工具,把这些零散的知识、经验链接起来,形成一整套理论体系。恰好此时我遇见了这本书,如同犯困的时候有人递枕头,读完仿佛睡了一个好觉,有神清气爽、酣畅淋漓之感。

——王旭东,中银保险有限公司信息科技部副总经理

这本书从软件设计的角度阐明了什么是软件工程,贯穿了实用的设计理念和开发原则,帮我们梳理了进化式地扩展我们的系统、即便在不清楚目标的前提下也可以取得进展的方法,同时整理了随着系统变得越来越复杂,管理系统复杂性的各种设计和开发思想。我们在项目中遇到的实际问题,都可以在这本书中找到借鉴之处。这本书既适合初学者学习,又适合有经验的软件开发人员和架构师作为参考用书,甚至对于管理者在组织架构方面都提出了很好的建议。

——黄海,北京邮电大学信息与通信工程学院多媒体技术教研中心主任、硕士生导师

读了这本书,我明白了为什么在我和戴维一起工作的那段时间里,我们作为“软件工程师”是如此成功和满意。我希望你通过阅读这本书,可以从戴维的经验和建议中受益,而不必为你的团队雇用一位戴维·法利。

——特丽莎·吉(Trisha Gee),开发技术推广工程师和Java 拥护者

《现代软件工程:如何高效构建软件》这本书非常好,它描述了当今有经验的从业者们实际构建软件的方式。法利介绍的技术不是死板的、规定性的或线性的,但是它们严格遵循软件构建所需要的方式:经验主义的、迭代的、反馈驱动的、经济的,并且专注于可运行的代码。

——格伦·范德堡(Glenn Vanderburg),Nubank 公司的工程总监

有很多书会告诉你如何效仿一个特定的软件工程实践,但这本书不一样。戴维在书中所做的是,阐述软件工程的本质,以及它与简单工艺的区别。他解释了为什么为了掌握软件工程,你必须成为学习和管理复杂性的专家,如何用已经存在的实践支持这一结论,以及如何判断关于软件工程价值的其他观点。这本书适用于任何认真考虑把软件开发当作一门真正的工程学科的人,无论你是刚刚起步还是已经构建软件几十年了。

——戴夫·豪恩斯洛(Dave Hounslow),软件工程师

这些都是重要的话题,有一个纲要把它们汇集成一个整体太好了。

——迈克尔·尼加德(Michael Nygard),《发布!软件的设计与部署》一书的作者,专业程序员和软件架构师

我一直在看戴维·法利这本书的评阅样书,这本书正是我们需要的。任何有志成为软件工程师或想要掌握这项工艺的人都应该阅读这本书。这本书给了我们关于专业工程的务实、实用的建议。它应该成为大学和训练营的必读书。

——布赖恩·芬斯特(Bryan Finster),杰出的工程师和美国空军一号平台的价值流架构师

【作者】戴维·法利(David Farley)是持续交付的先驱、思想领袖,也是持续交付、DevOps、测试驱动开发和软件开发领域的专家。

从现代计算的早期开始,戴维曾担任过程序员、软件工程师、系统架构师和成功团队的领导者,他掌握了计算机和软件开发的基本原理,并形成了开创性的方法,改变了开发人员和团队的工作方式。他挑战了传统的思维方式,带领团队开发了世界级的软件。

戴维是获Jolt大奖的《持续交付:发布可靠软件的系统方法》一书的作者之一,是一位受欢迎的会议演讲者,并在YouTube上运营着广受欢迎的“持续交付”频道,主题是软件工程。他建立了世界上速度最快的金融交易所之一,是行为驱动开发的先驱,是《反应式宣言》的作者之一,并凭借LMAX Disruptor获得了杜克开源软件奖。

戴维热衷于通过咨询、YouTube 频道和培训课程分享他的专业知识,帮助世界...

(展开全部)

AI导读
核心看点
  • 本书由持续交付先驱戴维·法利撰写,旨在纠正对软件工程的传统认知误区。作者重新定义软件工程,强调其并非简单的代码编写或工艺,而是基于科学原理、理性思考和严谨方法的工程实践。书中深入探讨了如何将工程学的核心原则,如管理复杂性、确保可重复性和准确性,应用到软件开发中,以构建可靠、高效的软件系统。
  • 全书系统梳理了优化学习与管理复杂性的两大核心支柱。在优化学习方面,倡导迭代式工作、增量主义、快速反馈及实验性方法,反对僵化的长期计划;在管理复杂性方面,详细讲解模块化、内聚力、关注点分离、信息隐藏及降低耦合等原则。这些内容旨在帮助读者建立正确的工程思维,提升软件系统的可测试性、可部署性及整体质量。
  • 本书强调实用主义与科学方法在软件开发中的结合,反对盲目追求“技术上闪亮的概念”或过度设计。作者指出,软件工程的目标是在经济约束范围内寻找最简成功之路,而非炫技。书中内容虽偏重理论框架与思维模式,缺乏具体代码示例,但对于理解软件工程本质、提升团队研发效能及构建高质量软件架构具有极高的指导价值,适合希望从底层逻辑提升工程能力的读者。
适合谁读
  • 适合具备一定软件开发经验,但希望深入理解软件工程本质、提升工程化思维的程序员、架构师及技术管理者。本书不适合寻求具体编程技巧或代码实现的初学者,也不适合期望获得大量实战案例的读者。它面向那些希望跳出工具与技术细节,从科学原理和工程伦理层面反思和改进自身开发实践的资深技术人员,帮助他们建立更严谨、合规且高效的开发范式。
  • 适合对敏捷开发、持续交付、DevOps等现代软件工程理念感兴趣,但对其背后理论基础感到困惑或希望系统化梳理的读者。书中内容有助于纠正对“敏捷”或“快速交付”的片面理解,强调反馈、迭代与科学方法的重要性。对于希望提升团队代码质量、降低系统复杂性、改善协作流程的技术负责人,本书提供了重要的理论支撑和原则性指导,有助于推动组织内的工程文化变革。
  • 适合计算机专业学生或刚入行的开发者,用于建立正确的职业价值观和工程伦理观。虽然书中部分概念较为抽象,阅读门槛较高,但有助于读者从一开始就树立“工程而非工艺”的正确认知,避免陷入盲目编码或忽视系统设计的误区。对于希望从宏观视角理解软件工程历史、现状及未来发展趋势的读者,本书提供了独特的视角,有助于培养严谨的逻辑思维和问题解决能力。
读前提醒
  • 本书翻译质量受到部分读者诟病,存在语句生硬、不符合中文习惯的问题,阅读时可能会感到吃力。建议读者保持耐心,必要时可对照英文原版理解关键概念。此外,书中内容偏向理论阐述和思维引导,缺乏具体的代码示例和实战场景,阅读时不应期望获得即插即用的技术方案,而应专注于理解其背后的工程原理和科学方法论,将其内化为自己的思维模式。
  • 书中部分观点可能与读者既往经验或主流实践存在冲突,如作者对某些流行技术或方法的批判性态度。读者应保持批判性思维,结合自身的实际工作场景进行甄别,不要盲目照搬。作者强调实用主义和科学方法,反对形式主义,读者应关注其核心原则而非具体表述。若发现某些内容难以理解或认同,可跳过或标记,后续在实践中验证其有效性,避免陷入无谓的争论。
  • 本书信息密度较低,存在大量重复和车轱辘话,阅读体验不佳。建议读者采用跳读或略读的方式,快速浏览目录和章节标题,重点关注核心原则和关键结论,忽略冗余的论证过程。对于感兴趣的章节,可深入阅读;对于不感兴趣或难以理解的部分,可直接跳过。同时,建议结合其他实战类书籍或文档,将书中的理论原则与具体实践相结合,以获得更好的学习效果。
读者共识
  • 读者普遍认为本书在理论层面具有较高的价值,作者对软件工程的重新定义和对科学方法的强调令人耳目一新。尽管翻译质量差、内容空洞、缺乏实例等批评声音较多,但仍有不少读者认可其核心观点,认为其有助于提升工程思维和代码质量。部分读者指出,书中关于迭代、反馈、复杂性管理等原则是正确的,但表述方式过于学术化和啰嗦,导致阅读体验下降,建议读者取其精华,去其糟粕。
  • 多数读者反映本书阅读体验不佳,主要问题在于翻译生硬、内容重复、缺乏实际案例。部分读者认为书中观点老生常谈,甚至存在错误,对实际工作帮助有限。然而,也有部分读者认为,尽管存在上述问题,但本书在纠正错误认知、提升工程伦理方面仍有积极作用。读者建议,若对软件工程理论感兴趣,可尝试阅读,但需做好心理准备,并建议结合其他更实用的书籍一起学习,以获得更全面、平衡的知识体系。
  • 读者共识认为,本书不适合初学者或寻求具体技术解决方案的读者,而更适合有一定经验、希望深入理解软件工程本质的资深技术人员。尽管存在争议,但部分读者仍认为其核心观点值得借鉴,如强调反馈、迭代、科学方法的重要性。读者建议,在阅读时应保持批判性思维,不要盲目接受作者的所有观点,而应结合自身实践进行判断。同时,读者呼吁出版社提高翻译质量,避免误导读者,影响书籍的传播和价值。

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "我在大学里学的是计算机科学,当然,我完成了几门名为“软件工程”或者名字与之类似的课程。 在我开始攻读学士学位时,我对编程其实并不陌生,并且已经为我的高中的职业图书馆实现了一个完全有效的目录管理系统。我记得自己曾经对“软件工程”极度困惑,它的存在似乎就是为了妨碍实际的代码编写和应用程序交付。 21 世纪初,当我毕业的时候,我去了一家大型汽车公司的IT部门工作。正如你所料,他们热衷于“软件工程”。就是在这里,我第一次看到(但肯定不是最后一次!)甘特图(Gantt chart),也是在这里,我体验到了瀑布式(waterfall)开发。也就是说,我看到软件开发团队在需求收集和设计阶段花费了大量的时间和"
  • "不过具体来玩· 倾向认为政变现有的代码是一件好事,定 野多组织要么害怕更改他们的代码,要么对其不有某种背离现实的敬畏之心。我为怡倍相反:如果你不能或不愿更改代码,那么代码实际上是死的。再次用弗雷德痛 鲁克斯的话: 一旦一个设计被冻结,它就过时了。① 家的丽友丹·诺思说过一个有趣的想法。丹有一种用巧妙的措辞表达观点的才华,他把“团队的软件半衰期”当作质量的度量标准。 我和丹都没有数据来支持这个观点,但这是一个有趣的观点。他说,一个团队生产的软件的质量是其软件半衰期的因变量。软件半衰期是指,队重写一半他们负责骏件所花费的时间。 在丹的模型中,优秀的团队可能会在几个月内重写一半他们负责的软件,低效能"
  • "我们是技术人员,因此,我们有一些共同的倾向。我们应该意识到并防范的这些向之一是,追求“技术上闪亮的概念”。我和任何人一样,对技天概念感兴趣,我也为嘔呼的吸力之一,也是我门重视的学之成为工程丽,我们必须接受一定程度的实用主义,甚至是怀疑主义:在本书的-开稳我对工程学的定义里,有一部分包括“在经济约束范围内”我们应该总是考虑最简鲜成功之路,而不是最酷的,也不是我们可以添加到我们履历或个人简历中的最先造装术路 无论如何,要跟上新思想的发展。学握我们工作中的新技术或方法,但始终要解你试图解决的问题,如实地评估它们的使用情况。如果你正在应用这项技术或思想,以了解它是否有用,就要认识到这一事实,并以试用、"
作者简介
【作者】戴维·法利(David Farley)是持续交付的先驱、思想领袖,也是持续交付、DevOps、测试驱动开发和软件开发领域的专家。 从现代计算的早期开始,戴维曾担任过程序员、软件工程师、系统架构师和成功团队的领导者,他掌握了计算机和软件开发的基本原理,并形成了开创性的方法,改变了开发人员和团队的工作方式。他挑战了传统的思维方式,带领团队开发了世界级的软件。 戴维是获Jolt大奖的《持续交付:发布可靠软件的系统方法》一书的作者之一,是一位受欢迎的会议演讲者,并在YouTube上运营着广受欢迎的“持续交付”频道,主题是软件工程。他建立了世界上速度最快的金融交易所之一,是行为驱动开发的先驱,是《反应式宣言》的作者之一,并凭借LMAX Disruptor获得了杜克开源软件奖。 戴维热衷于通过咨询、YouTube 频道和培训课程分享他的专业知识,帮助世界各地的开发团队改进软件的设计,提高软件的质量和可靠性。 【译者】赵睿,计算机硕士,拥有20 年IT从业经验;曾先后就职于LG CNS China(北京乐金系统集成有限公司)和中国惠普有限公司,担任过软件工程师、架构师、项目经理等职务,参与或主导过物流系统、BI系统、云计算操作平台等多个大中型项目的软件开发、架构设计、团队建设和项目管理等工作;在单体架构、微服务架构、设计模式、敏捷编程、软件工程等方面有多年实践经验。译有《EJB 3.0 专家编程》和《Java EE 和.NET互操作性》。 【译者】茹炳晟,腾讯Tech Lead,腾讯研究院特约研究员,中国计算机学会(CCF)技术前线委员会(TF)研发效能主席,“研发效能宣言”发起人和主要起草人,团体标准《软件研发效能度量规范》核心编写专家,中国商业联合会互联网应用工作委员会智库专家,腾讯云、阿里云、华为云最具价值专家;国内多个技术峰会的联席主席、出品人和主会场演讲嘉宾;公众号“茹炳晟聊软件研发”主理人;著有《测试工程师全栈技术进阶与实践》《软件研发效能提升之美》《高效自动化测试平台: 设计与开发实战》《软件研发效能提升实践》和《软件研发效能权威指南》,译有《持续架构实践》。
目录
序 ——特丽莎·吉(Trisha Gee),开发技术推广工程师和Java 拥护者
第1部分 什么是软件工程?
第1章 简单介绍 3
1.1 工程——科学的实际应用 3
1.2 软件工程的定义 4

显示全部
用户评论
大师名作!!作者深入浅出把软件工程的一些关键理念娓娓道来,没有华丽辞藻和复杂概念,推荐!
非常适合软件相关专业的同学阅读,跟随大师的节奏
翻译很别扭
透过这本书可以进一步审视软件工程的的重要性,能够更好提升软件写作的效率!
还行吧,主要还是要有代码项目经验才行,实操性
特别学术性的内容,阅读体验也不好,大部分是一些工程思维和敏捷开发内容,涉及到实践和经验的东西比较少,大部分是偏老生常谈的理论知识了,告诉你什么是xxx?xxx有多重要,重要在哪些方面?再扯上一些有的没的无聊例子凑字数,提一下其他畅销书的xxx观点,大概就是这本书的风格了,对我来说没啥帮助,基于礼貌多给一星
在软件工程领域的一众书籍中,这本绝对属于头部了。如果你想深入了解软件工程,但只有阅读一本书记得时间,可以拿起这本书。
有这样一本书把如何开发软件的工程化思想系统地梳理出来真是太好了。翻译也很好。
阅读体验良好,作者从架构讲解到细节。学习到了很多新概念。
收藏