期间: 2017
机器证明
我记得在我十几岁的时候,有人告诉我人工智能 (AI) 在未来几年将会取得的伟大成就。几十年后的今天,其中一些似乎正在发生。最近的一次胜利是计算机通过互相博弈来学习围棋,并迅速变得比任何人类都更加精通,其策略人类专家几乎无法理解。人们自然想知道未来几年会发生什么,计算机是否很快就会比人类更聪明?(鉴于最近的一些选举结果,这可能不是一个难以逾越的障碍。)
但当我听到这些时,我想起了巴勃罗·毕加索几十年前对计算机的评论:“计算机毫无用处。它们只能给你答案”。像机器学习这样的技术所能产生的推理能力,其结果确实令人印象深刻,并将对我们作为软件的用户和开发者有所帮助。但答案虽然有用,却并不总是完整的画面。我在学校早期就学到了这一点——仅仅提供数学题的答案只能让我得到几分,为了得到满分,我必须展示我是“如何”得到答案的。得出答案的推理过程比结果本身更有价值。这就是自学成才的围棋人工智能的局限性之一。虽然它们可以获胜,但它们无法解释自己的策略。
银河竞逐和圣胡安
圣胡安和银河竞逐都是优秀、快速且需要思考的卡牌游戏。银河竞逐更有深度,但它的图标对某些人来说不太容易上手。
功能开关(又称功能标志)
功能开关(通常也称为功能标志)是一种强大的技术,允许团队在不更改代码的情况下修改系统行为。它们属于各种使用类别,在实现和管理开关时,务必考虑这种分类。开关会增加复杂性。我们可以通过使用智能开关实现实践和适当的工具来管理我们的开关配置,从而控制这种复杂性,但我们也应该致力于限制系统中开关的数量。
《构建演进式架构》序言
最近,我的同事:Neal Ford、Rebecca Parsons 和 Pat Kua 写了一本书,名为“构建演进式架构”。我很荣幸他们邀请我为这本书撰写序言。
Roy 出售 Thoughtworks
Thoughtworks 被 Apax 基金收购。目前的管理团队将一如既往地继续运营公司。
测试影响分析的兴起
测试影响分析 (TIA) 是一种加速构建测试自动化阶段的现代方法。它通过分析源代码的调用图来确定在更改生产代码后应运行哪些测试。微软已经在这种方法上做了大量工作,但开发团队也可以以相当低的成本实现一些有用的东西。
架构师电梯——参观高层
许多大型组织的 IT 引擎与行政顶层办公室之间隔着许多楼层,这也将业务和数字化战略与执行这些战略的重要工作分离开来。架构师的主要作用是在顶层办公室和机房之间乘坐电梯,在需要的地方停下来支持这些数字化工作:自动化软件制造、最大限度地减少前期决策,以及随着技术发展影响组织。
关于敏捷和架构的播客
Ryan Lockard(敏捷起义)邀请我与 Rebecca Wirfs-Brock 一起参加关于敏捷项目架构的播客对话。Rebecca 开发了责任驱动设计,这在我职业生涯初期对我产生了很大的影响。我们谈到了如何定义架构、测试对架构的影响、领域模型的作用、准备什么样的文档,以及需要预先完成多少架构工作。
葡萄园和画廊
葡萄园和画廊都是优秀的欧式游戏,主题鲜明,以生产为中心的商业模式。
生产环境中的质量保证
传统上,质量保证侧重于在软件发布到生产环境之前对其进行测试,以查看它是否已准备好发布。但越来越多的现代质量保证组织也将注意力集中在生产环境中运行的软件上。通过分析日志和其他监控工具,他们发现了需要向开发组织强调的质量问题。这种方法特别适用于使用持续交付快速可靠地将新版本软件投入生产的组织。
一行代码就能危害你的服务器
会话密钥是用于加密 Cookie 的密钥。应用程序开发人员通常在开发过程中将其设置为弱密钥,并且在生产过程中没有修复它。本文解释了如何破解这样的弱密钥,以及如何利用破解的密钥来控制托管应用程序的服务器。我们可以通过使用强密钥和谨慎的密钥管理来防止这种情况。库作者应该使用工具和文档来鼓励这样做。
自我封装
数据封装是面向对象风格的核心原则。这意味着对象的字段不应公开,而应通过访问器方法(getter 和 setter)进行所有外部访问。有些语言允许公开访问字段,但我们通常告诫程序员不要这样做。“自我封装”更进了一步,表明对数据字段的所有“内部”访问也应该通过访问器方法进行。只有访问器方法才能触及数据值本身。如果数据字段没有暴露给外部,这意味着要添加额外的私有访问器。
函数作为对象
在编程中,对象的基本概念是数据和行为的捆绑。这在编写一组相关函数时提供了一个通用的数据上下文。它还提供了一个操作数据的接口,允许对象控制对该数据的访问,从而可以轻松地支持派生数据并防止对数据进行无效修改。许多语言都提供了显式的语法来定义类,这些类充当对象的定义。但是,如果你使用的语言具有一级函数和闭包,则可以使用这些构造来使用函数作为对象模式(最初由 Eugene Wallingford 描述)创建对象。
撰写敏捷宣言的回忆
《敏捷起义》播客一直在对敏捷宣言的作者进行一系列采访。这次轮到我接受采访了。我对雪鸟研讨会本身已经记不太清了,但我可以描述一些宣言出台前的背景。
“事件驱动”是什么意思?
去年年底,我参加了 Thoughtworks 同事组织的一次研讨会,讨论“事件驱动”应用程序的本质。在过去几年中,我们一直在构建大量使用事件的系统,这些系统备受赞誉,但也饱受诟病。我们的北美办事处组织了一次峰会,来自世界各地的 Thoughtworks 高级开发人员齐聚一堂,分享他们的想法。
峰会最大的成果是认识到,当人们谈论“事件”时,他们实际上指的是一些截然不同的事情。因此,我们花了很多时间试图弄清楚哪些模式可能是有用的。这篇笔记简要总结了我们确定的主要模式。
综合监控
综合监控(也称为语义监控)定期针对实时生产系统运行应用程序自动化测试的子集。结果被推送到监控服务,该服务在出现故障时触发警报。这种技术将自动化测试与监控相结合,以便检测生产环境中失败的业务需求。
持续集成认证
持续集成是软件开发中的一种流行技术。在会议上,许多开发人员谈论他们是如何使用它的,而且持续集成工具在大多数开发组织中都很常见。但我们都知道,任何像样的技术都需要一个认证项目——幸运的是,确实存在这样一个项目。它由持续交付和 DevOps 领域的一位最重要的专家开发,以管理速度快、结果非常有洞察力而闻名。虽然它已经相当成熟,但它的知名度还不够高,因此作为该技术的粉丝,我认为与我的读者分享这个认证项目非常重要。你准备好获得持续集成认证了吗?你将如何面对测试将揭示的令人震惊的真相?
Web 应用程序安全基础
现代 Web 开发面临着许多挑战,其中安全既非常重要,又常常被忽视。虽然诸如威胁分析之类的技术越来越被认为是任何严肃开发的必要条件,但也有一些基本实践是每个开发人员都可以而且应该作为理所当然的事情去做的。