刻意练习:为什么我努力了很长时间水平却没有提升?

你好,我是郑晔!

上一讲我们说了学习要区分不同的内容,根据不同的内容安排不同的学习方式。从大多数程序员的工作内容上看,大部分所需的是技能,也就是说,程序员需要的更多的是练习。

那么是不是只要练习了,我们就一定能有提高呢?答案是不尽然。

我们还是从小李的故事开始。

小李已经工作五年了,他感觉自己的提高明显不像从前那么快了。前几年,每个项目他都能有所收获,这让他很快地从一个初出茅庐的新人成长为一个独当一面的成手。

但是,最近一两年,他做事情越来越驾轻就熟,但只有他自己清楚,他进步有限,因为在做的事情都是他熟悉的。他又想起了总是帮助自己的老赵。

小李:你遇到过瓶颈吗?我总觉得自己最近一两年没什么提高。
老赵:当然了,我也遇到过。你是不是觉得现在做的事都是在重复?
小李:对,前些年做这些事情,我会很开心,现在觉得有些无聊了。
老赵:之前这些东西你不会,你是在学习。现在你会了,你就觉得无聊了。
小李:嗯,是这样的。
老赵:小伙子,你是有上进心的。很多人到了这个程度,他会习惯,所以,水平就会停滞不前了。
小李:这就是有些人说的,一年的工作经验重复了十年。
老赵:没错,就是这样的。
小李:那我想突破,该怎么办呢?
老赵:你听说过刻意练习吗?

本质上说,我们无论做什么都是在练习,但练习与练习是不同的。大部分练习都是无意识的、自动的。一个人在经过最初的提高之后,通常就会陷入低水平重复,这样的练习无论做多少,都很难有真正的提高。

而与之相对应的就是,刻意练习。

刻意练习的特点

刻意练习,也是练习,但它不同于常规的练习方式,刻意练习是一种有目的且系统的练习方式。它有哪些特点呢?

刻意练习要有一个明确的目标。目标的重要性,我在这个专栏里已经强调无数次了。大部分人无法有效提高,根本原因是缺乏一个清晰的目标。

你可能会说,我日常做项目都有目标,但请明确一点,这是公司的目标,并不是你个人的目标,完成这个工作,并不能帮助你提升。

刻意练习需要在学习区练习。我在《40 | 我们应该如何保持竞争力?》讲过学习区,不清楚的同学可以回顾一下。

为什么大部分程序员在刚开始入行时提升很快,因为他们会的东西有限,大部分工作内容都是新东西,处于学习区。为什么几年之后就陷入瓶颈,因为一旦熟练掌握基础技能之后,他们就进入了舒适区,在舒适区反复练习,是不会有提高的。

刻意练习需要反馈。没有反馈,你不知道自己做的怎么样,提高也就无从谈起。反馈不是自以为是的标准,它可能是一个具体的测量,也来自别人的反馈。

想当年,我带过一帮毕业生,为了让他们练习快捷键,就让他们用秒表计时,看看多长时间完成一段代码。有了明确的反馈,大家的提高都很快,同样的一段代码,从最开始的 20 分钟写完,到最后 5 分钟写完,最快的同学甚至可以在 2 分半写完。

刻意练习需要保持专注。每个程序员都知道专注的价值,都有过时间飞速流过的心流体验,这是专注带给我们的价值。当我们进行某一项特定训练时,最好能够全神关注。

哪来的天才?

刻意练习原本是研究卓越表现从何而来。研究发现,一个人在某项技能上的精通程度,与他的练习方式息息相关,我们可以把刻意练习理解为顶尖人才为提升其专业技能所才采用的练习方式。

对刻意练习的研究,同时破解了一个“迷思”:你以为某些人是天赋异禀,实际上是他们进行了大量的刻意练习。与之相伴的一个说法是,一万小时定律。一个人要想在一个领域取得世界级的成就,需要进行一万个小时的练习,而这里练习并不是常规的练习,而是刻意练习。

现在我们知道了,“以大多数人努力程度之低,根本轮不到拼天赋”这句话是很道理的,因为大部分人都还没经过刻意练习,何谈天赋。

当然,并不是所有人的目标都是成为世界级的人才,所以,不见得每个人都需要一万个小时的刻意练习,但我们只要把刻意练习的理念引进到我们日常的工作学习中,也足以让我们在短时间内,有很大的提升。

最后,我们也要知道,刻意练习并非万能,它对于单一技能的训练更有价值,比如,体育项目、各种乐器等等。程序员有很多专业技能也是需要训练的,所以我们也可以采用刻意练习。

对刻意练习有了一个初步的理解之后,我们再回到小李的故事。

小李在初入职场时技能提高很快,因为他有一个明确的目标:生存下去,所以,他会尽快掌握那些他不熟悉的东西,这就是在学习区里刻意练习。上级交给的任务能否完成,是非常直观的反馈。所以这个阶段的技能提高是很快的。

一旦过了最初的阶段,大部分人都能够很好地应对自己的工作了。从个人技能上该如何继续提升,这是很多人都没有想过的,所以,自然而然地就陷入了瓶颈期。更有甚者,某些人是“一年的工作经验重复了十年”。

程序员的刻意练习

程序员如何进行刻意练习?如果你有一项正在学习的内容,你可以针对着这项内容设计相应的练习。

正如我们上一讲说的,计算机领域有很多东西属于技能,需要大量的练习。

比如,学了某个算法,我们就可以找一批算法题,进行有针对性的练习。现在有很多平台让我们完成这样的练习,比如,LeetCode。我们可以在一段时间内,连续地完成这些练习,让我们在短时间内快速地对这个知识点有一个完整的理解。

不过,并非所有内容都像算法那样有大量现成的问题等着我们。我们就不妨给自己设计一些练习题。我在上一讲就说过,学习编译原理就去实现一个编译器,这也是一种针对性的练习。我自己就在学习 DSL 之后,为了练习,编写了我的开源软件 Moco。

还有一些内容,需要的是我们理解现有的一些做法,比如,JVM 的实现。我们同样也可以给自己设计练习,比如,把自己的理解写成文章。我曾经因为一个项目的缘故,要了解 Lambda 的具体实现,我就把自己的理解写成一系列的文章发在自己的公众号上,算是自己学习的阶段性总结。

给自己设计练习也是有一定挑战的,因为自己学习的是新东西,往往缺乏对它的理解,很容易设计的练习让自己无法完成。比如,实现一个编译器就是一个很劝退的想法,但实现一个表达式求值器就要简单很多。

现在有了 AI,我们也完全可以让 AI 提供一些能够逐步提升难度的练习,这样,更有利于我们一步一步地去完成,这也是任务分解思想的体现。

其实,对大多数人来说,最难的并不是练习过程本身,而是缺乏目标。很多人都有一颗要提高的心,但实际情况是,光靠自己,你很难再有更大的提升:虽然在做的是不同的项目,但本质上,在做的事情是一样的;虽然努力地在学着各种知识,但实际上,却很难在真实项目中用到。在这种情况下,单单依靠自己是难以破局的,我们需要的是一个“教练”。

在刻意练习里,最好有一个“教练”,相比于你,他更知道这个高水平的特征是什么样的,可以根据你的情况给你一些高质量反馈。

如果我们想在职业生涯中不断提升,最好也能有一个“教练”,他能够给我们引导,让我们找到自己突破的方向。当然,我们不太可能像运动员一样找到一个时刻在身边的教练,但我们可以找一个定期给于我们指导的人,这个角色更类似于我们传统中的“师父”。

下一讲,我们就来聊聊如何做“师父”的好弟子。

总结时刻

这一讲我们讲的是刻意练习,这是一种有目的且系统的练习方式,可以让我们摆脱日常盲目的练习,有效地帮助我们进行提升。刻意练习有一些特点:要有明确的目标,要在学习区学习,要有反馈,还有保持专注。

对程序员来说,我们可以在日常学习工作中进行刻意练习,其关键就是为自己找到练习。有现成的练习是最好,如果没有,就自己设计一些练习,无论是编写一个软件,还是写一些文章,做一些输出,都可以。

现在,有了 AI 的加持,我们可以让 AI 帮我们设计一些逐步提升的小练习,这样,可以更好地降低练习的门槛。

在自我提升的道路上,我们最好还是要找到“教练”,让他帮我们破开思维迷雾,帮自己能够窥见更高的水准。

如果今天的内容你只能记住一件事,那请记住,刻意练习,才能真正地提升。

思考题

我在这一讲里给你介绍了刻意练习,其实,每个人应该有过“刻意”地进行练习的过程。你可以回想一下自己的职业生涯中,做过哪些练习让你在短时间内有过很大的提升。欢迎在评论区留言!

精选留言

  • Geek_wip5z8

    2025-05-04 22:23:01

    其实很多人都误解了刻意练习,就拿练习英语听力来说,听 100 个英文视频,效果是不如重复听 1 个英文视频100 次,直到全部听懂来的效果好。区别在哪?前者是欺骗大脑,以为自己学会了,后者是真学会了。
  • Geoffrey

    2025-04-10 11:05:39

    研究者根据人工智能的神经网络学习试验,得出这个比例的数字是:15.87%!也就是说,从舒适区向学习区的前进中,保持 15.87% 的“新鲜率” (85% 原则),会让你的学习速度最快。这说明,学习中要温故而知新,而且要进行刻意练习。《刻意练习》一书中提到的方式是针对边缘知识的练习,而不是像题海战术一样的全部练习。联系上 85% 原则,就是说刻意练习中,新知识新技能要占到 15.87% 最合适。
    作者回复

    多谢你的分享!

    2025-04-14 15:30:09

  • enjoylearning

    2025-04-04 21:32:10

    技能类的打字、word排版