如何把项目做完?

今年做了几个开源项目,github 上的 org-tidy、alfred-app-switcher,在公司内部开源了一个 rust 实现的命令行工具,另外还有一些正在进行中的项目。做的过程中发现并没有自己想象的那么容易,会遇到很多来自自身的阻力。总结一下这些困难,如何克服它们,把项目做完。

优先做难而正确的事情

要实现一个完整的项目,会有很多项子任务,这些子任务里有你喜欢做的,也有你不喜欢做的。比如,写代码我很快乐,这是我非常擅长的事情,而且马上就能看到成果的。写文档就很难受了,没有什么成就感,但这是不得不做的,不写文档别人怎么知道怎么使用呢?所以有很多次都是代码写完了,功能实现了,就差最后写文档这一步。因为不喜欢写文档,结果项目搁浅了。

写文档就是“难而正确”的事情。项目能不能完成,这些事情是至关重要的因素。后来我换了一种方式,先写文档,把你想要实现的功能先写出来。文档写完后再写代码实现功能。难的事情先做完了,后面写代码就只剩下纯粹的快乐了,项目不会搁浅。

排除无意义的干扰项

写文档是难而正确的,写代码是简单而正确的,还有些“简单而没什么卵用”的事情。举一些例子:

  1. 优化工具,比如 emacs。这可以说是大部分 emacs 用户的共同点。emacs 提供充分的可扩展性,意味着你想实现的功能基本上都可以实现。改 emacs 的成就感是极其强烈的。所以会不自觉的陷入优化 emacs 的陷阱之中,不能自拔。

  2. 纠结于代码的规范,尤其是在使用一个新语言的时候,强迫自己一定要遵循某种规范。

  3. 遇到一个问题,只解决问题还不够,一定要找到解决这个问题的最佳实践。

如果把黄金时间用在处理这些事情上,就会觉得焦虑,因为项目没有任何实质性的进展。正确的办法是当有了新点子的时候,不要马上着手去做,先把这个事情记录下来,等到合适的时间再去解决这些无关痛痒的问题。

避免反复权衡

如果你头脑里有很多想法,或者有很多个项目想去做,可能会反复权衡:这几个项目我应该先做哪一个呢?哪一个最重要?权衡的结果往往是不明确的,最后还是不知道应该先做哪个,最终哪个项目都做不完。

这种情况其实先做哪个都可以,既然这些是需要权衡的,那就说明它们之中并没有特别重要的。

deadline 是第一生产力

项目都是自己的,没人催你,也没有压力。这就像在赶路,反正我每天都在走,但是离终点还有多远,以我当前的速度还要走多久才能到,这些统统都不关心。前面刚开始还是有激情的,过一段时间激情消退,走下去的动力逐渐消失,也就走不到终点了。

一定要给自己定下 deadline,有目标才会有动力。

项目的意义

在做项目的过程中,可能会对项目本身的意义产生两种不同的看法。一种是把项目看的非常的重要,仿佛做完这个项目就能走上人生巅峰了。另一种是质疑自己,这个项目有什么用,不就简简单单的一个小功能吗?这两种情绪都会严重影响项目的进度。

把项目看的太重,本来一个很简单的工作,就会觉得难度很大,望而却步。如果是不断的质疑自己,即便项目做完了我也得不到什么东西,也就没动力继续下去了。

适当地调整自己的情绪,不要走向这两个极端,保持中立是最好的。