代码天天写,快乐天天有!
原文标题:Write Code Every Day
原文作者:John Resig
原文出处:http://ejohn.org/blog/write-code-every-day/
文中名词解释:
副业项目:英文为Side Project,这里指的是作者工作之外写 的代码项目,并上传到 Github 上,感兴趣请访问:https://github.com/jeresig
可汗学院:英文为Khan Academy,孟加拉裔美国人萨尔曼·可汗创立的一家教育性非营利组织,主旨在于利用网络影片进行免费授课,感兴趣请访问:https://www.khanacademy.org/。
Github:一个面向开源及私有软件项目的托管平台,程序员的大爱。
去年秋天,在我从事于编写副业项目的时候,一个想法出现在我的脑子里,如果没有尽己所能在可汗学院付出大量卓有成效的工作,我是不会有足够的进步,不会找到一种方法去完成那么多的事情。
在我从事如何编写副业项目的时候,遇到了一些主要的问题。我主要是在周末,有时候每周的晚上在做这些事情。结果证实,这个策略对我来说不并不起效。我忍受和承担这难以估量的压力,在周末期间尽量以优质高效的态度去完成我的工作(这样看起来就感觉自己不会是失败)。但这样不能保证我每个周末都是空闲的,也不能保证周末这两天我都能在编程(可能会找个机会去放松,或是做一些有趣的事情)。
这里面还有一个问题,就是在工作和写代码期间有一段很长的时间,这样就很容易忘记你过去正在做什么了,或者你做到了什么地方(即使你可能做了笔记),更不用说如果你错过了一个周末,结果会有二周的差距。大量的多周的上下文切换可能是致命的(我有许多副业项目就像那样都饿死了)。
Jennifer Dewalt 去年完成了难以置信的工作,他自学编程并在180天构建了一个网站。受此鼓励,我觉得应该强迫自己去尝试类似的战术:每一天都要忙于我的副业项目。
我决定给自己制定以下规则:
1.我必须每天都要写代码。我可以写文档,写博客,或者做其他的事情,但只有我写完代码以后,才能去做那些事情。
2.写的这些代码必须是有用的。没有扭曲的痕迹,没有代码的再组织,最好的可能,没有重构(这些事情都是允许的,但不作为一天中唯一的工作)。
3.所有的代码必须在午夜前写完。
4.所有的代码必须开源并且上传到 Github 上。
其中的一些规则,主观上是武断和随意的,有些代码在技术上并不需要在午夜之前写,但是我想避免因熬夜写出草率的代码,也不会把它开源和上传到 Github 上。这样就会迫使自己更加用心的写代码(考虑代码重用性并决定在其过程中更早地创建模块)。
迄今为止,我做的很成功,我已经在将近20周的时间里持续不断的工作。我想写下,因为它完全改变了我的代码,并对我的生活和精神产生了重大的影响。
考虑到这一点,一些有趣的事情发生在这种习惯的变化的结果:
最小可行的代码。我每天坚持写代码不少于30分钟。(真的很难在更短的时间内写出有意义的代码,尤其是在记住你在前一天离开的地方)。有时候,我会工作多一点(通常不超过一个小时),在周末我有时可以工作一整天。
把写代码当做一种习惯。需要注意的是,我并不特别关心上述GitHub上的代码贡献数量的分布图。我认为从这个实验获取最重要经验:这是一个变化,你正在为你自己的生活,而不为了作出满足别人对你工作的看法而改变。同样的道理,也适用于任何形式的节食或锻炼:如果你不关心自我提升,那么你就永远不会成功。
对抗焦虑。在开始我的项目之前,我会经常处在较高水平的焦虑,觉得不能完成“足够”或进行“足够”的工作进度(这两者都是比较难以量化的,其实我的项目没有具体的期限)。我意识到取得进步的感觉和实际已经取到的进步一样重要。这令我大开眼界。一旦我开始每天都在持续不断地进步,焦虑变开始消失。面对项目上的工作量我会更加心平气和,我不再有过度承担的渴望,以及疯狂地把事情都搞定。
周末。在周末完成工作对于推动前进势头绝对是至关重要的(因为周末通常是我完成重要的副业项目的唯一时间)。现在情况并非如此--这是件好事。建立一个星期的期望值让我在周末完成所有的事情,这样只会在周末结束后,只会留给我失望。我很少能够完成所有我想要的工作,它迫使我拒绝其他我喜欢的周末活动(吃点心,参观博物馆,去公园,与我的合作伙伴共处等)。为了有利于完成更多的工作。我强烈地觉得,副业项目是非常重要的,它不应该被排除在日常的生活之外。
后台处理。一件非常有趣的影响是,在每天编写副业项目的代码时,你当前的任务正在频繁地在大脑后面运行。因此,当我去散步,或淋浴,或参加任何其他非脑力活动时,我会思考稍后如何写代码,找到一个很好的方法来解决这个问题。这并不是发生在我每周工作一次,或者每隔一周的时候。相反,消耗了思考其他一些任务的时间,通常,取代了怕副业项目不能按时完成的焦虑。
上下文切换。当从一个副业项目恢复工作时,总是会有一个上下文切换成本。不幸的是,在完成了一周的另一项工作后,很难重新想起这个项目。把工作之间的时间间隔设置尽量短,会使更容易记住我所从事的工作,日常工作中,在这方面是非常有帮助的。
工作的平衡。这种变化的一个最重要的方面是如何简单地学习如何更好地平衡工作/生活/副业项目。知道了这一点,我每一天都要在项目上工作,我必须更好地平衡时间。在开始我在可汗学院的主要工作前,如果我计划晚上出去,并且很晚才能回来,这时我就需要在当天早些时间完成我的副业项目。此外,除此以外,如果我还没有完成我的工作,还滞后了,那么我会赶紧回家完成它(而不是错过一天)。我应该注意到,我已经发现我花在业余爱好的时间很少了(如版画),但是这是一个合理的权衡,因为我需要生活。
外在的感知。这个新习惯在外部有一个沟通交流的额外好处。我的搭档明白我每天必须完成这项工作,因此有时活动必须围绕这些项目来安排。能够相当舒适地说“是的,我们可以出去/看电影等,但我必须在稍后得到我的编码”时,能够让他们可以理解,并为你考虑。
写了多少代码?我很难相信过去几个月我写了多少代码。我创建了几个新的网站,重写了一些框架,并创建了大量的新节点模块。我写了这么多,我有时忘记了我做的工作,甚至几个星期前就觉得是遥远的记忆。我非常满意我完成的工作量。
我认为这种习惯的改变是一个巨大的成功,希望继续坚持下去。在此期间,我会尽我所能向其他希望得到实质性的副业项目工作的人推荐这一策略。在为你自己工作时,如果这种技术好用或不起作用,我都很有兴趣听到额外的轶事!让我知道,请访问http://ejohn.org/about/。