尽管时间紧迫,如何编写有效的代码


28

我在一个环境中工作,在这个环境中,我们有许多项目都对交付物有严格的期限。我们甚至直接与客户交谈,因此必须快速完成工作。

我的问题是,我总是会为想到的第一个解决方案编写代码,当然我当时认为这是最好的。尽管它总是以丑陋而告终,但我后来才意识到,有更好的方法可以做到这一点,但由于时间限制,它无法承担任何更改。

有什么技巧可以使我的代码高效而又准时交付?


11
不要只关注有效的代码,而要关注正确的代码。那要远得多。为后续版本节省效率。
Jesse C. Slicer

Answers:


23

如果需要维护代码,请说明需要更多时间来使代码更具可维护性,这将为他们节省后端费用。换句话说,将可维护代码作为一项要求。

如果他们不在乎,我认为您不需要做任何其他事情,除了一直变得更好并尽力而为,您可以尽可能地结合最佳实践。


3
是的,我同意所有这一切,除了在现实中很少有这种效果。您的老板想要在X日期之前完成某件事并且不会让步?太糟糕了,您仍然必须将其完成,或者您可以在其他地方找到工作,而这通常不是一个选择。
Ed S.

4
@EdS。在其他地方找到工作始终是一种选择……这被称为“维持职业”,这需要时间和精力。
Spoike

17

好的,这听起来有些疯狂,但是我发誓它可以工作。这不仅用于编程,而且是增加创造力,专注力和记忆力的秘诀:

  • 吃好
  • 幽思
  • 获得充足的睡眠(7-9小时,具体取决于人)
  • 大脑模糊时小睡
  • 带着未解决的问题入睡。一切都不要结束。待完成一项艰巨的任务-您的潜意识非常有效。
  • 穿舒适的衣服
  • 行使
  • 花时间进行死记硬背的心理锻炼-数独(未编程),填字游戏,数学练习,空间难题等
  • 对自己进行客观实验,以查看哪些行为会影响性能(您将需要一种可靠的方法来测试性能,以使其正常工作)。
  • 照顾您的精神健康
  • 棉质内裤
  • 保持性健康
  • 为您的家人和朋友腾出时间
  • 精通专业以外的领域(音乐,烹饪,运动等),并与其他从事相同工作的人交往
  • 对于某些人来说,宠物是必须的

在不知不觉中,您将看到编程效率和解决方案质量得到显着提高(更不用说其他方面的改进了)。

资料来源:

  1. 您的奇迹大脑:发挥最大的才能,增强记忆力,提高心情,提高智商和创造力,预防和逆转精神衰老
  2. 量化的自我
  3. 塞斯·罗伯茨Seth Roberts) - 《科学美国人》杂志

6
您忘记了:没有咖啡因。
Christopher Mahan

您忘记了:编码时不要看PORN!谢谢!
阿米尔·侯赛因

9

这是违反直觉的,但您可能需要放慢速度。当您实现想到的第一个解决方案时,会为您自己创建很多额外的工作。我所说的“顺路而上”,是指最早在当天下午晚些时候。您为自己创建的问题无需花费数月的时间。考虑您的选择。少输入,多思考。即使在一个简短的项目中,您也会发现更少的编码实际上可以使您加速。

如果您的客户聚集在特定行业,请尝试构建具有可重用组件的项目。不编写代码比编写代码要快。

从您的客户的角度来看,这闻起来有点像“ 快,好,便宜,选两个 ”。当然,我们都希望我们立即得到我们想要的东西,但是您的客户需要考虑从长远来看是否最好。尝试阐明权衡并帮助他们做出正确的决定。


我同意这一点。在开始编码之前,请考虑两种或三种可能的方法。然后,根据易于实现,易于测试,效率和可扩展性的组合,做出选择。
欧米茄Centauri'3

8

寻找另一份工作。

大约6个月后,您会发现。一年之内,您将不会为自己所做的工作感到自豪。此外,您将花费大量时间学习新技术,技术或框架-因此,一年之后,您将无法跟上新技术的发展。一年后,相对于市场,您将是一个比起步时更糟糕的程序员。

如果时间流逝(比如说几年或更长时间),那么您将很难在任何地方被录用,除了这些快节奏的工作,这些工作不重视质量代码,只有速度。

就是说,作为一种“现实世界”的学习经历,对于快节奏的环境来说要说些什么,但是我要说大约6个月。足够。除此之外,您还应该与一些招聘人员联系,寻找更好的地方。老实说,您会更加快乐。


2
您所说的“ mos”是什么意思。?
Darius.V

莫斯 =月。还有两个字符要走
gnasher729

我不认识你,但是波斯语中的“ mos”含义不好。这意味着屁股。;)
AmirHossein

3

从您的客户看来,代码效率可能不是那么关键,而是可能非常昂贵。这些天花在编写代码上的时间需要节省数小时的CPU时间,以证明您花费了一个小时的时间。对于大多数程序而言,效率并不是那么关键。即使是这样,大多数代码也不需要那么高效。给出选择后,我更倾向于一种易于维护的解决方案,而不是更高效,更难以维护的代码。

在开始之前花时间计划编码可能会给您时间来评估解决方案并考虑替代方法。这样可以节省您进行编码和测试的时间。我发现通常更简单的代码会更有效。

使用尽可能多的行来清晰地布局代码。复杂的代码可能会使优化器困惑,并可能导致代码变慢。现代的编译器非常擅长优化代码,相信它可以完成工作。

接受足够好就足够了。当您想出更有效的方法时,请给自己做个注释。如果您有时间,可以将一些更有效的设计与实现的设计进行比较。在小型程序(仅是受影响的代码)和大型程序(使用它们的程序)中尝试它们。这会给您一种何时使用更有效的方法的感觉。

许多人认为过早优化是一种不好的方法。实施起来可能会很昂贵。不幸的是,许多过早的优化实际上并没有像它们优化的代码那样高效。为了正确地优化代码,您需要在更改前后对代码进行检测,以查看是否确实提高了效率。

研究技巧可帮助您编写耦合度低且内聚力强的简洁代码。在许多情况下,降低复杂度可提高效率。帮助您最大程度地减少开发期间必须修复的错误的技术将帮助您更快地交付。这样可以腾出时间来测试替代方法。


1

罗伯特介绍了最重要的方面。

我曾在这样的环境中工作,在该环境中,代码无法(不能)生存超过六个月。我可以想到一些经验法则:

  1. 使用开源库,第三方解决方案等。通过减少维护和调试工作,您可以从中受益。但是,如果您遇到了一个有问题的库,那么注定要失败。
  2. 严格确保您的设计是可扩展的。一项强制性要求:大多数工作来自改进,而不是构建新功能。
  3. 制定严格的测试计划。获取质量检查或自动化测试以确保进行回归测试。
  4. 使用智能工具-IDE,代码生成实用程序等。
  5. 保持事物尽可能可配置。(反面是加大测试力度)
  6. 提高打字速度:-)

1

在设计阶段,与同事交谈

讨论您的设计以及您想如何做,并让他们仔细检查您的决定。如果大家都同意什么是聪明的,那么您的设计就会更合理。


1

实践。练习编写好的代码,直到它成为第二本性。然后练习编码更快。然后更好地练习编码。完成后,请练习更多。


0

我的问题是,我总是会为想到的第一个解决方案编写代码,当然我当时认为这是最好的。

不,那不是你的问题。那是一种美德。它正在做可能会起作用的最简单的事情。但是它仅在与重构结合使用时才有效。这是一个连续的过程:一遍又一遍地做可能会起作用的下一个最简单的事情,因此您的系统始终是您对解决方案空间的当前理解的表达。

您的问题是您的管理人员不了解软件系统的真实生命周期成本。该费用的90%是维护费用,而不是最初的实施费用。测试和重构是我们降低软件系统生命周期成本的最佳工具。如果您的经理不允许您做这些事情,那么他们是不负责任的,需要接受培训。或者您需要找到新工作。

最后:正如我之前说过的*,您需要学习如何说不

* 如何在非常紧凑的时间表上进行编码?


0

如果他们确定了范围和时间,那么您可以做的最后期限就是下降质量。

如果可能,可能会降低对利益相关者可见的外部质量,而不会损害内部质量,这会损害您在代码库中的可居住性。

我真的不认为自我改善会在这种情况下对您有任何帮助。如果有的话,很遗憾地说,通常这是自信。

估算工作量时,请尝试踏入大门。您的老板如何估计您需要花费多长时间?

为您的老板和/或客户带来选择。往往是开发人员自己选择降低质量而不进行任何交流。后期项目/工作非常普遍,通常是“托管”的。及时采取行动,如果您看到错过的最后期限,请警告人们。

如果您不告诉他们,他们将无法缩减范围或移动截止日期。

如果您要以任何形式对质量进行折衷,请尝试由他们决定。给他们东西互相压。

有些东西只有您可以决定。如果您只是想让它工作。但这是很难维持的。也许您不确定它是否在所有情况下都有效。不要告诉任何人你已经完成。重做。很多时候,这只是您可以做出的决定。可能是因为表达问题非常耗时,或者您是非技术经理。

有时这是您的职业道德的一部分,您是否会在不洗手的情况下将患者缝合起来而导致“没有时间”?

最重要的是,请记住:没有以后。


0

我是致力于Web应用程序的.Net开发人员。

我开始做的事情是-

如果是C#代码,我尝试首先在LinqPad中编写该代码(如果可能的话)。

如果是Javascript代码,我首先编写该代码并在jsfiddle / jsbin中进行测试(如果可能)。

我发现这有助于提高代码质量,但不会降低我的速度(在某些情况下,我发现它会更快)。


这篇文章很难阅读(文字墙)。您介意将其编辑为更好的形状吗?
t 2013年

@gnat-感谢您的建议。有助于减少投票的建议。我希望现在的格式更好。
user637563 2013年

在完整环境之外找到解决方案可能会有好处。您将拥有一些可以正常工作的东西,因此您将知道,如果它不能在整个系统中正常工作,那么问题就必须与系统的其余部分冲突。然后,您可以尝试修改解决方案以消除冲突,同时能够查看解决方案是否仍在完整环境之外运行。您的理智可能会为此感谢您。
弯曲
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.