2

我提升开发效率的经验

 3 years ago
source link: https://lichuanyang.top/posts/3423/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

我提升开发效率的经验

发表于 2021-02-01

| 0

| 阅读次数: 206

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

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

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

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

  1. 排查和解决问题

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

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

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

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

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

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

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

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

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

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

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

排查和解决问题

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

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

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

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

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

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

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

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

wechat
订阅公众号

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK