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

10倍程序员的思考模型 本文共2568个字,预估阅读时间10分钟 01 效率问题 程序员越高效产出越高,产出越高能力越强,于是形成一个增强环路。但是,就我观察,现实中的程序员,大部分没有用心去思考学习效率问题。 1975 年,弗雷德里克·布鲁克斯(Frederick Brooks)出版了软件行业的名著《人月神话》,他给出了一个统计结果,优秀程序员的开发效率是普通程序员的 10 倍。 40 多年过去了,这个数字得到了... 阅读详情

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++编程,一起来成长学习!

伺服驱动器485控制(1):使用串口软件来读参数 下面介绍如何读伺服驱动器的一圈脉冲数,通过查看伺服驱动器说明书,得知一圈脉冲数的参数是PA11 其通讯地址是十进制 11 十六进制 0A, 串口软件指令都是以十六进制表示,字节单位。注意:485通讯地一定要接,如果不接可能会通讯异常,假如上位机没有485通讯地,而接了两根485+ 和485-,出现通讯不好和反应慢的情况,请把485GND接在上位机0V。笔记本的网口不要和驱动器了网口用网线连接,笔记本网口是以太网,伺服驱动器网口是485。通过驱动器按键面板查看PA11的参数是10000,因此数据对的上。 阅读详情

相关推荐

如何设计一个低代码平台

近些年来,低代码发展火热,各种低代码平台如雨后春笋纷纷崛起,这些平台各定位不同,优劣不同,用户的选择空间很大。那么,如果用户想从零开始设计一个低代码平台,该如何做呢?

Jarod_Chou的博客 8256

基于主体建模中实证行为异质性的注入与动态塑造实战指南

在复杂系统建模领域,基于主体的建模(ABM)是一种通过模拟自主个体(主体)的决策与交互来研究宏观现象涌现的经典方法。其核心原理在于将微观个体行为与宏观系统动态相连接,通过定义主体的属性、规则与环境交互,自底向上地探索复杂系统的演化规律。这一技术的核心价值在于能够揭示聚合数据无法展现的微观机制,为理解社会经济与环境系统的非线性动态提供了独特视角。在土地利用变化、技术扩散、资源管理等应用场景中,ABM能够模拟政策干预、市场波动或环境变化下,异质主体如何通过适应与学习,最终塑造出多样的空间格局与社会经济结果。本文

weixin_34220179的博客 687

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1583

[置顶] 程序员编程生产力相差10倍意味着什么?

在软件工程研究中,被验证得最多的结论就是对于同等经验的两个不同程序员,在效率和质量上可能会有10倍的差距。研究人员还发现,这种差距也适用于团队级别上,也就是说在同一行业内的不同的团队也是如此。 软件开发中的个人效率的变化 首先发现不同人在编程生产力上的巨大差距的研究,是1960年由Sackman、Erikson以及Grant三个人完成的。他们研究了工作经验平均在7年的专业程序员,并发现最好和最...

weixin_30493401的博客 253

别再只会用Kriging了!用Python+GeoPandas手把手实现IDW插值(附完整代码与可视化)

本文详细介绍了如何使用Python和GeoPandas实现反距离加权插值(IDW),包括核心算法、参数调优和可视化技巧。通过完整代码示例,帮助读者掌握这一空间数据分析技术,适用于环境监测、气象预报等多个领域,提升数据处理效率和灵活性。

weixin_30872157的博客 225

电动车辆的动力总成控制

手把手教你学Simulink——电动车辆的动力总成控制在汽车工程领域,电动汽车(EV)的动力总成控制系统是确保车辆性能、效率和驾驶体验的关键。动力总成控制系统通常包括电机控制、电池管理系统(BMS)、能量回收系统等组件。通过使用Simulink,我们可以模拟和测试这些系统的运行情况,优化设计,并验证控制算法的有效性。

amy_mhd的博客 967

解读10x程序员工作法-以终为始

以终为始 以终为始:如何让你的努力不白费? 网上流传着一个帖子,亚马逊 CTO 介绍亚马逊是如何开发一项产品的,简单来说,他们采用向后工作的方法,开发一项产品的顺序为: 写新闻稿; 写 FAQ(常见问题解答); 写用户文档; 写代码。 DoD的价值:你完成了工作,为什么他们还不满意? DoD(Definition of Done,完成的定义) DoD 是一个清单,清单是由...

qq_39662660的博客 1203

Paho Asynchronous MQTT C Client Library--MQTTAsync API

异步MQTT 客户端库for C

yoyo勰的博客 1264

如何成为传说中的“10x程序员”

编译/Anna原作者/antirez对于一般的程序员来说,能把自己的工作做好就很不错了。但如果想让一个程序员做十个程序员的工作,那实在是难以想象。而我们所谓的“10x(十倍效率)程序员”,...

硅谷精英程序员 355

仓储控制系统(WCS)设计

WCS系统设计方法

cetclyb的博客 2万+

NPU性能榨取手把手教程:RK3588上YOLOv5s多线程部署与120FPS极限探索

RK3588 YOLOv5s多线程部署优化指南 本教程深入解析RK3588芯片上YOLOv5s模型的高性能多线程部署方案。RK3588作为瑞芯微旗舰AIoT芯片,内置三核NPU(6TOPS算力)和硬件加速器(RGA/VPU),为AI推理提供强大支持。通过线程池技术,我们将视频处理的读取、推理、后处理等环节解耦并行,显著提升系统吞吐量。教程详细介绍了从PyTorch到RKNN格式的模型转换流程、INT8量化方法,以及基于RKNN C++ SDK的YOLOv5推理核心实现,帮助开发者最大化发挥RK3588的AI

LXY_LOVE36的博客 973

极客时间-10x程序员工作法 学习笔记(十)设计

极客时间-10x程序员工作法 学习笔记(十)设计

m0_46546381的博客 164

rv1126如何切换720p和1080p

切换720p和1080p可以使用modetest,但是需要将这两种模式都添加到connector中去 添加一个新的mode到connector中去,其实内核中已经有相关接口了,需要做一些小改动。 1.不采用设备树的方式去配置,将720p和1080p的timing参数配置放在数组中。 2.这里的printer和设备树中的.compatible = "printer"一致。 3.将其添加到connector中去 static int panel_simple_get_fixed_modes(struct

weixin_42097108的博客 863

好的程序员,效率是普通程序员的亿万倍

好的程序员,效率是普通程序员的亿万倍 2011-5-27 咋看之下,有人肯定认为这是标题党,或者有人或许认为:疯了吧,怎么可能有亿万倍。为了证明我不是标题党,我也没疯,我决定把这篇文章写好!大家先来点掌声,支持一下!^_^ 网上流传的“标准观点”是:好的程序员效率是普通程序员的数倍。这句话被很多人、很多文章引用过。而我说:好的程序员是普通程序员的亿万倍。这是不是有点非常非常夸张了?如...

iteye_6740的博客 331

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

10倍效率的程序员有哪些好习惯?

10倍效率的程序员有哪些好习惯? Brad Feld的一篇文章《The Rise of Developeronomics》中提到了“10倍效率的开发人员(10x developer)”的概念(卓越的开发者的效率往往比一般的开发者高很多,而不只是一点点),Adam Loving 在读了之后受到启发,并向多位大牛(Ben Sharpe、Collin Watson和Jonathan Locke)询问如何...

qq_37278958的博客 280

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

日常开发中,提升技术的10个建议

优秀的程序员,之所以优秀,是因为他会总结踩过的坑,避免重蹈覆辙。所以,田螺哥建议你,日常开发中,如果你踩了哪些坑,就需要总结下来.茶余饭后,再温习温习比如,你知道:Redis分布式锁使用,可能会有哪些坑嘛?线程池使用有哪些坑?Java日期处理有哪些坑嘛?使用可能有哪些坑?在日常工作中呢,注意整理一些通用的技术方案。比如幂等设计、分布式锁如何设计、分布式事务设计、接口优化、限流设计、分库分表设计、深分页问题解决等等.

IT_1024_的博客 1139

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

你是码农 还是优秀程序员?

现在深深的体会到,不仅仅人与人的差别是巨大的,程序员与程序员之间的差别同样是很明显的。

我生苍茫 2546

你认为普通程序员和优秀程序员有什么区别?

普通程序员和优秀程序员(以前端开发为例)之间的区别主要体现在以下几个方面:技术能力:解决问题的能力:代码质量和可维护性:团队协作和沟通能力:持续学习和创新精神:

王铁柱666的博客 361

纯干货:优秀程序员和普通程序员的差距就在这7个关键点

最近好几个读者问:如何成为牛逼的程序员?编码能力如何成长。回答完后,有些心得也给大家分享下。 其实程序员最关键的技能远不止编码能力,架构思维、底层知识的深度等等,同样很重要。 程序员这个行业,是一个区隔度特别高的行业。不少人短短几年就可以成长为高级工程师、资深架构师、首席架构师,而另外一部分人很可能工作10年还是初中级工程师。 程序员行业还有一个特点,优秀程序员的产出是普通程序员的好多倍,甚至是10倍!这是因为编程不是一门「线性科学」,而是一门「非线性科学」。 「线性科学」,比如跑步的速度就是,世界冠军的速

findyi的博客 3565

10倍数程序员真的存在吗?

如何做到10倍程序员?我和几个这样的程序员合作过。你很难区分他们和大嘴巴程序员,除非他们把上周写的上千行代码扔给你看。10 倍速程序员之所以能做到这一点,有很多因素。

纸上得来终觉浅,绝知此事要躬行 136

普通的程序员与优秀的程序员的一些差别:

1, 普通的程序员遇到问题喜欢张口就问别人,问之前没经过大脑想想。这是一个不好的习惯。其一,自己都没仔细想想,就算别人帮你把问题解决了,你自己不多久就会忘记。下次遇到,照样是不会。因为这个问题你没有经过大脑。其二,能够回答你问题的人,多半是有一定经验了。他们或许很会安排好自己的事情,管理好自己的时间。如果时常去打断他们,他们会觉得你很烦。 优秀的程序员多半会先到网上查找一下相关问题,看看网上有没

cui_angel的专栏 849

可以提升程序员 10 倍效率的三件事

几乎每个软件开发人员或程序员都见过其他人编写的代码,说明了“任何人都可以编码”。但你有没有遇到过所谓的神话般的“10倍效率的开发人员”?作为一个10倍效率的开发人员,在编写代码方面做得很少, 更多的是知道要写什么代码。 我们许多人开始编程的时候都有特定的目的。比如,我开始编程的时候,是让我能在睡觉和在学校的时候自动玩那个文字版的MUD游戏。我那时候是个写脚本的13岁小孩,甚至不知道什么是编...

weixin_30640769的博客 143

2、x10的程序员是如何思考的?

在上一篇中我们提到,程序员在工作中遇到的很多问题,大多不是程序问题,辛苦而低效的工作,多数是由偶然复杂度导致的。那这个由于偶然复杂度造成的差距会有多大呢?1975 年,弗雷德里克·布鲁克斯(Frederick Brooks)出版了软件行业的名著《人月神话》,成为10x程序员是很多程序员的追求。但工作产出并不只是由写代码的效率决定的,一些不恰当工作方法很大程度上影响着你的产出。作为一个程序员,该如何更高效地工作,怎样才能把时间和精力尽可能地放在处理本质复杂度的事情上,减少在偶然复杂度上的消耗。

清风慕竹 635
上一篇: C/C++基础语法复习(二):C++ 面向对象编程,你需要知道的点
下一篇: 初学者怎么样提高c/c++编程能力?
CodingPs
博客等级 码龄7年 182粉丝 253原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值