当前位置: 首页 > news >正文

jQuery之父:每天写代码

我决定为自己定下一些规则:

  1. 每天必须写代码。我可以写文档、写博客或者写其他东西,但是这些不能代替写代码。
  2. 代码必须是实际起作用的。调整缩进、重新排版不算。如果有可能,重构也不算。(可以进行这些事情,但这些不能是一天唯一的编码。)
  3. 所有代码必须在午夜之前完成。
  4. 代码必须是开源的,放在Github上。

有些规则比较武断。比如代码其实不用在午夜前写完的。但我担心熬夜导致代码质量下降。同样,代码也不用开源,或者放在GitHub上。我这么做是想强迫自己写代码的时候上点心(考虑可读性,同时较早地考虑模块化)。

到目前为止这个策略很有效。我基本保持了20周的连续工作。我之所以写这篇博客,正是因为它完全改变了我编写代码的方式,更重要的是影响了我生活和心智。

这个习惯的改变产生了一些有趣的结果:

最小可行的编码。 我强迫自己每天花不少于半个小时来写代码(如果少于这个时间就很难写出有价值的代码了,特别是回忆前一天写了什么还要花一点时间)。工作日的时候我有时写得多一点(一般不超过一个小时),周末我有时整天写代码。

写代码成为习惯。 值得一提的是我并不是特别在乎上面的Github图形。我觉得这是这个实验最值得借鉴的一点:这是你为自己做的一个改变,而不是为了满足别人对你工作的评价。节食和锻炼也是一个道理:如果你不在乎提升自己,那么你永远都不会取得成功。

与焦虑作斗争。 在开始这个实验之前,我时常为没有完成足够的工作或取得足够进展而感到焦虑(工作和进展都难以量化,因为我的支线项目没有死限)。我意识到,感觉到进展和实际推进工作同样重要。这令我大开眼界。一旦我每天持续地推进项目,我的焦虑就开始消散了。我对自己的工作量很心安,我再也没有那种难以承受的渴望,想要疾风骤雨式地推进项目的渴望。

周末。 以前,在周末完成工作绝对是前进的关键动力(因为通常而言这是我唯一大量推进支线项目工作的机会。)现在情况不一样了——这是件好事。期望在一个周末完成一周的所有工作只会让我失望。我极少很完成工作,因此为了完成更多工作而拒绝了其他喜欢的周末活动(例如吃 dim sum,参观博物馆,去公园游玩,陪伴我的伴侣等)。我深深地感到,虽然支线项目是非常重要的,但是它们不应该是生活的全部。

后台处理。 每天编写支线项目代码的一个有趣的副作用是你当前的任务时常在你大脑的后台运行。因此当我去散步或沐浴的时候,或者进行其他不费脑的活动的时候,我在思考我接下来将做哪些编码,寻找解决问题的好方法。我以前一周或两周编码一次的时候可不是这样。当时时间被花费在思考其他一些事情上,通常是在为没法完成任何支线项目而感到焦虑。

上下文切换。 拾起支线项目工作的时候总会有上下文开销的。很不幸,重拾整整一周前的思考是极其困难的。每天做一点对此很有帮助,因为间隔时间大大缩短了,让我很容易想起在做什么。

平衡工作。 这个改变最重要的方面之一是我已经简单地学会了如何更好地平衡工作、生活和支线项目。我知道自己每天都要做支线项目,因此我需要更好地管理时间。如果我计划晚上出去,并且很晚才能回家,那么我需要在早上为支线项目工作,在开始为我主业Khan Academy工作之前。同样的,如果我在外面,而我还没有完成我的工作,时间已经很晚了,那么我需要尽快赶回家去完成工作(以免错过一天)。我需要指出的是我发现自己把更少的时间花在爱好上了(例如木版画),但是这是一个合理的代价,我得接受这个。

对外沟通。 跟外界沟通自己的新习惯是很有好处的。我的伴侣理解每都必须完成工作,因此有活动安排有时需要据此作出调整。这样我就可以很方便地说:“是的,我们可以出去/看个电影/等等。但是我之后需要写代码。”我的伴侣会理解我,并在安排活动时考虑到这点。

我写了多少代码? 我很难相信自己在过去的几个月写了这么多的代码。我新建了几个网站,重写了一些框架,并创建了大量node模块。我写了如此之多的代码以至于我有时我都忘记自己做了写什么——几周前的工作感觉是很久远的记忆。我非常非常高兴自己能写这么多代码。

我认为这个习惯的改变是一个巨大的成功。我希望自己能持续保持这个习惯。同时,我尽力向其他希望能完成大量的支线项目的人推荐这个策略。告诉我这个策略对你而言是有效还是无效。我很希望能从你那里听到一些有意思的东西。

 

相关文章:

  • 一个机器学习博士生的忠告
  • 喂,你是在学习还是在逃避?
  • 工作中四种重要的能力------谈谈工作两年后的一点思考
  • 像外行一样思考,像专家一样实践
  • 认识SCI、EI、ISTP、IEEE等和算法论文
  • 反演
  • BP神经网络入门
  • 模块涉及摄像头 文件系统 LCD
  • Latex 用法
  • KD树
  • opencv3计算机视觉:python实现
  • SLAM求职经验帖
  • FLANN匹配算法
  • 图像处理行业入门
  • 如何学好图像处理
  • 【刷算法】从上往下打印二叉树
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • gulp 教程
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript设计模式与开发实践系列之策略模式
  • maven工程打包jar以及java jar命令的classpath使用
  • React中的“虫洞”——Context
  • web标准化(下)
  • 闭包--闭包作用之保存(一)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 简单数学运算程序(不定期更新)
  • 看域名解析域名安全对SEO的影响
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 使用 @font-face
  • 试着探索高并发下的系统架构面貌
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 小程序 setData 学问多
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 再次简单明了总结flex布局,一看就懂...
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • (003)SlickEdit Unity的补全
  • (2022 CVPR) Unbiased Teacher v2
  • (层次遍历)104. 二叉树的最大深度
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二)PySpark3:SparkSQL编程
  • (算法)N皇后问题
  • (未解决)macOS matplotlib 中文是方框
  • (转)人的集合论——移山之道
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @requestBody写与不写的情况
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解