去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上。

这些项目遇到了一些严重的问题。之前的工作我主要是在周末,有时是工作日的晚上做。但最终证明,这样的工作安排并不适合我。为了在周末尽可能地尝试完成高质量的工作,我压力巨大(如果我做不到的话,会有很深的挫败感)。这样安排的问题在于周末并不一定都有空–而我也不想周末两天都在写代码(要牺牲掉所有的休闲和乐趣)。

另外一个问题就是隔了一周这么长的时间之后,很容易会忘掉上个周末在做什么、还有什么没做(即使做了备忘也会这样)。更不用说万一某个周末什么代码都没写,那就要隔两周了。间隔太长的话对于项目来说是致命的(我有好多兼职项目就这么挂掉了)。

Jennifer Dewalt 去年完成了一项创举,她在180天里完成了180个网站。我深受启发,因此我强迫自己采用类似的策略:那就是每一天都要花时间在兼职项目上。

于是我为自己定了一些规矩:

  1. 我必须每天都写点代码。我可以写文档、博文或者其它的东西,但必须是在写了一些代码的基础上。
  2. 写的代码必须是有用的。不调整代码缩进,不转换格式,如果可能的话绝不重构代码。(这些事情都是允许的,但不能作为当天仅有的工作。)
  3. 所有的代码都必须在午夜前完成。
  4. 代码必须是开源的并且放在Github上。

部分规矩执行起来并不是那么严格要求的。并不是说只能在午夜前才能写代码,只是不想熬夜然后写出来的代码却马马虎虎的。代码也并不是一定要开源或者放在Github上。这么做只是为了让我对自己写的代码印象更深刻(以便于重用代码、为之前写的代码创建模块)。

至今为止效果非常好,我已经连续坚持了20个星期了。我写代码的习惯得到了彻底改变,我的生活质量和精神状态也得到了很大的提升,因此我想把这段经历写下来。

习惯的改变带来了以下不少有意思的影响:

最小量的可行代码 每天我都强迫自己至少要写30分钟的代码(时间太少的话真的很难写出有意义的代码,尤其是在花时间记起前一天是在哪里停止的之后)。有些工作日我会多写点时间(通常不超过1小时),而周末的话有时能写一整天。

让编码成为习惯 值得一提的是我并不特别在意上面这张Github工作记录表会给别人什么样的印象。我觉得最重要的一点是:你做出这样的改变是为了你自己的生活,而不是为了让别人对你的工作感到满意。这个道理对于减肥或者健身也适用:如果你不是以提升自己为目的的话,你是不会成功的。

与焦虑做斗争 在作此尝试之前,我经常会很焦虑,总觉得做的工作“不够多”,完成的进度“不够多”(其实这两者都是无法衡量的,因为我的兼职项目都没有特定的最后期限)。我意识到要做出进展的感觉其实和做出实际进展是同样重要的。这让我豁然开朗。自从我每天持续不断地做出进展之后,焦虑感也渐渐消失了。看着每天都有完成工作量,内心感到很平静。再也不会忧心重重地觉得还要完成更多的量才行。

周末 在周末完成工作对于推动工作进度来说曾是十分重要的(那时周末是我唯一能够很好的完成编码工作的时间)。现在情况发生了改变–好的改变。制定好周末必须要完成哪些工作的做法除了最后让我感到失望之外别无他用。我几乎就没完成过周末计划表上的事情,而为此我还不得不拒绝其它我喜欢的周末活动(吃点心、参观博物馆、逛公园、陪妻子等等),就只是为了能完成更多的工作。我深深地觉得,就算兼职项目真的很重要,它们也不应该成为生活的唯一。

后台运行 每天写点兼职项目代码会带来一个有趣的副作用,它让你觉得这些工作都是在大脑的后台运行的。因此,当我在散步、洗澡或者做其它不需要耗费脑力的事情时,我就会在考虑之后我要写什么代码、要怎么解决遇到的问题。这种情况在我一周写一次代码或者隔周写一次代码的时候是没有发生过的。那时时间都被消耗在思考其它事情上,通常是在为还没完成工作而感到焦虑。

上下文交换 中断后又继续开始兼职项目的时候总是会有上下文交换时那样的损耗发生。很不幸的是做了一周其它工作之后再回到之前的项目上来总是会非常困难。而持续的每天工作对减少这种损耗就很有帮助,因为时间间隔要短得多,要记起前一天在做什么很轻松。

工作的平衡 这种改变带来的最重要的一点就是让我学会了如何更好地平衡本职工作、生活和兼职项目。知道我要每一天都花时间在兼职项目上,我就必须更好地平衡分配时间。如果我计划晚上出去并且要很晚才回来,那我就需要在当天早些时候做兼职部分的工作,而将主要的Khan Academy的工作放到后面再做。另外如果我还没完成工作而又在晚些的时候出去了,那我就得赶紧回家做完它(而不是又错过一天)。我要指出一点,一直以来我都发现能花在业余爱好(譬如雕版印刷)上的时间变少了,但是这对于维持生计来说是很合理的交易。

给别人的印象 这是我要说的改变带来的最重要的一个好处。我妻子理解我每天都得完成一些工作,因而有时活动安排要围绕着这些工作展开。当能够对她说“是的,我们可以出去看电影什么的。但我之后必须要写代码。”,而她也表示理解并且安排时间时会将写代码的事考虑进去,这让我感到非常舒服。

之前写了多少代码? 我不知道过去的几个月里一共写了多少代码。我创建了几个网站、重写了一些架构、写了一堆新的节点模块。写的代码太多了我有时会不记得写了什么–几周前写的东西看起来确实非常遥远了。我对已完成的工作量相当地满足。

我将这种习惯上的改变视为很大的成功,希望我能日复一日地坚持下去。同时我也会尽力向其他想做很多兼职项目人推荐这种策略。不管这对你有没有帮助,都请联系我,我很想听听你们的故事。

摘自http://www.apkbus.com/android-8841-1.html

jQuery之父:每天都写点代码的更多相关文章

  1. jQuery 之父:每天写代码

    去年秋天我的支线代码项目 遇到了一些问题,项目进展不足,而且我没法找到一个完成更多代码的方法(在不影响我在Khan Academy方面的工作的前提下). 我主要在周末进行我的支线,当然有时候也在晚上进 ...

  2. Linux之父:除了写内核代码 别的真不会(转)

    Linus Torvalds 是 Linux 之父,被誉为活着的传奇. 其实很多人不了解他也并不奇怪,因为人是在是太低调了.现年 46 岁的他每天的工作仍然是编程,领导并推动着 Linux 的发展. ...

  3. jQuery之父:坚持每天都要写代码

    关于作者:John Resig, jQuery之父,同时也是Pro Javascript Techniques和Secrets of the JavaScript Ninja的作者.他目前主持 Kha ...

  4. 关于 OnCloseQuery: 顺序、不能关机等(所有的windows的广播消息都是逐窗口传递的)——如果一个窗体的OnCloseQuery事件中如果写了代码那么WM_QUERYENDSESSION消息就传不过去了msg.result会返回0,关机事件也就停止了

    系统关闭窗体的事件顺序为: OnCloseQuery ----> OnClose ----> OnDestroy 下面的代码说明问题: unit Unit3; interface uses ...

  5. 快速开发框架(FDMS)新增1000个对外接口都不须要手写一行代码

    一个大型系统难免会跟其它系统有数据交换,这里就要提供数据接口给外部系统. 曾经在一家智能终端设备的公司上班.那段时间的主要工作就是写接口.接口须要与手机.手持设备.系统管理软件等进行数据交换.总结了一 ...

  6. 使用jquery获取父元素或父节点的方法

    今天面试题问到了,没答上,jq要继续学习啊 jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: 先举个 ...

  7. 使用jquery获取父元素或父节点

    使用jquery获取父元素或父节点,比较简单,jquery提供了丰富的方法来让我们使用jquery获取父元素或父节点   jquery获取父元素方法比较多,比如parent(),parents(),c ...

  8. 写Java代码的一些小技巧

    写Java代码有三年多了,遇到过很多坑,也有一些小小的心得.特地分享出来供各位学习交流.这些技巧主要涉及谷歌Guava工具类的使用.Java 8新特性的使用.DSL风格开发.代码封装等技巧. 一.nu ...

  9. jquery获取父元素或父节点的方法

    jquery获取父元素方法比较多,比如parent(),parents(),closest()这些都能帮你实现查找父元素或节点,下面我们来一一讲解: 先举个例子: <ul class=" ...

随机推荐

  1. 采集网页数据---Using Java

    http://www.cnblogs.com/longwu/archive/2011/12/24/2300110.html 1).学习网页数据采集,首先必不可少的是学习java的正则表达式(Regex ...

  2. Spark系列(十)TaskSchedule工作原理

    工作原理图 源码分析: 1.) 25              launchedTask = true 26            } 27          } catch { 28         ...

  3. NetAdvantage 笔记

    1.UltraControlBase Class Members 1.BeginUpdate Method Sets the IsUpdating flag to true which prevent ...

  4. 在WinForm编程中犯的一些错误

    1.一直以为,MouseClick事件在鼠标点击时发生,MouseDoubleClick事件在鼠标双击时发生.那么在单击鼠标时会调用MouseClick事件处理程序,双击鼠标时会调用MouseDoub ...

  5. 【hadoop代码笔记】Hadoop作业提交中EagerTaskInitializationListener的作用

    在整理FairScheduler实现的task调度逻辑时,注意到EagerTaskInitializationListener类.差不多应该是job提交相关的逻辑代码中最简单清楚的一个了. todo: ...

  6. Codevs No.2144 砝码称重2

    2016-05-31 22:01:16 题目链接: 砝码称重2 (Codevs No.2144) 题目大意: 给定N个砝码,求称出M的重量所需砝码最小个数 解法: 贪心 使砝码数量最小,当然是每个砝码 ...

  7. Java多线程编程模式实战指南:Active Object模式(下)

    Active Object模式的评价与实现考量 Active Object模式通过将方法的调用与执行分离,实现了异步编程.有利于提高并发性,从而提高系统的吞吐率. Active Object模式还有个 ...

  8. UVALive 6910 Cutting Tree(离线逆序并查集)

    [题目]:(地址:) http://acm.hust.edu.cn/vjudge/contest/view.action?cid=97671#problem/E [题意]: 给出多棵树和两类操作:操作 ...

  9. 扩展KMP题目

    hdu4333 /* 题意:字符串s[0..n-1],每次把最后一个字符放到前面,求形成的字符串比最初串分别小,相同,大于的个数 因为是为了练习扩展KMP所以肯定是扩展KMP, 为了循环方便,在后面复 ...

  10. codeforces 653A Bear and Three Balls

    A. Bear and Three Balls time limit per test 2 seconds memory limit per test 256 megabytes input stan ...