期间: 2023
软件与工程
在我的职业生涯中,人们总是将软件开发与“传统”工程相比较,通常是以斥责软件开发人员没有做好工作的方式。作为一个获得电子工程学位的人,这种说法在我职业生涯的早期引起了我的共鸣。但这种想法是有缺陷的,因为大多数人对工程实践的运作方式有错误的印象。
测试驱动开发
测试驱动开发 (TDD) 是一种构建软件的技术,它通过编写测试来指导软件开发。它是由 Kent Beck 在 20 世纪 90 年代后期作为极限编程的一部分开发的。从本质上讲,我们反复遵循三个简单的步骤
差异调试
回归错误是指软件中已经存在一段时间的特性中新出现的错误。在追踪这些错误时,通常需要弄清楚软件中的哪些更改导致了这些错误的出现。查看这些更改可以为错误的位置以及如何消除错误提供宝贵的线索。这种调查形式没有一个广为人知的术语,但我称之为差异调试。
探索生成式人工智能
生成式人工智能,特别是大型语言模型 (LLM),已经进入了公众的视野。像许多软件开发人员一样,Birgitta 也对这种可能性很感兴趣,但不确定从长远来看这对我们的职业意味着什么。她在 Thoughtworks 担任了一个协调我们工作的角色,以研究这项技术将如何影响软件交付实践。在本页上,她发布了一系列备忘录,以描述她和我们的同事正在学习和思考的内容。
分布式系统模式目录
分布式系统为编程带来了特殊的挑战。它们通常要求我们拥有多份数据副本,这些副本需要保持同步。然而,我们不能依赖处理节点可靠地工作,网络延迟很容易导致不一致。尽管如此,许多组织仍然依赖于一系列核心分布式软件来处理数据存储、消息传递、系统管理和计算能力。这些系统面临着共同的问题,它们使用类似的解决方案来解决这些问题。2020 年,Unmesh Joshi 开始将这些解决方案收集为模式,并在开发过程中将它们发布在这个网站上。2023 年,这些模式被收录在《分布式系统模式》一书中。本页链接到每个模式的简短摘要,并提供到 oreilly.com 上在线电子书出版物相关章节的深度链接
文科学位帮助我在科技行业取得成功的三个原因
传统的文科学位提供了与产品经理高度相关的技能
无头组件:一种用于组合 React UI 的模式
随着 React UI 控件变得越来越复杂,复杂的逻辑可能会与视觉表示交织在一起。这使得推理组件的行为变得困难,难以对其进行测试,并且需要构建外观不同的类似组件。无头组件提取所有非视觉逻辑和状态管理,将组件的大脑与其外观分离开来。
制定一体化的业务和技术战略
为了有效地利用技术,我们需要将我们的技术思维与基础业务计划保持一致。技术战略可以推动这种一致性,前提是它能够恰当地整合业务和技术。我们开发了一个概念框架来帮助我们进行这种战略思考,该框架基于对战略举措共同方面的认识,引导我们确定了 11 个普遍的战略方向。对于每个方向,我们都概述了它们提出的关键业务问题,以及我们需要进行的调查,以探索技术含义。我们发现,这个框架不仅可以制定更有效的技术战略,还可以让技术为业务思考提供信息,开发新的收入来源。
演示前端
您是否参加过这样的“演示”,开发人员自豪地展示着一屏又一屏的 API JSON 输出,而用户却感到困惑和分心,无法理解其中的含义?您是否曾经尝试过在开发中使用 API,却因为难以找到正确的 JSON 有效负载和标头调用来测试功能而感到沮丧?演示前端是一个简单的 UI,它提供了一些基本功能来演示和探索这样的 API。
团队拓扑
任何大型软件工作,例如大型公司的软件资产,都需要很多人参与,每当您有很多人时,您就必须弄清楚如何将他们分成有效的团队。组建 以业务能力为中心 的团队有助于软件工作快速响应客户的需求,但所需技能的范围往往会让这些团队不堪重负。团队拓扑是一种描述软件开发团队组织的模型,由 Matthew Skelton 和 Manuel Pais 开发。它定义了四种形式的团队和三种团队交互模式。该模型鼓励健康的互动,使以业务能力为中心的团队能够在提供稳定价值流的软件的任务中蓬勃发展。
两个披萨团队
两个披萨团队是一个小型团队,完全支持特定业务能力的软件。这个词之所以流行起来,是因为它曾经被用来描述亚马逊如何组织他们的软件人员。
平台团队如何完成工作
平台团队特别依赖于其他团队来确保其平台的采用,将代码更改纳入其他团队的代码库对其成功至关重要。这种跨团队协作有多种模式,选择正确的模式取决于平台采用的阶段以及团队和代码库接受外部影响的能力。
在 Xapo 银行分散架构实践
Xapo 最初是一家比特币服务提供商,后来发展成为一家在线银行。在转型过程中,它需要重新评估其软件资产,并建立架构能力来指导其未来发展。它借鉴了领域驱动设计、团队拓扑和架构咨询流程的理念,开发了一个架构咨询论坛。这使得其软件交付团队更加协调一致,并制定了连贯的技术战略。
构建 Boba AI
我们正在构建一个名为“Boba”的实验性人工智能副驾驶,用于产品战略和生成式构思。在此过程中,我们学习了一些关于如何构建此类应用程序的有用经验,并将其概括为模式。这些模式允许应用程序帮助用户更有效地与大型语言模型 (LLM) 进行交互,协调提示以获得更好的结果,帮助用户在复杂的对话流程中导航,并整合 LLM 不具备的知识。
将模块化架构与开发团队联系起来
模块化架构可以改进软件交付吗?是的!但有一些需要注意的地方。本文介绍了一家企业为了缓解日益增长的痛苦而着手将其架构转变为更加模块化的架构的过程。他们发现,模块化是一个多方面的解决方案,它超越了架构本身,扩展到了业务沟通线、团队拓扑和有效的开发者体验。通过密切关注这些因素,该企业能够显著提升其移动应用程序的交付性能。
隐私增强技术:技术人员入门
隐私增强技术 (PET) 是指为那些数据被软件和系统处理、存储和/或收集的人提供更多隐私或保密性的技术。三种有价值且可供使用的 PET 是:差分隐私、分布式和联合分析与学习,以及加密计算。它们为隐私提供了严格的保障,因此越来越受欢迎,可以在提供数据的同时最大限度地减少对私人数据的侵犯。
依赖组合
基于对传统基于框架的依赖注入的失望,我采用了一种组合策略,利用部分应用将上下文注入到模块中。当与作为设计过程的测试驱动开发以及对函数而非类的关注相结合时,模块可以保持清晰、简洁,并且在很大程度上避免了意外耦合。
使用 ChatGPT 作为技术写作助手
一位经验丰富的技术作者探索使用 ChatGPT 来协助完成一些写作项目。他发现 ChatGPT 可以通过草稿和提示额外内容来节省时间,但缺乏准确性和深度,而且过于乐观。总的来说,如果您以迭代的方式工作,并使用精心设计的提示请求小块内容,那么它还是很有用的。
技术作者是什么样子的?
询问 Stable Diffusion“技术作者肖像”
LLM 用于编程的示例
我与徐浩进行了一次内部聊天,他展示了如何引导 ChatGPT 生成有用的自测代码。他最初的提示是用实现策略(思维链提示)来引导大型语言模型。他的提示还要求提供实施计划,而不是代码(常识提示)。一旦他有了计划,他就会用它来改进实现并生成有用的代码段。
时间盒迭代
时间盒迭代是一种划分和安排项目工作的方式,尤其与敏捷软件项目相关。团队将软件的可见功能分解成 用户故事,并将时间分解成固定的周期(例如一周),称为迭代。然后,他们通过将故事分配给迭代来安排故事。故事会被粗略估计,以便团队能够确定一个迭代中适合多少个故事。
持续流
持续流是一种安排工作的方法,通常与敏捷软件开发相关联。团队将软件的功能分解成 用户故事。然后,他们将这些故事优先排序到一个粗略的列表中。然后,团队选取其中一些用户故事并进行处理,当他们完成一个故事后,他们就会从列表中提取下一个故事。
《璀璨宝石:伯明翰》成为 BoardGameGeek 上排名第一的游戏
欣赏 BGG 上最新排名第一的游戏
使用已建立的 UI 模式模块化 React 应用程序
已建立的 UI 模式在前端开发领域经常未被充分利用,尽管它们在解决 UI 设计中的复杂问题方面已被证明是有效的。本文探讨了已建立的 UI 构建模式在 React 世界中的应用,并通过重构旅程代码示例展示了其优势。重点放在分层架构如何帮助组织 React 应用程序以提高响应能力和适应未来变化。
回顾反模式
如果您使用回顾,或者任何一种人们应该在会议中讨论并从讨论中学习的会议,您都会时不时地经历效率较低的会议。这并不奇怪,而且大多数人都会遇到这种情况。本文描述并提供了三种此类不幸情况的解决方案:跳过生成见解、迷失在您无法改变的事情中以及被一个大声喧哗的人所支配。
数据网格加速研讨会
加速意味着更快地移动,获得速度。有效地处理数据对于任何想要在现代世界中蓬勃发展的组织来说都是关键,而数据网格正在向组织展示如何大规模地从其数据中实现价值。数据网格加速研讨会通过了解团队和组织的当前状态并探索下一步的行动,帮助他们加速数据网格转型。
2022 年我最喜欢的音乐发现
2022 年我获得的六首最喜欢的新音乐