我怎么知道我是否过度分析?
最近三天我一直在追查一个问题。我经历了许多设计,并使用大约 3 个类达到了一个复杂的解决方案。与同事讨论后,我意识到我所需要的只是一种方法和一个struct
. 我怎样才能避免成为一名建筑宇航员?
我怎么知道我是否过度分析?
最近三天我一直在追查一个问题。我经历了许多设计,并使用大约 3 个类达到了一个复杂的解决方案。与同事讨论后,我意识到我所需要的只是一种方法和一个struct
. 我怎样才能避免成为一名建筑宇航员?
我发现如果我不能在 30 分钟内想出一个好的清洁解决方案,几乎总是最好与其他人讨论。
即使他们不知道如何解决它,它通常也会触发更好的设计或解决方案。
所以和某人谈谈。
就个人而言,我真的不能抱怨任何实际上首先计划他们的软件的人!我这样做,但我知道很多程序员只知道如何直接跳入代码......而且我经常不得不修复这样的代码......
也就是说,您真正要问的是如何知道何时有更好的解决方案。
我给你的建议是反复问自己:我是在考虑解决方案的细节,还是考虑真正的问题?
避免成为架构宇航员的最好方法是养成直接参与的习惯。直接参与的最好方法是编写一些测试,当你的实现完整且正确时这些测试将通过。这迫使您从一开始就面对“完成”的含义,并且它提供了对随后代码的健全性检查。
然后寻求解决方案。
您现在可能是第一次到达那里,但是从“完成”的概念开始的练习将帮助您在进行过程中提出更好的问题,并且提前完成一些验收测试将有助于剔除将空间设计到合理的程度。
我曾经被这个问题困扰。设计一个可以处理未来大量增长的解决方案,而不是什么。确保它具有良好的抽象性,从而导致您遇到上述问题。
然后我抛弃了这种方法,把它全部打入一个大的肮脏的班级,也许两个。之后我重新考虑它,直到它类似于我希望其他人工作的东西。
我喜欢先做一些快速而肮脏的事情,当它起作用时,我会逐步重构代码,直到我对设计感到满意为止。
这也是TDD方法。
我发现自己遵循以下三个步骤来找到“理想”的解决方案:
如果我拥有世界上所有的时间和资源,那么最好的解决方案是什么。(技术上,逻辑上,性能上,可选地解决一些相关问题,重写你发现可以做得更好的模块......)在这里做你的(过度)分析,只是为了尽可能多地了解。运行测试、统计数据并创建概念验证。
和现在的情况有什么不同。两种解决方案的结果有什么区别。有没有更快的方法来获得相同或相似的结果。为什么这个或那个改变会解决手头的问题。做更多的测试,统计数据,更新你的概念证明。
找到一种方法来实现所需的更改,并且只有所需的更改,才能删除对这个更改不重要的任何内容。检查你没有修改任何没有问题的东西。对此进行测试,审查对代码、逻辑、结构的更改;并尽可能减少它们。
这听起来非常有限制(而且工作量很大),但实际上我发现自己在某些情况下最终会向数据库添加整个表。部分工作(因为要 100% 确定某事需要大量工作)是检查所有现有代码是否与要加入的额外表保持完全相同的工作。
最重要的是,在大多数情况下,在工作中,我们需要满足更新前保留在系统中的“过渡数据”,这些数据在更新后必须以同样的方式生产和运送。