大约是一年前,我写了一篇关于我为什么不喜欢结对编程的帖子。此文也是对该帖子的补充。
至今为止我已经在加利福尼亚州科学院工作5个月了。我创建了一个由美国国家科学基金会资助的关于蚂蚁分类学的网站:antcat.org。
这是我作为一个程序员25年以来最棒的工作。
原因有很多:因为是在博物馆写程序,所以每天我都可以看到机灵可爱的鱼儿、稀奇古怪的蜥蜴以及五彩缤纷的蝴蝶;有关于Rails的全新应用;老板英明又随和;观众是在金门公园的科学家,距离我家只有10分钟路程。虽然报酬只有10万美金(编者注:只有?尼玛),比我好几年前拿的薪酬都低,但是有医疗保险,并且每周我只需报道两三次就可以了。
但是这项工作最加分的地方不是别的,而正如题目而言:我可以独自工作。
我不想自吹自擂说我有多么享受这份工作。如果我能接受一个活力又创新的团队——即使是与他们结对,这份工作可能会更加惬意。但是我接受不了。
原因很简单,单独工作就可以按自己的方式编程。这意味着95%的测试驱动;意味着敏捷开发——因为我会想着用最简单的方式去实现功能;意味着如果有必要我会添加Solr;也意味着可以应用我在这个行业沉浸了四分之一个世纪的经验;还意味着不会有任何喋喋不休的争论。
也可能只是我的运气不好,这么多年我共事过的这么多人中,我还没遇到过谁能与我分享关于精益开发,敏捷方法论,面向对象编程,数据库设计,或者甚至是结构化编程方面的想法和观点的。一些相关的观点我都是从都一些类似于Martin Fowler 和 Kent Beck这种传奇人物的著作上学到的。不过,很多显而易见的事情这些家伙都过于想当然了,比如避免过早的优化,还有遵循责任制原则等等。
老实说,我和我以前的同事在软件开发时有很多的互动都是关于争吵的。不过话又说回来,这些年来我已经变得婉转和有礼貌多了,也会很快做出让步(毕竟,我也可能是错的)。但总会有厌倦这种纯粹为了争论而争论的家伙(当然我不是)的时候。我只是想自己静下心来以自己的方式好好写代码。
我很清楚因为我的选择我错过了什么:我的方法可能实际上并不正确,但却没有人来给我指出;可能一直到最后,我不知道用其他方法来解决问题;毫无疑问bug更多;在做设计决策时,有时候会头脑发热选个浪费时间和精力的,而不会有人来提醒我。以上种种如果是在一个团队中,即使是结对编程,都是可以缓和甚至是避免的。说起结对编程,我还不得不承认,单独编程的工作效率是比不上结对编程的。列张表格的话,结对编程或者是在团队中工作,优势是“罄竹难书”的。但是,唯一的问题就是,我讨厌结对编程和团队工作。
我也很清楚,我可能看上去像是在主张“cowboy coder”的开发风格。话说在团队中的cowboy coder的确是个大麻烦。但是如果没有团队呢,这还是麻烦吗?
比起那些伴随着敏捷方法论长大的年轻人,关于这个问题孰是孰非的争论更多的是出自于我这一代人之口。我想说的是,比起喋喋不休的争执,我更愿意去学习更先进的理念,从1989年的OOP(面向对象的程序设计),到2000年的TDD(测试驱动开发实战), 以及今天的精益生产。 这也是我与我曾经共事的同事造成分歧的原因。
走到人生的叉路口,我相信心之所向才是最明智的选择。有的人做事情的唯一原因就是这事情让他们快乐(不论时间长短)。
而我喜欢单独编程的最底线是,这让我快乐。