书中的文章在技术深度、详细程度、新观点/新成果的数量等方面各有千秋,但它们有一个共同的特点:都密切关注实践。这群作者真正做到了思行合一,如此既有思想深度又立竿见影的好书我已多年未见了。

Stefan Tilkov. CEO, innoQ

有这样一家企业,当整个IT行业都对定制软件开发的难度望而却步时,他们敢于挑战这个难题。这本文集让我们得以管窥这家企业内部观点的多样性──这正是他们勇气和力量的源泉。

W. James Fischer. 前CTO/资深合伙人,Accenture

从CruiseControl等大获成功的开源项目,到博客和会议上分享的观点,你都能感受到ThoughtWorks的影响力。身处其外的我们不时会想象,这家公司内部究竟进行着怎样的讨论?这本书就是一个难得的机会,让读者们拉开幕布,参与到讨论之中──你会因此成为一个更出色的软件开发者。

Nathaniel T. Schutta. 作者/讲师/教师

软件开发很大程度上是一种团队活动,团队的领导者将决定最终产品的水准。成功的组织经常不会花时间来记录这些领导者的经验,于是其他人也无法学习这些经验。这本有趣的文集由ThoughtWorks的一组领导者共同编撰,透过这些文章我们能看到ThoughtWorks企业文化之一斑。

Dave Thomas. Bedarra Research Labs

软件开发中最了不起的洞见都出自那些为真实客户解决真实问题的人。然而除了在恒河沙数的博客中淘金之外,几乎没办法找到这些洞见。十年来,ThoughtWorkers解决了大量真实问题,所以当他们决定把自己的经验整理结集,这实在是一件令人欣喜的事。

Gregor Hohpe. 《Enterprise Integration Patterns》作者

这本文集精彩地论述了如何在如今的商业环境下恰当运用编程语言和工具来开发软件。这组作者都是软件世界里身经百战的老兵,他们的经验值得一看。

Terence Parr. ANTLR项目领导,San Francisco大学

ThoughtWorks 素来以其在软件开发上的经验与智慧闻名于世,这本文集出色地汇集了这些经验与智慧,使我们得以从中受益。这本书将被频繁引用,它将出现在每个项目组的书架上。

Jeff Brown. 北美运营总监,G2One

Eclipse@Beijing

July 23rd, 2009

It started from 8:25AM, July 22. But it was cloudy and we couldn’t see sun until around 9:30…

DSCF7558

It looked like moon…and as I said, it was cloudy, which made the ‘eaten sun’ looked more like moon…However, moon could never look like this…

DSCF7576

So…that was it. Yusiew sent a message to my mobile said ‘it’s amazing’. Err…it was not really amazing watching a partial eclipse from Beijing. It even didn’t turn dark. Disappointing.

无欲则刚

July 17th, 2009

今天是怎么回事呢?

除了奇怪的天气和奇怪的事情之外,一打开豆瓣又看到某老师为了推销主打书竟然赤膊上阵连五毛行径也用上了。

上次建议豆瓣给投票加上权重时,真没有想到会有如此不爱惜羽毛的老师呢。

风说,利欲熏心这个熏字很形象。范进中举,教给猪油蒙了心。

博之以文,还得约之以礼不是?

子曰,见贤思齐,见不贤而内自省。

When doing performance in local box, we found that requests are waiting to be processed due to Rails is single-threaded by default. We changed the configuration to enable multi-threaded mode as described in this blog entry:

Thread safety for your Rails

(also refer to Rails 2.2 release notes )

The most important change was to eager-load /lib directory, and thus move libraries for test out of it.

config.threadsafe! also disables automatic loading by ActiveSupport::Dependencies. Alternatively, you can just add lib/ directory to eager load paths. The following inside production.rb will do that :
config.eager_load_paths << "#{RAILS_ROOT}/lib"

We had some rough tests to ensure the functionality is not broken. Multi-threaded mode also might require more memory than single-threaded mode. Still keep testing.

Tech Lead的三重人格

July 15th, 2009

ThoughtWorks项目中tech lead的三顶帽子

  1. 技术决策者
  2. 流程监督人
  3. 干扰过滤器

温伯格定义技术领导者的三种功能

  1. 定义问题
  2. 管理思想的交流
  3. 保证质量

(摘自《 ThoughtWorks文集 》,第6章,“对象健身操”)

规则2. 拒绝else关键字

每个程序员都熟知if/else结构。几乎每种语言都支持if/esle。简单的条件判断对于任何人来说都不难理解。不过大多数程序员也见识过令人眩晕的层层嵌套的条件判断,以及连绵数页的case语句。更糟糕的是,在现有的判断条件上加一个新的分支通常是非常容易的,而将它重构为一个更好的方式的想法却罕有人去提及。条件判断结构通常还是重复代码的来源。例如,状态标识经常会带来这样的问题:

public static void endMe() {
    if (status == DONE) {
        doSomething();
    } else {
        // other code
    }
}

你有很多种方式重写这段代码,去掉else关键字。例如下面的代码:

public static void endMe() {
    if (status == DONE) {    
        doSomething();
        return;
    }
    // other code
}

public static Node head() {
    if (isAdvancing()) { return first; }
    else { return last; }
}

public static Node head() {
    return isAdvancing() ? first : last;
}

在上面的例子中,第二段代码由于使用了三元运算符,所以代码长度从四行压缩到了一行。需要小心的是,如果过度使用“提前返回”,代码的清晰度很快会降低。《设计模式》[GHJV95]一书中关于策略模式的部分里有一个实例,演示了如何使用多态避免根据状态进行分支选择的代码。如果这种根据状态进行分支选择的代码大量地重复,就应该考虑使用策略模式了。

面向对象编程语言给我们提供了一种更为强大的工具——多态。它能够处理更为复杂的条件判断。对于简单的条件判断,我们可以使用“卫语句”和“提前返回”替换它。而基于多态的设计则更容易阅读与维护,从而可以更清晰地表达代码的内在意图。但是,程序员要做出这样的转变并不是一帆风顺的。尤其是你的代码中可能早已充斥了else。所以,作为这个练习的一部分,你是不可以使用else的。在某些场景下可以使用 Null Object 模式,它会对你有所帮助。另外还有很多工具和技术都可以帮助你甩掉else。试一试,看你能提出多少种方案来?

过犹不及

July 6th, 2009

道也者,不可须臾离也;可离,非道也。是故君子戒慎乎其所不睹,恐惧乎其所不闻。

(离,去声。○道者,日用事物当行之理,皆性之德而具于心,无物不有,无时不然,所以不可须臾离也。若其可离,则为外物而非道矣。是以君子之心常存敬畏,虽不见闻,亦不敢忽,所以存天理之本然,而不使离于须臾之顷也。)

莫见乎隐,莫显乎微。故君子慎其独也。

(见,音现。隐,暗处也。微,细事也。独者,人所不知而己所独知之地也。言幽暗之中,细微之事,迹虽未形而几则已动,人虽不知而己独知之,则是天下之事无有着见明显而过于此者。是以君子既常戒惧,而于此尤加谨焉,所以遏人欲于将萌,而不使其滋长于隐微之中,以至离道之远也。)

子曰:「道之不行也,我知之矣:知者过之;愚者不及也。道之不明也,我知之矣:贤者过之;不肖者不及也。」

(知者之知,去声。道者,天理之当然,中而已矣。知愚贤不肖之过不及,则生禀之异而失其中也。知者知之过,既以道为不足行;愚者不及知,又不知所以行,此道之所以常不行也。贤者行之过,既以道为不足知;不肖者不及行,又不求所以知,此道之所以常不明也。)

AgileChina 2009大会官方网站

由在敏捷领域最具有影响力的技术社区InfoQ中文站、敏捷方法论的领导厂商 ThoughtWorks共同主办的敏捷中国技术大会(Agile China 2009),将于9月11日~12日(周五、周六)在北京举行。届时将有超过500人来自电信、金融、互联网、教育等行业在内的高级软件开发人员、项目管理人员等参加。本次大会将特别邀请敏捷宣言缔造者、敏捷编程(XP)方法学创始人Kent Beck,敏捷开发权威人士、敏捷宣言的创始人之一,Dave Thomas,敏捷宣言签署人之一Steve Freeman等国际敏捷领域专家,以及在团队中成功应用敏捷的阿尔卡特、赛门铁克、诺基亚-西门子、华为、腾讯等公司的项目负责人参与此次大会并分享他们的心得。

敏捷中国技术大会(Agile China 2009)是国内敏捷技术领域最高水平的大会,本次大会将由InfoQ中文站负责大会策划、营销和项目实施。InfoQ中文站在今年4月已成功举办了 QCon全球企业开发大会,邀请了国内外30多名讲师,超过550位架构师、技术总监、项目经理和高级工程师参加了本次大会,大会及其运营团队获得了空前的好评,并誉为国内“技术含量最高”的大会。而今年的敏捷中国技术大会,也将一改往年的风格,参会者以高端开发者和技术管理者为主,融合管理和工程实践,推广全面敏捷之路。

会务咨询: 010 – 89880682 agilechina@cn.infoq.com

赞助咨询: 010 – 89880682 sponsor@cn.infoq.com