期间:2013
Datensparsamkeit
Datensparsamkeit 是一个德语词,很难准确地翻译成英语。它是一种关于我们如何捕获和存储数据的态度,表明我们应该只处理真正需要的数据。
使用 REST 进行企业集成
大多数内部 REST API 都是为单个集成点专门构建的一次性 API。在本文中,我将讨论非公开 API 的约束和灵活性,以及从跨多个团队进行大规模 RESTful 集成中吸取的经验教训。
历史上受到歧视
我曾在本网站上写过关于软件开发行业中存在问题的 多样性失衡,以及我们如何需要采取有意识的行动来增加代表性不足群体的比例。这很好,但自然会引出我们应该关注哪些代表性不足群体的问题。在 Thoughtworks,我们一直在使用“历史上受到歧视”一词来帮助我们专注于拥抱多样性的主要驱动力之一。
Nexus7
几个月前,我买了一台 谷歌 Nexus 7 平板电脑。我喜欢在使用设备一段时间后才发布我的使用体验,但这种做法的缺点是,我现在谈论的平板电脑已经被取代了。也就是说,我仍然会分享我的评论,因为它们可能仍然对正在考虑未来平板电脑选择的人有所帮助。
欧洲游戏
我是欧洲游戏的粉丝——一种易于上手但又充满思考的棋盘游戏风格。我喜欢它们,因为你通常可以在一个晚上学会并玩一局,但它们提供了足够的战略兴趣,让你可以玩很多次。有时我会被问到更多关于它们的问题,以及我的最爱是什么。所以这里有一篇简短的文章来解释它们,以及一个关于我架子上游戏的交互式列表。
Huffpost 直播小组讨论“程序员效应”
我参加了一个 20 分钟的小组讨论,主题是女性在科技领域参与度下降以及我们应该如何应对这一问题。
测试异步 JavaScript
在 JavaScript 社区中,似乎存在一种普遍的误解,认为测试异步代码需要与测试“常规”同步代码不同的方法。在这篇文章中,我将解释为什么通常情况并非如此。我将重点介绍测试支持异步行为的代码单元与本质上是异步的代码之间的区别。我还将展示基于 promise 的异步代码如何适合于简洁明了的单元测试,这些测试可以以清晰易读的方式进行测试,同时仍然验证异步行为。
页面对象
当你针对网页编写测试时,你需要引用网页中的元素,以便点击链接并确定显示的内容。但是,如果你编写直接操作 HTML 元素的测试,那么你的测试将对 UI 的更改很脆弱。页面对象将 HTML 页面或片段包装在一个特定于应用程序的 API 中,允许你操作页面元素,而无需深入研究 HTML。
告诉,不要问
告诉,不要问是一项原则,它帮助人们记住面向对象是关于将数据与操作该数据的函数捆绑在一起的。它提醒我们,与其询问对象数据并对该数据进行操作,不如告诉对象该做什么。这鼓励将行为移入对象,与数据一起使用。
给定、当、然后
给定、当、然后是一种表示测试的风格——或者正如其倡导者所说——使用 示例规范 来指定系统的行为。这是由 Daniel Terhorst-North 和 Chris Matts 在 行为驱动开发 (BDD) 中开发的一种方法。它作为许多测试框架(如 Cucumber)的结构化方法出现。你也可以将其视为对 四阶段测试 模式的重新表述。
在 Thoughtworks 工作是什么感觉
在接受 InformIT 采访时,我谈到了我对在 Thoughtworks 工作的(相当偏颇的)看法。我们谈论了我是如何来到这里的,为什么我留在这里,以及人们可以做些什么来加入我们这家有趣的公司并取得成功。
隐私保护令人讨厌的人
我们需要支持隐私,不是为了我们这些“无事可隐”的人,而是为了像调查记者和活动家这样令人讨厌的人,没有他们,我们的民主就会崩溃。
用户定义字段
软件系统中的一项常见功能是允许用户在数据结构中定义自己的字段。考虑一个地址簿——有很多东西你可能想添加。随着每天都有新的社交网络出现,用户可能希望为他们的联系人添加一个新的 Bunglr ID 字段。
故事点
故事点是敏捷项目中对故事进行估算的常用名称。结合 XpVelocity,它们提供了一种技术,通过提供故事完成时间的预测来帮助规划。
故事计数
故事计数是一种规划和估算技术。与 故事点 类似,它与 XpVelocity 协同工作,帮助你确定在固定时间内可以交付多少个故事。但是,它的不同之处在于,你只考虑每个时间单位的故事数量,并且(主要)忽略它们的相对大小。
云计算
在过去几年中,“云”一词已经被过度炒作。过度炒作的词语的一个特点是它们几乎没有定义(是的,NosqlDefinition,我是在看着你)。
事实证明,来自 NIST 的云计算有一个非常好的定义。它可以通过一份非常简短且易于理解的 标准文档 获得(不,我没有开玩笑)。
演进移动实施策略
移动设备的流量仍然比传统网络少,但其份额正在增长,因此我们需要考虑开发有效移动应用程序的策略。我们讨论了如何思考产品愿景,将用户参与的风格分为“向前倾斜”、“向后倾斜”和“向下看”三种风格;同时将它们整合到一个跨媒体应用程序中。我们讨论了为什么关注价值比关注流量更重要,激光和覆盖所有平台的策略,并认为Android、iOS和Web是三种可行的平台选择。Giles以我们与一家大型航空公司的合作案例作为结束。
持续交付
持续交付是一种软件开发方法,它以一种可以随时发布到生产环境的方式构建软件。
当您做到以下几点时,您就在进行持续交付
- 您的软件在其整个生命周期中都是可部署的
- 您的团队优先考虑保持软件的可部署性,而不是开发新功能
- 任何人都可以在有人对系统进行更改时,随时获得关于其系统生产就绪性的快速、自动化的反馈
- 您可以按需对软件的任何版本执行一键式部署到任何环境
部署管道
自动化构建和测试环境面临的挑战之一是,您希望构建速度快,以便能够快速获得反馈,但全面测试需要很长时间才能运行。部署管道是一种通过将构建分解为多个阶段来解决此问题的方法。每个阶段都提供越来越高的信心,通常以额外的时间为代价。早期阶段可以发现大多数问题,从而提供更快的反馈,而后期阶段则提供更慢、更深入的探测。部署管道是持续交付的核心部分。
DIP 在实践中
依赖倒置原则 (DIP) 自 20 世纪 90 年代初就已存在,尽管如此,在解决问题时,人们似乎很容易忘记它。在给出一些定义之后,我将介绍一些我在实际项目中使用过的 DIP 的应用,以便您能从这些例子中得出自己的结论。
面向业务的测试
面向业务的测试是一种旨在用作帮助与开发团队的非编程成员(如客户、用户、业务分析师等)进行沟通的测试。当自动化时,它们会用面向领域的术语描述系统,忽略系统本身的组件架构。面向业务的测试通常用作验收标准,这些测试通过表明系统提供了客户期望的功能。
Gap Inc. 的 SCMS 架构
SCMS PO 是一款帮助 Gap Inc. 管理采购订单的应用程序。该应用程序的架构深受其开发团队的喜爱,因此对于具有丰富的 JavaScript 前端与服务 JSON 的后端交互的系统来说,它是一个很好的示例架构。有趣的设计特性包括使用 Knockout.js 的 Presentation Model 模式,在客户端和服务器上运行的 JavaScript 验证器,使用存储库封装数据访问,使用 MongoDB 作为应用程序数据库以及测试组合。
D D D_ 聚合
聚合是领域驱动设计中的一个模式。DDD 聚合是域对象的集群,可以将其视为一个单元。例如,订单及其行项目,它们将是单独的对象,但将订单(及其行项目)视为一个聚合很有用。
用户故事
用户故事是软件系统所需行为的片段。它们广泛应用于敏捷软件方法中,将大量功能划分为较小的部分,以便于规划。您也会听到相同的概念被称为功能,但“故事”或“用户故事”一词近年来在敏捷圈中变得流行起来。
Javascript Promise
在 Javascript 中,Promise 是表示异步操作的待处理结果的对象。您可以使用它们来安排异步操作完成后进一步的活动,方法是提供回调函数。
示例架构
我们对软件系统理解不断增长的一个问题是,我们没有看到足够的例子。在许多专业领域,人们通过观察已经完成的工作来学习。示例可以作为灵感来源、良好想法的来源以及对困难的警示。长期以来,以这种方式学习软件要困难得多。
讨论 P of EAA 的 Ruby Rogues 播客
Ruby Rogues 是一个受欢迎的播客,定期小组讨论 Ruby 编程社区中的主题。他们有一个定期举办的读书会,最近选择P of EAA作为他们的特色书籍。因此,他们邀请我作为嘉宾参加他们的节目,讨论这本书以及它描述的模式,特别是这些模式与 Rails 框架之间有趣的关系。
估算的目的
我第一次接触敏捷软件开发是在极限编程的黎明时期与 Kent Beck 合作。让我印象深刻的事情之一是我们进行规划的方式。这包括一种估算方法,这种方法既轻量级,又比我以前见过的更有效。现在已经过去了十多年,经验丰富的敏捷开发人员之间出现了一种争论,即估算是否值得做,或者实际上是有害的。我认为,要回答这个问题,我们必须看看估算将用于什么目的。
没有 DBA
在许多组织中,人们期望任何持久数据都将存储在由中央数据库管理组管理的关系数据库中。中央控制有各种原因,通常集中在使用集成数据库上。中央数据组担心如何防止出现格式错误的数据、会减慢重要共享资源速度的查询以及企业范围内的统一数据模型。
这些目标可能值得追求,但它们的一个后果是,关于存储数据的仪式繁多。我经常听到关于更改订单的抱怨,这些订单需要数周时间才能在数据库中添加一列。对于习惯于短周期演化设计的现代应用程序开发人员来说,这种仪式太慢了,更不用说太烦人了。
因此,应用程序开发组告诉我他们使用NoSQL 数据库来绕过 DBA。他们在这里使用的是“简单的数据存储”,而不是“真正的数据库”,这很有帮助。这样,DBA 就可以被排除在循环之外,他们通常不会被告知,或者乐于不关心。
指标的适当使用
管理人员喜欢他们的指标。他们的想法是这样的:“我们需要一个数字来衡量我们的工作情况。数字可以集中人们的注意力,帮助我们衡量成功。”虽然出发点是好的,但以数字为导向的管理却出乎意料地会导致问题行为,最终会损害更广泛的项目和组织目标。指标本身并不是坏事;只是经常被不恰当地使用。这篇文章阐述了管理人员传统使用指标造成的许多问题,并提供了一种替代方法来解决这些问题。
关于无模式化、NoSQL 中的一致性和软件设计经济学的演讲
我在旧金山的一次 Thoughtworks 活动上发表了演讲,采用了我的惯用 演讲套件 风格。这次演讲的主题包括如何以及何时使用无模式数据结构、为什么 NoSQL 数据库中的数据一致性不仅仅是 ACID 与 BASE 的区别,以及设计良好的软件的经济学理由。
取消销售佣金
销售佣金在软件行业几乎普遍存在,就像所有商业领域一样。人们喜欢它,因为它使销售人员与雇用他们的公司之间的利益一致。然而,销售佣金模式存在严重问题,这些问题导致 Thoughtworks 在 2013 年取消了所有销售佣金。
透明编译
越来越多的 Web 开发人员使用像 CoffeeScript 和 SCSS 这样的语言,这些语言编译成其他文本源语言,并在浏览器中执行。这种源到源编译器(也称为转译器)并不新鲜,Cfront 在 C++ 的早期被广泛用于生成目标 C 代码。但对我来说,CoffeeScript 和 SCSS 作为透明编译器存在着区别。
萨巴岛
最近我们回到了我们最喜欢的地方之一,萨巴岛——加勒比海的一个非常小的岛屿,靠近圣马丁。在许多方面,萨巴岛最棒的地方在于它没有的东西。那里没有海滩、高尔夫球场或赌场。加勒比海地区遍布的大量旅游和度假村群落,由于萨巴岛太小、山势太高,因此一直忽略了它。因此,这个岛屿非常安静祥和。
思考大数据
"大数据"迅速成为我们行业中最热门的词汇之一,但炒作不应该让人们忽视这样一个事实,即这是一个关于数据在世界中作用的真正重要转变。数据源的数量、速度和价值正在迅速增长。数据管理必须在五个主要领域发生变化:从更广泛的数据源中提取数据,使用新的数据库和集成方法改变数据管理的物流,在运行分析项目中使用敏捷原则,强调数据解释技术以区分信号和噪声,以及设计良好的可视化的重要性,以使信号更易于理解。总而言之,这意味着我们不需要大型分析项目,而是希望新的数据思维渗透到我们的日常工作中。
内部可重编程性
我正在编程,想在我的当前输入位置上方添加一个空行。我使用的编辑器没有内置此功能,而且我最终非常想要这个功能。我快速搜索了一下 Google,找到了一些代码,将它们粘贴到我的启动文件中,执行它们,然后我就可以用一个按键在上面创建空行了。只花了不到两分钟,我无需安装任何插件或重新启动编辑器——对于 Emacs 用户来说,这是日常工作。