转载自:http://kb.cnblogs.com/page/536779/

英文原文:Write Code Every Day

  去年秋天,我的个人项目似乎走到了尽头:我一直没能取得必要的进展,在不牺牲我的主业(可汗学院的全职工作) 的情况下,我无法完成更多的个人编程事项。

  我个人项目上的工作始终存在着几个严重问题。我把这些工作主要放在周末,但有时也可能是周末的晚上。事实上,这种安排根本不合适。想要完成如此众多的工作(如果没有完成的话,我会产生挫折感),仅仅利用周末时间,对我来说压力太大,我有点儿吃不消。而且,这个问题本身就充满了矛盾 - 我既无法保证每个周末的空闲时间,也不想把整个周末都用在编程上(失去放松或者做点其他有趣事情的机会)。

  另外一个问题是,间隔一周对于同一段代码上的工作来说,时间太长了。很容易忘记自己究竟做过些什么(即使记笔记,帮助也不大)。如果碰巧错过一个周末,将导致两个星期的缺口。实际上,这种基于多个星期的工作环境切换非常致命(因为缺乏必要的关注,我的很多个人项目已经无疾而终)。

  去年,Jennifer Dewalt 为了自学编程,在一百八十天内设计编写了一百八十个 Web 应用程序和网站。我深受启发和鼓励,觉得自己很有必要尝试一下类似的策略:每天都为自己的个人项目做一点工作,而不是集中在每个周末。

  我决定给自己定下几条规则:

  1. 每天编写代码。我可以撰写文档、博客、或者做任何其他事情,但必须在写完代码之后。
  2. 代码必须可用。无需调整缩进,无需重新格式化,尽可能无需重构。
  3. 所有代码必须在午夜前写完。
  4. 代码必须开源在 GitHub 上。

  上述规则难免过于武断。代码不一定非要在午夜前写完,我这么说只是为了避免过度劳累,导致不良代码的产生。把代码放在 Github 上,是为了强迫自己更加细心(让自己尽早考虑代码重用以及模块化)。

  截至目前,我已经连续工作接近二十周时间,而且取得了显著的成功。我想告诉大家,这种策略改变了我编写代码的工作方式,对我的生活和精神产生了巨大的影响。

  以下是习惯改变之后发生在我身上的几件趣事:

  最小可用代码。我每天强制自己编写代码不少于三十分钟。有时候工作时间可能稍长一些(但一般不超过一个小时),周末的时候,我常常工作一整天。

  编程是一个习惯。有一点需要注意的是,我并不特别在意代码在 Github 上的受关注程度。我认为我从这项实验中得到的最大收获是:这是我为我自己做出的改变,与其他人无关,我不想以此取悦任何人。就像培养个人饮食与健身习惯一样:只有当你真正开始关心自己的进步状况时,进步才会发生。

  对抗焦虑。在开始这项实验之前,我经常处于高度焦虑的状态 - 总是担心自己无法完成足够的任务(尽管我给自己没有设定最后期限)。我在实验中慢慢意识到,感受进展本身与取得实际进展一样重要。这一点让我大开眼界,只要每天都能取得进展,焦虑感自然就会消失。我对工作不再抱有过高期望,这样,我的内心就能始终保持平静。

  周末。以前,周末工作对我以及对项目进展来说,绝对至关重要(因为只有在这个时段,我才进行大量的编程)。现在的情况已经截然不同,这真是一件大好事。我之前每个周末都会给自己安排一定的工作任务,但实际完成情况常常令人失望。我很少能够按时完成这些任务,以至于不得不退掉其他的周末活动,比如,吃吃点心,参观博物馆,逛公园,朋友聚会等。你知道,这些活动对我的生活都有着积极的作用。我强烈地感觉到,即使个人项目再重要,也不应该与生活中的其他内容发生冲突。

  后台处理。每天都为自己的个人项目做一点工作,将会产生一种副作用 - 你会觉得你的大脑始终处于编程中。当我外出散步、淋浴,或者任何其他非脑力活动时,解决问题的灵感时常显现。这在以前从来没发生过。那个时候,我的时间大量消耗在忧虑之中。多数情况下,忧虑并不能帮助我完成给更多的任务。

  环境切换。通常情况下,从一个项目切换到另一个项目需要一定的转换成本。不幸的是,当一个项目停顿一周之后,你很难恢复到原来的思考状态。在一个项目上停顿时间越短,越有利于恢复记忆。

  工作平衡。改变带来的最重要一点是,学会如何更好地平衡工作、生活、以及个人项目。事先知道自己的安排,这能让我更好地平衡时间。如果我打算晚上外出,而且很晚才回来,那我就会早点开始我的个人项目。另外,如果我还没有完成我的工作,我就会晚点儿再出去,或者,尽早回家(尽量不错过每天的工作)。我注意到,我花在业余爱好上的时间少了(如雕版印刷等),但这是一个合理妥协,我必须适应。

  对外沟通。对外沟通这个新习惯给我增加额外的好处。我在个人项目上的合作伙伴很容易了解我的工作计划与进程,他们的工作计划更易于制定。外出、看电影等活动显得更加自然,这种生活很舒服。

  代码量。我简直不敢相信自己在过去几个月的工作量。我创建了一个新网站,重构了一些框架,还构建了一大堆新模块。我写的太多了,以至于有时候,我会忘记曾经做过的事情。那怕是几周前的工作,对我来说,就像一个遥远的回忆。我对我所做的一切非常满意。

  我认为,这次改变对我来说是一次巨大的成功。可能的话,我希望继续保持下去。在此期间,如果有谁希望像我一样,我将尽我所能向你展示和推销这一策略。如果你在应用这项策略的过程中,遭遇任何问题或疑惑,请一定和我联系。我很乐意听到一些逸闻趣事。

  作者:John Resig,程序员,jQuery 之父,现生活在美国纽约。

  原文:Write Code Every Day

  感谢: Qingniu 帮助审阅并完成校对。

[转载] 编程每一天(Write Code Every Day)的更多相关文章

  1. Python黑帽编程1.2 基于VS Code构建Python开发环境

    Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...

  2. [转载]-虚拟键值表-virtual key code

    转载  虚拟键值表, virtual key code Virtual-Key Codes VK_LBUTTON (01)Left mouse button VK_RBUTTON (02)Right ...

  3. 编程等宽字体Source Code Pro(转)

    Source Code Pro - 最佳的免费编程字体之一!来自 Adobe 公司的开源等宽字体下载     每一位程序员都有一套自己喜爱的代码编辑器与编程字体,譬如我们之前就推荐过一款"神 ...

  4. <转载>编程珠玑-位排序(bitsort)

    转载:http://www.cnblogs.com/shuaiwhu/archive/2011/05/29/2065039.html  维护版权   在<编程珠玑>一书上,有一题是将一堆不 ...

  5. 转载 8天掌握EF的Code First开发之Entity Framework介绍

    转载原地址:  http://www.cnblogs.com/farb/p/IntroductionToEF.html Entity Framework概要 Entity Framework是微软的O ...

  6. [转载]iOS Provisioning Profile(Certificate)与Code Signing详解

    原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...

  7. VC++6.0 IDE的工程用Code::Blocks来打开、编译、调试终极配置方案

    本篇文章转自 CSDN blog,转载请注明出处! 原文地址: http://blog.csdn.net/liquanhai/article/details/6618300 引子:竟然可以用Code: ...

  8. Tool:Visual Studio Code

    ylbtech-Tool:Visual Studio Code Microsoft在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Ma ...

  9. Entity Framework 5.0 Code First全面学习

    摘自:http://blog.csdn.net/gentle_wolf/article/details/14004345 不贴图片了,太累. Code First 约定 借助 CodeFirst,可通 ...

随机推荐

  1. Xcode模拟网络状态

    http://www.it165.net/pro/html/201508/50571.html

  2. 【转】C++中this指针的用法详解

    1.this指针的用处 一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果.this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象 ...

  3. html中的图片、css、js等路径加载问题

    网页文件的存取路径有3种:物理路径.绝对路径和相对路径. 物理路径就是你的文件放在主机上的具体位置,例如:D:\\image\\1.jpg 这种格式,该方法可以很快确定出你的文件,但是在网页显示路径基 ...

  4. iOS开发——Localizable.strings

    这篇写的不多,但是绝对诚意满满.不会像别人一样,要不不详细,要不罗里吧嗦一堆. 1.创建Localizable.strings文件 Command+N—>iOS—>Resource—> ...

  5. [转]Go语言(golang)开源项目大全

    内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑 ...

  6. a标签屏蔽href跳转

    原文地址: http://blog.163.com/huang_qy/blog/static/615601452012101411625600/ 推荐的写法: a href="javascr ...

  7. log4j的用法

    1.导入 2.在src下新建log4j.properties,内容如下 log4j.rootLogger=DEBUG, A1 ,R log4j.appender.A1=org.apache.log4j ...

  8. java实现——007用两个栈实现队列

    import java.util.Stack; public class T007 { public static void main(String[] args) { Queue q = new Q ...

  9. NOIP前刷水行动

    2016.11.15 BZOJ1009:DP+矩阵乘法+KMP BZOJ1898:矩阵乘法 BZOJ4101:贪心,考虑我们往右边撞的时候,我们会向左边冲 ,于是枚举答案点利用一个指针计算即可! 20 ...

  10. java--面向对象编程

    instanceof的用法 静态绑定,即早期绑定,首先找父类 动态绑定,即运行时绑定,new谁找谁 Object o1 = null; //正确的语法,null也是一种特殊的引用数据类型 object ...