请将[client],[boss]或下面的任何内容替换为您想要的任何内容。有一天,在工作中...来自客户的Bug#3890:程序中出现错误,程序提示“SpeedCalculator::compute()中出现被零除”。请尽快修复它!您打开SpeedCalculator.php并找到:publicfunctioncompute(){return$this->distance/$this->time;修复错误很容易!这段代码是谁写的,他为什么不需要一点脑子!publicfunctioncompute(){if($this->time==0){return0;}返回$this->distance/$this->time;你就这样修改了,这个bug只用了你2分钟。后来同样的bug出现在RatioCalculator和MoneyCalculator,修复的时候,团队里的每个人都认为这个问题不会再发生了,这就是最后一次了!代码现在又可靠了!一个月后,又出现了一个bug。这次程序没有崩溃,但是客户发现报告中的计算结果是错误的,原因是代码修改了return0;这句话。如果我们退一步看问题,我们不是急着编辑,而是退一步,用更广阔的视野看一些问题。为什么会这样?因为$this->time被赋值为0。简单!让我们阻止这种情况发生。publicfunctionsetTime($time){if($time==0){thrownewInvalidArgumentException("Invalidvalue");}$this->time=$time;}这样修改后的效果不是更好吗?您保证数据的正确性。但是这样客户不是很开心,因为当他输入0时,程序会跳转到错误页面。那么,您应该在控制级别捕获错误并让它们显示在一个漂亮的错误页面上。完成后,您意识到您应该在RatioCalculator和MoneyCalculator中执行相同的操作,因此您复制/粘贴并修改它们。等一下,客户更喜欢以橙色而不是红色显示错误消息。因此,您再次复制/粘贴并再次修改它。退后一步,如果我们发现了一个共同的需求而不是修复这个错误怎么办?客户为什么要输入0?因为他犯了一个错误。这对我们有什么要求?我们这次是否只需要阻止用户输入0来避免“speedCalculationForm=0”?我们只需要让“speedCalculationForm”中的数据合法吗?或者,我们是否继续验证所有用户输入?为什么不开发一个验证工具包?等待!不要自己开发!请退后一步,深吸一口气,并使用现有的第三方验证框架。关于需求我们程序员热爱计算机技术。当您的客户或老板脱口而出他们想要什么时,我们无法阻止它,我们只能想象如何实现它。然而,我们需要更全面地看待这个问题。如果我们想对自己的工作更加负责,就应该理解他们为什么提出这样的要求,而不是急着想办法。当然,这可能会消耗你更多的精力。客户真的想要“隐藏鼠标点击的闪烁按钮”吗?或者是他们需要的另一个功能——一个他们不理解的功能,一个需要你帮助他们定义的功能?同样的事情也会发生在你自己身上!您真的需要用程序打开文件并向其中写入一些信息吗?或者,您真正需要的是一个日志系统?退一步看问题,画面越大,信息越全。虽然你是一个非常优秀的编程高手,但是编程的目的是为了解决问题。原文链接:做一个更好的程序员:退一步
