获得Jolt 大奖的《持续交付》作者David Farley又一新作《现代软件工程》

news2024/12/28 18:19:45

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

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

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

戴维热衷于通过咨询、 YouTube 频道和培训课程分享他的专业知识,帮助世界各地 的开发团队改进软件的设计,提高软件的质量和可靠性。

戴维 ·法利 (David Farley)新书:现代软件工程:如何高效构建软件

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


本书适合对软件工程和软件开发团队管理感兴趣的人士阅读,也可作为软件工程相 关课程的参考教材。

这本书包含开发代码的混乱现实,或者应该说是软件工程的混乱现实:没有单一的 正确答案。没有什么东西是一成不变的。在某个时间点上正确的事情,有时甚至在很短 的时间之后,就会变得非常错误。

这本书的前半部分为我们提供了切实可行的解决方案,我们不仅可以在这样的混乱现实中存活下来,而且可以在其中得到发展。 后半部分讨论了可能被一些人认为抽象或者学术性的话题,并展示了如何应用它们来设计更好的代码(例如,更健壮、更可维护 或具有其他“更好的”特性的代码)。

在这里, 设计绝对不是指一页又一页地设计文档或 UML (统一建模语言) 图, 而是 简单得就像“在编写代码之前或编写过程中思考一下代码”一样。 (当我和戴维结对编程 时,我注意到一件事,他花在实际输入代码上的时间非常少。事实证明,在写之前先思 考一下我们要写的东西,可以帮我们节省很多时间和精力。)

戴维不会回避或者试图解释共同使用这些实践时出现的任何矛盾, 或可能由单个实践引 起的潜在混乱。相反, 因为他花时间讨论了权衡和常见的混淆领域, 我发现自己第一次明白, 正是这些平衡和冲突创造了“更好的”系统。 这关乎于理解, 这些平衡和冲突都可以作为参 考,了解它们的成本和收益,把它们当作“镜头”,时不时“调调焦”,来反复检视代码/ 设计/架构,而绝不是简单地以二元的、非黑即白的、或对或错的逻辑来理解它们。

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


现代软件工程:如何高效构建软件 前言(摘选)

本书将工程重新引入软件工程。在书中,我将描述软件开发的一种实用方法,它使 用自觉的理性、严谨的思考方式来解决问题。 这些理念是过去几十年我们把从软件开发 中习得的心法持续应用的结果。

在本书中,我定义了一个模型,用来说明我们是如何组织自己来创建优秀的软件, 以及如何高效地做到的,而无论规模大小,不管是真正复杂的系统还是简单的系统。

总有一些人做了出色的工作。我们受益于创新先驱,他们向我们展示了什么是可能 的。然而,近年来,我们的行业已经学会了如何更好地解释什么是真正有效的。我们现 在更好地理解了哪些想法更通用,可以被更广泛地应用,我们有数据支持这一认知。

我们可以更可靠、更好、更快地构建软件,我们有数据证明这一点。我们可以解决 世界级难题,我们也有许多项目和公司的成功经验来说明这一点。

这种方法汇集了一系列重要的基本思想, 而且建立在之前工作的基础上。在某种程度上,就新的实践而言,其中并没有什么新东西,但是我所描述的方法会将重要的思想 和实践结合成一个连贯的整体,并为我们建立软件工程行为准则提供依据。

这并不是将完全不同的思想随机结合在一起,而是将这些思想紧密地交织在一起, 使之相辅相成。当将它们结合在一起,并一致地应用到我们的思考、组织、工作开展中 时,它们对工作的效率和质量有着重大的影响。尽管每一个孤立的思想可能都是我们熟 悉的,但是将之结合是一种从根本上完全不同的思考,思考我们究竟在做什么。当这些 思想结合在一起,并被用作软件决策的指导原则时,它们代表了一种新的开发范式。

作为软件工程师,我们理所当然地期待一个针对软件的工程学科,能够帮助我们以 更高的质量和更高的效率解决我们面临的问题。

这样的工程学科还会帮助我们解决那些我们尚未想到的问题。这样一个学科的概念 必定是通用的、持久的和普遍的。

本书试图定义一个紧密相关的思想集合。我的目标是将它们组合成一个连贯的东西, 我们可以将其视为一个方法,一个可以影响我们(软件开发人员和软件开发团队)所做 出的几乎所有决策的方法。

软件工程作为一个概念, 如果要说它有什么意义的话, 那一定是为我们提供了优势, 而不仅仅是采用新工具的机会。

并非所有的思想都有同等价值。有好的思想,也有坏的思想,那么我们该如何区分 它们呢?什么样的原则能够帮助我们评估软件和软件开发中出现的新思想的价值,并判 定它是好还是坏呢?

任何思想如果可以被合理地归类为解决软件问题的工程方法,那么它都是普遍适用 的,而且是基础性的。本书就是关于这些思想的。你应该用什么标准来选择你的工具? 你应该如何组织你的工作?你应该如何组织你构建的系统和你编写的代码,来增加你成 功创建它们的机会?

本书有什么?

第 1 部分“什么是软件工程?”,首先看看工程在软件环境中究竟意味着什么。这是 关于工程的原则和原理,以及我们如何将这些原则和原理应用到软件中。这是软件开发 的技术原理。

第 2 部分“优化学习”,着眼于我们如何组织工作, 让我们在小步骤中也能取得进展。 我们如何评估我们是取得了良好的进展,还是仅仅在今天创造了明天的遗留系统?

第 3 部分“优化管理复杂性”,探讨管理复杂性所需要的原则和技术。本部分更深入地探讨每一条原则,以及它们对于构建高质量软件的意义和适用性,而无论软件性 质如何。

第 4 部分“支持软件工程的工具”,描述一些思想和工作方法, 这些思想和工作方法 可最大限度地增加我们的学习机会,增强我们在小步骤中取得进展的能力,以及在系统 增长时管理系统复杂性的能力。

本书以加灰底的形式在全书中贯穿了关于软件工程的历史和原理以及思想发展的内 容。这些插入的内容为本书中的许多观点提供了有益的背景。

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ES基本操作(postman篇)

关系型数据库 -> Databases(库) -> Tables(表) -> Rows(行) -> Columns(列)。Elasticsearch -> Indeces(索引) -> Types(类型) -> Documents(文档) -> Fields(属性)。 需要注意的是:type的概念在es7.0之后已经删除了。 以下仅做刚入门学习…

矩阵对角线元素的和:揭秘数学之美,解密矩阵的隐秘密码

本篇博客会讲解力扣“1572. 矩阵对角线元素的和”的解题思路,这是题目链接。 本题的思路是:主对角线的下标满足i j,副对角线的下标满足i j size - 1,故只需要使用i遍历每一行,把(i, i)和(i, size - i - 1)的元素求和…

探索 Spring Boot 项目全过程

文章目录 🎇前言1.Spring Boot 所需环境2.Spring Boot 项目创建2.1 安装插件2.2 创建新项目2.3 项目属性配置2.4添加依赖2.4 修改项目名称2.5 添加框架支持2.6 目录介绍 3.判断Spring Boot 创建项目是否成功🎆总结 🎇前言 在 Java 这个圈子&…

1. Except

文章目录 Except前言Except 语法Except 使用举例结合其他关键字使用EXCEPT with BETWEEN operatorExcept with IN operatorEXCEPT with LIKE operator 文章参考 Except 前言 SQL中,EXCEPT 操作用于检索存在于第一个表中的唯一记录,而不是两个表中共有的…

python3GUI--网速内存小工具By:PyQt5(附源码)

文章目录 一.前言二.预览1.主界面2.动图演示3.内存详细信息查看4.自定义界面 三.源代码1.tool_god_GUI.py2.tool_god_ui.py3.engine.py4.CWidgets.py 四.总结五.参考 一.前言 本次使用PyQt5进行开发一款网…

(并查集) 685. 冗余连接 II ——【Leetcode每日一题】

并查集基础 并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的Kruskal算法和求最近公共祖先(LCA)等。 并查集的基本操作主…

MySQL 分库分表实战之ShardingSpare

文章目录 概要一、安装二、配置2.1、 通用配置2.2、 分片配置2.3、读写分离 三、演练3.1、读写分离3.2、分库分表3.3、分库分表读写分离 4、总结 概要 市面上MySQL分库分表中间件还是很多的,主要分为两大类:应用层依赖类中间件(比如sharding…

【学习周报】

最近看过的几篇论文里,VALOR和InstructBLIP模型使用了cross-attention机制,以这两篇论文为基础着重学习cross-attention相关的代码和思路。 学习内容: cross-attention机制学习lstm与transformer 学习时间: 6.26 ~ 7.1 学习笔记…

Linux--重定向:> >> <

输出重定向&#xff1a;> a.如果目标文件不存在&#xff0c;则创建文件。反之 b.本来应该显示到显示器的内容&#xff0c;被写入到了文件中 示例&#xff1a; 追加重定向: >> 示例&#xff1a; 输入重定向&#xff1a;< 本来应该从键盘中读取的内容&#xff0c;变…

分布式锁的实现方案(免费gpt4分享)

1.1基于数据库 有两个方案&#xff1a;依赖数据库排他锁以及表主键的唯一。 依赖数据库排他锁&#xff1a; 在查询语句后面增加for update&#xff0c;数据库会在查询过程中给数据库表增加排他锁 (注意&#xff1a; InnoDB 引擎在加锁的时候&#xff0c;只有通过索引进行检索…

SpringBoot扩展机制

启动生命周期 一.Spring boot初始化器扩展 package com.lx.conmon.extend.intializer;import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext;/*** Spring boot初始化器扩展* author liu we…

AIPRM for ChatGPT 提示词模板扩展工具实践

&#xff08;1&#xff09;基本介绍 AIPRM for ChatGPT是一个Chrome浏览器扩展程序&#xff0c;基于Chromium内核开发的浏览器都可以使用该扩展&#xff0c;比如微软的Edge浏览器等。 在AIPRM的帮助下&#xff0c;我们可以在ChatGPT中一键使用各种专门为网站SEO、SaaS、营销、…

超详细,Python自动化测试 Allure报告参数化动态生成标题(实战)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 默认 allure 报告…

ubuntu安装openssh

Ubuntu安装openssh之后&#xff0c;然后在客户端安装winscp,然后就可以很方便的传输文件了 sudo apt install openssh-server sudo service ssh status sudo service ssh start sudo service ssh restart

自然语言处理从入门到应用——预训练模型总览:预训练模型存在的问题

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 相关文章&#xff1a; 预训练模型总览&#xff1a;从宏观视角了解预训练模型 预训练模型总览&#xff1a;词嵌入的两大范式 预训练模型总览&#xff1a;两大任务类型 预训练模型总览&#xff1a;预训练模型的拓展 …

DOM模型

文章目录 DOM模型获取DOM对象常用方法通过元素ID获取DOM对象通过元素标签名获取DOM对象通过元素的class属性获取DOM对象通过元素的name属性获取DOM对象通过CSS选择器获取所有DOM对象通过CSS选择器获取第一个DOM对象 获取DOM对象时机操作DOM属性直接通过属性名修改属性使用getAt…

Qt中使用QXmlStreamReader读取xml文件中遇到的问题

Qt系列文章目录 文章目录 Qt系列文章目录前言一、为什么xml.readElementText()是空的问题原因QXmlStreamReader类简介 前言 <?xml version"1.0" encoding"UTF-8"?> <note><yolov5>E:/work/python_jdk/yolov5/dist/detect/detect.exe&…

终于有人把 Java 面试高分 Guide 总结得如此系统,堪称傻瓜式笔记总结

纵观今年的技术招聘市场&#xff0c; Java 依旧是当仁不让的霸主 &#xff01;即便遭受 Go 等新兴语言不断冲击&#xff0c;依旧岿然不动。究其原因&#xff1a; Java 有着极其成熟的生态&#xff0c;这个不用我多说&#xff1b; Java 在 运维、可观测性、可监 控性方面都有着…

OpenCV(图像颜色空间变换)

目录 1、分类 1.1 RGB颜色模型 1.2 HSV颜色模型 1.3 GRAY颜色模型 2、图像数据类型间的相互转换 3 、颜色转换函数 1、分类 RGB\HSV\GRAY颜色模型。 1.1 RGB颜色模型 1.2 HSV颜色模型 1.3 GRAY颜色模型 2、图像数据类型间的相互转换 3 、颜色转换函数 第四个参数使用例子…

60、使用MNN+DBNET进行二维码检测

基本思想&#xff1a;顺手转了个模型&#xff0c;可以方便进行条形码和对应的数字检测&#xff0c;以方便下一步进行条形码识别和ocr进行数字检测(这里只检测暂不识别&#xff0c;识别暂定下一篇) cmakelists.txt cmake_minimum_required(VERSION 3.16) project(untitled22) s…