『十倍程序员』如何实现?

1,104 阅读8分钟

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」。

前言

Hello 大家好,我是l拉不拉米,今天给大家分享普通程序员如何进阶为传说钟的『十倍程序员』

01 效率问题

程序员越高效产出越高,产出越高能力越强,于是形成一个增强环路。但是,就我观察,现实中的程序员,大部分没有用心去思考学习效率问题。

1975 年,弗雷德里克·布鲁克斯(Frederick Brooks)出版了软件行业的名著《人月神话》,他给出了一个统计结果,优秀程序员的开发效率是普通程序员的 10 倍

40 多年过去了,这个数字得到了行业的普遍认同,成为 10x 程序员是很多程序员的追求。那么,问题来了,作为一个程序员,应该如何提升我们的工作效率呢?

02 思维框架

在打磨10x效率之前,我们先问自己三个问题:

  1. 我们想去哪儿?
  2. 我们现在哪儿?
  3. 我们打算怎么去?

我们可以试着回答一下:

  1. 我想成为一名架构师
  2. 我现在只是一个菜鸟
  3. 我打算通过半年培训入门架构设计

或者

  1. 我想从技术转产品经理
  2. 我目前对产品经理一无所知
  3. 我打算拜师学艺两个月入门产品经理

不管是谁,不管做的什么职业,似乎都可以用这种三段式的提问来思考问题。这其实是一种思维框架。虽然很简单,但是很实用,有时候我发现用在孩子的教育上也很管用,比如

  1. 暑假我要预习下个年级的语数英
  2. 我现在处在二年级下学期的水平
  3. 我打算通过项目管理的方式来完成任务

为什么是这种思维框架呢?

  1. 去哪儿明确的是目标和方向
  2. 现在在哪儿明确的是现状和坐标
  3. 打算怎么去要明确的是方法论和思维路径

image.png

反过来:

  1. 如果你对未来是茫然的,尽管你也知道要努力,但劲儿该往哪里使呢?如果使劲的方向不对,那么你越使劲儿,可能会在错误的路上跑得越远。
  2. 如果目标明确,你却不实事求是,从自己实际出发,你可能半路就掉进坑里
  3. 如果明确了目标,也知道了现状,但是方法太lower,思维混乱,结果可能是事倍功半

大家可以试着用这个思维框架,或者变体,或许你不需要记那么多,但是没关系,你只要记住上面这张图。

03 改变询问对象

我们通过平时和产品经理的沟通来进一步实践该框架。在上面的假设里,我们问的对象是自己,在和产品经理沟通的过程中,我们也可以改变询问对象

image.png

  1. 为什么要做这个功能,他会给用户带来什么价值?
  2. 现在没有吗,是不是一定要开发,还是伪需求?
  3. 用户会怎么使用这个功能,什么场景下使用,怎么用?

如果产品经理能够回答好这些问题,说明他基本上已经把这个工作想得比较清楚了,这个时候,我才会放心地去了解后续的细节。

我们用思维框架对照一下,为什么要这么问?一般开发前我们是知道目前系统现状的,所以,我比较关心最后的目标,这里“为什么要做这个功能”就是在问目标,“给用户带来什么价值”是在问这个目标的合理性,确保不是伪需求。接下来我会关注实现路径,用户会怎么用,是否有其他的代替手段,我需要了解产品经理设计的思考过程,是慎重考虑过的还是拍脑袋想出来的。衡量有效性,目的是要保证我的工作不被浪费

04 实践原则

上面我们明白了框架的使用方法,也许你会说我明白了为什么要这么做,但是具体的问题要怎么问,有没有实践原则呢?我们可以考虑如下5个原则:

  1. 以终为始;
  2. 任务分解;
  3. 风险管理;
  4. 反思复盘;
  5. 自动化。

这些原则其实和我们的思维框架是一脉相承的关系:

  1. 以终为始就是在工作的一开始就确定好自己的目标,我们需要看到的是真正的目标。
  2. 任务分解是将大目标拆分成一个一个可行的执行任务,工作分解得越细致,我们便越能更好地掌控工作,这是路径
  3. 风险管理是确保过程可控,多方交流渠道是畅通的,意见是一致的,要减少因为理解偏差导致的工作疏漏。
  4. 反思复盘是为了迭代工作方法,完善工作中的不足,为下一轮循环做更好的准备。
  5. 自动化是程序员的优势,能靠机器做的事情尽量不要手工执行,这是我们的工作最值得优化的地方。

以上原则其实是参考了项目管理的方法,当然你可以增加变种,但是主干是不变的。

image.png

如表格所示:

  1. 现在在哪儿自个清楚,我有什么,我放弃什么,如果不清楚就要敲打自己的头了。
  2. 想去哪儿就是以终为始,我们要交付什么结果在里程碑的deadline?
  3. 打算怎么去就是手段和实现路径,这里借鉴的项目管理的方法。

知道了这些原则,我们看下最佳实践:

产品经理把要做的功能清单摆在我们面前,站在以终为始的角度,我需要了解真正的目标是什么,所以,我会关心为什么要做这个功能。为了保证目标是有效的,我会关心它给用户带来的价值。

有了任务分解的视角,我需要将一个大的目标进行拆解,如果我要达成这个目标,整体解决方案是远远不够的,我需要把任务分解成一个一个小的部分。所以,我会关心一下具体的使用场景。一方面,我会了解到更多的细节,另一方面,当时间紧迫的时候,我会和产品经理来谈谈究竟优先实现哪个场景。

为什么要学会风险管控?因为我需要明确,自己是否真正理解了产品经理提交的需求,自己真的和产品经理交代的内容一致?最坏的情况会是怎样的,自己能否承受的了?风险管理的目的是确保任务按照预定的轨道顺畅进行。

有些人会好奇,为什么没有沟通反馈?沟通的目的是达成一致,立即行动。如果沟通出现问题,那也是风险管控的一种方式,所以这里没有独立出来。

其实风险管控涉及的面非常广,贯彻整个研发生命周期,因为需求变化有风险、设计可能出现漏洞、开发有BUG、测试不完整等等,怎么强调都不为过。

自动化是手段,我们做的方案通常是一个自动化方案,但我们需要了解这个方案没有自动化之前是怎么做的。如果不自动化,用户会怎么用?所以,我会关心是不是还有其它替换方案,比如,买一个现成的服务。

反思复盘是流程的一个重要闭环,如果缺少了这一环节,可能整个思维框架由于缺少流量注入就固化、消亡了。

05 总结

大多数人工作低效是由于缺乏有效的思维框架,加上工作中偶然出现的复杂度,我们“真实”的工作效率自然会得大打折扣。

而想要减少偶然复杂度的消耗,就要了解一些高效的工作方式和行业的最佳实践,而这一切是可以用统一的框架进行串联思考。

运用这个思考框架,我们需要问自己三个问题:

  1. Where are we(我们现在在哪儿?)
  2. Where are we going(我们想去哪儿?)
  3. How can we get there(我们打算怎么去?)

为了把这个框架应用在我们程序员的工作中,我给了你几个个实践原则:

  1. 以终为始,确定好终极目标;
  2. 任务分解,找到实施路径;
  3. 风险管控,解决过程中可能出现的问题;
  4. 反思复盘,保存思维框架的活力;
  5. 自动化,解决与机器打交道出现的问题。

如果今天的内容你只能记住一件事,那请记住:面对问题时,经常用思维框架问问自己,我要去哪儿,我现在在哪儿,我应该如何过去。