如果您睡眠不足,可以实际产生高质量的代码吗?[关闭]


37

我听说过程序员编码两天不睡觉,喝咖啡和红牛。此外,在《社交网络》等电影中,他们还展示了马克·扎克伯格已经进行了36个小时的编程。我还在某处阅读过,在诸如Facebook,Google,foursquare等公司中,他们可以在24小时以上不睡觉的情况下进行编码。

这是真的吗?如果您被剥夺了睡眠,可以实际产生高质量的代码吗? 红牛之类的东西可以弥补睡眠吗?


4
哇靠!我认为不是人类/程序员。可能是外星人?:)
Gopi

25
“社交网络”不是纪录片。它只是基于与Facebook创立有关的实际事件而松散地进行的。作为一种营销策略,“真实故事”方面被夸大了,但是每当作者和导演受到采访者的逼迫时,他们都会承认这主要是他们对“可能发生的事情”的想象。
查尔斯E.格兰特

8
也许应该将其移至skeptics.stackexchange.com ...
Evan,

6
有些可以,但是那是因为它们通常会产生高质量的代码。不幸的是,即使在充分休息的情况下,产生平均质量代码的情况也更为普遍...

4
我醒了38个小时后的第二天就读了这个问题,其中32个在工作。我想说些什么,但是基本上,任何专心的编程时间都可以为您的输出带来好处,但是当您完全疲倦时,您就不会专心。但是,如果您沉迷于使其达到某种想象的正确状态,则可以构建,测试,调试,记录和完善。
dlamblin

Answers:


77

根本没有。编码36小时与编程无关,而是人的属性。很少有人可以保持清醒状态24小时,即使他们保持清醒状态,他们的头脑也确实失去了解决问题的能力。昏昏欲睡的驾驶员只需撞上其他汽车。昏昏欲睡的会计师,只会在计算中犯错误。另外很多程序员困时,编写的代码质量较低。

PS:有一种失眠症,会使您睡眠不足。但是我不认为Google会雇用患有这种疾病的人。:)


28
+1:真正好的程序员在接触编译器之前会花费大部分时间思考问题。当他们这样做时,解决方案通常是经过深思熟虑,简单,抽象且易于维护的,因此编码变得微不足道。
贾斯汀·

1
@EOL:D确实正确,应该读为“键盘”
贾斯汀·

4
我自己的经验是,从上午9点开始(大约12个小时),到晚上9点左右,我感到疲倦,烦躁,无法直截了当,并且无法编写任何东西或进行调试。回家和睡觉远比拉通宵通宵等愚蠢的事情有效。做到这一点,更不用说有效了,是一个神话。
quick_now 2011年

3
@quickly_now确实如此。随着时间的变化,代码变得越来越差。因此,从技术上讲,只要您能够坐在计算机前就可以进行编码。但是,然后,不要来问问如何优化O(n ^ n)排序函数;)。
麦凯博士

20
等等,您只需要24小时的编码就可以睡觉了?我知道我刚开始时这项工作听起来很糟糕!
尼克·克拉弗

41

这可能是那些众所周知的持久神话。您会听到很多关于它的信息,因为它是一个令人信服的想法,但实际上它没有任何实际依据。

哦,当然,也许某个刚从高中毕业的小孩可以在36小时内实现似乎是某种编码奇迹。但是以这种方式编写的代码是否可以维护?它甚至可读吗?可以缩放吗?它是否遵循明智的编程实践?有文件记录吗?

Twitter入侵了一个有效的网站,然后以“正确”的方式重新编写了该网站,因为当负载太大时,它就会崩溃。Facebook在较短的时间内就将其原始站点整合到了该项目中,但后来又招募了许多新开发人员来重写该网站所运行的PHP平台,因为它无法扩展。

例外证明了规则。


6
人们可能还会将这些视为迫在眉睫的理由,而不用担心第一次就做对-至少在您潜在地建立一个全新的市场时,不要这样。
亚伦诺特,2011年

1
根据您链接到的帖子,Twitter的重写不正确。查看更新。
jjnguy 2011年

@jjnguy:足够公平,但是考虑到Twitter的停机时间和可伸缩性问题,该示例仍然有意义。
罗伯特·哈维

2
它可能不会产生高质量的代码,但是如果您掌握了基础知识并且可以“在睡眠中”进行TDD,那么代码就不会那么糟糕。累时编码的最大好处是,您的大脑不太可能忽略随机的想法,因此您更具创造力。 en.wikipedia.org/wiki/Sleep_and_creativity
Ape-in​​ago 2013年

29

关于这个神话的唯一部分可能是,程序员在长时间不中断的情况下表现最佳。在编写代码时,您可以花很多时间在脑海里,因为您不需要查找API使用情况或您或其他人编写代码的不同部分的方式,因此可以更快地编写代码。我发现当我被打扰时,恢复到全速状态通常要花费一些可观的时间,如果我做一些重要的事情(或有趣的事情),有时我会在正常时间放弃回家,因为下班后当您打扰回家时。出于同样的原因,我还以熬夜至3点或5点而闻名。

但是,就像我说的那样,代码的速度和质量取决于您要付出多少注意力以及可以在内存中处理多少事情。当睡眠成为一个问题时,您可能会认为自己正全力以赴,但实际上并非如此。如您所提供的示例中所开发的大多数软件,都是快速起步的,但是就像它最终会带来巨大的责任和维护麻烦一样。

如果您工作量很大,则肯定可以产生大量代码,并且只要付出足够的努力,就可以逐个功能地创建功能。但是,如果不注意体系结构/设计,就不会产生易于扩展,可维护或可扩展的软件。从经验上来讲,要想设计并在您的头(或纸上)上弄乱组件/接口/抽象层要比继续编写纯代码要难得多。


3
+1表示不间断时间可以是优质时间(但仅在合理剂量下)。
Eric O Lebigot 2011年

1
@DXM集中帮助很大。时间的质量超过时间的数量
lovesh 2011年

1
@lovesh-我不会确切地说。(时间质量)x(时间量)=结果。两者之一增加都会增加结果。但是,时间的增加最终会降低质量。我们的目标始终是最大化结果。
DXM

13

整个过程听起来像是在“处于区域内”的夸大其词当您全神贯注时,作为一名编码人员,时间会扭曲,分钟会变成秒,等等。您可能会发挥最大的生产力。有时候很难进入那种状态,而且很容易摆脱(主要是外部因素),但是当你……。


2
我写我的帖子的时候就在考虑发布时如何考虑短语“ in the zone”。
knb

我只是将其发布为评论,因为在这一点上,所有答案都是“我也是”,但我认为还没有人提到这一现象,这很奇怪。
MPelletier

2
确实,如果您在区域中,那么很长的代码要容易得多。但是,至少可以说,一旦编码了这么长时间,就失去焦点。
DasIch 2011年

10

我可以-有时也可以-连续编程36小时。
我认为我经历过的最糟糕的事情是一周的睡眠时间约为10个小时左右。
对我来说,咖啡因和能量饮料没有帮助。实际上,从长期来看,咖啡因可能会产生相当大的负面影响。我的建议是喝了不少。保持水分,走路上厕所是一个不错的副作用:稍微伸展双腿,然后自动休息一下。

话虽如此,我发现这越来越困难。我想这是一种能力,已经耗尽,最终耗尽了。也许对健康有一些负面影响-我无法断定,无论是长期还是短期的生理或心理影响。
我能告诉你的是,你感觉像僵尸,在马拉松比赛后的第二天,你会继续保持那种感觉。就个人而言,在频繁执行此操作大约一年后,我的工作量很大。
就是说:有些人可以在这样的时间段内有效地工作,但这是有代价的
通常,这是计划不足的结果,并且没有填补非技术项目负责人留下的空白的经验,这是唯一的选择。

现在,您几乎找不到在此类马拉松过程中产生的高质量代码。但是,造成这种情况的主要原因是发生马拉松的情况:需要在很短的时间内交付特征X,Y和Z的情况。在那个时候,没有人真正在乎代码质量,这就是为什么您通过快速修复和其他黑客方式积累了大量技术债务的原因。
同时,这表明大脑的功能完好:快速修复和修改既需要概览又需要创造力。

您不要忘记,很少会一次编写高质量的代码。特别是如果代码的寿命很长。通过检查和重构可以实现代码质量。没有人会在截止日期前48h这样做。

最重要的是:您应该尽可能长时间地工作,而不是更长的时间。如果您只能工作4小时,那就可以了。休息一下,然后再工作。试图保持清醒状态36小时,而您却无法完成8小时的工作。如果您每4小时进行4次会话,并使用剩下的20h进行再生,那么您将获得两倍的工作量。
如果您可以长时间工作,则意味着您可以更灵活地应对低估。但是,长期解决方案正在改善您的计划和估算过程。如果在您的工作场所这是不可能的,请切换作业。如果人们希望您工作这么长时间,请换工作。您不必向任何人证明任何事情。


这听起来像是一个很大的谎言。没有人可以连续工作36小时,实际产生一些有用的东西
BЈовић

@VJovic:好吧,如果你这么说,那么我想我们都必须相信它;)
back2dos 2012年

5

好的程序员确实可以编程36个小时。这并不意味着他们可以在36个小时内生产出最优质的代码。我不是一个优秀的程序员,我在大学里做过几次,甚至在30多岁的时候尝试修复船舶交货期限的错误时都做了几次。这通常是一个愚蠢的想法,反映出较差的计划和调度技能。


1
而且,仅仅因为您可以做,并不意味着您就很有效,尤其是在大约12到15个小时之后。
quick_now 2011年

10
错误的程序员也可以编程36个小时。编码时间的长短与编码器的质量无关。
Marjan Venema

5

如果您身体健康,可以保持清醒状态并工作36个小时。但是这一次您将不会编写最佳代码或解决非常复杂的问题。我偶尔工作了很长时间。在大多数情况下,这是为了保留一些截止日期。但是当时的工作主要是添加一些次要功能,例如打印一些列表,优化一些布局。您无需进行任何思考,就像进行大量打字一样。程序的主要功能和复杂部分已经完成。

有时您注意力不集中是长时间工作的主要原因。我们曾经在第二天有最后期限。经过漫长的一天,我们完成了整个工作,现在是凌晨2点。只剩下一个令人讨厌的错误。我的老板在上午9点与客户约好时间,所以时间充裕。我花了几个小时才能找到并修复可能要半小时才能解决的问题。我只是确定地知道我无论如何都能找到它,并且没有理由让我的老板失望,因为无论如何夜色已经消失了。


5

是。 大量的轶事信息表明可以做到。我怀疑有人会在马拉松运动中养成习惯。医疗实习生会拉这些类型的时间。

您可能会犯更多错误吗?我想所有这些都假设您可以首先编写高质量的代码。在这种情况下,您会陷入困境,只是想让它正常工作。质量不是考虑因素。获得资金后,我们将对其进行修复。


4
+1供医务人员参考。我认为过度劳累的医院医生通常会这样做...工作压力很大的夜班,然后是日班,肯定会在几个月甚至几年后被烧光。
knb

6
现在有一个令人欣慰的想法;)睡眠不足的实习生和有生命危险的健康状况的人。尝试“稍后”解决这些错误。
Leigh

1
睡眠不足的实习生所带来的风险已广为人知,许多组织正在取消这种做法。之所以会持续下去,部分原因在于进行培训的医生付出了这些漫长的转变。
BillThor

4

这不是不可能的,它真实发生的。由于本章很长,所以让我引用实际的段落:

紧密组织的成员称自己为“黑客”。随着时间的流逝,他们也将“黑客”的描述扩展到了斯托曼。在这样做的过程中,他们向斯托曼灌输了“黑客伦理”的伦理传统。Stallman了解到,成为一名黑客不仅意味着编写程序。这意味着编写最好的程序。如果要编写最好的程序,那就意味着要在码头连续坐36个小时。最重要的是,这意味着可以随时访问最好的机器和最有用的信息。黑客公开谈论通过软件来改变世界,斯托曼得知本能的黑客不屑于任何阻碍黑客实现这一崇高事业的障碍。这些障碍中最主要的是糟糕的软件,

当然,这并不意味着这是所有人的一条规则。有些人可以做到,而其他人则不能。最重要的是不要被打扰,并在自己觉得非常有生产力的时期内工作。因此,您可以自己尝试并得出结论:)


3

如果您是一台机器,我想这是有可能的-我毫不怀疑某些机器可以做到。但是经验告诉我,绝大多数程序员会在8到10小时标记后不久编写更糟糕的代码,而在16小时标记之后写出糟糕的代码。

几次我们的团队被迫全天候工作,实际上我们最终得到了一些需要回滚的代码。


好吧,如果质量受到影响,Facebook上的人怎么会一直做(至少说做)
lovesh 2011年

4
...根据我最近在Facebook上的经验,我会说这与我的观点非常一致。今天,使用Facebook的不同部分出现了大约3或4个错误。
Kaleb Brasee

3
@lovesh“据说他们做到了”和“他们做到了”是两回事。
Scott C Wilson

3

我怀疑这是诚实的。实际上,尽管有关于人们实现X,Y和Z醒来24小时的神话和故事,但它们碰巧是处于极端情况下,并且很少见。

追溯到一天以前,我曾经为一家律师事务所提供打字池,该律师事务所有时会吸引人们全力以赴,试图在特定时间把东西拿出来。那些花费大量时间来草拟文档的人通常都会把这些文档发送出去,以使他们的隔夜更改被撤消。我认为,一次不能连续保持高水平运动超过12个小时(甚至过多),要通过增加咖啡因水平来克服睡眠不足。我认为这是一个人们喜欢讲的故事,但是如果他们是老实人,他们会承认,他们在长途会议上的平均工作,无论工作是什么,无论是编码还是编写法律文件,都很少,甚至永远都不够好如果他们有足够的休息,以匹配他们的输出。

编码器无论多么出色,都没有什么特别之处,像驱动程序一样,就像重型机械的操作员一样,它们容易疲劳,如果有人能够证明编码器可以在不超过12小时的时间内提供高质量的输出而感到震惊,我将感到惊讶。


2

当我在大学学习编程时,有几个晚上比白天有更高的生产力。这与以下事实有关:晚上的注意力减少了,杂草使我足够舒适以能够静坐,无论如何我直到那天下午2点才真正起床,所以我并不觉得太累。我可以编码直到上午8点,直到我疯狂地饿了。如此说来,第二天我会在下午5点之前崩溃,这使我无法保持生产力。晚上进行编程可以提高工作效率,但是让自己无法入睡永远不会提高代码质量,并且您也永远不会打算在编码时感到疲倦。


2

我和其他许多富有创造力的人都表现出两极个性。在设计软件时,我倾向于遵循费曼的算法:

  1. 写下问题。(分钟)

  2. 认真思考。(几天和几年之间)

  3. 写下解决方案。(天)

睡眠大量减少的轻躁狂发作(咖啡因或否)仅是完成#3的入场券。


2

请参阅《怀疑论者》中的相关文章。SE: 鲍尔默峰真实吗?,尤其是ESultanik的回答。

为什么我认为这两个问题相关?在我看来,睡眠剥夺造成的损害与喝醉有些相似,尽管我没有任何证据支持我的主张。

引用ESultanik引用的参考文献,

...适度饮酒会主要基于次要过程(准备,照明的某些部分和验证)抑制创造力,而主要基于次要过程(孵化,照明的某些部分和恢复)抑制酒精的创造力。

我想说的是,在睡眠不足的情况下创建抽象体系结构模型可能会更好,但是键入键盘的实际源代码仍然会让人厌烦。


2

当一个人被迫编码36个小时时,通常是由于产品交付的最后期限。在这样的期限内,通常首先要考虑代码质量。口号是“只要完成”。“我们将在版本2中修复它”是另一种口头禅。

因此,通常情况下,当一个人连续进行36个小时的编码时,代码质量确实会受到影响..但是从业务的角度来看这并不重要..因为如果您不发货,甚至损坏的东西,您可能都不会做生意做对了。

当一个WANTS想要连续进行36个小时的编码时,这是因为您有很强的创意高峰,并且不想中断它。在这36个小时内,您将不会编写高质量的代码,但是您将在编写创意代码。然后,您稍后再查看该代码,并想知道它如何工作。

创造力是经常发生的事情之一。您无法控制它,因此在其显示时即可利用它。如果您缺乏创造力,则始终可以修复代码。


1

几个月前,我和同事一起喝酒。第二天,我们回到了办公室,呆了下来……但令我们惊讶的是,我们关闭了破记录的漏洞。

从表面上看,这些错误并不容易发现,并且大多数都没有任何复制步骤,但是,在修复这些错误时,仍然必须“脱颖而出”。

尽管我们并没有被“剥夺睡眠”,但是我们仍然没有正确的思维方式来编写代码……那天我们发生的一切只是奇怪的事情,我们总是提到它。

哦,而且对于大多数人来说,我们大多数人都在尽享JD和可乐的乐趣:)


+1我不确定这是否能回答问题,但我还是很喜欢这个答案:-)
Danny Varod 2011年

0

我认为,对于大多数人来说,长时间没有任何睡眠就进行有效率的工作是不可能的。

但是我认为只要3-4个小时的良好睡眠,您就可以做出色的工作。即使连续几天紧张的工作(智力),几乎没有睡眠也可以使用。

但是,对我而言,此后必须要有一段恢复期。比方说,一两个晚上通常有7-8个小时的睡眠时间。


这是典型的CS学生的时间表,不是吗?
user16764 2013年
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.