2

我怎么知道我是否过度分析?

最近三天我一直在追查一个问题。我经历了许多设计,并使用大约 3 个类达到了一个复杂的解决方案。与同事讨论后,我意识到我所需要的只是一种方法和一个struct. 我怎样才能避免成为一名建筑宇航员

4

6 回答 6

5

我发现如果我不能在 30 分钟内想出一个好的清洁解决方案,几乎总是最好与其他人讨论。
即使他们不知道如何解决它,它通常也会触发更好的设计或解决方案。

所以和某人谈谈。

于 2009-05-26T14:33:54.780 回答
2

就个人而言,我真的不能抱怨任何实际上首先计划他们的软件的人!我这样做,但我知道很多程序员只知道如何直接跳入代码......而且我经常不得不修复这样的代码......

也就是说,您真正要问的是如何知道何时有更好的解决方案。

我给你的建议是反复问自己:我是在考虑解决方案的细节,还是考虑真正的问题?

于 2009-05-26T14:38:12.057 回答
1

避免成为架构宇航员的最好方法是养成直接参与的习惯。直接参与的最好方法是编写一些测试,当你的实现完整且正确时这些测试将通过。这迫使您从一开始就面对“完成”的含义,并且它提供了对随后代码的健全性检查。

然后寻求解决方案。

您现在可能是第一次到达那里,但是从“完成”的概念开始的练习将帮助您在进行过程中提出更好的问题,并且提前完成一些验收测试将有助于剔除将空间设计到合理的程度。

于 2009-05-26T15:25:39.510 回答
0

我曾经被这个问题困扰。设计一个可以处理未来大量增长的解决方案,而不是什么。确保它具有良好的抽象性,从而导致您遇到上述问题。

然后我抛弃了这种方法,把它全部打入一个大的肮脏的班级,也许两个。之后我重新考虑它,直到它类似于我希望其他人工作的东西。

于 2009-05-26T14:33:28.587 回答
0

我喜欢先做一些快速而肮脏的事情,当它起作用时,我会逐步重构代码,直到我对设计感到满意为止。

这也是TDD方法。

于 2009-05-26T14:38:49.747 回答
0

我发现自己遵循以下三个步骤来找到“理想”的解决方案:

  1. 如果我拥有世界上所有的时间和资源,那么最好的解决方案是什么。(技术上,逻辑上,性能上,可选地解决一些相关问题,重写你发现可以做得更好的模块......)在这里做你的(过度)分析,只是为了尽可能多地了解。运行测试、统计数据并创建概念验证

  2. 和现在的情况有什么不同。两种解决方案的结果有什么区别。有没有更快的方法来获得相同或相似的结果。为什么这个或那个改变会解决手头的问题。做更多的测试,统计数据,更新你的概念证明。

  3. 找到一种方法来实现所需的更改,并且只有所需的更改,才能删除对这个更改不重要的任何内容。检查你没有修改任何没有问题的东西。对此进行测试,审查对代码、逻辑、结构的更改;并尽可能减少它们。

这听起来非常有限制(而且工作量很大),但实际上我发现自己在某些情况下最终会向数据库添加整个表。部分工作(因为要 100% 确定某事需要大量工作)是检查所有现有代码是否与要加入的额外表保持完全相同的工作。

最重要的是,在大多数情况下,在工作中,我们需要满足更新前保留在系统中的“过渡数据”,这些数据在更新后必须以同样的方式生产和运送。

于 2009-05-26T14:49:37.243 回答