每天写代码 [译]

每天写代码 [译]

去年秋天,我在个人编程项目的工作陷入了困境:我没有取得足够的进展,而且如果不牺牲在可汗学院的工作效率,我找不到提高工作量的方法。

在处理这些项目时,我面临几个主要问题。我主要在周末工作,有时也在工作日晚上写代码。事实证明,这种策略对我不太奏效。我感到巨大的压力,想在周末尽可能多地完成高质量的工作(如果做不到,我就觉得自己失败了)。这是一个问题,因为并不能保证每个周末都有空闲时间——更别说是否想连续两天整天编程了(这样也剥夺了任何放松或做有趣事情的机会)。

另一个问题是,编程之间隔一周的时间太长了,即使有记录,也很容易忘记上次做到了哪里或者在做什么。如果错过一个周末,这个时间间隔就变成两周。长时间的上下文切换可能会致命(我有很多项目就是因为长期缺乏关注而失败的)。

受到去年Jennifer Dewalt所完成的180天内构建180个网站的激励,我觉得自己也应该尝试类似的方法:每天都在个人项目上做一些工作。

插图:Steven Resig

我为自己制定了几条规则:

  1. 我必须每天写代码。我可以写文档、博客文章等,但必须是在完成写代码之后才可以做。

  2. 必须是有用的代码。不能只是调整缩进、重新格式化代码,尽量避免重构。(这些都是允许的,但不能是当天的唯一工作。)

  3. 所有代码必须在午夜之前写完。

  4. 代码必须是开源的,并发布在Github上。

其中一些规则是任意制定的。技术上讲,代码不一定非得在当天午夜之前写完,但我想避免熬夜写出糟糕的代码。同样,代码不必一定是开源的,也不必发布在Github上。这只是让我在写代码时更加谨慎(更早考虑到代码的可复用性,并提前决定创建模块)。

到目前为止,我已经连续工作了将近20周,非常成功。我想写下来,因为这完全改变了我的编程方式,并对我的生活和心态产生了巨大影响。

在这段习惯改变的过程中,发生了一些有趣的事情:

最小可行代码。 我每天至少要写30分钟的代码。(如果时间更短,写出有意义的代码真的很难,尤其是在回顾前一天的工作之后。)有些工作日我会多花点时间(通常不超过一小时),而在周末有时能整天工作。

将代码变成习惯。 重要的是,我并不特别在意Github图表所反映的外在表现。我认为这是这次实验中最重要的收获:这是你为自己生活所做的改变,而不是为了满足他人对你工作的看法。同样道理,任何形式的节食或锻炼也是如此:如果你不关心自我提升,那你永远不会真正成功。

对抗焦虑。 在开始这个实验之前,我常常因为没有完成“足够多”的工作或没有取得“足够多”的进展(这些都难以量化,因为我的个人项目没有具体的截止日期)而感到焦虑。我意识到,进步的感觉和实际进展同样重要。这是一个让我大开眼界的发现。一旦我开始每天稳定地取得进展,焦虑就开始消退。我对自己完成的工作量感到满意,也不再拼命赶进度了。

周末的变化。 以前,周末对推动项目进展至关重要(因为那通常是我唯一能完成大量工作的时间)。但现在情况不同了——这是件好事。以前我对周末抱有很高的期待,觉得能完成所有计划的工作,结果总是让我感到失望。我很少能完成所有任务,也因此放弃了喜欢的周末活动(比如吃点心、参观博物馆、去公园或陪伴伴侣),而选择更多时间工作。我深感,虽然个人项目很重要,但它们不应剥夺生活中的乐趣。

后台处理。 每天写代码的一个有趣副作用是,当前任务经常在我的脑海中自动运行。所以,当我去散步、洗澡或做其他无需大脑参与的活动时,我会思考当天要写的代码和如何解决问题。当我一周或每隔一周才写代码时,这种现象不会发生,相反,焦虑会占据我的思维,担心没能完成任何工作。

上下文切换。 重新开始个人项目时,总会有上下文切换的成本。不幸的是,经过一周的其他工作后,很难重新回到项目的思路上。每天进行工作在这方面帮助很大,因为工作之间的间隔更短,记住自己在做什么会容易得多。

工作平衡。 这次习惯的改变最重要的一点是学会如何更好地平衡工作、生活和个人项目。知道自己每天都要在项目上花时间,我不得不更好地管理时间。如果我晚上有安排,而且很晚才回家,那么我就得提前在白天工作,甚至在开始做可汗学院的工作之前。如果还没完成工作,又出门了,我会赶紧回家把它做完(而不是错过一天)。我发现这确实减少了我在其他爱好(比如木刻印刷)上的时间,但这是一个合理的取舍,我必须接受。

外界的看法。 这个新习惯也带来了沟通上的好处。我的伴侣理解我每天必须完成这些工作,所以活动安排有时会围绕着它进行。能够说“我们可以出去/看电影等等,但我之后得补上今天的编程”并且对方能够理解,这让我感到非常安心。

写了多少代码? 我自己都不敢相信这几个月我写了这么多代码。我创建了几个新网站,重构了一些框架,制作了大量新的node模块。我写的代码多到有时候会忘记自己做过什么——甚至几周前的工作现在都像是很久以前的事了。我对自己完成的工作量感到非常满意。

我认为这种习惯的改变是一次巨大的成功,并希望能尽可能长久地保持下去。同时,我会尽力向其他希望在个人项目上取得重大进展的人推荐这一策略。如果你尝试了这个方法,无论成功还是失败,都欢迎告诉我——我很想听到更多的经验分享!