Answers:
好的,这听起来有些疯狂,但是我发誓它可以工作。这不仅用于编程,而且是增加创造力,专注力和记忆力的秘诀:
在不知不觉中,您将看到编程效率和解决方案质量得到显着提高(更不用说其他方面的改进了)。
资料来源:
这是违反直觉的,但您可能需要放慢速度。当您实现想到的第一个解决方案时,会为您自己创建很多额外的工作。我所说的“顺路而上”,是指最早在当天下午晚些时候。您为自己创建的问题无需花费数月的时间。考虑您的选择。少输入,多思考。即使在一个简短的项目中,您也会发现更少的编码实际上可以使您加速。
如果您的客户聚集在特定行业,请尝试构建具有可重用组件的项目。不编写代码比编写代码要快。
从您的客户的角度来看,这闻起来有点像“ 快,好,便宜,选两个 ”。当然,我们都希望我们立即得到我们想要的东西,但是您的客户需要考虑从长远来看是否最好。尝试阐明权衡并帮助他们做出正确的决定。
寻找另一份工作。
大约6个月后,您会发现。一年之内,您将不会为自己所做的工作感到自豪。此外,您将花费大量时间学习新技术,技术或框架-因此,一年之后,您将无法跟上新技术的发展。一年后,相对于市场,您将是一个比起步时更糟糕的程序员。
如果时间流逝(比如说几年或更长时间),那么您将很难在任何地方被录用,除了这些快节奏的工作,这些工作不重视质量代码,只有速度。
就是说,作为一种“现实世界”的学习经历,对于快节奏的环境来说要说些什么,但是我要说大约6个月。足够。除此之外,您还应该与一些招聘人员联系,寻找更好的地方。老实说,您会更加快乐。
从您的客户看来,代码效率可能不是那么关键,而是可能非常昂贵。这些天花在编写代码上的时间需要节省数小时的CPU时间,以证明您花费了一个小时的时间。对于大多数程序而言,效率并不是那么关键。即使是这样,大多数代码也不需要那么高效。给出选择后,我更倾向于一种易于维护的解决方案,而不是更高效,更难以维护的代码。
在开始之前花时间计划编码可能会给您时间来评估解决方案并考虑替代方法。这样可以节省您进行编码和测试的时间。我发现通常更简单的代码会更有效。
使用尽可能多的行来清晰地布局代码。复杂的代码可能会使优化器困惑,并可能导致代码变慢。现代的编译器非常擅长优化代码,相信它可以完成工作。
接受足够好就足够了。当您想出更有效的方法时,请给自己做个注释。如果您有时间,可以将一些更有效的设计与实现的设计进行比较。在小型程序(仅是受影响的代码)和大型程序(使用它们的程序)中尝试它们。这会给您一种何时使用更有效的方法的感觉。
许多人认为过早优化是一种不好的方法。实施起来可能会很昂贵。不幸的是,许多过早的优化实际上并没有像它们优化的代码那样高效。为了正确地优化代码,您需要在更改前后对代码进行检测,以查看是否确实提高了效率。
研究技巧可帮助您编写耦合度低且内聚力强的简洁代码。在许多情况下,降低复杂度可提高效率。帮助您最大程度地减少开发期间必须修复的错误的技术将帮助您更快地交付。这样可以腾出时间来测试替代方法。
在设计阶段,与同事交谈。
讨论您的设计以及您想如何做,并让他们仔细检查您的决定。如果大家都同意什么是聪明的,那么您的设计就会更合理。
我的问题是,我总是会为想到的第一个解决方案编写代码,当然我当时认为这是最好的。
不,那不是你的问题。那是一种美德。它正在做可能会起作用的最简单的事情。但是它仅在与重构结合使用时才有效。这是一个连续的过程:一遍又一遍地做可能会起作用的下一个最简单的事情,因此您的系统始终是您对解决方案空间的当前理解的表达。
您的问题是您的管理人员不了解软件系统的真实生命周期成本。该费用的90%是维护费用,而不是最初的实施费用。测试和重构是我们降低软件系统总生命周期成本的最佳工具。如果您的经理不允许您做这些事情,那么他们是不负责任的,需要接受培训。或者您需要找到新工作。
最后:正如我之前说过的*,您需要学习如何说不。
如果他们确定了范围和时间,那么您可以做的最后期限就是下降质量。
如果可能,可能会降低对利益相关者可见的外部质量,而不会损害内部质量,这会损害您在代码库中的可居住性。
我真的不认为自我改善会在这种情况下对您有任何帮助。如果有的话,很遗憾地说,通常这是自信。
估算工作量时,请尝试踏入大门。您的老板如何估计您需要花费多长时间?
为您的老板和/或客户带来选择。往往是开发人员自己选择降低质量而不进行任何交流。后期项目/工作非常普遍,通常是“托管”的。及时采取行动,如果您看到错过的最后期限,请警告人们。
如果您不告诉他们,他们将无法缩减范围或移动截止日期。
如果您要以任何形式对质量进行折衷,请尝试由他们决定。给他们东西互相压。
有些东西只有您可以决定。如果您只是想让它工作。但这是很难维持的。也许您不确定它是否在所有情况下都有效。不要告诉任何人你已经完成。重做。很多时候,这只是您可以做出的决定。可能是因为表达问题非常耗时,或者您是非技术经理。
有时这是您的职业道德的一部分,您是否会在不洗手的情况下将患者缝合起来而导致“没有时间”?
最重要的是,请记住:没有以后。
我是致力于Web应用程序的.Net开发人员。
我开始做的事情是-
如果是C#代码,我尝试首先在LinqPad中编写该代码(如果可能的话)。
如果是Javascript代码,我首先编写该代码并在jsfiddle / jsbin中进行测试(如果可能)。
我发现这有助于提高代码质量,但不会降低我的速度(在某些情况下,我发现它会更快)。