你如何防止过度复杂的解决方案或设计?[关闭]
-
01-07-2019 - |
题
很多时候,我们发现自己正在一个问题,只有找出解决方案正在建立的是更复杂的问题需要。有控制、最佳做法、技术等,可帮助你的控制并发症,在你的工作?
解决方案
越来越新的人来看待它。
其他提示
如果它也很难对其进行测试,你的设计太过复杂。这是第一个量度我的使用。
以我的经验,设计为一个过于一般情况下往往会滋生太多的复杂性。
工程文化,鼓励设计,使更少的假设有关的环境;这通常是一件好事,但有些人要把它看得太远。例如,它 可能会 可如果您的汽车的设计并不假定一个具体的引力,没有人实际上是要你开车在月球上,如果他们这样做,它不会的工作,因为没有氧气以使燃料的燃烧。
困难的部分,个人是发展的"工作上任何星球"的设计往往被视为聪明的,所以,你可能必须更加努力地工作,以争辩说,他的设计 太 聪明。
理解的权衡,因此可以做出决定之间的良好设想和坏的假设,将很长的路要走,进入避免不必要的复杂的设计。
这里有一些想法,以帮助设计更简单的:
- 读一些编的书籍和文章,然后 适用 他们在你的工作及编写代码
- 阅读大量的代码(好的和坏的)由其他人(如开放源的项目)和学习来看看有什么可行和什么不
- 建立安全网(单位测试)使实验用你的代码
- 使用的版本控制,以使回退,如果这些试验采取转错了
- TDD(试验驱动的发展) 和 BDD(行为驱动的发展)
- 改变你的态度,询问如何可以使这样, "它只是工作" (《公约》通过配置可以帮助;或者询问如何苹果将这样做)
- 实践(喜欢爵士乐的玩家--酱代码,试试 卡塔码)
- 写同样的代码多次,用不同语言和之后的一段时间已经过去了
- 学习新的语言有新的概念(如果您使用的是静态的语言,学习动态的一个;如果您使用的程序语言,学习功能中的一个;...)[一种语言,每年大约是正确的]
- 请别人来审你的代码和积极地问你怎么可以让你的代码的更简单和更优雅(然后使它)
- 获得年下你的皮带做以上的东西(时间有助于活跃的心灵)
我创建了一个设计等等, 然后我看着它,试试,并删除(强制)的一切,似乎并不是必要的。如果事实证明,我需要它以后当我是抛光设计我加入它。我这样做过几次迭代,炼油作为我走。
读"工作有效地与传统的代码",由迈克尔*C。羽毛。
这一点是,如果有代码的工作,并且需要改变设计,没有什么比做你的代码可测试单元,并打破你的代码成更小的碎片。
使用测试驱动的发展和下罗伯特*C。马丁的 三个规则的使用:
- 你是不是允许写信任产生的代码,除非是让一个失败的单元测试通过。
- 你是不允许写入任何更多的一个单元的测试,比是充足的失败;和汇编失败故障。
- 你是不允许写入任何更多的生产比足以通过一个失败单元的测试。
在这样你不可能得到多少代码,你不需要的。你总是会侧重于制作一个重要的工作,并永远不会走得太远远超过自己的条款的复杂性。
首先测试 可能在这里帮助,但它并不是适合所有情况。它不是灵丹妙药。
从小事 是另一个伟大的想法。你真正需要的东西所有10个设计图案为这件事情吗?首先尝试这样做是"愚蠢的方式"。不很切?好的,做到"稍微少愚蠢的方式"。等等。
得到它的审查.作为别人写的,两对的眼睛更好。甚至更好的是两个大脑。你的伴侣可能只是看到一个房间,用于简单化,或者问题的地方你认为是好的,只是因为你花很多时间黑客攻击。
使用精益的语言。 语言,例如爪哇,或有时会用C++有时似乎鼓励讨厌的,令人费解的解决方案。简单的事情往往跨越多个代码行,你只需要使用3个外部图书馆和一个很大的框架来管理它所有。考虑使用蟒蛇,红宝石,等等。-如果不是因为你的项目,则对于一些私人使用。它可以 改变你的思想 有利于简单,并可以放心的是,简单是可能的。
这是不可避免,一旦你有了一个程序员,这将会发生。如果你真的有unestimated的努力,或打一问题在那里解决方案只是不工作然后停止编写,并得到说你的项目经理。我总是喜欢采取的解决方案,与我的次会议上,问题是,你可以做到x,这将需要3天或者我们可以试试y这将需要6天。不要做出的选择自己。
- 跟其他程序每个步骤的办法。更多的眼睛有关的设计,更有可能过于复杂的方面揭示了早期之前,它变得太僵化的代码。
- 不断地问自己你将如何使用任何你目前的工作。如果回答是你不确定,停止重新考虑你在做什么。
- 我已经找到了有用的记下来思考如何能简化的东西我目前的工作。这样,一旦我确实有它的工作,它更容易返回并重构或恢复必要的,而不是搞什么,甚至没有的功能。
这是一个微妙平衡的行为:一方面你不想要的东西,这需要太长的设计和实施,另一方面你不想一个黑客的,不是复杂的,足以处理下周的问题,或者更糟糕的是需要改写,以适应。
一对夫妇的技巧,我找到帮助:
如果事情似乎更为复杂的比你想的那么不坐下来实现它尽快完成考虑。找点别的事情做对的其余的一天。许多次,我的思维的不同解决方案的早期问题的一部分,消除了很多的的复杂性。
在一个类似的静脉有别人你可以弹的想法关闭。确保你可以向他们解释为什么复杂性是有理由的!
如果你正在增加的复杂性,因为你认为这将是有理由在未来的然后试图建立 时 在未来你将使用它。如果你不可以(切实)想象的要复杂性的一年或三个那么它可能是不合理的支付。
减少量的数据你的工作与通过serialising的任务变成一系列较小的任务。大多数人只能持有的一半,十几(加上或减去)的条件下在他们的头的话,编码,所以该单元的实施。设计用于所有的任务需要完成,但然后无情地的黑客设计这样,你从来没有发挥有超过半打的路径,虽然该模块。
这Bendazo后的简化,直到它变得容易。
我问我的客户 为什么 他们需要一些特征。我试着找到他们的要求和标识的问题,他们正在经历。这往往使其本身更简单的解决方案,比我的(或他)会想到的。
当然,如果你知道你的客户'的工作习惯以及有什么问题,他们必须解决,可以了解他们的问题要好得多,从获得。如果你"知道他们"知道他们,然后你了解他们的语言更好。所以,开发一个密切的工作关系,与你的用户。它的步骤零的工程。
需要时间来名称的概念的系统,并且找到的名字是相关的,这使得系统更加熟悉。不要犹豫不决,重新命名的概念,更好地连接到世界,你知道,好你的大脑可以与它的工作。
要求人人得到他们踢从清洁的、简单的解决办法。
只有实现的概念需要由当前项目(a希望未来的或通用的系统使你的设计臃肿).