大多数业余项目都会死掉,但是每天 coding 这种习惯可能会有所帮助。本文系 John Resig 的博文 Write Code Every Day 翻译。

去年秋天,我的业余项目走到了尽头:我没有足够的时间来写代码,也找不到其他不牺牲我在可汗学院工作时间的办法。

我开展业余项目的时候有一些问题。我主要是在周末或者偶尔在工作日的晚上来 coding,这种做法对我来说并不奏效。周末要完成大量的工作,这让我感到很有压力。同时,我不能保证每个周末都能有固定的时间来 coding, 或者我可能去做一些娱乐活动而非 coding。

还有一个问题:对于一个项目来说,过一周再来看之前写的代码,可能已经忘记了,或者不知道如何重新拾起(做笔记也无济于事)。有些时间,错过了一个周末,当第二个周末再来看之前写的代码的时候,更不用提了。这种以周为间隔带来的上下文切换的开销是致命的(我有很多业务项目都因为缺少足够重视而夭折)。

Jennifer DeWalt 在去年完成了一件了不起的事情,通过在180内做180个网站,她教会了自己如何编程。我受她的鼓舞,我感觉有必要采取同样的策略:每天都要完善自己的业余项目。

我决定给自己约法三章:

  • 1 必须每天写代码。可以写文档,博客或者其他的东西,但是必须在原有代码基础上做增量的工作。
  • 2 所写的代码必须是有用的。不能是改一下缩进(如果是Python。。。),不能是代码格式化,尽可能的不要用重构来顶事儿。(所有这些改动都是允许的,但是不能左右当日的有效工作)。
  • 3 所有的代码必须要在凌晨前写完。
  • 4 所有的代码必须要开源,并托管在 Github 上。

有些规定很霸道。比如,代码没有必要非要在半夜之前写完,但是之所以这么规定是因为我这样可以避免让我熬夜,写出垃圾代码。代码必须要开源也是同样的道理,开源会促使我对我所写的代码更加注意(注重代码的复用,在早期考虑到模块化等)。

目前为止,这种做法非常成功。我已经连续20多周持续为自己的业余项目贡献代码,不仅改变了我写代码的习惯,并且对我的生活和心智产生了重大的影响。

伴随着习惯的改变,一些有趣的事情随之而来:

最小可用代码。 我强制自己每天至少写30分钟的代码(在短短半小时的时间里很难写出有意义的代码,尤其是当你忘记昨天的进度的时候)。有些工作日我可能写的多一点(但是一般不超过一个小时),周末,我偶尔会写一整天。

将coding作为习惯。 值得一提的是,我并不在意外界对于上面贴出的 Github 贡献图的看法。我觉得这次实践中,最应该把这一部分去掉。因为,习惯会对你自己以及你的生活产生影响,而不是去改变别人对你的看法(认可你的工作)。同样的道理对健身和节食也适用:如果连你自己都不关心自己,你永远也不会成功。

消除焦虑。 在开始这次实践之前,我总是因为未能完成足够的工作,未能获得足够的进步(这样说可能不太合适,因为我的业余项目一般都是没有deadline的)而反倒感到高度的焦虑。我意识到,取得进步的感觉和获得真正进步的感觉一样重要。这个让我大开眼界。自从把我每天都取得一些进度,我的焦虑感也慢慢的消失了。每天都能取得一定的进步让我内心感到平静,再也不用疯狂的想把所有工作都做完。

周末。 周末需要加班完成工作的事情的对业余项目是致命的(因为周末是我唯一有时间来完成业余项目的大好时光)。现在这都不成问题了,这是一件好事。构想周末我应该完成哪些任务总是让我感到失望。我很少能完成所有的工作,这强迫拒绝周末的一些娱乐活动,仅为了完成更多的工作。我强烈的认为,尽管业余项目非常主要,但是不能干预正常生活。

潜意识处理。 每天coding带来的一个有趣的事情是,我们的大脑经常能够在后台思考当前正在做的任务。因此,当我去散步,洗澡或者一些其他不需要大脑过度参与的活动时,我会思考我接下来要写的东西,并且会找一个优雅的办法去解决问题。当我每周才会写代码的时候,这不会发生。通常本应该冥想的时间会被其他任务代替或者是内心因为没有完成足够的进度而充满焦虑。

上下文切换。 每当重新开始自己的业余项目的时候,总是有上下文切换的代价。很不幸的是,如果每周末才会写代码,回忆上周所做的工作会非常困难。每天coding,缩减了时间跨度,能够让我们很容易的回忆起来之前所做的工作。

平衡工作压力。 这个喜欢的改变最重要的一点是他可以让我们学会如何平衡生活工作以及业余项目之前的关系。事先知道我每天都需要在自己的业余项目上努力,我就能更好的去协调自己的时间。如果我晚上计划要出去,并且回来的很晚,那我可能需要在第二天早上来写自己的业余项目(在开始上班之前)。除此之外,如果我没有工作上的事情没有忙完,并且在外面待到很晚,那我可能就会尽快回家并且尽快完成今天的任务,而不是错过一整天。我发现,我花费在自己兴趣的时间上面可能会缩减,但是这是我平衡这三者之间关系的妥协。

别人的理解。 告知你身边的人你每天需要coding,有一个好处就是,我的搭档会理解我,有些活动会尊重我的习惯并为我走出让步。你可以说:我可以一起去看电影或者别的活动,但是我需要提前点回来coding。这会得到大家的理解,并且大家在做决定的时候会考虑进去。

写了多少代码。 有一段时间,我简直不能相信过去的几个月我写了那么多的代码。我做了好几个网站,重写了几个框架,并且贡献了许多个新的 node 模块。我有时候会忘记自己竟然做了这么多的工作。几个周之前的工作感觉像是一段遥远的记忆。我对自己取得的成绩感到非常的满意。

我认为这个习惯的改变给我带来巨大的成功并且希望一直坚持下去。与此同时,我还将会不留余力的去向身边那边希望完成自己业余项目的人们推荐这个技巧。让我知晓这个技巧对你是否有用。我非常期待听到你的故事。

译者:我现在有好几个项目,已经死亡 :< 。但是有一件事我坚持了100多天了,那就是每天坚持在地铁上班的路上背单词,这让我收益颇丰。因此翻译这篇文章,希望与大家共勉,养成好的习惯。