[转载] 编程每一天(Write Code Every Day)

转载自: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 帮助审阅并完成校对。

时间: 2024-10-05 22:40:10

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

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

Python黑帽编程1.2 基于VS Code构建Python开发环境 Python黑帽编程1.2  基于VS Code构建Python开发环境 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Python>一书,为了解决很多同学对英文书的恐惧,解决看书之后实战过程中遇到的问题而作.由于原书很多地方过于简略,笔者根据实际测试情况和最新的技术发展对内容做了大量的变更,当然最重要的是个人

终极编程道场(The Ultimate Code Kata)

今天在Coding Horror上看到一篇不错的文章,原文链接:http://blog.codinghorror.com/the-ultimate-code-kata/         或许与你相信的相反,每天只做你的工作并不能视为真正的练习.就像参加会议练习不了交际能力,回复邮件练习不了打字.为了做好某件事,你不得不偶尔留出一些时间,专注于练习. 我知道很多优秀的工程师--这也是在亚马逊工作的最好福利之一--如果你接近他们,就会发现他们一直在操练.尽管他们已经很优秀,依然在练习.他们有很多种操

&lt;转载&gt;编程珠玑-位排序(bitsort)

转载:http://www.cnblogs.com/shuaiwhu/archive/2011/05/29/2065039.html  维护版权 在<编程珠玑>一书上,有一题是将一堆不重复的数进行排序,这些数的值大小位于[0, 10000000).然后作者在书后给出的答案确实很精辟,利用位排序将这个问题轻而易举的解决了. 首先弄懂i>>SHIFT相当于i/32,i&MASK相当于i%32. 题目中说了 Replace above 2 lines with below 3fo

[转载]通过 call gate 访问目标 code segment

直接 call / jmp 目标 code segment 不能改变当前的 CPL,若要 call / jmp 高权限的 code segment 必须使用 call gate,在 x86 下还要可以 call / jmp TSS descriptor 或者 call / jmp task gate,但在 64 bit 模式下 TSS 任务切换机制不被支持. 同样以下面的指令为例:(1) call  0x20:0x00040000 (2) jmp 0x20:0x00040000 --------

一些简单的编程练习题

转载自 http://blog.jobbole.com/53039/ 每当成为入门CS课程(学生们学习编程语言的课程)的助教时,都困于提出好的练习题.Project Euler和类似的问题通常对初学者来说来难了,尤其是对于那些没有很强数学背景的同学. 在这篇文章中,Adrian Neumann 收集了一些从初级到高级逐级困难的练习题,适合刚开始学习编程的初学者.当有新的练习题时,Adrian 会及时添加.除了一些GUI问题外,练习题一般都是算法题,无需学习任何库就可以解决.课程练习题的困难程度有

Linux下C语言高手成长路线(转载)

建议学习路径: 首先先学学编辑器,vim, emacs什么的都行. 然后学make file文件,只要知道一点就行,这样就可以准备编程序了. 然后看看<C程序设计语言>K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书来看. 如果想学习UNIX/LINUX的编程,<Advanced Programing in Unix Envirement>绝对经典的教材,加深一下功底,学习<Unix Network Programing>的第二卷.这样基本上系

Entity Framework 5.0 Code First全面学习

目录(?)[+] 不贴图片了,太累. Code First 约定 借助 CodeFirst,可通过使用 C# 或Visual Basic .NET 类来描述模型.模型的基本形状可通过约定来检测.约定是规则集,用于在使用 Code First 时基于类定义自动配置概念模型.约定是在 System.Data.Entity.ModelConfiguration.Conventions 命名空间中定义的. 可通过使用数据注释或Fluent API 进一步配置模型.优先级是通过 Fluent API 进行

【转载】张逸--ThoughtWorks(中国)程序员读书雷达

原文地址:ThoughtWorks(中国)程序员读书雷达 软件业的特点是变化.若要提高软件开发的技能,就必须跟上技术发展的步伐.埋首醉心于项目开发与实战,固然能够锤炼自己的开发技巧,却难免受限于经验与学识.世界上并不存在速成的终南捷径,但阅读好的技术书籍,尤其是阅读大师们的经典著作,总能收到事半功倍之效.一位优秀的程序员,或许就是一名好的阅读者.好的阅读者,总是知道如何选择好的书籍.书海浩繁,良莠不齐.阅读技术好书,如与智者交谈,“与君一席话胜读十年书”:遭遇技术烂书,如被拐卖,“少小离家老大回

10个值得推荐的学习编程的网站————博客园

/10个值得推荐的学习编程的网站 世界已经进入了互联网的时代.据最近发布的一篇<2016年互联网趋势>报告显示,中国已成为互联网市场的领导者,中国互联网用户的数量达到了6.68亿.可以预见,有着如此巨大的市场潜力,中国的互联网产业会迎来又一个井喷式的高峰.行业的迅猛发展也会相应地刺激行业人才的发展.据不完全统计,目前中国互联网从业人员的数量达到了5000多万人.从细分行业来看,互联网从业人员集中在移动互联网和电子商务这两大领域,岗位以技术类和运营类为主.其中,编程开发人员是技术类岗位的主力军,