我听说过程序员编码两天不睡觉,喝咖啡和红牛。此外,在《社交网络》等电影中,他们还展示了马克·扎克伯格已经进行了36个小时的编程。我还在某处阅读过,在诸如Facebook,Google,foursquare等公司中,他们可以在24小时以上不睡觉的情况下进行编码。
这是真的吗?如果您被剥夺了睡眠,可以实际产生高质量的代码吗? 红牛之类的东西可以弥补睡眠吗?
我听说过程序员编码两天不睡觉,喝咖啡和红牛。此外,在《社交网络》等电影中,他们还展示了马克·扎克伯格已经进行了36个小时的编程。我还在某处阅读过,在诸如Facebook,Google,foursquare等公司中,他们可以在24小时以上不睡觉的情况下进行编码。
这是真的吗?如果您被剥夺了睡眠,可以实际产生高质量的代码吗? 红牛之类的东西可以弥补睡眠吗?
Answers:
根本没有。编码36小时与编程无关,而是人的属性。很少有人可以保持清醒状态24小时,即使他们保持清醒状态,他们的头脑也确实失去了解决问题的能力。昏昏欲睡的驾驶员只需撞上其他汽车。昏昏欲睡的会计师,只会在计算中犯错误。另外很多程序员困时,编写的代码质量较低。
PS:有一种失眠症,会使您睡眠不足。但是我不认为Google会雇用患有这种疾病的人。:)
这可能是那些众所周知的持久神话。您会听到很多关于它的信息,因为它是一个令人信服的想法,但实际上它没有任何实际依据。
哦,当然,也许某个刚从高中毕业的小孩可以在36小时内实现似乎是某种编码奇迹。但是以这种方式编写的代码是否可以维护?它甚至可读吗?可以缩放吗?它是否遵循明智的编程实践?有文件记录吗?
Twitter入侵了一个有效的网站,然后以“正确”的方式重新编写了该网站,因为当负载太大时,它就会崩溃。Facebook在较短的时间内就将其原始站点整合到了该项目中,但后来又招募了许多新开发人员来重写该网站所运行的PHP平台,因为它无法扩展。
例外证明了规则。
关于这个神话的唯一部分可能是,程序员在长时间不中断的情况下表现最佳。在编写代码时,您可以花很多时间在脑海里,因为您不需要查找API使用情况或您或其他人编写代码的不同部分的方式,因此可以更快地编写代码。我发现当我被打扰时,恢复到全速状态通常要花费一些可观的时间,如果我做一些重要的事情(或有趣的事情),有时我会在正常时间放弃回家,因为下班后当您打扰回家时。出于同样的原因,我还以熬夜至3点或5点而闻名。
但是,就像我说的那样,代码的速度和质量取决于您要付出多少注意力以及可以在内存中处理多少事情。当睡眠成为一个问题时,您可能会认为自己正全力以赴,但实际上并非如此。如您所提供的示例中所开发的大多数软件,都是快速起步的,但是就像它最终会带来巨大的责任和维护麻烦一样。
如果您工作量很大,则肯定可以产生大量代码,并且只要付出足够的努力,就可以逐个功能地创建功能。但是,如果不注意体系结构/设计,就不会产生易于扩展,可维护或可扩展的软件。从经验上来讲,要想设计并在您的头(或纸上)上弄乱组件/接口/抽象层要比继续编写纯代码要难得多。
整个过程听起来像是在“处于区域内”的夸大其词。当您全神贯注时,作为一名编码人员,时间会扭曲,分钟会变成秒,等等。您可能会发挥最大的生产力。有时候很难进入那种状态,而且很容易摆脱(主要是外部因素),但是当你……。
我可以-有时也可以-连续编程36小时。
我认为我经历过的最糟糕的事情是一周的睡眠时间约为10个小时左右。
对我来说,咖啡因和能量饮料没有帮助。实际上,从长期来看,咖啡因可能会产生相当大的负面影响。我的建议是喝了不少。保持水分,走路上厕所是一个不错的副作用:稍微伸展双腿,然后自动休息一下。
话虽如此,我发现这越来越困难。我想这是一种能力,已经耗尽,最终耗尽了。也许对健康有一些负面影响-我无法断定,无论是长期还是短期的生理或心理影响。
我能告诉你的是,你感觉像僵尸,在马拉松比赛后的第二天,你会继续保持那种感觉。就个人而言,在频繁执行此操作大约一年后,我的工作量很大。
就是说:有些人可以在这样的时间段内有效地工作,但这是有代价的。
通常,这是计划不足的结果,并且没有填补非技术项目负责人留下的空白的经验,这是唯一的选择。
现在,您几乎找不到在此类马拉松过程中产生的高质量代码。但是,造成这种情况的主要原因是发生马拉松的情况:需要在很短的时间内交付特征X,Y和Z的情况。在那个时候,没有人真正在乎代码质量,这就是为什么您通过快速修复和其他黑客方式积累了大量技术债务的原因。
同时,这表明大脑的功能完好:快速修复和修改既需要概览又需要创造力。
您不要忘记,很少会一次编写高质量的代码。特别是如果代码的寿命很长。通过检查和重构可以实现代码质量。没有人会在截止日期前48h这样做。
最重要的是:您应该尽可能长时间地工作,而不是更长的时间。如果您只能工作4小时,那就可以了。休息一下,然后再工作。试图保持清醒状态36小时,而您却无法完成8小时的工作。如果您每4小时进行4次会话,并使用剩下的20h进行再生,那么您将获得两倍的工作量。
如果您可以长时间工作,则意味着您可以更灵活地应对低估。但是,长期解决方案正在改善您的计划和估算过程。如果在您的工作场所这是不可能的,请切换作业。如果人们希望您工作这么长时间,请换工作。您不必向任何人证明任何事情。
好的程序员确实可以编程36个小时。这并不意味着他们可以在36个小时内生产出最优质的代码。我不是一个优秀的程序员,我在大学里做过几次,甚至在30多岁的时候尝试修复船舶交货期限的错误时都做了几次。这通常是一个愚蠢的想法,反映出较差的计划和调度技能。
如果您身体健康,可以保持清醒状态并工作36个小时。但是这一次您将不会编写最佳代码或解决非常复杂的问题。我偶尔工作了很长时间。在大多数情况下,这是为了保留一些截止日期。但是当时的工作主要是添加一些次要功能,例如打印一些列表,优化一些布局。您无需进行任何思考,就像进行大量打字一样。程序的主要功能和复杂部分已经完成。
有时您注意力不集中是长时间工作的主要原因。我们曾经在第二天有最后期限。经过漫长的一天,我们完成了整个工作,现在是凌晨2点。只剩下一个令人讨厌的错误。我的老板在上午9点与客户约好时间,所以时间充裕。我花了几个小时才能找到并修复可能要半小时才能解决的问题。我只是确定地知道我无论如何都能找到它,并且没有理由让我的老板失望,因为无论如何夜色已经消失了。
是。 大量的轶事信息表明可以做到。我怀疑有人会在马拉松运动中养成习惯。医疗实习生会拉这些类型的时间。
您可能会犯更多错误吗?我想所有这些都假设您可以首先编写高质量的代码。在这种情况下,您会陷入困境,只是想让它正常工作。质量不是考虑因素。获得资金后,我们将对其进行修复。
这不是不可能的,它是真实发生的。由于本章很长,所以让我引用实际的段落:
紧密组织的成员称自己为“黑客”。随着时间的流逝,他们也将“黑客”的描述扩展到了斯托曼。在这样做的过程中,他们向斯托曼灌输了“黑客伦理”的伦理传统。Stallman了解到,成为一名黑客不仅意味着编写程序。这意味着编写最好的程序。如果要编写最好的程序,那就意味着要在码头连续坐36个小时。最重要的是,这意味着可以随时访问最好的机器和最有用的信息。黑客公开谈论通过软件来改变世界,斯托曼得知本能的黑客不屑于任何阻碍黑客实现这一崇高事业的障碍。这些障碍中最主要的是糟糕的软件,
当然,这并不意味着这是所有人的一条规则。有些人可以做到,而其他人则不能。最重要的是不要被打扰,并在自己觉得非常有生产力的时期内工作。因此,您可以自己尝试并得出结论:)
如果您是一台机器,我想这是有可能的-我毫不怀疑某些机器可以做到。但是经验告诉我,绝大多数程序员会在8到10小时标记后不久编写更糟糕的代码,而在16小时标记之后写出糟糕的代码。
几次我们的团队被迫全天候工作,实际上我们最终得到了一些需要回滚的代码。
我怀疑这是诚实的。实际上,尽管有关于人们实现X,Y和Z醒来24小时的神话和故事,但它们碰巧是处于极端情况下,并且很少见。
追溯到一天以前,我曾经为一家律师事务所提供打字池,该律师事务所有时会吸引人们全力以赴,试图在特定时间把东西拿出来。那些花费大量时间来草拟文档的人通常都会把这些文档发送出去,以使他们的隔夜更改被撤消。我认为,一次不能连续保持高水平运动超过12个小时(甚至过多),要通过增加咖啡因水平来克服睡眠不足。我认为这是一个人们喜欢讲的故事,但是如果他们是老实人,他们会承认,他们在长途会议上的平均工作,无论工作是什么,无论是编码还是编写法律文件,都很少,甚至永远都不够好如果他们有足够的休息,以匹配他们的输出。
编码器无论多么出色,都没有什么特别之处,像驱动程序一样,就像重型机械的操作员一样,它们容易疲劳,如果有人能够证明编码器可以在不超过12小时的时间内提供高质量的输出而感到震惊,我将感到惊讶。
请参阅《怀疑论者》中的相关文章。SE: 鲍尔默峰真实吗?,尤其是ESultanik的回答。
为什么我认为这两个问题相关?在我看来,睡眠剥夺造成的损害与喝醉有些相似,尽管我没有任何证据支持我的主张。
引用ESultanik引用的参考文献,
...适度饮酒会主要基于次要过程(准备,照明的某些部分和验证)抑制创造力,而主要基于次要过程(孵化,照明的某些部分和恢复)抑制酒精的创造力。
我想说的是,在睡眠不足的情况下创建抽象体系结构模型可能会更好,但是键入键盘的实际源代码仍然会让人厌烦。
当一个人被迫编码36个小时时,通常是由于产品交付的最后期限。在这样的期限内,通常首先要考虑代码质量。口号是“只要完成”。“我们将在版本2中修复它”是另一种口头禅。
因此,通常情况下,当一个人连续进行36个小时的编码时,代码质量确实会受到影响..但是从业务的角度来看这并不重要..因为如果您不发货,甚至损坏的东西,您可能都不会做生意做对了。
当一个WANTS想要连续进行36个小时的编码时,这是因为您有很强的创意高峰,并且不想中断它。在这36个小时内,您将不会编写高质量的代码,但是您将在编写创意代码。然后,您稍后再查看该代码,并想知道它如何工作。
创造力是经常发生的事情之一。您无法控制它,因此在其显示时即可利用它。如果您缺乏创造力,则始终可以修复代码。
几个月前,我和同事一起喝酒。第二天,我们回到了办公室,呆了下来……但令我们惊讶的是,我们关闭了破记录的漏洞。
从表面上看,这些错误并不容易发现,并且大多数都没有任何复制步骤,但是,在修复这些错误时,仍然必须“脱颖而出”。
尽管我们并没有被“剥夺睡眠”,但是我们仍然没有正确的思维方式来编写代码……那天我们发生的一切只是奇怪的事情,我们总是提到它。
哦,而且对于大多数人来说,我们大多数人都在尽享JD和可乐的乐趣:)
我认为,对于大多数人来说,长时间没有任何睡眠就进行有效率的工作是不可能的。
但是我认为只要3-4个小时的良好睡眠,您就可以做出色的工作。即使连续几天紧张的工作(智力),几乎没有睡眠也可以使用。
但是,对我而言,此后必须要有一段恢复期。比方说,一两个晚上通常有7-8个小时的睡眠时间。