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

成为 10x 程序员是很多程序员的追求。但工作产出并不只是由写代码的效率决定的,一些不恰当工作方法很大程度上影响着你的产出。在接下来的这段时间里,我希望通过这个专栏和你一起探讨,作为一个程序员,该如何更高效地工作,怎样才能把时间和精力尽可能地放在处理本质复杂度的事情上,减少在偶然复杂度上的消耗。

作者 | 郑晔

出处 | 极客时间《10x 程序员工作法》专栏

作为整个专栏第一讲,我就从我常用的一个思考框架开始。

一个思考框架

我曾经组织过针对应届毕业生的培训,第一堂课往往是我亲自操刀,其中有一个头脑风暴的环节“畅想未来”,我会让大家思考三个问题:

(1)我现在是个什么水平?

(2)我想达到一个什么水平?

(3)我将怎样到达那个目标?

大家会围绕着这三个问题,从各种角度展开讨论。这是一个有趣的练习,你会发现大家“最擅长”回答的是第一个问题:我现在处于什么水平?和有经验的人相比,他们大多自认为比较“菜”。但对于后两个问题的讨论,却可以切实看出人和人之间处理问题的能力差异。

有人通过之前的资料搜集,已经对自己的未来有了一个打算。比如想成为一个研发大牛,或者想做一个开源软件等,也就是说,对于第二个问题,他有明确的答案。而有的人则是一脸茫然,他很可能根本没有考虑过这个问题。而从题目本身来看,目标相对清晰的同学,才会进入到第三个问题,而茫然的同学,则完全无从下手。

那么我为什么会问这几个问题呢?我是想让大家跳出现有的思考模式,摆脱仅凭直觉“闷头做事”的习惯方式,把低着的头抬起来,看一眼未来,给自己找一个方向。否则,如果你对未来没有定位,是茫然的,尽管你也知道要努力,但劲儿该往哪里使呢?如果使劲的方向不对,那么你越使劲儿,可能会在错误的路上跑得越远。南辕北辙的道理大家都懂,但具体到自己的工作和发展上,真正能体会并实践的却是少数。

其实,这三个问题来自一个思考框架。在给其他公司团队做咨询时,我也经常会运用到它,原来的问题是:

Where are we?(我们现在在哪?)

Where are we going?(我们要到哪儿去?)

How can we get there?(我们如何到达那里?)

这三个问题实际上是帮我们确定:

现状

目标

实现路径

如果一个人能够清晰地回答出这三个问题,通常意味着他对要做的事有着清晰的认识。这个框架虽然看似简单,但却非常有效,它已经成为我工具箱里一件非常称手的思考工具。在我的职业生涯里,与很多人讨论不同的事时,我都会用到这个思考框架的不同变体,而在这个专栏里,我也会用它来帮助回答“怎样高效工作、怎样做好软件”这件事。

四个思考原则

在实际的工作中,这个思考框架会帮助我更好地了解自己的工作。比如,当一个产品经理给我交代一个要开发的产品特性时,我通常会问他这样一些问题:

为什么要做这个特性,它会给用户带来怎样的价值?

什么样的用户会用到这个特性,他们在什么场景下使用,他们又会怎样使用它?

达成这个目的是否有其它手段?是不是一定要开发一个系统?

这个特性上线之后,怎么衡量它的有效性?

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

我们用思考框架对照一下,为什么我会问这些问题。一般来说,一个新特性要开发时,现状我是知道的。所以,我更关心目标,这里“为什么要做这个特性?”就是在问目标,“给用户带来怎样的价值”是在确定这个目标的有效性。接下来,我会关注实现路径,用户会怎么用,是否有其他的替代手段,我需要了解产品经理的设计是经过思考的,还是“拍着脑袋”给出的。衡量有效性,则是要保证我的工作不会被浪费。

通过这个例子,我给你展示了怎么用这个思考框架提出问题。但我估计你更想了解的是,我怎么会想到问这些问题。给出思考框架是为了让你明白为什么要提出问题,而具体问题要怎么问,就可以遵循下面这四项原则:

(1)以终为始

(2)任务分解

(3)沟通反馈

(4)自动化

这是我从思考框架延伸出来的。在这个专栏里,我会围绕这四项原则和你详细讨论。

解释一下,以终为始就是在工作的一开始就确定好自己的目标。我们需要看到的是真正的目标,而不是把别人交代给我们的工作当作目标。你可以看出这个原则是在帮助我们回答思考框架中,Where are we going?(我们要到哪儿去?)这个问题。

任务分解是将大目标拆分成一个一个可行的执行任务,工作分解得越细致,我们便越能更好地掌控工作,它是帮助我们回答思维框架中,How can we get there?(我们如何到达那里?)的问题。

如果说前两个原则是要在动手之前做的分析,那后面两个原则就是在通往目标的道路上,为我们保驾护航,因为在实际工作中,我们少不了与人和机器打交道。

沟通反馈是为了疏通与其他人交互的渠道。一方面,我们保证信息能够传达出去,减少因为理解偏差造成的工作疏漏;另一方面,也要保证我们能够准确接收外部信息,以免因为自我感觉良好,阻碍了进步。

自动化就是将繁琐的工作通过自动化的方式交给机器执行,这是我们程序员本职工作的一部分,我们擅长的是为其他人打造自动化的服务,但自己的工作却应用得不够,这也是我们工作中最值得优化的部分。

这四个原则互相配合,形成了一个对事情的衡量标准。总体上可以保证我的工作是有效的,在明确目标和完成目标的过程中,都可以尽量减少偶然复杂度。

怎么把这四个原则用在工作中呢?我们回过头来看一下前面的场景,产品经理把要做的产品特性摆在我面前。站在以终为始的角度,我需要了解真正的目标是什么,所以,我会关心为什么要做这个特性,为了保证目标是有效的,我会关心它给用户带来的价值

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

为什么要学会沟通反馈?因为我需要明确,自己是否真正理解了产品经理提交的需求,所以,我要不断地问问题,确保自己的理解和产品经理交代的内容一致。另外,我也需要保证我的产品做出来确实能够达到目标。所以,我会关心它上线后的衡量手段。因为我知道,这个行业里有太多代码上线后,从来没有运行过。

自动化的角度很有意思,我们做的方案通常是一个自动化方案,但我们需要了解这个方案没有自动化之前是怎么做的。如果不自动化,用户会怎么用。所以,我会关心是不是还有其它替换方案,比如,买一个现成的服务。因为很多需求的提出,只是因为我们有了一个开发团队而已。

好,现在你已经对这四个原则在工作中的应用有了一个直观的认识。但你也会发现,我问的这些问题似乎已经“超纲”了,超过了一个普通程序员应该关注的范围。但这就是真实世界,它不像考试一样,有一个标准答案。

我们不是一个人孤独地在工作,而是与其他人在协作,想要做到高效工作,我们就要“抬起头”来,跳出写代码这件事本身。所以,我在开篇词里说,程序员解决的问题,大多不是程序问题。

可能你对这些原则的了解还没过瘾,没关系,这一讲只是让大家清晰地了解思考框架和原则的背后逻辑。接下来,我会结合行业里的最佳实践,给你进一步讲解这些原则和具体应用。

总结时刻

总结一下今天的内容。大多数人工作低效是由于工作中偶然复杂度太多造成的,只要能够更多地将注意力放到本质复杂度上,减少偶然复杂度造成的消耗,我们“真实”的工作效率自然会得到大幅度提升。而想要减少偶然复杂度的消耗,就要了解一些高效的工作方式和行业的最佳实践,而这一切是可以用统一的框架进行思考的。

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

Where are we?(我们现在在哪?)

Where are we going?(我们要到哪儿去?)

How can we get there?(我们如何到达那里?)

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

a、以终为始,确定好真实目标;

b、任务分解,找到实施路径;

c、沟通反馈,解决与人打交道出现的问题;

d、自动化,解决与机器打交道出现的问题。

如果今天的内容你只能记住一件事,那请记住:面对问题时,用思考框架问问自己:现状、目标和路径。

最后,我想请你思考一下,如果把这个思考框架运用在你的职业发展规划上,你会如何回答这三个问题呢?欢迎留言。

如果你学习C/C++编程知识感觉有困难,想要和人一起交流讨论,可以来:C/C++编程,一起来成长学习!

优秀程序员的开发效率是普通程序员的 10 倍,那么如何提升呢?相关推荐

  1. 扬尼斯定律:程序员的开发效率每6年提高一倍

    我不断的听到各种关于"软件危机"的警言,以及关于软件开发缺少过程规范的批评.我做编程工作超过15年,我认为这些言论基本上都是错的:我确信我能在很短的时间里用如今的开发工具复制出15 ...

  2. freecplus框架,Linux平台下C/C++程序员提高开发效率的利器

    文章目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参 ...

  3. freecplus框架,Linux平台下C_C++程序员提高开发效率的利器

    文章目录 一.freecplus框架简介 二.freecplus开源许可协议 三.freecplus框架内容 字符串操作 2.xml解析 3.日期时间 4.目录操作 5.文件操作 6.日志文件 7.参 ...

  4. 对话MySQL之父:一个优秀程序员可抵5个普通程序员

    编者按:MySQL之父Monty有着四十多年的编程经验,从儿时的兴趣到长大后的深耕,他在编程领域不断钻研,最终成为编程大师.<新程序员004>带你走进Monty的程序人生,谈谈他在编程方面 ...

  5. lombok 构造函数_java程序员提高开发效率必备工具lombok,不会你就out了

    一.本文大纲 使用lombok插件的好处 如何安装lombok插件 使用lombok注解简化开发 二.使用lombok插件的好处 我们在java开发过程中,经常会有一些常规性的,重复性的工作.比如: ...

  6. 程序员大佬的简历和普通程序员有啥区别?

    最近后台收到不少留言:0基础怎么学好 Java? 提问的人里有在校大学生.也有工作了一段时间想转行的职场新人. (其中两个提问截图) 交流下来,大家都有同一个行为模式:刚开始劲头十足,上网找了一堆资料 ...

  7. 集十三位资深程序员毕生功力回答:普通程序员如何自学才能进大厂?

    史上最强Java学习大全,多亏我足够无耻,才从公司十三位Java程序员口中问出方法来. 没错. 这篇文章总结于我们公司十三位使用Java作为开发语言的程序员前辈,方方面面近四千字. 作为十大编程语言榜 ...

  8. 划重点!2019年这类程序员非常稀缺,年薪超平均水平10倍

    人工智能可谓是目前最热门的行业,无论走在前沿的科技公司,还是努力创新的传统行业,几乎都想把握这个新"风口",相关人才也成为各大公司竞相争抢的对象: 百度推出"少帅计划&q ...

  9. 优秀程序员因何而优秀?

    这些年我曾和很多程序员一起工作,他们之中的一些人非常厉害,而另一些人显得平庸.不久前因为和一些技术非常熟练的程序员工作感觉很愉快,我花了一些时间在考虑我佩服他们什么呢?什么原因让优秀的程序员那么优秀, ...

最新文章

  1. docred数据集情况笔记
  2. 1.2、Android Studio为新设备创建一个模块
  3. 《走进SAP(第2版)》——2.8 SAP的目标是什么
  4. 三菱伺服自动调谐_三菱伺服在执行离线自动调整之前
  5. uva_1422 Processor
  6. 根据两点经纬度计算距离和角度
  7. HDU2046 骨牌铺方格【递推】
  8. ExtJs中ComboBox使用之技巧
  9. CentOS 安装nload(流量统计)
  10. linux桌面环境组件下载,万能桌面小组件
  11. 编译protoc方法名称被自动大写
  12. ESP32 SIM800L:发送带有传感器读数的文本消息(SMS警报)
  13. 使用instsrv.exe+srvany.exe将应用程序安装为windows服务的方法
  14. 存用部首查字典如何查_存的部首,存的偏旁部首,存的拼音,存的笔画数,存的组词,存的意思...
  15. 关于Efficient Subgraph Matching by Postponing Cartesian的批注
  16. 显示前半内容后半内容用省略号_220六语文课文内容填空与句子练习
  17. Java将OFD文件转PDF文件
  18. 如何打包浏览器的扩展程序
  19. 卡巴斯基在桌面窗口管理器中发现零日漏洞
  20. 读书笔记-《版面设计的原理》

热门文章

  1. oracle报无效月份 注册表,在oracle中插入时间时出现“无效的月份”解决方法
  2. python 全文搜索 句子_python新玩法:用python进行文章摘要拿取,只需要一行代码
  3. python逻辑流程图_python-程序流程图
  4. linux安装pgsql源码包解压,在Linux(centos)中使用源码安装pgRouting
  5. zookeeper Error contacting service. It is probably not running
  6. RabbitMQ exchange交换机机制
  7. 最新 955 不加班公司名单
  8. 那些能沉淀自己的人,将会成为最后的赢家
  9. 希望这些建议对你有帮助
  10. 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!