我泡在GitHub上的177天

 
这是一个关于我如何连续177天(将近半年)泡在GitHub上不间断地贡献代码的故事。我会谈到我为什么要这么做,以及为什么你也应该效仿,或者至少做点类似的事情。这是一个关于接受挑战,改变旧习并懂得适可而止的故事。我在这个过程中获益匪浅,也希望能够给大家一点启示。下面我开始讲这个故事。

github的30天挑战

故事要从一个30天的挑战开始说起。2月21日那天,我的一个好朋友Shuhao发消息给我,向我发出挑战:我必须连续30天向Github提交代码更新,而他也同样要完成这个任务。那时我在Github上的最长“连击”天数只有5天而已。这个“连击”记录太不给力了,我一直想要提高它,却总是没有足够的动力付诸实践。这个对我俩而言都非常具有挑战性的机会正是我所需要的。我接受了这个挑战,并列出了以下几个简单的约定:

  1. 除非有显著的更改,否则编辑README文件不能计入更新
  2. 禁止使用脚本自动编辑;所有的提交的更新必须是人为完成的
  3. 禁止提交搞笑的无关程序逻辑之类的更新

一开始我就来了个爆发式增长——第一天提交了近30个更新到我的网站及其他项目。 事实上,这也是我在这近半年的“连击”过程当中一天内贡献最多的一次。我立志完成这30天的目标,甚至更长,直到我俩中有一人认输为止,这样的想法让我感到斗志昂扬——我想这是最好的开端。

一个星期

到了一个星期左右的时候,这个挑战的难度开始渐渐地显现出来。有一次我差点忘记还有这回事,直到最后一刻才匆匆忙忙把当天的更新提交上去。Shuhao在第八天放弃了;我想他大概是忘记了——这也无可厚非。

两个星期

到了第二周和第三周,每天记得要提交更新已经变得比较容易,我把它变成了一种习惯性地动作。很快这种提交更新的自醒就和刷牙的自觉绑定了起来,而刷牙是一件我很少会忘记去做的事情。与此同时,我开始阅读一本叫《习惯的力量》的书,这本书让我了解了习惯,以及如何理解和改变你的习惯并从中受益。如果你有兴趣了解你的大脑是如何处理习惯的,我推荐你读一下这本书。它很有意思,里面有个故事提到了一个从来记不住回家路线的人,却能够每天在这个街区散步而从来不迷路,这都是因为习惯的力量。有点扯远了。还没等我意识到习惯的力量,它已经引领我到达了……

三十天!

三十天是个激动人心的里程碑!我做到了!我只想继续前进!三十天之后,“连击”就变成了一种生活方式。吃饭,睡觉,提交更新——已经成为常态,我可以不费吹灰之力地把它纳入我每天的例行公事。可是像所有习惯一样,它很难保持百分百的连贯性,有时太忙了就得临时抱一下佛脚。曾经我从手机上提交过更新,跟朋友聚会到很晚回家之后提交过更新,甚至在“鲍尔默癫峰”【译注1】状态下都提交过更新。这让我想起了一些我学到的关于向GitHub提交代码的小技巧:

GitHub代码更新小技巧:

  1. GitHub按照太平洋标准时间(PST, Pacific Standard Time)计时,这意味着我可以在东部时间(EST, East Standard Time)凌晨12点到3点之间随便在哪儿提交代码,然后算成是前一天的任务,这招在我有几次回家特别晚的时候很管用。
  2. 记录一个问题可以算做提交过东西了,这招在我想不出什么新点子的时候救我过几次。
  3. 提交更新和上传代码是分开算的,现在提交更新然后晚点再上传代码,还是会以提交更新的时间为准。
  4. 新建代码库的初次提交是不纳入统计的,但是当你第二次提交更新的时候就会把两次都算进去,这点比较诡异。
  5. 归并请求创建的时候会被算作一次提交,实际合并分支的时候则算作另一次提交。如果最后两个分支没有合并,那么不好意思,第二次提交就不算数了。

虽然这些小技巧曾经在我的GitHub“连击”过程中毋庸置疑地挽回了局势,我还是遵守了之前列出的那些小约定。你可以在这里找到更多GitHub小贴士。

一百天

一百天对我来说也是一个重要的时刻。那时我在旧金山,在Mozilla实习。你可以在我的博客(注:该文已由@ctcetl 翻译)上读到关于这段经历的所有东西。在Mozilla实习最棒的一点就是一切都是开源的,所以我基本上只需要工作就可以让我的“连击”不间断。虽然没有说起来那么容易,但是呆在Mozilla确实帮了大忙。

在Mozilla内部也有一些竞争对手,包括Shuhao,他这个暑假跟我一起在那里实习,重新开始了他的“连击”并且这次更加成功;据Mozilla的小道消息说,另外还有一个我不认识的对手也在默默地与我竞争。

一百五十天

那时我继续坚持“连击”的动力突然急剧下降。我把这归根于新想法的缺失,想追寻新挑战的冲动,同时我也意识到“连击”总有一天会不可避免地结束。这些因素,再加上实在有太多方法可以作弊(就像这哥们干的那样),使得这个挑战变得来越鸡肋。

我想要逃离。我想要片刻休憩,彻底忘掉GitHub。我只想要无拘无束地思考新的主意而不用愁着为了提交更新而提交更新。于是我决定用一个整数来结束”连击“。我决定一直继续到两百天,然后我就可以淡定地坐下来,看着我的“连击”记录逐渐崩塌。

呃噢!

200天的目标终于还是没有达成,我在第178天得时候忘了提交更新。意识到杯具的同时,我也卸下了心头的重担,感觉浑身轻松。一切终于结束了。

回顾

177天的“连击”教会了我不少关于习惯的东西。它教会了我好习惯如果刻意过度遵循的话也会变成坏事;它让我明白了“不要断开惯性链”【译注2】的力量,那是驱使GitHub“连击”成功的激励方法。我现在仍然定期向GitHub提交更新,但是现在“必须”提交的少了,“需要”提交的多了。我有时会离开电脑几天去更新我的想法,等我回来的时候就变得更加给力。我推荐每个人都可以尝试一下用这个方法去打破一个旧习惯或者建立一个新习惯,但它可能过于强大以至于会让人不能自拔,所以小心点!

如果你知道谁有比我更长的GitHub“连击”数,务必告诉我!我还没找到过这样的人呢!:)

快乐地贡献代码吧!请在GitHub上follow我!这是在HN上的讨论

【译注】

      1. Ballmer Peak, 鲍尔默癫峰,传说中微软在80年代末发现的定律,即程序员在血液酒精浓度在0.129%~0.138%时会产生超人的编程能力。这个能力也有副作用,千万不要给一个团队可以喝一年的威士忌然后让他们开始干活,Windows ME就是前车之鉴。
      2. Don’t break the chain, 不要断开惯性链,指的是一种自我激励方法,每天完成一个目标之后就在时间表上做一个标注,时间长了标注就会连成一条链,可以用来自我激励,坚持每天完成目标,这条惯性链就不会断开

参考:本文由 伯乐在线 - 龚凌晖 翻译自 Ryan Seys

我泡在GitHub上的177天 by Ryan Seys的更多相关文章

  1. Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

    下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITableVie ...

  2. GitHub上受欢迎的Android UI Library

    GitHub上受欢迎的Android UI Library 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayout 图标 下拉刷新 Vi ...

  3. github上关于iOS的各种开源项目集合(转)

    UI 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. SVPullToRefresh - 下拉刷新控件. MJRefresh - 仅需一行代码就可以为UITable ...

  4. Android github上开源项目、酷炫的交互动画和视觉效果地址集合

    Android上开源的酷炫的交互动画和视觉效果:http://blog.csdn.net/u013278099/article/details/50323689 Awesome-android-ui: ...

  5. github上最全的资源教程-前端涉及的所有知识体系【转】

    github上最全的资源教程-前端涉及的所有知识体系[转自:蓝猫的博客] 综合类 综合类 地址 前端知识体系 http://www.cnblogs.com/sb19871023/p/3894452.h ...

  6. 转: Github上关于iOS的各种开源项目集合

    https://blog.csdn.net/jiashaoying/article/details/79079500 下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件. ...

  7. 还怕问源码?Github上神级Android三方源码解析手册,已有7.6 KStar

    或许对于许多Android开发者来说,所谓的Android工程师的工作"不过就是用XML实现设计师的美术图,用JSON解析服务器的数据,再把数据显示到界面上"就好了,源码什么的,看 ...

  8. 清空Github上某个文件的历史版本

    title: 清空Github上某个文件的历史版本 author: 青南 date: 2015-01-08 16:04:53 categories: [经验] tags: [Github,histor ...

  9. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

随机推荐

  1. Java并发编程:进程和线程之由来__进程让操作系统的并发性成为可能,而线程让进程的内部并发成为可能

    转载自海子:http://www.cnblogs.com/dolphin0520/p/3910667.html Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨 ...

  2. 一个简单的定时器(NSTimer)的封装

    在项目开发中我们有的时候需要用到计时器,比如登录超时,scrollview的滚动等,那么就让我们自己手动的去创建一个类库吧. 1 首先你需要一个向外提供创建的便捷方法. 1.1 这里考虑两种情况,一种 ...

  3. 数据结构与算法 - OC 实现

    [原创]http://www.cnblogs.com/luoguoqiang1985/ 冒泡排序:通过N-1次对剩余未排序元素中最大(小)元素的上浮来实现排序,上浮过程通过交换相邻元素实现. 选择排序 ...

  4. 「Windows MFC 」「Edit Control」 控件

    「Windows MFC 」「Edit Control」 控件

  5. Codevs 1690 开关灯 USACO

    1690 开关灯 USACO 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description YYX家门前的街上有N(2<=N& ...

  6. .net ajax式上传文件

    今天在这里介绍一下ajax上传文件.其实也不算是真的使用xmlhttprequest上传,只是使用了iframe实现了无刷新上传而已,最多也只算 是仿ajax上传文件.然而网上关于使用xmlhttpr ...

  7. js在本地预览图片

    移动web <body> <form enctype="multipart/form-data" name="form1"> 上传文件: ...

  8. win7如何完全写在iis

    在前些天,因为需要搭建了ftp服务器,但是今天不需要了,所以要卸载iis,因为我不会让iis和apache同时共存,所以只能卸载了 先找到windows功能,然后把Internet信息服务勾选掉,重启 ...

  9. Linux文件3个时间点(access time,modify time,change time)

    在Linux中使用stat命令来查看文件的详细信息. 如图所示,会出现3个类型的时间,分别是Access,Modify,Change. access time:表示最后一次访问(仅仅是访问,没有改动) ...

  10. POJ 1129 Channel Allocation 四色定理dfs

    题目: http://poj.org/problem?id=1129 开始没读懂题,看discuss的做法,都是循环枚举的,很麻烦.然后我就决定dfs,调试了半天终于0ms A了. #include ...