为什么某些人认为聪明在编程中有害?


89

我最近注意到了很多与不同抽象技术有关的问题,并回答说基本上这些技术都是“太聪明了”。我认为,作为程序员的一部分工作是为我们所要解决的问题确定最佳解决方案,而聪明有助于做到这一点。

所以我的问题是:那些认为某些抽象技术过于聪明而不是聪明本身的人,或者是否有其他理由提出反对?

编辑:此解析器组合器是我认为是聪明的代码的示例。我下载了此文件并查看了大约半小时。然后,我在纸上逐步进行了宏扩展并看到了光。现在我了解了,它似乎比Haskell解析器组合器更优雅。


116
我认为您可能误会了-一个人的聪明是一种美德,但是在系统中的聪明是一种恶习。系统和代码不应该很聪明,它们应该像水晶一样清晰。创建这样的东西通常需要一个聪明的人。
nlawalker


15
@nlawalker:我想我明白了。人们指的是代码为反义词时,用的是“聪明”,“清除”或“简单”,因为他们真的是使用一个词,为“清除”或“简单”的反义词。
拉里·科尔曼

2
@拉里:我不确定这意味着什么。巧妙地发挥创造力,独创性独创性,并暗示以前所未有的方式使用事物。有时候效果很好(很多设计模式都很聪明),但是解决方案的陌生性也可能使其难以使用。
doppelgreener 2010年

2
不再有任何注释代码了吗?在这里您可以解释聪明之处,以便随后的人们可以理解。在6个月的时间内喜欢您。
Phil Lello

Answers:


207

简单的解决方案更适合长期维护。这并不总是与语言熟悉有关。即使您是给定语言的专家,一条复杂的线(或多条线)也需要花费时间才能弄清楚。您打开一个文件并开始阅读:“好,简单,简单,明白了,是的,WTF ?!” 您的大脑停止运转,现在您必须停止并解密一条复杂的线。除非有一个可测量的,具体的实施理由,否则它“太聪明了”。

随着复杂性从一个聪明的方法变成一个聪明的类再到一个聪明的模式,弄清正在发生的事情变得越来越困难。除了众所周知的方法外,您还必须弄清楚创建“聪明”解决方案所需要的思考过程,这可能非常困难。

就是说,我讨厌避免模式(在合理使用时),因为有人可能不理解它。作为开发人员,我们有责任继续学习,如果我们不了解某些内容,那就是学习它而不是避免它的原因。


7
+1很好说。我认为这是平衡的事情。如果我可以期望一个知识渊博的人对自己的代码稍加了解就能理解代码,那么您可以聪明一点,甚至可以添加注释。如果仅仅因为有人想证明自己的编码技能而花了四倍的时间来理解代码,那就行了!如果某人足够聪明,可以提出一个聪明的解决方案,那么他们应该足够聪明,以决定它是否可以理解。否则,它只是在炫耀。
安妮·舒斯勒

我喜欢的最后一段。其余部分是正确的,但很不幸。
2010年

看起来您已经看过Zend PHP的源代码:)
Tim Post

+1一个简单的模式可能不如一个聪明的模式执行,就像您说的那样,开发人员有责任继续通过理解它来推动“聪明”的发展,这取决于我们。
Stephen Furlani 2010年

3
作为必须证明自己确实是“最小,正交正确”而做“聪明”的事情的人,我想补充一点,到底什么才是聪明是有主观性的。例如,有些人总是想写出来if FuncX() then return true, else return false,却永远不希望你只写return FuncX()。我不是在开玩笑,我确实是在进行对话。因为人们想在某个地方挂断点之类的东西。:-)
沃伦(Warren P)

102

吻原理

保持简单,愚蠢。聪明的解决方案很棒,但通常最简单的直接解决方案是最好的。

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,就定义而言,您就不够聪明,无法对其进行调试。”

布赖恩·克尼根(Brian Kernighan)


8
另一方面,如果您尽可能聪明地编写代码,那么您必须学习调试它,并且这样做会变得更加聪明。或类似的东西。
James McNellis

11
@詹姆斯:或者你只是失败。;)
Josh K 2010年

10
@Josh K:我一直知道KISS是“保持简单,愚蠢!” - en.wikipedia.org/wiki/KISS_principle
Orbling

1
@Orbling:我回想起来不一样了,哦,现在我知道了。
乔什(Josh K)2010年

1
“保持简单和愚蠢”,根据维基百科?:)这是否意味着保持简单是愚蠢的,或者保持简单必须是愚蠢的?:P
Mateen Ulhaq 2011年

83

愚人忽视复杂性;实用主义者遭受苦难;专家避免 天才将其删除。-艾伦·佩利斯(Alan Perlis)


5
+1为优美的报价,并且是第一个答案,没有隐含的假设,即事物不能既简单又聪明
Larry Coleman 2010年

15
重要的是应该聪明的程序员,而不是代码。
克里斯托弗·约翰逊

最好引用一个白痴,然后以巧妙的方式滥用“聪明”一词。
Derek Litz 2013年

30

最好的解决方案并不总是最聪明的解决方案。有时简单的解决方案同样好。

在软件中,您始终需要考虑可维护性。如果一段代码对于要维护它的人来说太聪明了,我会说聪明是不值得的。


3
一个解决复杂问题的简单解决方案几乎可以像任何人一样聪明。
JeffO 2010年

尽管总有一些警告是您不想因为维护者无法编写代码(或读取它)而过度简化。
肯·亨德森

@confusedGeek-但是,如果您知道维护程序员无法处理它,那么聪明的解决方案将成为定时炸弹。在这里,平衡是关键-只有在您认识维护团队时,这才适用。如果您不知道,那么尽善尽美就可以。
迈克尔·科恩

1
@Michael,性能限制可能要求您的代码聪明。然后,维护者的工作就是学习,如果他们不能学习,那就雇用新的维护者。
Stephen Furlani 2010年

@Stephen,如果需要聪明的代码,程序员应该非常小心地解释为什么需要这样做,因此维护人员不必从头开始。

26

引用Brian Kernighan的话:

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,就定义而言,您就不够聪明,无法对其进行调试。”


“ ...除非使用正确的聪明定义,否则代码实际上很容易理解和调试。”
Derek Litz 2013年

我想这取决于您的字典。以我的经验,任何“聪明”的代码(无论是否易于理解)仍然在规范中使用了幸运的结合。即使很明显,也应标记这种假设是否可能改变并且不应泄漏到代码的不同部分。
peterchen 2013年

没错,但我想补充一点,这取决于语言和实现的易读性和理解性,您的评论可能只是代码噪音,而不是有用的东西。虽然通常用聪明来表示相反的意思,但我们应该努力变得更加清晰,以使他人不能为自己的利益误解事物。
德里克·利兹

不反对:)
peterchen


16

当应用于代码时,“聪明”几乎总是对“不必要复杂”的委婉说法。

读取良好,清晰,简单的代码已足够困难。读“聪明”的代码就像重新学习拉丁诗一样。

之所以产生这种混乱,是因为“聪明”作为一个人的属性具有完全不同的含义。这种情况也可以看作是为真实的人设计软件为何如此困难的一个示例:因为它们模棱两可。

并且由于某些程序员难以理解大多数人遵循的社交协议,从而禁止他们直接谴责代码“不必要的复杂”,因此他们可能很难区分“ 聪明 ”一词的两种含义。与某些人的想法相反,我认为最终更好的“人”(意味着:有同情心,内省和耐心的人)可以成为更好的开发人员。因为他们知道为谁写。


5
如果您不对社会规约和“人民[原文如此]”广为宣扬,我本该对此表示赞同。
杰森·贝克

2
可以,谢谢您的提醒。我倾向于讲道。但是我对某些程序员(很多?)无能力和/或不愿意处理普通人类的行为以及我在本领域中普遍缺乏的同理心和内省感到不满。也许我应该用引号代替斜体字来代表“人民”。英语不是我的母语,我只是不知道该如何理解,为了成为一名出色的开发人员,您不仅需要理解代码,而且还必须理解人们。恕我直言。
fzwo 2010年

编辑了我的答案。现在更清晰/进攻性更小?
fzwo 2010年

+1为第一句话,这是我在得到前几个答案后实际上得出的结论。
拉里·科尔曼

是的,谢谢您阐明在这种情况下愚蠢的人使用了多么聪明的方法!
Derek Litz 2013年

9

大多数人都从“代码需要太多的解密才能弄清楚它在做什么”这一方面以及随之而来的所有不好的方面来关注聪明。

  1. 没有人能弄清楚它,更不用说对其进行维护/调试了。
  2. 写作的人甚至都不知道它做什么。
  3. 一开始可能实际上并不是那么出色
  4. 等等....

所有的优点,但聪明还有另一个负面方面,那就是旧的自我问题。这会导致以下问题:

  1. 太“聪明”的人无法使用其他人的解决方案。当您可以发明自己的给同一只猫剥皮的方式时,为什么还要寻找别人做过的事情?
  2. 认为自己发明了最酷的解决方案的人通常会拒绝接受任何意见。
  3. 即使有明显的问题或需要进行微小的更改,也不允许任何人修改“其”代码。
  4. 相反,他们认为他们很聪明,需要使用“最新”技术来证明自己的聪明,但是在将其滚动到项目的关键部分之前,无论是在个人项目还是在非生产代码中都无法很好地掌握它。系统。

有时候我们都对自我感到内,但是当它阻碍了团队的发展时,这就是一个问题。


8

良好的聪明-聪明的代码行与非聪明的选择中的行之间的比率很高。20行代码使您无需编写20000,这是Extremely Good Clever。好聪明是关于节省自己的工作。

不好的聪明-编写的代码行与保存的代码行之间的比率较低。避免编写五行代码的聪明行之一就是Bad Clever。不好的聪明是关于“句法手淫”的。

请注意:Bad Clever几乎从未被称为“ Bad Clever”。它通常会以“美丽”,“优雅”,“简洁”或“简洁”的别名旅行。


有趣的答案,但是编写代码的人以外的人将您称为“ Bad Clever”的代码实际上称为“ beautiful”等吗?
拉里·科尔曼

2
要看。在Objective-C / C ++ / C中,这种现象通常仅限于个人。在Perl和Ruby,通常是整个社区将有大约坏聪明的共享价值是“美丽”,“优雅”,等等
user8865

1
@ user8865:而且,“ Good Clever”代码最终比原始代码更容易调试,因为按照您的定义,它比原始代码少3个数量级。
拉里·科尔曼

2
嗯,所以Perl程序-现在几乎可以定义-非常聪明:)很高兴知道!

7

我想知道每个人对聪明的定义。

就个人而言,当我解决一个棘手,复杂的问题并以非常简单和直接的方式实施它,同时又保持可接受的效率水平时,我感到自己很聪明。

tl;博士,我在代码审查期间说“哇,这比我想象的要容易得多”,而不是“这就是wtf”。


1
大声笑关于tl; dr,您认为程序员阅读速度有多慢?是的,我绝对鄙视此处的巧妙用法,以表示与实际情况相反的意思。愚蠢/无知/邪恶的开发人员和管理人员实际上以此来证明不雇用他们认为“太聪明”的人。
Derek Litz

6

除了列出的理论答案之外,通常在其他所有人都太聪明的情况下使用它。

有时在顶级性能密集型团队和中级维护团队之间移动,以了解“太聪明”的实际生活差异。

撇开理论上的论点,太聪明通常是基于技能最差的团队成员可以合理地工作的,因此它与环境非常相关。


优秀:“太聪明通常是基于技能最差的团队成员可以合理地工作的”
Orbling

根据您所在的位置,有时有时比“优秀”还少:-)
条例草案

谁在乎团队中技术水平最低的成员?几乎每个团队(尽管我敢肯定也有例外)都有至少一个绝对没有生意的成员称自己为程序员。
dsimcha 2010年

1
希望您能使他们变得更好,但是即使那没有成功,您仍然必须以团队成员的身份与他们打交道,他们需要能够参与一些工作。我目前在lambda表达式中看到了这一点。与我一起工作的很多人还没有得到他们,所以他们认为他们太聪明了。这是不幸的,因为它们相当有效且优雅地解决了我们的许多问题,但是如果没有中层人员得到他们的帮助,他们将去管理该软件不受支持。
比尔2010年

@Bill:Lambda函数???任何人即使明白地要求他们去了解这些简单的知识,也不会成为专业的程序员。
dsimcha 2011年

6

有时候我很聪明,以至于我错了。


1
那有可能发生。有时,某些地方太错了,这是对的。
bobobobo

他们称这些理论为约翰。理论可以并且应该偶尔犯错:),这并不意味着我们应该停止变得聪明,并努力变得尽可能聪明。我们还将如何成为这个世界的领导者!“啊,但是一个人的伸手可及之处不能超出他的掌握范围-或者天堂是什么?”
Derek Litz

4

性能,可维护,及时和廉价是我衡量解决方案的方式。我想聪明也可以成为解决方案的一部分,只要它不会对这些质量产生负面影响。


+1将“便宜”视为对发展的积极态度
Gary Rowe 2010年

我已经看到了太多无法执行的“聪明”代码!
HLGEM

还有更多有价值的指标,但是根据项目的不同,这些指标可能是好的指标,而且它们常常彼此矛盾,因此您必须强调一个指标才能成功。
Derek Litz

3

如果聪明的代码+使它成为可理解的代码<=简单代码所需的注释数量,那么我说去聪明的代码。每次。

我认为,当人们编写“聪明的代码”而故意不正确地评论它时,就会出现这个问题,因为只有一开始就无法理解它,以后的下一代才不得不花时间“欣赏”它的聪明之处。


好吧,或者因为他们只是不考虑下一个家伙,等等。我不确定我会归因于智力上的自负吗?懒惰的懒惰和坏习惯可以充分解释什么。但是事实是,如果乍一看无法理解您的代码,那么它需要注释,并且如果代码+注释(在LOC或时间上)比其他方式更长,那么您的工作就会比需要的多。
Dan Ray 2010年

好的答案(不能+1,一无所有,稍后再讲)。如果人们花时间写聪明的代码,而其他人花时间去理解它,则宁愿使用不太复杂的简单代码,即使效率较低。这样就不会提高技能。
2010年

最佳答案。口头禅:编写简单的基线,入门时脑筋急转弯,而且启动缓慢……然后当您将其简化为难以理解的单行代码时,将其作为注释。这就是您学习语言中所有肮脏技巧的方法!
Droogans 2012年

如果我用聪明的意思来表示混淆,我个人编写了一些混淆的代码,这些代码通过日志记录可以理解。尽管我当时不打算编写卷积的代码,但它节省了我一些时间,但是我添加了一个#TODO,如果我们需要进行大量修改,可能应该将其重写为简单的代码。
Derek Litz

3

我想起了我曾经看到的引述给许多不同人的引文,因为引号经常是好的。

释义:

任何有智慧的人都可以使简单复杂化,使复杂简单化需要天才。

采取一个复杂的想法并将其简化以使其易于理解,这说明了构造函数的聪明之处,但采取简单的想法并使之变得复杂则表明该构造函数希望被视为聪明的想法。


是的,以聪明为中心的自我想法使您的代码库陷入困境。你要么聪明,要么不聪明。可悲的是,在最初的学习阶段,人们认为自己比以前更聪明。后来,他们意识到自己并不聪明,一旦填补了知识鸿沟,实际上就编写了聪明的代码。
德里克·里兹

2

如果很难找到“聪明”的解决方案,那么就不应该使用它。例如,如果通过副作用您可以将复杂的计算压缩到一行,那么它就很聪明。但是,如果别人花一个小时弄清楚您所做的事情,那就太聪明了。


2
足够公平,但是如果无法弄清楚代码的人不熟悉该语言的所有功能,您的答案就会改变吗?
拉里·科尔曼

2
至少与IMO不同。如果一个人不熟悉某种语言的功能,那么他们就无法判断什么是聪明的。
乔D

@拉里:不一定。我认为阅读该书的人处于基本/较低的熟练水平。而且,如果开始变得难以挽回的复杂性,那么该是时候插入块注释来解释代码应该做什么了,这将有助于建立一个参考框架来理解其实际功能。但是,注释应该是高级别的-写出计算,解释过程;不要重复代码。的人应该(理想地)在阅读代码时能够理解该代码。无论如何,这就是目标。
Michael K

2

我认为,聪明本身并不是问题。通常,我们会混淆“聪明”(没有讽刺)和“ insightfull”代码。我看到的一个问题是,通常“聪明的”(带有讽刺意味的)代码包含隐式的不可见需求,这使得随着时间的推移调试和维护变得更加困难。

有几种已知的聪明算法。IMO是Quicksort之一。

“聪明的”(带有讽刺性的)代码通常会假设设置的变量和系统状态实际上与“聪明的”代码断开了连接(如先前打开的文件,网络连接,数据库等)。

为了正确维护“智能”代码,您必须加载到大脑上的数据量通常很大,以具有良好的成本效益比。


1

“聪明的代码”是程序员必须认真思考或使用一些高级技能编写的任何代码。这个问题忽略了布莱恩·W·科尼根(Brian W. Kernighan)最能表达的“聪明的余地”的需要:

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,那么就定义而言,您就不足以调试它。”


1

因为什么样子的小聪明在创意一阵开发者可以简单地通过为混乱和公正是不可读的不可维护的块不起眼的谜语他人。

不过,这是一个很好的,聪明的,表现良好的难题,但是,如果您有经验,就会经常意识到,要在中等水平上维护这些东西,您的业务(而不是开发人员)会付出更多的代价,或长期的。因此,您更希望在开发人员同居时平息他们的热情。

当然,除了有理由为聪明之外。而且,如果您刚刚编写的晦涩难懂的内容附带了一个很好的文档。您确实评论了这段聪明的代码,对吗?说明它的意图,为什么要像它,以及它的行为方式?

如果没有正当理由,那么可能只是过早的优化,过度设计或YAGNI之类的问题。如果需要15个级别的间接操作来完成简单的操作,那么您很有可能也属于先前的类别。如果没有记录,那就很麻烦。

出色的代码不应该要求维护人员一直都花100%的时间来理解它。好的代码很聪明。出色的代码几乎可以高效,但在许多其他方面却更好。出色的代码不需要具有15个视图的IDE即可遵循应用程序的设计。

注意:嘿,我写了一些我认为很聪明的东西,但这吸引了WTF?如果不是我的共同开发者的话,就是我经理的话。必须从他们的角度来看它。


感谢您的回答。您似乎与其他人一样,他们说“聪明”并不意味着我认为的那样。
拉里·科尔曼

1

我倾向于聪明,但我努力做到优雅

现在开发代码,其他人将不再尝试并避免以后再使用


1
来吧...聪明是优雅的代名词,您的大脑已被抢购一空。是的,我说的很对,这意味着您的大脑受营销的影响而不是事实的影响。
Derek Litz 2013年

优雅:简单聪明。@DerekLitz +1可以使任何东西变脆。
kevpie 2013年

1

根据我的经验和其他答案,这是我对问题的理解:

  1. 巧妙地编写但可读且可维护的代码不被认为是有害的。但是,大多数开发人员不会将这种代码称为“聪明”。他们可能会使用其他术语,例如“优雅”。关于此类代码是否存在,可能存在或可能没有争论。
  2. 即使是经验丰富的开发人员也需要花费大量时间和精力来理解它的生产代码是“聪明的”,并且每个人都认为这是有害的。
  3. 某些经验不足的开发人员需要花费大量时间和精力的生产代码被认为是有害的。我看到过任何一种答案,并且我与开发人员合作,他们明确表示他们希望保留所有内容“最低的公分母”。

整个西方西方文化都是LCD,我想这也意味着编程也必须如此。不好。
2011年

@Orbling:是的,但不要忘记即时的满足感。
拉里·科尔曼

我喜欢你的经验。令人遗憾的是,人们没有为迭代式改进而努力,也没有通过共享知识和理解来相互投资。相反,他们宁愿让我们成为齿轮上的齿轮,以便在时机成熟时可以轻松地更换我们。这样做阻碍了进展。我们也卖空了自己
Derek Litz 2013年

1

我认识一个人 他可能是我见过的最聪明的人。他绝对是一个令人难以置信的编码器,就纯粹的编程技巧而言,可能比我一生都要好。他就像在键入Word文档一样编写代码,并且可以像您不相信的那样反向链接列表。如果您想谈论编写一些非常复杂的代码,那么他就是您的助手,如果我遇到难以置信的难题,那么我总是向他求助。但是,与他一起在团队环境中进行项目工作实在令人发指。他无法直接针对业务问题,也无法提供合理,高效和简洁的解决方案。对他来说,列出1000行的代码比100行更好。他将使用自己的超级优化工具,而不是使用通过IDE或框架提供给他的工具。

我钦佩他做这些复杂事情的能力,但我需要的是可以解决问题并继续前进的人。不好说或接受,但是有时候在企业环境中,时间就是一切,您只需要解决问题并继续生活,您就可以稍后再回到问题上,并重构它来改善自己您的代码。聪明和屁股之间有一条细线。我对团队的座右铭始终是,在这种情况下可以解决的最简单的事情是什么,然后从那里开始。有时,简单并非总是答案,但它是一个很好的起点。


抱歉,尽管您遇到的这个人的能力能够编码复杂的东西,但他很愚蠢。不论其他特征如何,人们都会变得愚蠢。对于有才能的人,您对自己真正想要脱离发展的陈述是显而易见的。如果他真的很聪明,你应该帮他一个忙,面对他,而不是让他用自己的才华去做愚蠢的事情。您无所事事,抱怨背后,对他和他周围的所有人都是有害的。如果他不聪明,你应该解雇他,也许他会明白的。
Derek Litz 2013年

我确实与一个主要资源有关系,该资源数十年来每天都与聪明人打交道,其中一些人只是缺少一些知识,无法在团队环境中发挥作用。如果您至少让他们知道该问题,他们可以自己解决。
Derek Litz 2013年

1

在本文中,“聪明”的意思是“对自己的利益太聪明”,即某种东西现在可以工作,但以后将成为理解和改变的噩梦。

特别是如果这是一种利用编程语言的晦涩特征的技巧,或者利用了怪异的副作用,或者是用目标语言解决问题的一种真正怪异的方式。


0

我更喜欢简单的解决方案,我真的很喜欢红宝石方式。例如,当您想要对列表中的前2个元素求和时。首先,剪切列表以使其具有size = 2,然后对其求和。

我记得曾经使用过1个列表而不是3个列表,并创建了一个很难维护/更改的大功能。

在当今世界,我们不必为了提高性能而牺牲代码的清晰度(除了c ++,他们不必这样做,但他们会这样做)。


0

通常,当您需要“聪明”时,可以解决代码中的问题。如果变通方法不是很简单,那么在假定某些条件(编写代码时可能100%正确)时,您会得到很多困惑的面孔或其他奇怪的副作用。

因此,聪明==令人困惑==不好:(但当我将它们用于有限问题的实际解决方案时,它也很棒。


0

重新报价以获得上下文和更容易理解的内容:

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能聪明地编写代码,那么就定义而言,您就不足以调试它。”

布莱恩·克尼根(Brian Kernighan)在这里写的显然是指卷积,他错误地使用了“聪明”一词。

“调试的难度是一开始编写代码的两倍。因此,如果您尽可能以[卷积]的方式编写代码,那么就定义而言,您就不足以调试它。

卷积:

A thing that is complex and difficult to follow.

聪明:

Showing intelligence or skill; ingenious

受过良好教育的程序员知道简单的代码是巧妙的。根据定义,尽可能聪明的代码应该很简单。受过良好教育的程序员也将避免使用和编写像瘟疫这样的复杂代码。只要有机会,他们还将把复杂的代码转换为聪明的代码。通常,代码是一开始就令人费解,并且随着经验和共享知识可以更好地理解编程领域中的知识和对人类认知能力的理解,从而变得更加聪明。

由于此行情的流行以及Brian Bernighan在行业中非常流行,因此对该词的误用会对社会产生负面影响,老实说,我很想看到这个人自己解决的问题。在撰写本文之前,我尝试查看是否可以简单地通过电子邮件向他发送电子邮件,但是我找不到我理解的任何电子邮件联系信息:(.。

我看到的负面社会影响是其他程序员排斥他们更聪明的同事,因为他们现在认为聪明是一个问题。真正的问题是愚蠢的同龄人,他们认为自己以一种新的,独特的方式做事很聪明,并且在没有优势的情况下不断发明新事物,而不是获得和理解更大的社区并尽可能多地重复使用聪明的想法。

我确实需要澄清一下,尽管经常要了解才能比发明自己的要困难。由于行业中普遍存在不现实的截止日期问题,因此为较小的利基问题发明自己的产品将节省时间。这是基于以下观察:有用的,可重复使用的事物通常以更大的利基为目标,或者为发明提供有用的抽象。这还基于这样一个事实,人们瞄准大型壁ches以赚取更多的钱,而这往往使该工具极难使用,因为要使某物可用于广泛的应用程序涉及到复杂性。

另一个负面的社会影响是,这阻碍了进步和理解的欲望,因为在我们的自我中心世界中,我们将立即否认自己缺乏理解,并写下被混淆的代码,即使一旦被理解,这个想法实际上就是相当聪明。

TODO我想引用一些参考,但我也希望缺少参考,以免妨碍我共享信息的能力,因此我将快速引用我所记得的信息来源,也许我会找到一些实际信息。一天(或者您可以为我找到它!:)

  • 吉多·范·罗苏姆(Guido Van Rossum)谈及事件循环以及他如何理解事件循环
  • 一名GitHub员工表示,他们避免在Y-Combinator上雇用聪明的人
  • Python社区中正在进行许多讨论和学习。Python社区特别批评新想法,但不会拒绝他们无法理解的新想法,并且通常可以将最初被认为是令人费解的功能看作是核心语言功能/包。
  • 基于我的10000英尺观察,我自己的经验和专业意见。我从那里一直看不到启发的具体细节:(希望您的经验和观察会告诉您同样的事情,并且其他人可以在下面发表评论以给这个答案一些好处。

随意添加自己的引用!另外,请随时在我的文本中添加逗号。我已经有相当一段时间没有刷新我对英语逗号用法的了解了...


-1

因为人们常常不懂某种语言,习语和模式。他们可以拿一本书来学习,但事实并非如此。由于这些人,您应该编写简单的代码。

这不是一个聪明。这是一种知识。


2
我当然不同意这一点(尽管不值得-1)。通过这种说法,您可以说您不会实现Command模式来处理Undo / Redo事务堆栈,因为维护人员刚从学校毕业,也不知道发生了什么。在某些时候,您必须说,如果他们不知道,他们需要学习它。
肯·亨德森

@confusedGeek完全正确,您在无知的地方画线?
2010年

@Orbling,说实话,这是困难的部分,在某种程度上取决于情况。我倾向于使用的一般指南是,如果经验丰富的开发人员(所使用的技术知识丰富)可以理解它,那可能就可以了。如果他们做不到,则需要对其进行重构(或查看雇用惯例)。
肯·亨德森

@confusedGeek Aye,听起来很明智。试金石可能是,与您一样口径的开发人员可以很容易地理解您已经足够快地完成了什么。如果没有,并且有更简单的方法,则需要进行更改。有时没有一种更简单的方法。
2010年

-1。不要编码最低公分母。 不必要的复杂性是很糟糕的,但是如果一些聪明的做法使代码更加干燥,等等,那也许是值得的。
dsimcha 2011年

-1

我找不到任何地方提到在这里的话纪律,所以我会凑钱,我不希望发布答案,但对此事有着不同的见解,也许一个,原来的问题没有考虑到有。

聪明的开发者是一件好事。

然而,在聪明之前,还有其他特征。您可能已经意识到,我将谈论纪律。对于系统的长期可维护性来说,一个聪明而不受纪律的开发人员可能会很不利。

假设出现错误或提出了新要求。一个聪明的开发人员可能很快就会意识到,几个本地修复程序将在2分钟内完成工作。如果该开发人员受到纪律处分,他将阻止将这些修补程序应用于源代码,而是将找到一种有意义的方式来将所需的行为组合到系统中。这样,下次需要修改特定代码段时,维护人员将有一个轻松的时间来理解代码并实现新的更改而不会破坏任何内容。如果没有,那你就知道了。


“殴打将持续到士气得到改善”
gna

@gnat是什么意思?清理一下;我不认为纪律是强迫开发人员的事情。这是一个很好的人格特质。通常由聪明的人经过一段时间的软件维护后才开发的软件。问题出在聪明的人身上,他们没有足够地处于维护者的位置,并且到处都留着聪明的炸弹供其他人寻找。
dkateros
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.