[转载] 编程每一天(Write Code Every Day)
转载自:http://kb.cnblogs.com/page/536779/
英文原文:Write Code Every Day
去年秋天,我的个人项目似乎走到了尽头:我一直没能取得必要的进展,在不牺牲我的主业(可汗学院的全职工作) 的情况下,我无法完成更多的个人编程事项。
我个人项目上的工作始终存在着几个严重问题。我把这些工作主要放在周末,但有时也可能是周末的晚上。事实上,这种安排根本不合适。想要完成如此众多的工作(如果没有完成的话,我会产生挫折感),仅仅利用周末时间,对我来说压力太大,我有点儿吃不消。而且,这个问题本身就充满了矛盾 - 我既无法保证每个周末的空闲时间,也不想把整个周末都用在编程上(失去放松或者做点其他有趣事情的机会)。
另外一个问题是,间隔一周对于同一段代码上的工作来说,时间太长了。很容易忘记自己究竟做过些什么(即使记笔记,帮助也不大)。如果碰巧错过一个周末,将导致两个星期的缺口。实际上,这种基于多个星期的工作环境切换非常致命(因为缺乏必要的关注,我的很多个人项目已经无疾而终)。
去年,Jennifer Dewalt 为了自学编程,在一百八十天内设计编写了一百八十个 Web 应用程序和网站。我深受启发和鼓励,觉得自己很有必要尝试一下类似的策略:每天都为自己的个人项目做一点工作,而不是集中在每个周末。
我决定给自己定下几条规则:
- 每天编写代码。我可以撰写文档、博客、或者做任何其他事情,但必须在写完代码之后。
- 代码必须可用。无需调整缩进,无需重新格式化,尽可能无需重构。
- 所有代码必须在午夜前写完。
- 代码必须开源在 GitHub 上。
上述规则难免过于武断。代码不一定非要在午夜前写完,我这么说只是为了避免过度劳累,导致不良代码的产生。把代码放在 Github 上,是为了强迫自己更加细心(让自己尽早考虑代码重用以及模块化)。
截至目前,我已经连续工作接近二十周时间,而且取得了显著的成功。我想告诉大家,这种策略改变了我编写代码的工作方式,对我的生活和精神产生了巨大的影响。
以下是习惯改变之后发生在我身上的几件趣事:
最小可用代码。我每天强制自己编写代码不少于三十分钟。有时候工作时间可能稍长一些(但一般不超过一个小时),周末的时候,我常常工作一整天。
编程是一个习惯。有一点需要注意的是,我并不特别在意代码在 Github 上的受关注程度。我认为我从这项实验中得到的最大收获是:这是我为我自己做出的改变,与其他人无关,我不想以此取悦任何人。就像培养个人饮食与健身习惯一样:只有当你真正开始关心自己的进步状况时,进步才会发生。
对抗焦虑。在开始这项实验之前,我经常处于高度焦虑的状态 - 总是担心自己无法完成足够的任务(尽管我给自己没有设定最后期限)。我在实验中慢慢意识到,感受进展本身与取得实际进展一样重要。这一点让我大开眼界,只要每天都能取得进展,焦虑感自然就会消失。我对工作不再抱有过高期望,这样,我的内心就能始终保持平静。
周末。以前,周末工作对我以及对项目进展来说,绝对至关重要(因为只有在这个时段,我才进行大量的编程)。现在的情况已经截然不同,这真是一件大好事。我之前每个周末都会给自己安排一定的工作任务,但实际完成情况常常令人失望。我很少能够按时完成这些任务,以至于不得不退掉其他的周末活动,比如,吃吃点心,参观博物馆,逛公园,朋友聚会等。你知道,这些活动对我的生活都有着积极的作用。我强烈地感觉到,即使个人项目再重要,也不应该与生活中的其他内容发生冲突。
后台处理。每天都为自己的个人项目做一点工作,将会产生一种副作用 - 你会觉得你的大脑始终处于编程中。当我外出散步、淋浴,或者任何其他非脑力活动时,解决问题的灵感时常显现。这在以前从来没发生过。那个时候,我的时间大量消耗在忧虑之中。多数情况下,忧虑并不能帮助我完成给更多的任务。
环境切换。通常情况下,从一个项目切换到另一个项目需要一定的转换成本。不幸的是,当一个项目停顿一周之后,你很难恢复到原来的思考状态。在一个项目上停顿时间越短,越有利于恢复记忆。
工作平衡。改变带来的最重要一点是,学会如何更好地平衡工作、生活、以及个人项目。事先知道自己的安排,这能让我更好地平衡时间。如果我打算晚上外出,而且很晚才回来,那我就会早点开始我的个人项目。另外,如果我还没有完成我的工作,我就会晚点儿再出去,或者,尽早回家(尽量不错过每天的工作)。我注意到,我花在业余爱好上的时间少了(如雕版印刷等),但这是一个合理妥协,我必须适应。
对外沟通。对外沟通这个新习惯给我增加额外的好处。我在个人项目上的合作伙伴很容易了解我的工作计划与进程,他们的工作计划更易于制定。外出、看电影等活动显得更加自然,这种生活很舒服。
代码量。我简直不敢相信自己在过去几个月的工作量。我创建了一个新网站,重构了一些框架,还构建了一大堆新模块。我写的太多了,以至于有时候,我会忘记曾经做过的事情。那怕是几周前的工作,对我来说,就像一个遥远的回忆。我对我所做的一切非常满意。
我认为,这次改变对我来说是一次巨大的成功。可能的话,我希望继续保持下去。在此期间,如果有谁希望像我一样,我将尽我所能向你展示和推销这一策略。如果你在应用这项策略的过程中,遭遇任何问题或疑惑,请一定和我联系。我很乐意听到一些逸闻趣事。
作者:John Resig,程序员,jQuery 之父,现生活在美国纽约。
感谢: Qingniu 帮助审阅并完成校对。
[转载] 编程每一天(Write Code Every Day)的更多相关文章
- Python黑帽编程1.2 基于VS Code构建Python开发环境
Python黑帽编程1.2 基于VS Code构建Python开发环境 0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Atta ...
- [转载]-虚拟键值表-virtual key code
转载 虚拟键值表, virtual key code Virtual-Key Codes VK_LBUTTON (01)Left mouse button VK_RBUTTON (02)Right ...
- 编程等宽字体Source Code Pro(转)
Source Code Pro - 最佳的免费编程字体之一!来自 Adobe 公司的开源等宽字体下载 每一位程序员都有一套自己喜爱的代码编辑器与编程字体,譬如我们之前就推荐过一款"神 ...
- <转载>编程珠玑-位排序(bitsort)
转载:http://www.cnblogs.com/shuaiwhu/archive/2011/05/29/2065039.html 维护版权 在<编程珠玑>一书上,有一题是将一堆不 ...
- 转载 8天掌握EF的Code First开发之Entity Framework介绍
转载原地址: http://www.cnblogs.com/farb/p/IntroductionToEF.html Entity Framework概要 Entity Framework是微软的O ...
- [转载]iOS Provisioning Profile(Certificate)与Code Signing详解
原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...
- VC++6.0 IDE的工程用Code::Blocks来打开、编译、调试终极配置方案
本篇文章转自 CSDN blog,转载请注明出处! 原文地址: http://blog.csdn.net/liquanhai/article/details/6618300 引子:竟然可以用Code: ...
- Tool:Visual Studio Code
ylbtech-Tool:Visual Studio Code Microsoft在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 Ma ...
- Entity Framework 5.0 Code First全面学习
摘自:http://blog.csdn.net/gentle_wolf/article/details/14004345 不贴图片了,太累. Code First 约定 借助 CodeFirst,可通 ...
随机推荐
- hibernate--一对多单向关联 (重点!!!)
多对一是在多的类上存在一的对象 一对多是在一的类上存在多的集合. 多的类 user.java: package com.bjsxt.hibernate; import javax.persistenc ...
- __bridge,__bridge_transfer和__bridge_retained的使用和区别【转载】
__bridge,__bridge_transfer和__bridge_retained的使用和区别[转载] Core Foundation 框架Core Foundation框架 (CoreFoun ...
- Quick Cocos2dx 调试问题
最近由于忙了一段时间,忙完了之后又迷茫了这么久,然后终于开始继续Quick-x的学习之路了. 然后遇到了一个比较棘手的问题. 虽然照着官方mvc的例子敲代码,但是还是不停的报错,报错的问题下次集结成一 ...
- sublime C++ build system配置体验
近期准备实习,于是终于步入了sublime的阵营,sublime确实性感. 在配置win7下C++编译运行集成环境的时候遇到点问题,于是接触了一下JSON格式,最后终于自己搞定了.. 参考文档:htt ...
- linux查看系统负载
摘要:number of cores = max load , linux 系统负载高 如何检查? 1:load Average 1.1:什么是Load?什么是Load Average? ...
- 51nod贪心算法教程
51nod确实是一个好oj,题目质量不错,wa了还放数据,学习算法来说挺好的,这次我做了几个水的贪心,虽然水,但是确实都很典型. 教程链接:http://www.51nod.com/tutorial/ ...
- LPC1788 nand驱动
Lpc 1788自带有emc接口用于驱动nandflash,norflash,sdram设备,对于nandflash驱动因为配置简单,时序也简单 首先,针对nandflash而言应当在系统中有三个地址 ...
- 【转】int && 非常量右值
C++ 11中引入的右值引用正好可用于标识一个非常量右值.C++ 11中用&表示左值引用,用&&表示右值引用,如: int &&a = 10 右值引用根据其修饰 ...
- Java解析JSON文件的方法(一)
一.首先需要在Eclipse工程中导入相关的jar包,jar包参见链接:http://yunpan.alibaba-inc.com/share/link/NdA5b6IFK 二.提供一份待解析的jso ...
- eclipse-ee修改字体大小和配置Tomcat服务器
参考博客:http://blog.csdn.net/lpftobetheone/article/details/17783791 一.EclipseEE背景色和字体的修改 1.Eclipse背景颜色修 ...