期间:2016
Dominion 第二版
Dominion 基础游戏和阴谋牌扩展包推出了第二版
函数长度
在我的职业生涯中,我听到过很多关于函数应该有多长的争论。这是一个更重要的问题的代表 - 我们什么时候应该将代码封装到它自己的函数中?其中一些准则是基于长度的,例如函数应该不超过一个屏幕的大小。有些是基于重用的 - 任何使用多次的代码都应该放在它自己的函数中,但只使用一次的代码应该保持内联。然而,对我来说最有意义的论点是意图和实现的分离。如果你必须花力气去看一段代码才能弄清楚它在做什么,那么你应该把它提取到一个函数中,并根据这个“做什么”来命名这个函数。这样,当你再次阅读它时,函数的用途就会一目了然,而且大多数时候你不需要关心函数是如何实现它的用途的 - 这就是函数的主体。
隐藏的精度
有时,当我处理一些数据时,这些数据的精度超出了我的预期。有人可能会认为这是一件好事,毕竟精度是好的,所以越多越好。但隐藏的精度会导致一些微妙的错误。
《爱达和巴贝奇的惊险冒险》
一部引人入胜的漫画,以蒸汽朋克的口袋宇宙为背景,并附有关于计算机先驱及其真实维多利亚时代世界的翔实脚注。
值对象
在编程时,我经常发现将事物表示为一个复合体很有用。一个二维坐标由一个 x 值和一个 y 值组成。一笔钱由一个数字和一个货币组成。一个日期范围由开始日期和结束日期组成,而它们本身可以是年、月和日的复合体。
在这样做的时候,我遇到了两个复合对象是否相同的问题。如果我有两个点对象都表示笛卡尔坐标 (2,3),那么将它们视为相等是有意义的。由于其属性的值(在本例中为其 x 和 y 坐标)而相等的对象称为值对象。
别名错误
当通过多个引用访问同一个内存位置时,就会发生别名。通常情况下,这是一件好事,但它也经常以一种意想不到的方式发生,从而导致令人困惑的错误。
煮胡萝卜
我小时候讨厌吃胡萝卜,讨厌这种东西的气味和口感。但在我离开家开始自己做饭后,我开始喜欢上它们了。胡萝卜本身并没有改变,我的味蕾也没有发生根本性的改变,区别在于烹饪方式。我的母亲,像她那一代的许多英国人一样,不擅长烹饪,尤其是蔬菜。她的方法是把胡萝卜煮上 20 分钟或更长时间。后来我才知道,如果你烹饪得当,胡萝卜会给你带来完全不同的体验。
这个网站不是关于烹饪的,而是关于软件开发的。但我发现,通常情况下,一项技术或工具就像可怜的胡萝卜一样,被指责为糟糕透顶,而真正的问题是这项技术的使用方式不正确。
双模 IT
双模 IT 是一个有缺陷的概念,它认为软件系统应该分为这两个不同的类别来进行管理和控制。
- 前台系统(交互系统)应该针对快速功能开发进行优化。这些交互系统需要对不断变化的客户需求和商业机会做出快速反应。缺陷应该被容忍,因为这是快速开发周期的必要成本。
- 后台系统(记录系统)应该针对可靠性进行优化。作为记录系统,重要的是不要出现损害企业的缺陷。因此,你需要放慢变更的速度。
无服务器
无服务器架构是基于互联网的系统,应用程序开发不使用通常的服务器进程。相反,它们完全依赖于第三方服务、客户端逻辑和服务托管的远程过程调用 (FaaS) 的组合。
YAaaS
YAaaS:又一个“即服务”
如今,似乎所有东西都需要“即服务”,所以我们需要一个元术语来描述这种语言趋势。感谢我的同事 Birgitta Böckeler 想出 了一个。所以现在我们可以说“FaaS 是“函数”的 YAaaS”。
以业务能力为中心
以业务能力为中心的团队是指其工作长期与企业的某个领域保持一致的团队。只要上述业务能力与业务相关,该团队就会一直存在。这与项目团队形成对比,项目团队只持续到交付项目范围所需的时间。
以活动为导向
任何重大的软件开发工作都需要进行几项不同的活动:分析、用户体验设计、开发、测试等。以活动为导向的团队围绕这些活动进行组织,因此你有专门的用户体验设计、开发、测试等团队。以活动为导向承诺了许多好处,但软件开发通常最好由 以结果为导向 的团队来完成。
以结果为导向
赞助软件开发的人通常对速度或生产部署频率等开发指标不感兴趣。他们更关心软件将带来的业务收益,如减少人工、提高销售转化率、提高客户满意度,即业务成果。以结果为导向的团队是指被授权和配备了实现业务成果的团队,这些团队中的人员有能力开展所有必要的活动来实现成果。相比之下,以活动为导向 的团队既没有能力也没有授权这样做。他们只能执行实现成果所需的几项活动中的一项。
重构 JavaScript 视频商店
计算和格式化视频商店账单的简单示例开启了我 1999 年的重构书籍。如果使用现代 JavaScript 来完成,你可以从几个方向进行重构。我在这里探讨了四个方向:重构为顶级函数、重构为带有调度器的嵌套函数、使用类以及使用中间数据结构进行转换。
演进式数据库设计
在过去的十年中,我们开发和完善了许多技术,允许数据库设计随着应用程序的开发而演进。这对敏捷方法论来说是一项非常重要的能力。这些技术依赖于将持续集成和自动化重构应用于数据库开发,以及 DBA 和应用程序开发人员之间的密切协作。这些技术适用于预生产和已发布的系统,以及绿地项目和遗留系统。
天生如此
不善社交、白人、男性程序员的刻板印象由来已久。尽管“科技行业的多样性”是一个被广泛讨论的话题,但数字并没有变得更好。相反,IT 行业内外的许多人仍然理所当然地认为这种刻板印象是自然的常态,而这种看法正是阻碍我们使这个行业更具包容性和吸引力的因素之一。那么,这种形象从何而来?世界程序员人口的构成真的是自然演变的结果吗,因为“男孩天生就更喜欢电脑”?是什么塑造了我们对程序员的看法?本文介绍了我在阅读计算机历史时发现的一些可能的解释。
不仅仅是站立:每日站会模式
每日站会已经成为许多团队的常见仪式,尤其是在敏捷软件开发中。然而,有许多微妙的细节区分了有效的站会和浪费时间。