如果我用相同的方式解决很多问题,我应该担心吗?


13

我真的很喜欢编程游戏和益智游戏创作者/游戏。我发现自己以相同的方式设计了许多此类问题,并最终使用了类似的技术对我非常满意的编程。

为了让您有一个简短的了解,我喜欢创建图形,其中节点用对象表示。这些对象保存数据,例如坐标,位置以及对其他相邻对象的引用。我将它们全部放入数据结构中,并在“游戏循环”中根据这些信息做出决策。

虽然这是一个简短的示例,但并非在所有情况下都准确。这只是我真正感到满意的一种方式。这不好吗?


如果您一直重复自己,为什么不创建一个可重用的组件?
Kugel 2010年

不一定,如果这是解决问题的一种好方法:)
haylem 2010年

4
如果您一直在重复自己,请编写一个库。
工作

@Bryan Harrington本人也遇到了完全相同的问题,我必须说,我在不同的领域工作,例如从业务逻辑(工作)到内核编程(在家)以及从C#(工作)到C ++(在家)。对我有很大帮助。我也养成了阅读开放源代码的习惯,这里 一些链接:)另外,您可以阅读GOF
Chani 2012年

Answers:


26

不,还好。

实际编程的目的是找到在许多类似的开发中可能有用的解决方案。您刚刚找到一个。

您不能也不应该仅仅因为它们不同而创建不同的解决方案。但是,您绝对应该每次都对您的解决方案进行批判性检查,并问自己它们是否仍然很好,或者从那以后行业已经取得了进步,您需要相应地进行调整。


对于最后一点+1,“问自己是否还不错,或者行业已经进步了”。您常常会看到优秀的程序员过时了,而糟糕的是,因为他们陷入了困境并且没有提高自己的技能
所以很糟糕

12

如果效果良好,则将其称为设计模式。如果不是,但您不了解更多,那就是金锤反模式。


1
这个。如果您发现自己在无法解决的问题上强制解决方案,这只是一个问题。如果所有问题都是指甲,则应使用锤子,但是如果发现自己要锤击螺钉,则应退后一步。
Satanicpuppy

@Satanicpuppy ...有时我们没有螺丝刀,并且有需要立即修复的问题。在这种情况下,锤子是给定时间可用的最佳工具。
CaffGeek 2011年

@Chad-一个令人不安的准确类比
normanthesquid 2011年

5

实际上,在我们的日常工作中,我们倾向于摆出很多非常相似的问题。

在这些情况下,坚持您所知道的可能会很好。我看到了许多实施不良解决方案的例子,人们实施了一些他们不了解的人,他们很好地使用了非理想的技术。

如果您很了解某些事情,那么您可以根据需要进行调整,并且您的实施将是可靠而有效的。在您第一次尝试新技术时,这些事情可能就不正确了。

但是反面是,如果您只有锤子,那么一切看起来都像钉子。您应该做一些事情以使自己意识到替代方案,并且在您可能将自己的收藏夹推得太远时。

也许选择一些非紧急/非关键的更改并使用它们来加快替代解决方案的速度?


4

好问题,我必须承认这也是困扰我的事情。

什么时候好?对代码进行性能分析-如果您看到自己处于O(log n)或O(n)或O(n log n)中,并且这样的问题可以映射到已知数据结构,通常就可以了。

什么时候不好?您的时间或空间复杂度为O(n ^ 2)或更糟,或者根据定义,问题是NP完全。在这些情况下,您需要应用一些启发式方法,应用其他领域的知识等。

快速示例:在芯片设计中,选择如何在电路中安排栅极以实现最低功耗是NP完整的。虽然这是必须的,但仅凭图形并不能为您带来很多好处。您需要阅读其他材料,有时需要跨学科阅读,并在您的领域中应用知识。例如,遗传算法(模拟生物学交叉和变异的算法,如生物学101中所定义)在设计硬件芯片中有许多应用。


3

不一定,如果这是解决它们的好方法:)

通常在“解决方案”上工作时,我会按以下顺序进行这些工作:

  • 简单
  • 可重用性
  • 而且只有最后的 表现

并不是说性能无关紧要:我在设计性能时就考虑了性能,但又没有将性能推得太高(因此,如果我需要在同一流程中调用StringUtils.isEmpty之类的实用程序方法或类似的方法,我不会介意)。如果需要性能(业务案例或用户体验问题),那么我会选择一种不同于简单且可重用的方法。务实。

但是奇怪的是,当用C编码时,我比使用Java编码时更关心性能……习惯的习惯:))



2

我认为图形是设计游戏来表示决策\选择的合适设计。请记住,可能可以对其进行完善和提高效率,而这可能不是其他领域的最佳解决方案。


2

如果有效,就可以了。

如果您担心过于依赖一种技术,请尝试做一个练习来解决一些已解决问题的变体,使您的解决方案无法使用。如果您可以概括更改以定义常规过程的适用空间,则可以加分。


2

如果您解决问题,那很好。直到没有更多问题之前,用什么方式都没有关系。


0

如果您的目标是生产产品,那么“开发人员艺术”实际上是正确的答案。并且,如果您的“工厂”生产的产品令人满意,则可以降温。

但...

如果您想学习新的(并且可能更好)的做事方法,则必须进行更改。这将产生失败,但只有通过失败,人们才能真正学会。通过这次新的学习,您也许可以生产出更好,更引人注目的软件。

这实际上是通过神经学研究来支持的。所以你去了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.