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

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

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

评论

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

类似于创意编码有什么不好?

@nlawalker:我想我明白了。人们在将代码称为“清除”或“简单”的反义词时使用“聪明”一词,因为他们的确是要使用作为“清除”或“简单”的反义词的词。

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

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

#1 楼

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

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

评论


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

–安妮·舒斯勒(Anne Schuessler)
2010-12-10 17:21

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

–Orbling
2010-12-10 20:51

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

– Tim Post
2010-12-11 7:44

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

–斯蒂芬·弗拉尼(Stephen Furlani)
2010-12-14 15:53



作为必须证明自己确实只是“最小,正交正确”而“聪明”地做某事的人,我想补充一点,到底什么才是聪明是有主观性的。例如,有些人总是想写出FuncX()然后返回true,否则返回false,并且永远不会希望您只写return FuncX()。我不是在开玩笑,我确实是在进行对话。因为人们想在某个地方挂断点之类的东西。 :-)

– Warren P
13年3月21日在21:05



#2 楼

KISS原则

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


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


Brian Kernighan

评论


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

–詹姆斯·麦克奈利斯
2010-12-10 18:18

@詹姆斯:或者你只是失败。 ;)

–乔什·K(Josh K)
2010-12-10 19:37

@Josh K:我一直把KISS称为“保持简单,愚蠢!” -en.wikipedia.org/wiki/KISS_principle

–Orbling
2010-12-10 20:52

@Orbling:我回想起来不一样了,哦,现在我知道了。

–乔什·K(Josh K)
2010-12-11在3:54

维基百科说:“保持简单和愚蠢”? :)这是否意味着保持简单是愚蠢的,或者保持简单必须是愚蠢的? :P

–玛蒂·乌尔哈克(Mateen Ulhaq)
2011年10月19日,0:19



#3 楼

愚人无视复杂性;实用主义者遭受苦难;专家避免天才将其删除。
-Alan Perlis

评论


+1表示好听的报价,并且是第一个答案,没有隐含的假设,即事物不能既简单又聪明

–拉里·科尔曼(Larry Coleman)
2010-12-10 17:07

重要的是应该聪明的程序员,而不是代码。

–克里斯托弗·约翰逊(Kristopher Johnson)
2010-12-10 20:58

最好引用一个白痴,然后以一种聪明的方式滥用“聪明”一词。

–德里克·丽兹(Derek Litz)
2013年9月30日4:40在

#4 楼

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

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

评论


一个解决复杂问题的简单解决方案几乎可以使任何人都变得聪明。

– JeffO
2010-12-10 19:18

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

–肯·亨德森
2010-12-10 23:08

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

–迈克尔·科恩(Michael Kohne)
2010-12-11 2:53

@Michael,性能限制可能要求您的代码聪明。然后,学习维护人员的工作,如果他们不能学习,那就雇用新的维护人员。

–斯蒂芬·弗拉尼(Stephen Furlani)
2010-12-14 15:59

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

–user1249
2011-2-8在19:36

#5 楼

引用Brian Kernighan的话:

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

评论


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

–德里克·丽兹(Derek Litz)
13年9月30日在5:03

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

–peterchen
13年10月1日在15:24

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

–德里克·丽兹(Derek Litz)
2013年10月1日17:09

不反对:)

–peterchen
13年10月2日在8:05

#6 楼

聪明是一种工具;它本身无害。它只会在不必要的情况下变得有害。

#7 楼

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

读懂清晰,简单的代码已经足够困难了。读“聪明”的代码就像重新研究拉丁诗。这种情况也可以看作是一个例子,说明为什么为真实的人设计软件很困难:因为它们模棱两可。

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

评论


如果您不对社会规章制度和“人民[原文如此]”广为宣扬,我本该对此表示赞同。

–杰森·贝克(Jason Baker)
2010-12-11的1:27

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

– fzwo
2010-12-12 10:04



编辑了我的答案。现在更清晰/进攻性更强?

– fzwo
2010年12月12日上午10:11

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

–拉里·科尔曼(Larry Coleman)
2010-12-14 10:51

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

–德里克·丽兹(Derek Litz)
2013年9月30日5:04

#8 楼

大多数人都从“代码需要太多的解密才能弄清楚它在做什么”这一方面着眼于聪明,以及随之而来的所有不好的事情,例如


别人可以弄清楚它,更不用说对其进行维护/调试了。
写书的人甚至都不知道它做什么。 > etc ....

所有的优点,但是还有另一个消极的方面,那就是古老的自我问题。这会导致一些问题,例如“太聪明”的人无法使用其他人的解决方案。当您可以发明自己的方法给同一只猫剥皮时,为什么还要寻找别人做过的事情?
认为自己发明了解决问题的最酷方法的人通常会拒绝接受任何投入。
即使有明显的问题或需要微不足道的更改,也不会允许任何人修改“他们的”代码。但在将其滚动到系统的关键部分之前,无论是在个人项目还是在非生产代码中都无法很好地处理它。

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

#9 楼

良好的聪明-聪明的代码行与非聪明的选择中的行之间的比率很高。 20条代码使您免于编写20000,这是“极佳技巧”。 Good Clever可以节省您的工作。

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

只需要注意:坏聪明几乎从来没有被称为“坏聪明”;它通常会以“美丽”,“优雅”,“简洁”或“简洁”的别名旅行。

评论


有趣的答案,但是编写问题代码的人以外的人将您称为“ Bad Clever”的代码实际上称为“ beautiful”等吗?

–拉里·科尔曼(Larry Coleman)
2010-12-14 15:30

依靠。在Objective-C / C ++ / C中,这种现象通常仅限于个人。在Perl和Ruby中,通常整个社区对于Bad Clever的“美丽”,“优雅”等都有共同的价值。

–user8865
2010-12-14 17:11

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

–拉里·科尔曼(Larry Coleman)
2010-12-14 18:14

嗯,所以Perl程序-几乎按照定义是-非常聪明:)很高兴知道!

–user1249
2011年1月8日19:39

#10 楼

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

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

tl; dr当我在代码审阅时说“哇,这比我想象的要容易得多”时,我感到很聪明。 “这就是wtf。”

评论


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

–德里克·丽兹(Derek Litz)
13-10-1在0:32



#11 楼

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

不考虑理论上的争论,过于聪明通常是基于技能最低的团队成员可以合理地工作的,因此这与环境息息相关。 />

评论


优秀:“太聪明通常取决于技能最低的团队成员可以合理地工作”

–Orbling
2010-12-10 20:58

取决于您所在的位置,有时有时比“优秀”还差:-)

– Bill
2010年12月11日0:00

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

–dsimcha
2010-12-14 13:47

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

– Bill
2010-12-14 16:32

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

–dsimcha
2011年12月9日23:55



#12 楼

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

评论


那可能发生。有时,某些错误是正确的。

– bobobobo
2011年1月22日,下午5:42

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

–德里克·丽兹(Derek Litz)
13年10月1日,0:50

#13 楼

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

评论


+1:将“便宜”视为对发展的积极态度

–加里·罗(Gary Rowe)
2010-12-10 17:55

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

–HLGEM
2010-12-14 16:16

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

–德里克·丽兹(Derek Litz)
13年10月1日,0:53

#14 楼

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

我认为,当人们写“聪明的代码”而故意不正确地评论它时,就会出现这个问题,因为只有通过最初的理解,以后的下一代才不得不花时间”欣赏”它多么聪明。

评论


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

–丹·雷(Dan Ray)
2010-12-10 20:49

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

–Orbling
2010-12-10 21:04

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

– Droogans
2012-2-10 23:36

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

–德里克·丽兹(Derek Litz)
13年10月1日,0:55

#15 楼

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

释义:


任何有智慧的人都可以使
简单复杂,
天才使复杂变得简单。


采取一个复杂的想法并将其简化,以便可以理解,这表明构造函数很聪明,但采取一个简单的想法使其变得复杂,则表明构造函数希望被视为聪明。 >

评论


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

–德里克·丽兹(Derek Litz)
13年10月1日,0:41

#16 楼

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

评论


很公平,但是如果无法弄清楚代码的人不熟悉该语言的所有功能,您的答案就会改变吗?

–拉里·科尔曼(Larry Coleman)
2010-12-10 17:01

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

–乔D
2010-12-10 17:05

@拉里:不一定。我认为阅读该书的人处于基本/较低的熟练水平。而且,如果它开始变得无法修复,那么该是时候在块注释中解释该代码应该做什么了,这将有助于建立一个参考框架以了解其实际操作。注释应该是高层次的-写出计算,解释过程;不要重复代码。的人应该(理想情况下)能够在阅读代码时理解该代码。无论如何,这就是目标。

– Michael K
2010-12-10 17:06



#17 楼

我认为,聪明本身不是问题。通常,我们会对“聪明”(没有讽刺)和“ insightfull”代码感到困惑。我看到的一个问题是,通常“聪明的”(带有讽刺意味的)代码包含隐式的不可见需求,这使得它随着时间的推移难以调试和维护。聪明的算法。 IMO是Quicksort的一种。网络连接,数据库等...)。

为了正确维护“聪明的”代码而必须负担的数据量通常很大,以具有良好的成本效益比。

#18 楼

“聪明的代码”是程序员必须认真思考或使用一些高级技能编写的任何代码。问题在于它忽略了一定的“机智余量”的需求,这是Brian W. Kernighan最能表达的:您尽可能聪明地编写代码,按照定义,您不够聪明,无法对其进行调试。”

#19 楼

因为对于开发人员来说,在创造力的爆发下看起来很聪明,可能只是一团糟,对于其他人来说,这只是一个难以理解,难以维护的困惑之谜。一堆谜语,但是如果您有经验,您通常会意识到,将其维持在中期或长期的过程中,将使您的企业(而不是您,开发人员)付出更多的代价。因此,您宁愿在开发人员被带走时安抚他们的热情。

当然,除了有足够的理由来证明聪明才智。并且,如果您刚刚编写的内容晦涩难懂,那么会得到一个很好的文档。您确实评论了这段聪明的代码,对吗?解释它的意图,为什么需要像它,以及它如何表现?如果需要15个级别的间接操作来完成简单的操作,那么您很有可能也属于先前的类别。如果没有记录,那就很麻烦。

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

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

评论


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

–拉里·科尔曼(Larry Coleman)
2010-12-14 10:46

#20 楼

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

现在开发代码,其他人将不再尝试,以后再回避。

评论


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

–德里克·丽兹(Derek Litz)
2013年9月30日14:10在

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

–kevpie
2013年9月30日23:59



#21 楼

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


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


评论


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

–Orbling
2011年1月20日在20:04

@Orbling:是的,但不要忘记即时的满足感。

–拉里·科尔曼(Larry Coleman)
2011年1月21日在20:34



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

–德里克·丽兹(Derek Litz)
2013年9月30日14:14



#22 楼

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

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

评论


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

–德里克·丽兹(Derek Litz)
2013年9月30日14:31



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

–德里克·丽兹(Derek Litz)
2013年9月30日14:45



#23 楼

在这种情况下,“聪明”的意思是“对自己的利益太聪明了”,即某种东西现在可以工作,但是以后将成为理解和改变的噩梦。编程语言的功能,或者利用怪异的副作用,或者是在目标语言中解决问题的一种真正奇怪的方法。

#24 楼

我更喜欢简单的解决方案,我真的很喜欢红宝石方式。例如,当您想对列表中的前2个元素求和时。首先,您将列表切成大小为2,然后将其求和。

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

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

#25 楼

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

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

#26 楼

重新引用以获取上下文并更容易理解:


“调试是一开始编写代码的两倍。
因此,如果您编写代码的技巧很巧妙按照
定义,您可能不够聪明,不足以对其进行调试。“


Brian Kernighan在这里写的显然是指卷积,他错误地使用了聪明一词。 。


“调试是一开始编写代码的两倍。
因此,如果您尽可能以[convolulated]编写代码,
定义,不足以调试它。”


卷积:

A thing that is complex and difficult to follow.


聪明:

Showing intelligence or skill; ingenious


受过良好教育的程序员知道简单的代码是巧妙的。根据定义,尽可能聪明的代码应该很简单。受过良好教育的程序员也将避免使用和编写像瘟疫这样的复杂代码。只要有机会,他们还将把复杂的代码转换为聪明的代码。代码通常始于复杂的过程,并且随着经验和共享知识可以更好地理解编程领域的知识和对人类认知能力的理解,从而变得更加聪明。这个词的滥用在业界很普遍,会对社会产生负面影响,我很想看到这个人自己解决的问题。在写这篇文章之前,我试图看看是否可以简单地给他发电子邮件,但是,我找不到我理解的任何电子邮件联系信息:(。

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

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

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

待办事项我想引用一些参考,但是我也希望缺少参考不会妨碍我共享信息的能力,因此我将快速引用我记得的信息我的信息,也许有一天我会找到实际信息(或者您可以为我找到!)
一位GitHub员工表示,他们避免在Y-Combinator上雇用聪明的人
Python社区中进行的许多讨论和学习。 Python社区特别批评新想法,但是并不会忽略他们无法理解的新想法,并且通常可以将最初被认为是令人费解的功能看作是核心语言功能/包。
基于我的10000英尺观察,我自己的经验和专业意见。我从那里一直都看不到有什么启发性的细节:((希望您的经验和观察会告诉您同样的事情,并且其他人可以在下面发表评论以给出一些答案。 >随时添加您自己的引文!另外,请随时在文本中添加逗号。很长一段时间我都没有刷新关于英文逗号用法的知识...

#27 楼

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

这不是一个聪明的做法。这是一种知识。

评论


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

–肯·亨德森
2010-12-10 23:13



@confusedGeek非常正确,您在无知的地方画线?

–Orbling
2010-12-11在0:45

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

–肯·亨德森
2010-12-11在2:01

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

–Orbling
2010-12-11 9:02

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

–dsimcha
2011年12月9日在23:32

#28 楼

我在这里附近找不到“学科”一词,因此我将继续讨论。我不想发布答案,但想就此问题分享不同的见解,也许是原始问题没有想到的问题。

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

但是,在聪明才出现其他特征之前。您可能已经意识到,我将谈论纪律。聪明而不受纪律的开发人员可能对系统的长期可维护性非常不利。

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

评论


“殴打将持续到士气改善为止”

– gna
2013年10月1日15:28



@gnat是什么意思?清理一下;我不认为纪律是强迫开发人员的事情。这是一个很好的人格特质。通常由聪明的人在维护软件一段时间后开发的一种。问题出在聪明的人身上,他们的维护者地位还不够高,他们到处都留着聪明的炸弹供其他人寻找。

– dkateros
'13 -10-1在17:13