打破“完美程序员综合症”的方法


16

我可能不是唯一这样的人。但是我倾向于称之为“完美程序员的综合症”,许多人可能会说它与完美主义者相同,但是在这种情况下,它属于编程领域。但是,对于这种综合症,编程领域有点问题。

您是否曾经感到过,当您进行编程时,您对自己的代码是否干净,遵循大多数最佳实践的良好代码的信心不足或从来没有足够的自信?有太多的规则要遵循,我觉得有点不知所措。当然,我并不是程序员,我喜欢编程,我认为这是一门艺术,因此我必须遵守规则。但是我也喜欢它,我的意思是我想并且我喜欢遵守规则,以便对自己正在做的事情有个很好的感觉。有关最佳做法和良好代码的信息。

也许是缺乏组织?也许是缺乏经验?也许缺乏实践?也许缺少其他人可以指出的东西?有什么办法可以摆脱这种综合征吗?


1
仅在了解有关您的个人背景的知识后才能回答此问题,尽管这可能会使它过于局限。编程之道可能是您入门的好地方。
back2dos 2012年

我不同意这个说法。.我相信每个人,无论背景如何,都可能在某种程度上有所不同,但仍然如此。
Rushino 2012年

2
尽管每个人都可能遇到相同的症状,但实际上原因多种多样,因此“治愈”也是如此。
back2dos 2012年

没有完美的程序员。您可能会发现经验丰富且注重细节的人,对提高他/她的技能有动力和渴望。-您可以称他们为“去吸气剂” ...
尤苏波夫(Jusou)2012年

“我必须遵守规则”……这是您的问题。“最佳做法”规则不存在,它们是基于集体经验的建议。如果您将它们视为牢不可破的规则,那么我可以看到您压力的根源。
GrandmasterB 2012年

Answers:


21

优先考虑。首先是第一件事。专注于重要的事情。

您的优先级可能会有所不同,但总体而言,您应该注意:

  • 正确的代码
  • 可维护的代码
  • 干净的代码
  • 简单,优雅的代码
  • 高效的代码

也许按此顺序。但是,第一点是最重要的。没有它,代码将毫无用处。您如何使用无法正常运行的程序?

使它正常工作,其他所有与解决您需要解决的问题都不相关的事情。当然,我也受此困扰。我学到的有助于专注于有效的解决方案。足够了。那是工作的99%。

您可能需要考虑一些类似好的代码的事情。它是什么?什么样的人写的?如何编写好的代码?非常简单。编写有效的代码。工作代码是好的代码。其他一切都会在以后出现。

当然,在专业的团队环境中编写代码时,显而易见的,可读的代码和可维护的代码变得越来越重要。但是,首要任务仍然是使其工作并专注于此。只有这样,您才可以开始精炼和重构,以获得更好的效果(如果需要)。

通常,很明显,代码正确性非常重要-但是我们所有人在编写代码时都没有意识到它的重要性。我们偷工减料,我们使用过早的优化,我们试着写出优雅的代码,我们甚至在工作编写的代码。从一开始就追求完美是人类的天性,但是编程和软件开发是迭代过程,并且存在优先级。因此,再次使其工作,以后再担心其他所有事情。了解正确代码的重要性,并为之努力。

尽管有成千上万种所谓的良好实践,但我认为常识是最重要的,请思考为什么将这些实践视为良好实践,何时何地应用它们。但是,不要努力满足每一个良好实践。不能替代或替代个人经验。您无法避免常见的陷阱-无论您阅读了多少本书,参加了研讨会还是什么都没有。重要的是在可行的情况下,通过做事,正确做事和娱乐来学习。


9
最好的优化是使您的程序从非工作状态进入工作状态的优化。
deadalnix 2012年

1
@deadalnix完美建议!它是如此简单,如此明显,但在所有代码中都是如此。
zxcdw 2012年

7
+1。我会考虑将可维护性置于正确之上。毕竟,可维护代码的一种质量就是使它正确是一个合理的努力;)
back2dos 2012年

1
效率应该高于一切,但是如果您在谈论数据库代码和超越优雅的方法,那是正确的。好的sql代码(对不是开发人员的datbase有利)很少是优雅的。有已知的低效方法来做事,一旦您开始定期使用它们,它们的维护性也不会降低或难以理解。
HLGEM 2012年

2
@HLGEM实际上,在特定领域中,优先级可能会完全颠倒。例如,有时我会编写和逆向汇编代码,这些代码是在极端的尺寸和速度限制下(去世产品)编写的。在这种情况下,甚至可能会质疑程序的正确性-许多故障代码段都表现得非常好(例如,基于错误代码的美丽视觉和音频工件)。
zxcdw 2012年

6

避免此问题的最简单方法是仅更改伤害所在。即使您认为某些更改可能会使它变得更好,也不要修饰正确,可读性和可维护性的代码。但是,一旦您尝试更改某些东西,然后对目的不明确的变量或功能太长而无法理解的变量进行处理,请对其进行修复。不早

当然,这并不意味着您应该首先就不应该争取好的,干净的代码,但是除非另有证明,否则您应该认为第一次尝试“足够好”。


+1我喜欢这个零件。“除非另外证明,否则您的第一次尝试“足够好”。
Rushino 2012年

借调。绝对是黄金的建议!
zxcdw 2012年

4

我认为最好的解决方法是提醒自己,所有这些最佳实践和代码整洁性规则都不是出于自己的目的而存在,代码本身也不存在。

最后,还有什么比什么都重要的是,软件工程,并且可以使用。如果您不完成,那将不会发生。

我不喜欢将编码与艺术进行比较,但是这很奏效:艺术家(尤其是作者)也常常想继续创作,因为总有一些东西并不完美。但是,当它无限期地延迟出版并因此阻止任何人欣赏作品时,完美的价值何在?


2

要实现的最重要的事情是您的代码总是会更改,并且总是有改进的空间。没有代码是完美的。在接下来的六个月中,您今天从事的班级图书馆通常会有很大的不同。您将学习一些新技术,或者找到一种真正适合您的模式。只要代码易于维护和可读,那么您就应该很好。理想情况下,您将具有单元测试,以使以后的重构更加容易。

容易使代码看起来完美并遵循您能想到的每个标准。它发生在我们所有人身上。查看几周前我编写的代码,使我考虑进行更改。在此处添加属性,在此处重构方法。它似乎在项目结束时发生。但是,如果您太着迷于此,您可能最终会犯出showstopping bug。我在职业生涯的早期就做了几次。几个凌晨3点的错误修复会话使我解决了这个问题。


1

反过来做。

而不是“还有什么可以做得更好?” 寻找“什么惹我生气?” 直到没有任何反应。


4
“完成一本书不是在什么都不能添加的情况下完成,而是什么时候都不能删除它了。” -代码完成
乔纳森(Jonathan)

这实际上是圣艾修伯里(Saint-Exupéry)的措辞,很有趣,他的信誉可能不及Code Complete。
scrwtp 2012年

1

作为程序员,您的工作是生产代码。最佳做法的目的是通过使事情更易于理解/执行/记住来提高生产率。如果坚持这些做法妨碍了实际完成工作,那么您所做的就是错的。只需尝试尽可能快地生成代码,然后您的实践就会发展为让您做到这一点。


我不同意。作为程序员,您的工作是解决问题。太多的程序员看着一个问题,然后说“我可以为该问题编写解决方案”,而不是寻找已经存在的解决方案。最好的解决方案是您不必编写的解决方案。就是说,作为必须对解决方案进行编码的程序员,您的工作就是满足要求。存在最佳实践,以确保在需求改变时(不是if,而是when)可以轻松地更改满足需求的代码。
KeithS 2012年

1

使它工作,使其清洁,使其变为固体,使其具有高性能。

每当有人想知道如何在时间轴上编写SOLID代码时,前三个都是我所奉行的格言。当您第一次编写一行代码时,它只需要工作即可,因此您必须做的事情也不要花哨。第一次重新访问一行代码时,它不再是一次性的,您应该清理代码,使其更具可读性,从而更易于维护。第三次光标移动到该行时,现在可能已经很重要了,您应该重构它以遵循SOLID方法,抽象依赖关系,实现模式,并通常使代码更易于插入或插入为了将来的增强。

要在程序员注意到机会的情况下实现代码的优雅,通常它是在遵循上述步骤的同时,简化,清理并总体上提高了代码的可读性和可维护性的功能。这不是要最大化的东西。

在内存管理的语言(Java,.NET系列,大多数功能的语言等)中,性能代码几乎总是最不被关注的问题。在这些环境中,目标是编写正确的代码(“正确”在这里定义为在所有预期的情况下均产生预期的结果,并且易于理解,结构合理,因而可维护),而性能是次要的(通常会从正确的代码进行到一定程度)。在所有情况下,只要算法“足够好”,它就可以发挥作用。记住,“过早的优化是万恶之源”;进行您不知道需要的优化只会浪费时间,混淆代码并通常阻止进度。它必须先运行,然后一旦运行,就可以运行并查看运行速度。如果速度不够快(由某个已发布的基准测试所定义),则对其进行改进直至达到目标,然后停止


0

您确实需要对编程保持务实。是的,我们每个人都喜欢做正确的事,但是您会因提供有效的软件而获得报酬,而不是一生中都在完善它。

采取的方法是在职业生涯中“完成”。交付并继续前进。将您的完美主义保存在个人项目中。


我了解,但我们不能认为这种“黑白”。
Rushino 2012年
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.