什么是精美代码?[关闭]


30

我经常读到开发人员必须编写漂亮的代码,但是对于我这样的初学者来说,对于什么是漂亮的代码以及您如何识别它仍然不甚了解。

必然的问题是:如何编写漂亮的代码以及提高代码质量的一些实践习惯?,我应该关心什么来使我编写的代码漂亮(以及应该学到什么)。



4
这只是一个比喻。美丽在于情人的眼中,除此之外,还在于您为解决问题而在文本文件中给出的说明的清晰性,以及您或其他任何人可以轻松地对其进行修改和维护。未来。除此之外,您的代码所散发出的更多美感完全取决于您-缩进,模块化结构,复杂性,效率,易读性,命名约定等。
bad_keypoints


Answers:


55

“通过眼神判断可以买到美”。

就是说,我认为大多数程序员都会同意,精美的代码证明了清晰度和透明度,优雅,效率和美感之间的平衡。

  • 清晰度和透明度:清晰度是读者可以轻松推断出代码功能的方式。透明代码可以完成它的工作。如果代码似乎在做一件事,但实际上在做其他事情(或更多事情),那么它就不是透明的,这是误导性的。

  • 优雅:实现大多数算法的方法有很多,但是有些方法笨拙,而另一些方法则简洁利落。简洁通常会增加优雅度,但是过度简洁会降低清晰度。

  • 效率:避免不必要地使用资源(例如CPU时间,内存和I / O)。

  • 美学:容易上眼。这是相当主观的。它主要归结为风格。一个重要的考虑因素是保持一致的样式。更改代码(例如,缩进一半样式)的代码很丑陋。


11
一个美丽的解释,+ 1
koenmetsu

2
我将取消“效率”。尽管从严格意义上讲是肯定的,但将其包括在列表中最多可能会产生误导。它通常是其他代码的副产品,在编码时应该是次要的问题。主要原因是,在大多数情况下,它只有在编译器完成了其不可思议的工作后才会显现。
DPM

@Jubbat确实-有时最有效的解决方案实际上导致非常丑陋的代码。(例如经典的快速逆平方根函数)
Darrel Hoffman 2013年

@DarrelHoffman是的,尽管更多的定义良好代码的变量也实现了这种折衷,不仅效率和其余(在“代码完成”中对此进行了冗长的解释-不幸的是,我不记得本书,可能接近开始
DPM

@Jubbat:我同意效率通常是次要的问题,但我仍然认为它是影响美容的因素。
Igby Largeman

20

不要让人误以为是美丽的代码如下:

  • 聪明的算法
  • 偷偷摸摸的语言功能
  • 以最少的按键次数解决问题

因为不是。像这样的代码很可爱,当然值得一看,但这不是您想要解决的那种代码。

而且您知道继承了可变lambda的花式递归元模板静态多态性-还是您在网上阅读的任何内容?您可能会急于在没有明确理由使用它们的情况下跳出新颖而精巧的技巧。但是,突破语言界限的代码也不是很漂亮。

他们很性感
很有趣,但是问自己:我真的想花时间探索这种语言的结构吗?还是想与一种语言一起工作并创造出美丽的东西?毕竟,编程语言仅仅是创建的工具。


那么,什么是精美代码?

漂亮的代码=可维护的代码。 而已!
那是公式!

如果您能写点东西,几个月后再回来,继续努力,那就太好了。如果一年后您意识到要添加功能以及调整现有功能,并且相对轻松地做到这一点,那就太好了。如果其他人可以进入您的代码库并由于事情井井有条而迅速弄清发生了什么,那么他们将拥有更多的头发,而且也很漂亮。

因此,您要问的真正问题是:“我如何编写更具可维护性的代码?”。恐怕这是一个更大的问题,而且是一门颇具创意的学科。只是继续编写代码,但是这次不要问自己,它是否可以更漂亮。问问自己是否可以使其更易于维护。


4
为解决您提出的问题,还有c2.com/cgi/wiki?KillYourDarlings
jk

4

我的看法是,“ Beautiful Code”不是客观的或特别有用的术语。而且我们不应该尝试定义它。


英语单词“ beauty”的典型词典定义如下:

  • “ 1.使感官愉悦并使心灵愉悦的人或事物的所有特质的结合”
  • “ 1.在人或事物中表现出的品质,使人的思维或感官获得强烈的审美愉悦或深深的满足。”
  • “ 1.使人身心愉悦的品质,并具有诸如形式或色彩的和谐,出色的艺术性,真实性和独创性之类的特性。”

(来源http://dictionary.com

共同点是,“美”是美学上令人愉悦的东西。正如说“美女在情人眼中”所说明的那样,这必然主观的


我们可以在代码中使用“美丽”一词,其明显的含义是该代码“具有美感”。

但是要说“美丽的代码”具有一定的属性集(如其他答案所建议的)与美学上令人愉悦的明显含义是矛盾的。美学是关于人们…… 个人 …… 如何感知事物。

或者一种说法,有人告诉我我认为什么是美丽的,无论是在人,艺术品还是……代码中,都是令人不悦的

就我而言,漂亮的代码就是我认为很漂亮的代码,就是这样。它是主观的并且是个体的,就这样吧。


2

这是我的建议。

仔细阅读“ 如何向非程序员解释“美丽的代码”?看看他们说要关注什么特征。然后拿起一本类似《代码完成》的书,通读一遍,以学习有关如何编写更好的代码的建议。

在某些时候,当您查看旧代码“这很丑”时,它会打击您。这将是直接的美学反应。通过查看它,您将意识到您正在像程序员一样查看代码,并且可以看到丑陋的外观,因为您知道看起来更好的代码应该是什么样。


1

仅仅因为您经常阅读漂亮的代码并不意味着编写该代码的人具有相同的定义。可悲的是,从您的问题来看,他们似乎根本没有费心去定义它。

对我来说,漂亮的代码是:

  • 富有表现力的
  • 简洁

不具有表达力的简明代码可能是不明确的,而不简洁的表达性代码往往会肿且难以阅读,因此您需要同时使用。

我不会将可维护性作为使代码美观的一部分,因为美观是您看到/阅读的,而不是您要采取的行动。但这又是我的个人看法。


0

漂亮代码一词是一个非常模糊和抽象的术语。它很容易弄清楚它代表什么,意味着什么,但是它绝不应被视为次要目标。

它使我想起了很多代码覆盖率指标。当数字足够高时,您可以放松身心并继续前进。拥有大约80%的覆盖率的代码库是很好的,虽然不是防弹的,但是足以应付其他事情。拥有40%的覆盖率非常令人恐惧,应该鼓励您增加这个数字。

关键是代码覆盖率只有在数量很少的情况下才真正有意义。所以不要让它低。当覆盖率上升到某个点时,请继续进行其他操作。

同样,漂亮的代码也很棒。如果您有漂亮的代码,那就太好了,继续进行其他工作。不要太强调它。您永远都不会达到100%的标准,如果您这样做,您会发现您过于专注于它的读物,外观或外观,而对它的功能或性能没有足够的关注。因此,达到一个合理的水平,然后停止。

但是,如果您的代码很笨拙,如果它是一团乱七八糟的意大利面条代码,如果您身体上很难打开文件,如果您没有注释或文档等,则进行修复。并尽快完成。

随着时间的流逝,您将发现代码库通常变得更整洁,更明亮,更漂亮,更重要的是,当您专注于使代码库变得更丑陋时。编写漂亮的代码不是一步一步的过程。

没有魔术哲学。它的1000个较小的步骤全部一起完成,所有这些步骤的具体目的与代码的外观无关。但是,当您将它们一起使用时,它们会形成漂亮的代码,作为其各个部分的总和。像沃尔顿。或队长星球。


0

我确实同意这里的答案,但是我采取的是一种不太技术的方法,我会说精美的代码是其作者对手头问题的清晰理解的一种表达,它通过结构良好,精确而简单的语言来体现。

对我而言,浏览精美的代码就像看一眼艺术品,看到不断变化的细节,这些细节可以显示出制造商的意图,而且还体现了不同部分的实现方式,每个部分都回答了这么多问题,最后,它的存在感觉就像是自然规律,万物都与之对齐,因此只能用敬畏之言来形容:宏伟,鼓舞人心,美丽。

因此,从这个角度来看,在您作为程序员的职业生涯中,您可能会发现精美的代码,而其他人可能因为缺乏知识而无法理解,或者由于太过漂亮而被宠坏了,因此可能不再值得关注;)

我完全同意,精美的代码具有所有提及的实用性。


0

我有三个条件:

  • 简单:至少必须是人类可读的。例如,您可以编写一个适用于O(1)的代码,用于包含大量行的解决方案,但我更喜欢适用于0(n)的代码以很少的行求解。对于极端情况,这可能会改变,但是对于开始时,简单性很重要。
  • 可重用:代码必须可重用,但不能被覆盖。如果需要操作,则应在多年后定义使用方式。
  • 缩进:也许这对您来说不是问题,但是对于初学者来说,这是首先要解决的问题。
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.