从来没有一本书如此大影响我,这本书对我的影响有两个。
一、改变了我写程序的方法。不仅立即(一周)而且可能永远改变了我写程序的习惯。
二、让我开始学习和写python程序。
这是一本天才写的书,开创了新的软件方法论。这是一本200页的薄书,但以前所有软件工程的几十万页的书加在一起,应该也只与这本书的份量相当。以前软件工程的书只是对几千年的工程传统的不成功的拷贝和YY,但这本书写了程序自己的方法学,与和程序员自己的方法学。
以前软件工程的方法,说白了就是包工头管基建的方法。所以,一个好
的项目经理,常常不需要是一个好的程序员。这样管理下的程序员,与民工(严格地说是小工)也没有什么区别。
测试驱动开发,就是先写测试,再写程序,颠覆了先写程序再做测试的传统。优点是:
需求是明确的。
程序是符合需求的。
程序的高内聚低耦合的。传统方法中的不可企及的目标现在只是理所当然的结果。
程序是胆小怕事的程序员也敢修改的。
程序是久经测试的。
测试是自动的。
但是,为了“拥抱变化”,只有测试驱动开发是不完整的,当需求变化需要修改代码时,有时仅仅局部增加代码是不行的。测试驱动开发需要加上重构refactor才是完整的开发方法,才能修改好代码。所以学习这本书还应该学习refactor.
这本书通过一个个的例子的演化来说明重大的思想,基本采用的是java代码,所以,尽管学习这本书让人脱胎换骨,但学习过程不需要读者下苦功而是非常愉快。
这本书的部分例子采用了python代码,虽然不另学python也能顺利读完这本书,但不学python毕竟不能实践书中的例子。为了真正欣赏这本书,学习一点python是值得的。当然,一个程序员,学习pythoy本身就很值。
书评写了五年半了。
现在的java IDE eclipse已经支持先写测试,再写代码了。
比如,我先写一个测试类
package test;
import static org.junit.Assert.*;
import org.junit.Test;
public class TestMoney {
@Test
public void testUnit() {
Money money = new Money();
}
}
类Money我还没写呢,eclipse就会提示我,Money没有定义,问我要不要创建一个它的类。我点点鼠标,eclipse就会自动给我创建:
package rich;
public class Money {
}
并且在测试类中加入对Money的引用。
同样,我写下对Money的一个测试,其中调用Money的方法,
@Test
public void testUnit() {
Money money = new Money();
assertEquals("RMB", money.getUnit());
}
方法getUnit()还没有呢,eclipse又会提醒我,于是,再点点鼠标,eclipse又会自动生成:
public Object getUnit() {
// TODO Auto-generated method stub
return null;
}
然后修改为:
package rich;
public class Money {
private static final String unit = "RMB";
public String getUnit() {
return this.unit;
}
}
我们可以看到,我在测试中写对类及其方法测试用例,eclipse可以自动生成这个类及其方法的框架。
现在用eclipse来按测试驱动开发写java代码,真是太爽了。