当前位置: 首页 > news >正文

如何从错误中成长?

在上一篇文章“技术人的犯错成本”里,我和你聊了技术人可能会犯的各式各样的错误,也举了很多例子,说明了技术人犯错的成本。在竞争激烈的互联网时代,试错当然是好事,但了解错误成本,避免不应该犯的错误,最大可能地从错误中成长,才是我们应有的态度。

我之前看过一篇文章,其中把错误分成四类。

第一类:伸展错误(The stretch mistakes)

伸展错误是:当你尝试去做能力之外挑战的时候,因为自身能力或其他条件的束缚,做得不够好而犯的错。这种错误通常是因为我们主动尝试导致的,再小心也难以避免。不过,在此过程中,你获得学习的机会成本很高,一旦经历过一次,就可能有长足的进步。

比如在创业公司,大家有个创新性的想法需要去验证和实现,这时候谁都没经验,也没有前人的产品可以借鉴,也没有很懂的人给你指导,那怎么办?只能摸索前行,遇到问题,解决问题,犯错,然后纠正错误,所谓逢山开道,遇水搭桥,就是这个道理。当你抵达彼岸的时候,你会发现自己已经升级了,进入了另一个境界。

第二类:无知错误(The aha-moment mistakes)

无知错误是指:当你发现自己为什么错了的时候,你会发出“噢,原来是这样”的感慨。

这种错误一般是因为你不知道或忘记考虑某些特殊情况导致的错误,或者是你做了错误的假设。

初级程序员很容易犯这样的错误,比如忘记处理异常,没有考虑某些数值的边界值,没有进行安全校验等等,还有人因为没有仔细阅读产品文档,不知道产品设计已经改变了,也没有进行对应的调整。出现这种错误之前,你主观上根本没有意识到犯错的风险,还以为自己一直是对的,以至于出错后会有那样的反应。

这种错误一般不会反复出现,但要尽可能避免在不同类型的事情上犯同类型的错误。

第三类:粗心错误(The sloppy mistakes)

直译过来就是由于粗心大意导致的错误,很容易理解。这种错误与“无知错误”不同,是你明明知道怎么回事,但是因为不小心或者忘记了导致的错误。如果你是个粗心大意的人并且没有有意识地纠正自己,这种错误可能一犯再犯。

第四类:高风险错误(The high-stakes mistakes)

主动去做事情,但风险很高,是否会犯错不受自己的控制。比如你面临一个重要的选择,但在结果出来之前,你之前掌握的所有信息都无法告诉你哪个选择是绝对正确的,你只能去做自己认为是大概率的选择。

这种错误与第一类不同,经历过一次,下次遇到高风险的事件,依然可能犯错误,并且不知道会犯什么样的错。

以上我们介绍了四种错误类型,我在文章中放了一张图片,如图所示:第一类和第四类更具意识性,也就是主动去做事情,做事之前你就知道有可能出问题;第二类和第三类则属于下意识的错误,更加不可控。

从另一个角度来看,第一类和第二类错误都会让你学习到更多有价值的、可重用的信息,再有类似情况基本上不会犯重复错误;而第三类和第四类每次犯错后并不能学到太多可以复用的信息,以后有类似情况很可能再犯同样的错误。

了解了这些错误和错误分类,我们就可以有计划有意识地去应对这些错误,尽可能不犯那些对我们成长没有意义的错。当我们面临一个犯错和成长并存的机会时,我们也要知道如何去学习并避免犯同样的错误。

有哪些措施或者方法可以系统性的让我们避免那些无效错误,并从错误中成长呢?

1. 为了避免伸展错误,尽可能地提供一些培训机制。比如对新上任经理的培训,组织一些特定领域的学习班,系统地帮助大家积累岗位可能需要的技能和信息。让一个人担任某个全新的职务时,考虑导师机制,工作中有人结对给予实时指导,等等。

2. 为了避免无知错误,要做好信息的透明和共享。比如完善的文档和快捷的查询机制,任何技术或产品讨论以及达成的共识,要尽可能用邮件抄送到所有相关的人。大的改动可以举行一些会议确保所有人都得到最新的信息。一些常犯的错误或者容易被漏掉的信息可以整理成 Checklist 或手册等形式,让大家更方便地获取到有效信息。

3. 为了避免粗心错误,设置一定的复盘机制。如果是粗心大意造成的错误,要再三总结,反复问为什么,帮助加深记忆。另外还可以通过一些流程来确保低级的错误不会发生,比如细化开发流程,设置检查点,不断迭代和反馈,慢慢形成全面考虑问题的习惯。在不同的事情上,多给自己做一些 Checklist,做事的过程中对照进行,确保不会因为一时大意而有所疏漏。

4. 为了避免高风险错误,所有的决定尽可能都有一个备用方案。也就是除了 Plan A,还要有 Plan B。这样当事情没有按照预期去发展的时候,我们为错误付出的代价也会更少。

总结一下,今天我和你分享了“技术人如何从错误中成长”的话题,首先,我谈到了工作中常见的四种错误类型:伸展错误、无知错误、粗心错误以及高风险错误。前两种错误可以帮助我们迭代成长,后两种错误代价较高,我们要尽量避免一犯再犯。

其次,我讲到了如何去避免以上的错误,针对四种错误类型,要分别采取不同的方式对待。因地制宜、对症下药,让错误成为丰富的经验,为你的成长提供充足的养分。

你在工作中犯过错么,在这个过程中你又获得了什么的成长。欢迎在下面留言,我们一起成长,感谢你的收听,我们下期再见。

文章来源:极客时间《朱赟的技术管理课》

相关文章:

如何从错误中成长?

在上一篇文章“技术人的犯错成本”里,我和你聊了技术人可能会犯的各式各样的错误,也举了很多例子,说明了技术人犯错的成本。在竞争激烈的互联网时代,试错当然是好事,但了解错误成本,避免不应该犯的错误&…...

谈谈一个程序员的职场心得(真有用)

谈谈一个程序员的职场心得 我会分为三个部分:软件开发,职场协作和认知成长,每个部分精简成 7 条心得。 软件开发 若无必要,勿增实体。 这是奥卡姆剃刀的定义,所谓剃刀就是法则,是奥卡姆这个英国学者提出来…...

Pytest:一个卓有成效的测试工具

大家都知道,目前最流行的Python单元测试框架有三种,分别是unittest, nose和pytest。其中unittest是Python自带的测试框架,但问题是比较老了,赶不上时代发展了(哈哈哈);nose2定位是带插件的unitt…...

Compose 动画 (三) : AnimatedVisibility 从入门到深入

1. AnimatedVisibility 是什么 AnimatedVisibility可以实现Compose组件的显示和隐藏,并且可以指定显示/隐藏时候的动画效果。(EnterTransition/ExitTransition) 和 animateXxxAsState、animateContentSize、Crossfade、AnimatedContent 这几个API一起,都…...

网络基础(二)

目录 应用层 再谈 "协议" 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢? 为什么要转换呢? 如果我们将struct message里面…...

Java线程知识点总结

文章目录Java 线程基础线程简介什么是进程什么是线程进程和线程的区别创建线程ThreadRunnableCallable、Future、FutureTaskCallableFutureFutureTaskCallable Future FutureTask 示例线程基本用法线程休眠线程礼让终止线程守护线程线程通信wait/notify/notifyAlljoin管道线程…...

数据结构——第三章 栈与队列(4)

队列的应用1.基于队列的医院挂号模拟系统2.队列的运用1.基于队列的医院挂号模拟系统 代码实现分享 2.队列的运用 问题描述:某运动会设立N个比赛项目,每个运动成员可以参加1~3个项目。试问如何安排比赛日程,既可以使同一运动员参加的项目不…...

华为机试HJ73-计算日期到天数转换

HJ73 计算日期到天数转换 题目描述: 描述 根据输入的日期,计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶:时间复杂度:O(n) ,空间复杂度:O(1) 输入描述: 输入一行,每行…...

【阅读笔记】你不知道的JavaScript--this与对象2

目录this默认绑定隐式绑定隐式丢失显示绑定API 调用上下文new 绑定this 绑定优先级其余绑定例外对象字面量与对象属性描述符迭代器遍历this 默认绑定 默认绑定适配 独立函数调用 默认绑定 this 指向全局对象; 故直接调用函数,该函数内部的 this 即指向全…...

单板TVS接地不当造成辐射骚扰超标问题分析-EMC

【摘要】 某产品EMC辐射骚扰测试超标,通过近远场扫描配合定位分析,逐步找出骚扰源、传播路径,最终通过修改 PCB 走线切断传播路径解决此问题。 1 故障现象 某产品在进行 EMC 研发摸底测试时发现,整机辐射骚扰垂直方向测试超标&a…...

用Python Flask为女朋友做一个简单的网站(附可运行的源码)

🌟所属专栏:献给榕榕🐔作者简介:rchjr——五带信管菜只因一枚😮前言:该专栏系为女友准备的,里面会不定时发一些讨好她的技术作品,感兴趣的小伙伴可以关注一下~👉文章简介…...

vue3+rust个人博客建站日记5-所有界面

没有数据的前端,是没有灵魂的。明明标题是vue3 rust ,但日记撰写至今,似乎只有第一篇提及了Rust,这可不行。是时候一股作气,完成大部分页面绘制工作了! 最后再说一次,时间要加速了。 ——普奇神…...

青少年软件编程C++一级真题(202212)

1、输入一个整数x&#xff0c;输出这个整数加1后的值&#xff0c;即x1的值。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 一个整数x&#xff08;0 ≤ x ≤ 1000&#xff09;。 输出 按题目要求输出一个整数。 样例输入 9样例输出 10 #include<iost…...

【Spring】AOP底层原理(动态代理)-》 AOP概念及术语 -》 AOP实现

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ AOP - 面向切面编程一、简述AOP二、AOP底层原理…...

Java8 新特性 之 lambda 表达 和 函数式接口

—— lambda 表达式 概念 lambda 表达式是一个匿名函数&#xff0c;可以把 lambda 表达式理解为是一段可以传递的代码。更简洁、更灵活&#xff0c;使 Java 的语言表达能力得到了提升lambda 表达式是作为接口的实现类的对象&#xff08;万事万物皆对象&#xff09; 使用语法…...

Netty服务端和客户端开发实例

一、Netty服务端开发在开始使用 Netty 开发 TimeServer 之前&#xff0c;先回顾一下使用 NIO 进行服务端开发的步骤。(1)创建ServerSocketChannel&#xff0c;配置它为非阻塞模式;(2)绑定监听&#xff0c;配置TCP 参数&#xff0c;例如 backlog 大小;(3)创建一个独立的I/O线程&…...

linux基本指令和权限

目录 一.shell命令以及运行原理 二.Linux常用指令 1. ls 指令 2. pwd命令 3.cd指令 4. touch指令 5.mkdir指令&#xff08;重要&#xff09; 6.rmdir指令 && rm 指令&#xff08;重要&#xff09; 7.man指令&#xff08;重要&#xff09; 8.cp指令&#xff08;重要&…...

滚蛋吧,正则表达式!

大家好&#xff0c;我是良许。 不知道大家有没有被正则表达式支配过的恐惧&#xff1f;看着一行火星文一样的表达式&#xff0c;虽然每一个字符都认识&#xff0c;但放在一起直接就让人蒙圈了~ 你是不是也有这样的操作&#xff0c;比如你需要使用「电子邮箱正则表达式」&…...

序列号和反序列化--java--Serializable接口--json序列化普通使用

序列化和反序列化序列化和反序列化作用为什么需要用途Serializable使用serialVersionUID不设置的后果什么时候修改Externalizable序列化的顺序json序列化序列化和反序列化 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化。 反序列化:把字节序列恢复为对象的过…...

Java异步任务编排

多线程创建的五种方式&#xff1a; 继承Thread类实现runnable接口。实现Callable接口 FutureTask(可以拿到返回结果&#xff0c;阻塞式等待。)线程池创建。 ExcutorService service Excutors.newFixedThreadPool(10); service.excute(new Runnable01());另外一种创建线程池…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...