我提升开发效率的经验

大家好,我是流沙,一名近六年工作经验的程序员。我的工作经历里,包含了整体文化、氛围差别非常大的公司,和很多不同类型的人合作过,观察到过很多没效率的现象。同时,我一直觉得我自己的开发效率是非常高的。整个职业经历里,我很少在八小时的工作时间外处理任务性的事项。即使有时迫于公司制度不得不进行加班,也是在执行自己的学习计划,或者进行一些深层的思考。因此,我想做一个系统性的关于开发效率的总结,分享给大家。

首先,列两个非常没效率的场景。

  • 小A开发过程中碰到一个没见过的报错,于是抱着电脑去找团队里的大牛小X, 小X努力的搜集相关的各种必要信息。与此同时,小A就在旁边看着,并且不时的和小X还有旁边的小Y聊着天。
  • 小C拿到一个大型需求,匆匆看了一遍,接着就开始开发。开发一半了,发现产品稿上有个点看不明白,又去和产品问。问的过程中产品又想起来别的事,又说了起来。最后聊了半天,小C发现自己之前的工作基本白做了。

虽然有夸张的成分,但是这些事也是确实每时每刻都在发生的。造成这些现象的原因很多,我们今天就好好剖析一下。在剖析效率问题之前,我们需要先看看程序员日常都要做哪些事。其中对工作效率影响比较大的,我把他们主要归为三类:

  1. 日常开发
  2. 沟通
  3. 排查和解决问题

接下来,我们就对这三项逐一分析,如何提升工作效率。

日常开发

日常开发中都有什么情况会造成效率下降呢,我列举几个:

  • 像上边小C一样的返工行为
  • 日常工作中大量重复劳动,比如写sql,写模板代码
  • 本来是一个很小的改动点,改了才发现这也要改,那也要改;更严重的是,根本不知道「那也要改」,结果一改就崩
  • 个人注意力不集中,老走神

可以看到,这里边大部分是和代码设计有关的。对于设计,其实就两句话,一是要设计,二是要设计好。

也就是说,首先,你得知道开发之前是得有设计这么个环节的。软件工程是一门科学,它有概要设计、详细设计这些步骤是有道理的。要设计到什么程度再进开发呢?我的观点是越细越好,理论上,除了实际把代码码出来,其他所有事都可以在设计阶段做完。

关于设计的好不好,一个重要的评价标准,就是后续改起来是否容易。如果一个变化的原因会导致多处代码修改,那就是一个不好的设计。如何提升这一点,需要去学习设计模式、架构方面的知识,没有速成之路。

另外,关于注意力的问题,当然大家可以借助番茄钟这样的工具。但是工具永远都只能是辅助,最重要的还是自己去提升主观上的自控力。

沟通

接着说沟通这块,沟通分主动沟通和被动沟通。主动沟通就是你自己这边发起,要去找其他人问问题、讨论;被动沟通则是别人发起,来问你问题或者讨论事。

主动沟通的主要问题就是越聊越远,聊着聊着就不知道聊哪去了。这里我给两个建议,一是发起沟通前一定要想清楚自己想通过这次沟通达到什么目的,不能有个模糊的想法就迷迷糊糊的去了,这种沟通就是最大的时间杀手;二是可以列一个沟通清单,沟通过程中话题扩散其实是个常见的现象,我觉得没必要刻意去杜绝这种事,关键是要保证自己本来想聊的聊出结果来,这就需要一个可以用来check的清单。

被动沟通其实是一种很容易打乱工作节奏的事,但是很多情况下无法避免,比如突然又线上问题要处理,领导有事找你,等等。我们能做的就只有减少不必要的被动沟通次数。比如自己提供的功能,写好文档和注释,其他人就不需要靠问你就能看明白。方法名、返回值等团队内要建立起一些固有约定,大家都遵守,也就不需要问才能了解了。

另外还有一点是做好任务的拆分,做若干个小任务,而不是做一个大任务。这样,当被迫打断工作时,「切换上下文」的成本会低一些。

排查和解决问题

这也是很重要的一个方面。对有些人来说,查Bug改Bug的时间,可能会远高于开发新需求。对于这个,我们的主要目标就是降低排查难度,减少排查时间。可以从下面几个方面做。

  1. 设法尽早暴露问题,比如通过写单元测试。同样一个问题,出现在一个小模块里,和出现在一个复杂系统中,排查难度是不言而喻的。

  2. 要有足够多的信息,比如日志,比如各类监控数据。就像我们体检一样,只有先看得到那些异常指标,才能再去针对性的详细排查。否则什么指标没有,就只能两眼抓瞎乱查了。

  3. 再一个就是排查方式,每个人都需要逐渐积累经验,建立起相对固定的排查问题的套路。比如我,习惯就是遇到问题先把各种能看到的信息都扫一遍,从中发现异常指标,指标看不懂的话就借助搜索引擎或者他人来理解,然后根据指标思考有什么可能原因,再逐步去验证。这里边很重要的一点就是什么样的问题要自己思考,什么样的问题应该借助于他人或者搜索引擎。像上边小A的做法,就是非常不可取的,问别人或者搜索引擎的问题,一定是非常具体的,你随手一个报错发过来,别人首先得花大量时间搜集信息。一个1小时搞得定的问题,强行去问别人,很可能要花掉两个人一下午。

    什么叫具体呢,比如遇到一个ClassNotFoundException, 如果你压根不知道它是什么意思,那去搜一下没有问题。而假如你已经知道它的意思就是找不到类,那再去搜索就没有任何意义,这是要做的是思考这个类为什么找不到,有哪些可能原因。

除了上边这些之外,其实还有一类原因,就是996大环境大家主动选择的摸鱼。对这一点,我还是建议大家快速干完活之后腾出时间提升自己,摸鱼无益。再一点就是用脚投票,多去找没有加班文化的公司、团队,用自己的努力让他们发展的更好。

大家有想法也可以在评论区或者公众号( Mobility )和我交流。

原文地址: http://lichuanyang.top/posts/3423/