期间: 2009
数码单反相机
像许多极客一样,我喜欢摄影。我们极客喜欢摄影,因为它提供了一种艺术创作的表象,同时让我们沉迷于大量的技术细节,并在昂贵的玩具上花钱。最近,一位朋友询问我购买相机的决定,这个问题促使我写下了这些文字。
软件与奥巴马的胜利
巴拉克·奥巴马在2008年总统竞选中的胜利,软件发挥了重要作用,尤其是互联网的使用。但也许最有趣的方面是软件的进步与竞选活动中人类组织的发展之间的相互作用。
组合正则表达式
编写可维护代码的最强大工具之一是将大型方法分解成命名良好的较小方法 - Kent Beck 将这种技术称为组合方法模式。
两件难事
计算机科学中只有两件难事:缓存失效和命名。
-- 菲尔·卡尔顿
Mercurial 合并提交
我最近一直在摆弄用 Mercurial 合并一些提交,所以想写一篇帖子,以防其他人也想这样做。我不知道这是否是最好的程序,但对我来说似乎很有效。
安卓
上个月在 Google IO 大会上演讲的额外收获之一是我得到了一部新手机 - 谷歌送给所有与会者的 HTC Magic 安卓手机。我实际上正打算把我的手机换成这样的东西,所以它来得正是时候。这是我带着它走了一个月左右的印象。
请求流图
和我在 Thoughtworks 的同事们在一起,你很快就会觉得,唯一好的企业服务总线 (ESB) 就是死的 ESB。Jim Webber 将它们称为错误的意大利面条盒。所以听到有人试图从不需要它们的系统中移除它们的故事并不少见。
说明性编程
世界上最常用的编程语言是什么?
revitalizing enterprise software
澳大利亚金融服务公司 AMP 举办了一场名为 Amplify 的内部会议。他们邀请我谈谈敏捷软件开发。我考虑了如何使这最适合会议的整体流程,特别是因为我预计很大一部分听众不是 IT 人员。我决定谈谈 IT 项目如何是基础设施的或战略性的。这种分类改变了你处理项目的方式,特别是 IT 人员和业务人员应该如何协作的方式。
Thoughtworks 的 Ruby
Thoughtworks 从 2006 年开始将 Ruby 用于生产项目,从那时起到 2008 年底,我们已经完成了 41 个 Ruby 项目。在准备 QCon 的演讲时,我调查了这些项目,以 بررسی what lessons we can draw from the experience. 我描述了我们迄今为止对 Ruby 的生产力、速度和可维护性的常见问题的看法。到目前为止,我们的结论是,Ruby 是一个可行的平台,应该认真考虑用于多种形式的应用程序 - 特别是使用 Ruby on Rails 的 Web 应用程序。我还介绍了一些技术经验,包括对使用 Active Record 进行测试的一些想法。
比较价值观
敏捷软件开发宣言 最引人注目的一点是其价值观的格式“我们赞成 x 而不是 y”。我不记得是谁想出了这个主意,也不记得它是如何产生的。它可能只是在我们反复讨论时冒出来的。但它独特的格式让一些人试图再次使用这种格式。
动态类型检查
最近,我们的一些开发人员遇到了这样的指责:使用像 Ruby 这样的动态语言,你会使用如此多的动态类型检查,以至于你最终会有效地编写自己的类型系统。所以他们想,既然我们已经编写了大量的真实 Ruby 代码 - 我们多久进行一次动态类型检查?Michael Schubert 收集了数据。
Google I/O 云计算演讲
Rebecca Parsons 和我谈论了 Google App Engine 和云计算的总体情况。在第一部分中,我谈到了 ThoughtWorkers 在试验 App Engine 时学到的一些东西,重点介绍了测试、持久性和并发性方面的问题。在第二部分中,Rebecca 谈到了企业迁移到云端将面临的更广泛的问题。
Rails 上的污点
几周前,在旧金山举行了一场名为 GoGaRuCo(金门 Ruby 大会)的 Ruby 大会。这次大会引起了人们的关注,因为在一次演讲中,演讲者通过使用暗示女性性行为的图片来说明对 CouchDB 的讨论。不出所料,结果引发了相当多的激烈辩论,有时甚至是攻击性的辩论。
意图软件
几年前,我当时的同事 Matt Foemmel 对我们用来构建软件的工具感到不满,设法联系了 Charles Simonyi,以了解更多关于神秘的 意图软件 的信息。他所看到的一切给他留下了深刻的印象,他说服我和其他 ThoughtWorkers 也参与进来。我们看到的是一个具有惊人潜力的工具,但我们仍然对保密和缺乏发布的紧迫性感到沮丧。这种沮丧在上周结束了。
非专业程序员
我使用非专业程序员这个词来指那些在编程时并不认为自己是程序员的人。一个每天大部分时间都在处理电子表格的人是在编程,而且通常是非常密集的编程。然而,她通常不会称自己为程序员,也不会考虑花太多时间学习如何更好地编程。
不可饶恕的契约
在电影《不可饶恕》的结尾,克林特·伊斯特伍德饰演的角色需要逃离小镇。他宣布,如果有人试图向他开枪,他会杀了他,然后杀死他的家人,然后烧毁他们的房子。
与 Chris Sells 探讨 DSL 的观点
当我参加 DSL DevCon 时,微软的 Channel 9 把我拉去接受 Chris Sells 的采访。
领域特定语言的元介绍
这是我通常的 DSL 介绍演讲,但做了一些调整,因为我面对的是比平时更了解 DSL 的人群。所以,我基本上是在谈论我如何向人们介绍 DSL。
矛盾的观察
许多计算机系统的设计目的是存储数据并将其转化为对人类有用的信息。当我们这样做时,自然希望使这些信息保持一致。毕竟,一个对事物有两种看法的计算机系统有什么用呢?
民主政治技术革命
我的同事 Zack Exley 和我谈论了 2008 年奥巴马总统竞选活动中使用的软件。我发现特别有趣的一点是,软件如何支持竞选活动的组织方式并与之互动。
三年真实的 Ruby
为了在 2009 年伦敦 QCon 大会上发表演讲,我调查了 Thoughtworks 从 2006 年到 2008 年使用 Ruby 的情况,在此期间我们完成了 41 个项目。我的演讲涵盖了我们对 Ruby 的生产力、速度和可维护性的看法。我的结论是,应该认真对待 Ruby 作为一种开发环境。如果你喜欢阅读而不是观看,我还有一篇 文章 涵盖了相同的材料。
纳什维尔项目
我最近花了一些时间研究我最喜欢的 Thoughtworks 项目之一。这是一个始于 1998 年的项目,使用了当时最新的 J2EE 技术。多年来,它有着迷人的历史:从 EJB 开始,移除它们,离岸到班加罗尔,回到芝加哥。许多人进出过这个项目,项目的员工人数在 6 到 60 人之间变化。总的来说,该项目已经投入了超过 300 个工年的努力,代码量约为 100 KLOC。
预先读取推导
我在旧金山 QCon 大会 (http://qconsf.com/) 上参加了一场有趣的演讲,演讲者是 Greg Young,他介绍了他在最近一个系统中使用的特定架构。Greg 是领域驱动设计的忠实拥趸,在这种情况下,需要将其用于必须处理高交易率并向大量用户提供数据的系统。我发现他的设计有很多有趣的地方,特别是 on 事件溯源 的使用,但在本文中,我只想谈谈一个方面——我称之为“急切读取派生”。
DSL 迁移
DSL 支持者需要注意的一个危险是,认为首先要设计 DSL,然后人们才会使用它。像任何其他软件设备一样,成功的 DSL 也会不断发展。这意味着用早期版本的 DSL 编写的脚本在使用后期版本运行时可能会失败。
松懈的 Scrum
我最近听说过很多项目都存在一个问题。问题是这样的
- 他们想使用敏捷流程,并选择了 Scrum
- 他们采用了 Scrum 实践,甚至可能还采用了原则
- 一段时间后,由于代码库一团糟,进展缓慢
规则引擎
我应该使用规则引擎吗?