您如何向非程序员解释“美丽的代码”?[关闭]


44

当与非程序员朋友交谈时,我碰巧提到了“美丽代码”的概念,她想理解这是什么意思,但是我对如何向一个没有语言的人解释它感到茫然上下文。

无论如何,当所有代码看起来对某人来说都是胡言乱语时,您怎么能解释是什么使一个代码比另一个代码更漂亮?类比也可能有用。


12
您能在不显示代码的情况下向程序员解释漂亮的代码吗?描述本身就是一门艺术。
kojiro 2011年

9
如果我们在这里能提出一个好主意,也许我可以用它来向非数学家描述一个漂亮的证明。
David Thornley

漂亮的代码可以是在正确完成工作时使用更简单和更少想法的代码。具有讽刺意味的是,以前找到简单想法的任务可能是一项复杂的工作,而我们对此感到钦佩。-抱歉,我现在找不到找到更自然的方式向某人解释的方法。
LatinSuD 2011年

当您将IDE字体设置为Comic Sans时,代码很漂亮。
柯克·布罗德赫斯特

Answers:


88

语言类比

想想您最喜欢的故事。它可能写得很漂亮。对于不讲英语的人来说,仅仅因为他们无法理解它或理解为什么它美丽就不会减损它的美丽。

建设类比

考虑一个破旧的房子。它的门窗显然是砖砌的。砂浆在基础不足的一个角落破裂。而且没有人能理解为什么有通往第二层的楼梯间不存在。厕所建在没有排气扇的厨房旁边,其位置应使盛行的风将整个房屋的其余部分散发出令人讨厌的沼泽气味。露天壁炉的烟囱距离一些木头有5cm的距离,可以着火了。

与之相对应的是,房屋应有尽有,维护成本低,完全绝缘,因此,一点太阳能可以使冬季保持温暖,通过通风回收能量,因此您既有新鲜的空气,又有舒适的温度和微不足道的电费单。它由不易燃材料制成,因此不会被火烧毁。它将承受9.0级地震和F5龙卷风。它的建造成本仅比其他房屋高出30%,但将在5年内偿还差额。而且在美学上令人愉悦。

GUI就像房子的外观。用户可以在GUI中识别美丽,就像他们可以欣赏美丽的房子一样。但是,也许更重要的是,房屋和程序中设计的真正美在于那些初学者看不见的东西,但是无论如何重要还是很高兴。


19
这种构造比喻是完美的!
Daniel Vandersluis

1
+1 @ user21007:很久很久以前,我是大型站点的信息架构师-每个人都可以得到类似的构造,以及可以正常使用且感觉良好的系统概念。
失误

1
与具有GUI的产品非常相似。对于框架和库不是很好。

1
有点让我想起了这则广告:youtube.com/watch?
v

4
我过去经常使用这种语言比喻:“我正在使用这个丑陋的代码……”“等等,丑陋是什么意思?” “你看,它写的那样”
DistantEcho

28

想想一辆车。

我们大多数人看着汽车,只能看到车身。如果有人修理衬里并在汽车上进行了新的喷漆工作,它将看起来更漂亮。它基本上是同一辆车,但这就是我们所看到的。

技工打开汽车,看着引擎。他们看到那个引擎有多好。他们看到一切安排都易于实现,维护和工作。他们看到了零件,并且知道它的设计水平。对于经验丰富的机械师而言,保养良好的高品质汽车的引擎已成为一件美事。他们无法向您解释是什么使它变得美丽,但是他们的美丽概念可能会转化为更低的维护成本,更长的汽车使用寿命和更好的性能。所有这些都增加了这辆车的价值,即使您看不到它。

当您浏览网站或应用程序时,就像我们大多数人看到的汽车一样。当我看代码时,就像机械师看汽车的引擎一样。您永远无法像我一样体验到该代码的美妙之处,因为它实际上对您是看不见的。但是美就像机械师的美一样重要。它确定了软件的运行状况,它将遇到的各种问题,改进软件的容易程度等等。所有这些都增加了该软件的价值,即使您看不到它。


11

存在的所有代码都是必需的,并且都不需要说明。


2
@zdan:我要反驳说那些发现它漂亮的人具有必要的知识(因此,在情人眼中)。此外,聪明的=美丽的IMO。
史蒂文·埃弗斯

2
@zdan:当需要大量这样的解释时,它不是“漂亮的代码”,而是“一个聪明的技巧”。
梅森惠勒

1
FFT是一个非常聪明的技巧,但您无法称其为美丽。
Kyte

1
我大部分时间都同意SnOrfus。但是对我来说,漂亮的代码不仅必须是必要的,充分的和不言自明的,而且还必须在主观上感觉完美而轻松。我相信很多代码可以使SnOrfus公开的标准合格,但会以其他方式感到非常麻烦或不完善。我会称这类代码为美丽。
asoundmove 2011年

1
我确实认为“将某些东西简化为基本要素,但仅此而已”的想法是正确的。但是,某些无法维护且用错误语言编写的任务也符合此定义。同样,由于不需要进行解释,符合您的定义的大多数任务也可能很琐碎。我不认为“ Hello World”可以称为美丽。
2011年

5

我指的是诗歌:

一首写得很好的诗与一本翻译不佳的手册中有关同一主题的摘录有不同的感觉。


这也是我的想法,但并不是每个人都喜欢或理解诗歌。音乐也浮现在脑海:好歌与坏歌,但这也很主观。
PSU

什么... 25个接口+25个类都从抽象类继承?我只想要红色的手推车。也许还有一些鸡。
Erik Reppen 2013年

5

编码问题与概念化有关,因此精美的代码代表了问题的显着概念化。

例如,当一个问题可以简化为现有的已解决问题时,我们喜欢它,从而可以洞悉问题本身性质

有时,重新概念化问题可以使问题看起来如此简单;我们谈论的是优雅的解决方案,这些解决方案需要简单的技巧来简化一项艰巨的任务。

对我来说,Quicksort是一个很好的例子:从数组中选择一个随机元素,然后将数组中的每个其他元素与之进行比较;如果数量少于该数量,则将其放入桩A中。如果数量大于该数量,则将其放入桩B。现在,通过三角形不等式,将桩A中的任何元素都不需要与桩B中的任何元素进行比较。对A和B进行递归。



4

非平凡的代码不可能是完美的,因为完美的代码需要同时满足经常冲突的目标。因此,精美的代码可以完美平衡当前任务的所有重要属性,并且比大多数人想像的更接近同时满足所有这些要求。没有特别的顺序:

  • 可读性
  • 简明
  • 效率
  • 灵活性
  • 显性
  • 坚固性
  • 安全/防白痴
  • 完整性
  • 一致性
  • 易于使用(用于API)

2

杰克逊·波洛克(Jackson Pollock)的绘画是一些对某些人美丽而对其他人胡言乱语的例子。


嗯...我没有感觉。
2012年

编程比艺术(或与此相关的科学)更具技巧。不是说我要敲门。
Erik Reppen 2013年


1

好的代码的某些方面是:

  1. 它有大量的小细节都指向同一个方向
  2. 它的结构一致的,每个部分都遵循相同的模式
  3. 但它不会重复本身,而是每个部分都是不同的
  4. 它也不允许认为是无效的行为
  5. 它具有最小数量的不同状态
  6. 您可以通过阅读函数原型了解代码的整体行为
  7. 没有副作用
  8. 它的执行一定会停止
  9. 不使用任何编程语言提供的高级功能
  10. 与它解决的问题的复杂性相比,它并不太复杂
  11. 没有错误或它不确定的行为
  12. 可以被编译用编译器从几个不同的供应商
  13. 它与未使用的代码没有依赖关系

0

对我来说,语言是我的工具。

和任何工匠一样,我更喜欢我的工具处于薄荷状态。

关于概念的清晰性,可维护性和可读性,代码的条件越好。代码越好。

因此,对我而言,阅读编写良好的代码就像使用精心设计的工具打开工具箱一样。

我已经多次使用这种比喻来取得成功。尤其是具有较实际或艺术背景的人似乎以这种方式理解了干净/美丽代码的概念。


0

我认为这取决于所说的精美代码。

对我来说,代码可读性好。除了编程概念可能出现的问题外,外行可以阅读并且至少在较高的层次上了解代码的作用。

正如其他答案所讨论的那样,代码也可以很漂亮,因为它可以通过结合几个简单的概念来实现复杂的功能。不知道哪种类比最能向非程序员解释,这取决于外行。益智玩具就像NeoCube一样浮现在脑海。


0

以我的谦逊和个人观点,漂亮的代码就像一本好小说:

  • 您可以从头到尾阅读它/您无需跳到本书的以后几页即可了解当前页面。
  • 它没有不必要的重复/如果总是说相同的话,这本书就有点枯燥。
  • 每个部分的意图几乎每次都能体现出来/不必一直在字典旁阅读一本书(除非是诗歌/高尔夫xD代码)。
  • 它以可负担的大小和复杂性(模块,功能,语句等)的子结构组织,没有太多的“嵌套” /章节,段落和句子均得到适当的平衡;它不会使用太多级别的句子从属等
  • 以美观的方式(略微缩进,正确分隔的块等)/像具有适当排版的书一样,对眼睛是令人愉悦的。

0

这就像一个精简的公司,每个人都知道他们的角色,很容易弄清楚谁擅长于什么,并且没有重复的工作

VS.

倡导平庸的办公空间,三位经理要做的事,无非是让您对TPS报告感到厌烦,所以传真机永远无法工作!!而任何给定的员工一周只能完成大约15分钟的实际工作。员工甚至可能在技术上不再在那里工作,因为有人忘了解雇他(很难说真的,因为没人能有效地工作,而且很难评估他们要完成的工作)。为了使任何事情切实可行,需要浏览一个荒谬的,过于复杂的系统,该系统有些人已经读过,并且认为即使简历并没有真正解决他们所遇到的问题,他们的简历看起来也很整洁。


-1

没有“美丽的代码”,没有“优雅的算法”和“优雅的设计”。非程序员可以理解设计。

我讨厌那些争论“美丽代码”的程序员,因为他们要么不真正了解解释器或编译器将如何消化它,也不知道机器将做什么,所以它更像是一个孩子向他妈妈展示如何他的故事很棒,但实际上并非如此。


-1

你向人们解释为什么一张漂亮的照片很漂亮吗?不。您向他们展示图片(因为您知道一张图片说了1000多个字)。因此,最好的办法是向他们展示一小段真正优雅,美丽,完美的代码(也许作为比较,Joe Average将如何编码)。

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.