随便写写(3)

Subscribe Send me a message home page tags


如果说软件工程这门学科里有什么重要的思想,单元测试必定榜上有名。写单元测试现在已经是基本的操作了似乎没有什么新意,但是放在整个软件工程发展中去看,怎么也是数一数二的革新。

单元测试有很多美妙之处。首先新手也好,有经验的人也好,所有人在改动代码的时候都必须要写单元测试。在系统的复杂性面前,所有人都是平等的。写单元测试本身也是表明我们了解自身的局限,知道人会犯错。这种局限与自我感觉无关。觉得自己厉害也好不行也好,都得写测试。这种对局限的承认本身就很有价值。

单元测试的另一个用处是在修复系统错误和异常时,我们可以在单元测试中重现系统出现异常的整个流程。也就是说,它迫使我们深入了解为什么会犯错,系统在什么情况下会和预期出现偏离。不仅如此,新的单元测试还成为了一道防线,防止之后在修改代码重新引入同样的问题。

随着代码数量越来越多,系统会变得愈加复杂。单元测试本身将会成为系统真正的文档和系统行为的定义。某种程度上,凡是没有被单元测试覆盖的行为都是没有被定义的行为。

单元测试在软件工程中这么重要的实践对生活也有一定的指导意义。性格决定命运的说法已经深入人心,心理学里也有各种关于悲观性格乐观性格的讨论。性格之于成败相当于代码风格之于系统表现。诚然,不同的代码风格各有各的优劣,适用于不同的场合。但是真正重点应该是系统最终的表现,至于是以什么方式实现的并不重要。还是那句老话:不管白猫黑猫,捉到老鼠就是好猫。

人的一生是由一系列决定构成的。每个决定都可以看作是依据自身世界观和方法论的一次执行结果。决定产生的影响可好可坏,有些因素也非自身所能控制。但是重复同样的操作并企图获得不一样的结果则一定是徒劳的。所以复盘,尤其是对重大决策的复盘就变得非常重要。复盘就像是在写单元测试,一步一步复原事情的发展,然后分析究竟是在哪一步偏离了自己原先的预期。接下来便是如何改变自身的行为。人毕竟不是程序,没法修改几行代码就改变自身的行为。这里仍然可以借鉴单元测试的想法,而我们需要的工具其实非常简单,就是芒格推荐的清单。清单所列出的条目,实际上就是我们的行为预期也是获得较好结果的必要条件。随着经验的积累,面对不同情况所准备的清单也会变得更加细致复杂。最终清单将定义我们在不同处境下应有的行为。

说到底,事情也没有那么复杂。我们要做的仅仅是避免犯同样的错误。

----- END -----

Welcome to join reddit self-learning community.
Send me a message Subscribe to blog updates

Want some fun stuff?

/static/shopping_demo.png