驱动测试开发(TDD)是唯一能让你写出没有 bug 的程序的方法。只有结对编程是可行的。我们之所以成功就是因为我们使用的是远程开发人员。等等等等……
像这样的话每天我都能看见。
像这样的风言风语十分能蛊惑人心,它愚弄我们,让我们认为这就是我们不能遇到阿拉丁的那个茶壶里的精灵的唯一原因。最终,这些人所写的会让你也这么认为。
如果你随机找 100 个程序员,问他们“开始一个新项目前首先想到的技术方案是什么?”相信你会得到 100 种不同的回答。
那么,为什么有这么多的人看起来坚信自己的方法才是唯一可行的?
在我看来,这答案既十分的简单,又十分的复杂。说简单,是因为有些人就是喜欢说。说复杂,是因为软件业实际上是一系列亚文化的聚合,它们不断相互对抗来保卫自己的职业安全。我知道,这话有多重含义。
我之所以会谈论这些,全是因为昨晚读到了 Chris Sturgill 的一篇文章,是关于测试以及它们如何被过度吹捧。文章提到的所有观点都有理有据,令人信服。
但这篇文章后面跟随的评论描述的却是一副完全不一样的景象。如果你不看文章只读评论,你会以为 Chris 脑子进水了或出来什么其它事。他怎么敢质疑TDD?他怎么胆敢质疑测试驱动文化的有效性?
看了这些评论后,我感觉有一股力量在逼迫我去写点什么。但我的这篇文章绝对不是来讨论什么 TDD 的。我想讨论的是如果成为一名优秀的软件开发人员。
让我们进入正题。
软件开发中没有所谓“正确”的方法。我重申:软件开发中没有所谓“正确”的方法。编程界里有些人喜欢搞图腾崇拜,他们拒绝接受这样的事实。他们执着于几小时前刚学到的一些诱人的新出现的热门技术,他们认为这是能让工作做好、能开发出可信赖的软件的唯一办法。
我很抱歉让你们失望。这些新出现的热门技术很可能并不新。很可能只是一些曾经流行的技术的新的市场炒作。从另一方面讲,你抛弃以前学到的所有东西,你改变以前的所有做法,你全面拥抱你学到的这个新的“唯一”的方法。事情不是这样的。别这么做。
做一个优秀的程序员就意味着你要学会妥协折中。这意味着在A项目是你需要使用一种技术方案而在B项目上你需要使用另外一种。这意味着你需要在你的思路和老板/客户的要求之间做平衡。很多时候事情并不能做到双方达成统一,但这并不意味着你该懊恼、痛斥为什么不按你的思路去做。
真正重要的是,秉持自己的观点,但柔软的应用。
只有这样,你才能走的更远。