去年秋天,我编写的业余项目到了紧要关头:因为我找不到一个方法——既不用牺牲在Khan Academy工作的高效率,又可以做更多的事,所以项目一直没有进展。

500530409_wx.jpg

  关于工作于业余项目,主要问题为:我基本上在周末做业余项目,偶尔也会在平时的晚上做一点。事实证明这个工作策略对我而言并不适合。尽可能地在工作日尝试和完成高质量的工作让我承受了很多难以置信的压力(并且如果我不能的话,会让我有挫败感)。这里有一个问题是,你不能保证每个周末都有空——而且我也不愿意把两天时间都用来编程(而没有任何休息或去做其他事情的时间)。

  而且,还有一个问题是,隔一周再工作于项目代码,会非常容易忘记曾经正在工作的要点以及一些遗留的内容(即使你已经记了笔记)。而且,如果这个周末有事,等下个周末再接着搞项目的话,那就间隔了两周,14天了。这种多周的上下文切换可能是致命的(我有很多业余项目正是死于这种饥饿的注意力)。

  受Jennifer Dewalt去年完成的令人难以置信的工作——在180天自学编程建立180个网站的启发,我觉得有必要尝试和她类似的策略:每天做点业余项目。

  


  我决定为自己定一些规则:

  1.   必须每天写代码。也可以写文档,写博客,写其他的东西,但必须是在写代码的基础上。

  2.   代码必须有用。不要去调整代码缩进,也不要代码重新格式化,如果可以得话,也不要去重构。(当然所有这些事情是允许的,但不能作为一天的专属工作。)

  3.   午夜之后不写代码。

  4.   代码必须开源,放在Github上。

  有些规则看上去有些随意。因为从技术上说,代码并不需要在午夜之前写,但我不希望因为熬夜太晚以致于写出一些马马虎虎漏洞百出的代码。而且代码也没有必要开源或放到Github上。我定这些规则的目的只是迫使我自己能在写代码的时候更专注(考虑可重用性和决定在进程早期创建模块)。

  到现在为止,我终于成功了,已经接近20周,我做到了连续工作于业余项目上。这完全改变了我如何写代码的方式,并且对我的生活和心理产生了重大的影响。

  


  在改变习惯的过程中,发生了很多有意思的事情:

  最小化可行的代码。

  强迫每天不少于30分钟的写代码时间。(否则的话就真的很难写出有意义的代码,特别是你还得记起前一天你是从哪里离开的。)工作日我能投入的时间不是很多(通常不超过1小时,但都超过30分钟),但在周末,有时我会工作一整天。

  将编码养成为一个习惯。

  需要注意的是,我并不特别在意Github上的别人对我的看法。我认为这是这一条最关键的地方:这是你为自己做的改变,而不是为了取悦别人而做的改变。这同样适用于健康饮食和锻炼:如果你不关注于改善自己,那么你永远不会取得真正的成功。

  战胜焦虑感。

  首先我想说的是,我会频繁地感到高度焦虑,当没有完成“足够”工作或没有取得“足够”进步的时候(这两样都比较难以量化,因为我的业余项目没有具体的时间限制)。我意识到,取得进展的感觉,和取得实际进展同样重要。一旦我每天都能有持续的进步,那么焦虑感就会一点点减少。合理安排自己的工作量,不要制定一些不切实际过度自负的期望。

  周末。

  在周末完成工作是朝着目标前进绝对至关重要的动力(因为通常只有在这种情况下,我才能为业余项目编写有意义的代码)。这是一件好事。在周末制定一个周计划,能让我不再耿耿于沮丧。因为以前我很少能在平时完成我想要做的工作,因此只能迫使自己为了完成更多的工作而拒绝其他的周末活动(享受美食,参观博物馆,逛公园,朋友聚会,等等)。我强烈地感觉到,虽然业余项目非常重要,但也不应该没有自己的生活乐趣。

  后台处理。

  每天编码业余项目的一个有趣的副作用是,你当前的任务会经常运行在你的脑海里。因此,当我去散步,去洗澡,或做任何其他不需要大脑参与的活动时,我都会思考之后我要编码什么,寻找解决问题的好办法。但当我每周一次或隔周工作于代码时,这就不会发生。相反,那些时候我的脑海中会出现其他的任务,或者,通常情况下,会充斥着因为没有完成任何业余项目而生成的焦虑感。

  上下文切换。

  当重新继续于业余项目时,总会有上下文切换成本。不幸的是。在整整一周都工作于其他项目之后再想重新投入到业余项目中是非常难的。每天写代码则有助于减少“读档”时间,更容易记起自己当时正在做什么。

  工作的平衡。

  想要有所改变的最重要的方面之一就是简单地学习如何更好地平衡工作/生活/业余项目。在决定我每天要工作于项目之后,我需要更好地平衡自己的时间。如果我被安排晚上出去,直到深夜才能回来,那么那一天的话我就得在早上搞业余项目,在我开始Khan Academy的工作之前。此外,如果我需要加班完成我的工作,并且回家晚了,那么我会赶紧回家来完成我的每天任务(而不是跳过这一天)。我要指出的是,这样一来,我在业余爱好(如雕版印刷)上的确不能有太多的时间,但这是一个合理的权衡取舍。

  别人的看法。

  这是外部交流这个新习惯时带来的好处。我的小伙伴理解我必须每天完成这项工作,因此有时活动会围绕它进行调度。并且也可以心安理得地说:“是的,我也很想和你们一起出去玩/看电影/等。但我必须搞定我的编码工作“,能够被小伙伴理解和接受。

  写了多少代码?

  曾经有一段时间我很难相信自己在过去的几个月里居然写了这么多代码。我创建了几个新网站,重写了一些框架,并创建了大量新的node模块。我写了这么多,以致于有时侯会忘记自己做的这些成绩——几个星期似乎是一个遥远的记忆。看到这些我已经完成的工作量,我特别开心。

  我认为在习惯方面的改变是一个巨大的成功,并希望能够保持继续。因此,我向大家推荐这个策略,希望能帮助完成业余项目的实质性工作。非常期待听到大家的意见和建议,让我们共同进步!

  译文链接:http://www.codeceo.com/write-code-everyday.html

  英文原文:Write Code Every Day

  翻译作者:码农网 – 小峰