很可能你从来没有写过一行糟糕的代码。这是可能的,但在现实中不太可能。现实情况是,就像地球上的所有其他程序员一样,您会为安全漏洞、偏移UI元素等编写代码。它不会使您成为糟糕的开发人员。仅仅因为你是人——一个不可避免地会犯错误的生物。正是这种每个开发者都存在的“人性”缺陷,驱使那些优秀的开发者敢于承担代码和底层基础设施的短板,有准备、有计划地行动。这是他们会做的。假设几年前,Netflix开源了ChaosMonkey和SimianArmy(SimianArmy是一套用于管理基于云的软件的工具)的其他部分。从本质上讲,ChaosMonkey的范围遍及AmazonWebServices的基础设施,能够随意终止实例。这基本上是一种通过创造最坏的情况来为最坏的情况做准备的方法。正如Netflix的CoryBennett和ArielTseitlin在发布时写的博客,“代码会失败,你越不想失败或没有准备,它就越不可避免。如果你的应用程序不能容忍实例失败,那么你宁愿在凌晨3点被传唤,还是整晚待在办公室里?”通过以不可预测的方式模拟故障,Netflix强制将重点放在基础设施弹性上。与其假设最坏的情况,不如为最坏的情况做好准备。这样我们就可以愉快地进入下一个过程。测试我们上面说的是一个改善基础设施的好方法,但是代码呢?程序员JeffAtwood的回答是:“你需要摆弄你的代码。”他写道:我相信每个专业程序员职业生涯的关键转折点是当你意识到你是你自己**唯一的敌人,减轻这种威胁的唯一方法就是当时接受它。把你自己想象成你绝对的敌人。破坏你的用户界面。破坏你的代码。摆弄你的软件。在实践中,这意味着“程序员至少需要对常见的错误有一定的了解,然而,许多程序员往往不这样做,甚至相反。”这意味着你的“编程之神”的责任还包括做一个“测试之神”,积极进取以琳通过“扭曲”代码来消除错误。AndreMedeiros补充说,我们应该在调试方面“变得更好”,因为开发人员需要对他们的代码做更多的事情。“为了防止错误,你需要编写对任何程序员都容易的代码。为了修复错误,你需要理解你的代码。为了复杂地理解代码,你需要列举和验证你的假设,如果有必要,你需要理解你的代码。你还需要构建调试工具。”贫民窟上的摩天大楼当然,我们代码的最大问题之一是它继承了太多其他代码。尤其是在成熟的企业中,我们经常在遗留代码上构建,这会导致各种扩展问题。下面是ZeynepTufekci的精彩描述:将其比作盖房子——也就是说,您要在已经盖好的一楼之上盖二楼。但是房子刚盖的时候,没盖好,地基没打好,不知道哪边是承重墙。您只能尽可能地猜测并建造地板-用您的手指。然后你继续去做。这就是许多控制基础设施关键部分的旧软件系统的运行方式。它确实奏效了一段时间,但每一层新的楼层都意味着增加了更多的漏洞。我们正在用代码在贫民窟上建造摩天大楼——在地震区。显然,除非我们能够努力消除技术债务,否则我们无法改善这种情况。但也许,只是也许,在心甘情愿地乱写代码的过程中,你会发现消除技术债是如此重要。
