学算法认准 labuladong
后台回复课程查看精品课
点击卡片可搜索文章👇
最近有一位老读者问我,为什么当时我在大学期间就开始学技术,到现在还在坚持刷题学习?
他说自己大学时就是混的,看我的公众号突击算法找到了不错的工作,但开心了没多久,生活又变得有些浑浑噩噩,没什么动力给自己充电(主要是短期看不到回报),自己知道这样是虚度时光,但不知道哪里出了问题,想让我分享一下经验。
首先想纠正一个误区,很多读者可能觉得我特别牛,那只是因为距离感。其实我和大家没啥区别,没有什么目标明确、特别自律这种光环。我坚持学习,只是因为我能够从学习中体会乐趣,所以我乐于去学习罢了。
举例来说,所有正常人没事儿的时候肯定想躺平,但如果一个人没有躺平而是出门锻炼,那么自律只是我们观察到的表象,根本原因一定是他从锻炼中获得的快乐大于躺平的快乐。他去锻炼时的状态一定是很爽很开心的,即便疲惫也甘之如饴,而不是我们以为的咬牙坚持,好像克服了巨大的阻碍似的。
关于这里面的原理,给大家推荐一本叫《心流:最优体验心理学》的著作,这本书有助于我们了解自己的内心并获得快乐,从而获得内在的动力坚持做一件事。本文将结合这本书中的一些理论和我的经验,聊聊如何从看似枯燥无聊的事情(比如学习)中寻找快乐,也算是我对这本书的书评吧。
什么是「心流」
「心流」是指一种忘我的,全神贯注的精神状态。
我们每个人肯定都有过心流体验,比如我随便举两个例子,估计大部分人都体验过:
1、中学时期做一道数学作业题,虽然题目有点困难,但大致方向是有的,内心特别渴望把它解出来,所以丝毫没有诸如「太难了不想做了」「别的作业还没写怎么办」这些焦躁的感受,时间似乎也静止了,你历经波折最终把答案算出来的时候满足感爆棚,好像感觉清华北大在向自己招手。
2、写代码时苦苦调试,借助计算机基础知识和搜索引擎的帮助过五关斩六将,克服了无数诡异的报错,最后代码终于无 bug 运行得到正确结果的那一刻,那种满足感,恨不得在镜子前面磕几个响头。
当然,每个人能够全情投入的事情不同,获得心流体验的方式也不同。比如有的人喜欢运动,有人喜欢读书,有人喜欢搞艺术。之所以喜欢,肯定是因为做这些事时很投入并感到愉悦,这就是所谓的心流体验,用通俗的话说就是感觉做事儿的时候「特别有状态」。
无疑,心流体验是快乐的,但问题是大多数时候我们都没有处在心流当中,如果有一种科学的方法能够给我无限创造心流,那岂不是干什么都特别起劲、特别快乐了吗?
这种方法是有的,不过在介绍方法之前,先要分析一下我们所感受到的「快乐」是如何产生的,《心流》这本书给出的答案是:
快乐源自内心的秩序。
具体来说,快乐不是来自吃喝玩乐这类看似很轻松的事情,因为这些事情不需要集中注意力,并没有给内心产生秩序;恰恰相反,快乐来自学习、挑战等需要我们付出脑力、体力并集中注意力完成的事情,因为专注使人内心的秩序提升,这种对自我的完全掌控感才是快乐的源泉。
我非常认同这个答案,因为我就特别有体会。回想一下,我觉得写代码,尤其是解决技术难题时就很容易进入心流,那时候人是十分专注的,头脑中的想法井然有序,最重要的是,即使在电脑前面连续工作几个小时都不感觉累,甚至吃饭睡觉都可以免了,这可能就叫做废寝忘食吧。
如果天天都能废寝忘食地做事,不敢说一定能做出什么成绩,但最起码没工夫自我怀疑和患得患失了,岂不美哉?不过,在试图创造心流体验之前,不妨先分析一下为什么我们大部分时候无法进入心流状态。
「心流」为何会消失
心流体验源自内心的秩序感,所以作者借鉴热力学中「熵」的概念,创造了「精神熵」这个名词来描述内心的混乱程度:
每当资讯对意识的目标构成威胁,就会发生内在失序的现象,也可称之为精神熵(psychic entropy),它会导致自我解体,使效率大打折扣。这种状况若持续过久,对自我将造成严重的损害,使自我再也不能集中注意力实现任何目标。
当精神熵增加时,内心的秩序就会被破坏,直接的现象就是产生诸如焦虑、痛苦、怀疑这样的负面情绪,导致无法集中注意力,心不在焉,效率低下,而且这种状态可能持续较长时间都无法进入心流的状态。
大家应该都有类似的体会,比如本来挺开心的做手头的事情,但突然受到打扰,比如听到一些让人不开心的事,即便事情很小,也会瞬间心情低落,本来想做的事情也不想做了,甚至好几天都萎靡不振。这就是精神熵增加的一个例子,侧面说明内心的秩序其实很脆弱,而且一旦破坏很难恢复。
关于精神熵有一个有趣的现象:动物好像就不存在什么精神熵,很容易进入心流。比如说一只狗,它吃饱了就去晒太阳,一晒太阳就进入心流了,至于下一顿,等饿了再说。狗绝不会跟人类一样担心未来的事情,提前把未来几个月甚至几年的食物都储备好。
对于这个现象,很多相关的书籍都有探讨,目前主要的说法是:人的神经系统相对其他动物来说更加强大,能够收集和处理更多的信息,甚至能够想象出现实中不存在的东西。
能够想象并相信不存在的事物使得人类能够形成共识,从而能够大规模协作,在自然选择的进程中无疑是大杀器。但在信息爆炸的今天,这种能力的负面影响就凸显出来了:互联网上铺天盖地的信息让大脑应接不暇,内心的秩序很容易被外部资讯破坏产生负面情绪,增加精神熵,无法进入心流状态。
所以我忘了哪本书里说过一句精辟的话:现代人之所以不容易幸福,是因为科技进步飞速,人却还只拥有一个原始的大脑。
不过这不能怪自然选择,毕竟自然选择只负责物种的延续,并不 care 个体的快乐幸福,我们想要追求个体的快乐,还得自己想办法通过科学的方法实现。
所以作者给出的解法是,面对太多的,包括负面的信息,你必须找到一项能长久地凝聚自己注意力的活动。
仔细回想一下,快乐其实不是某个具体化的东西,而是忘我地做一件事情的附加状态。我们通常认为,自己拥有了 XXX 就幸福快乐了,其实不是的,欲望被满足后的快感很快就会退去,而心流体验中获得的是一种成长的满足感,二者本质上是不一样的。
一种理想的状态应该是自得其乐,而寻找这个事情是每个人自己需要去做的功课。一旦找到这种事情,就会有我们常说的内驱力,不能说有内驱力的人一定能取得成功,但最起码一个有内驱力的人的内心是宁静而安详的,不存在自我怀疑的阻力,能够不断通过挑战自我获得快乐。就像古语所说:知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。
那么如何去找到能够让自己进入心流的事情呢?这要从心流的构成要素说起。
「心流」的构成要素
我提炼总结一下书中的内容,能够产生心流的事情主要有以下几个特点:
1、有明确的目标,及时的正反馈。
2、能够全神贯注,深度投入其中,不受打扰。
3、需要复杂的技能,难度高于自己的能力水平,但又不是难的离谱。
看到这几点,我想应该不用举例了,只要把自己经历过的心流体验拿出来对比思考一下就能验证,不过我想着重强调一下第三点中的「需要复杂的技能」,换句话说,想获得心流体验是有一定的门槛的。
我用玩游戏来举例,首先,到底什么是游戏?只有电子游戏才算游戏吗?演奏是不是游戏?绘画是不是游戏?下棋是不是游戏?做题是不是游戏?
我觉得它们都可以视为游戏,但电子游戏中很难体会到心流,而其他的游戏虽然可以带来心流体验,但需要参与者具备一定的专业基础,才有能力体会到其中的乐趣。
之所以电子游戏很难带来心流体验,是因为大部分电子游戏的设计目的就是操作尽可能简单,而且要让人感到强烈的感官刺激,这与心流产生所需的复杂技能相违背。
我们玩电子游戏也会有快感,但和绞尽脑汁解决一个技术难题的心流状态带来的快感是不一样的。最明显的区别就是,解决一道难题之后有很强的满足感,而打几小时游戏后会有负罪感,感觉这段时间又浪费了,而且很可能较长一段时间无法进入专注的状态。
我不是说游戏就不能带来心流,如果抱着竞技的心态打游戏,那么操作的复杂度就会大幅上升,我觉得这种情况下玩游戏和解决难题在本质上并没有差别。但问题就是我们大多数人玩游戏并不是抱着竞技的心态,而是抱着休闲娱乐的心态来玩,那么我们的注意力自然就处在低层次的感官刺激和肌肉记忆,并没有高层次的复杂技能的磨练。
适度的感官享受当然有益,但过度的感官刺激会让大脑上瘾:理智告诉大脑应该停止了,但大脑好像处在一种麻木的惯性下,只是机械化地一把一把打游戏,进而产生负罪感,焦躁,后悔的情绪,增加精神熵,瓦解内心的秩序,导致很长一段时间都无法恢复专注的状态。
那有人会问,只有复杂技能才能产生心流,但我好像不会什么复杂技能怎么办?
首先,我的读者应该都是搞技术的,其实刷题、写代码就是复杂技能。不过就算不会写代码,学习行为本身就是能够产生心流的复杂技能,接下来说说我如何在学习中创造心流。
在学习时产生「心流」
本文主要是讲如何从学习中找到快乐,刚才为什么说了这么多背景铺垫呢?因为很多人容易陷入这个误区:
习惯性认为首先需要自控力才能坚持学习,然后才能体会学习带来的充实感,从而把不能坚持学习进步、难以集中注意力的问题归罪给自己没有自控力等原因,进而感到自责甚至自暴自弃。
基于《心流》这本书的理论和我个人的体会,我认为事实恰恰相反:
所谓的自律、自控力并不是一个先决条件,而是进入心流状态后的自然产物;所以关键不在如何做到自律,而是找到一些事情能够让自己进入心流状态。
而学习是产生心流的很好途径,因为学习行为本身就是一项复杂技能,容易进入专注状态,且容易得到阶段性的正反馈,非常符合心流的产生条件。
所以我们只要合理设计学习的过程,就很容易学习中产生心流体验,感受那种全神贯注、废寝忘食之后成长的快乐。
我在学习中寻找心流的核心是:带着创造的目的去学习。这个说法类似于「有目的地去学习」,但是很多时候没有谁会给你规定一个目的,这种情况下应该自己给自己想一个目的,而我给自己想的目的就是创造。
比方说经常有读者问我为什么持续输出算法相关的文章,而且还能把很多看似无关的题目抽象总结出一套实用的框架,这其实就是学习并创造的例子,我在试图从创造教程的过程中寻找心流:
各式各样的算法题在我脑海里游走,我需要观察它们的联系,从无序的算法题中抽象提炼出一些简单通用的规则描述它们,并经过他们的检验,这本身就是熵减的过程,能够带给我很大的快乐。
说句题外话,我平时也喜欢看物理学相关的科普读物,熟悉物理学史的读者应该知道,物理理论的发展就是不断发现理论与现象之间的冲突,然后修正理论,想办法统一理论和现象。
比如现代物理学,相对论和量子力学分别在宏观和微观领域经受住了考验,但二者还不能很好的结合,所以物理学家的一个「执念」就是找到一个「大一统理论」,能够同时完美解释宏观和微观的所有现象。
我的水平当然只限于读科普读物,不过这个宇宙中的一切竟然可以被人类的几个简单的方程式束缚住,想来有一种汗毛倒竖的感觉。
所以我也有个类似的「执念」:是否可以找到一些通用简单的大一统框架,能够框住所有(最起码是刷题平台上比较常规的)算法题?
在这个执念的推动下,我在 学习数据结构的框架思维 总结说数据结构的本质是增删查改,底层就是数组和链表,在 算法的本质 中总结说计算机算法的本质就是穷举,然后基于以上结论给出了 动态规划、回溯算法、BFS 算法、图论算法 这些高级算法的通用框架,并用 二叉树纲领篇 对他们进行统一。同时,我也在不断刷题并接收读者的反馈以便修正和完善这些框架,这个过程就能给我产生巨大的满足感。
以上举例只是针对我个人,也许大部分人并不喜欢写文字,不过谁说非要写文字才算创造,我觉得从无到有都算创造。
如果不把自己当成个搬砖的码农,其实程序员和作家、画家并无不同,本质上都是无中生有,从思想中孕育出奇思妙想,然后亲手实现它,这就是创造的过程,要说代码改变世界确实有些自恋,但显然写代码的过程很容易进入心流,获得快乐和满足。
老读者应该知道,我以前的算法文章使用的编程语言比较随意(当然考虑到大家的理解成本,现在基本统一用 Java 写),而且我制作的各个平台的刷题插件,使用的都是不同编程语言。所以就经常有读者问,怎么感觉所有编程语言你都会?那我就再通过编程语言的学习来举一例。
学习一门新的编程语言,不要上来就拿一本工具书去啃,因为编程语言的基本关键字、控制流都是大同小异的,难点在于语言在的实际场景中如何解决问题,而这个难点只能在实践中学习。
所以比较好的方法是先想好准备用这个语言做点什么东西,然后基于一些简单的 demo 进行改造,同时结合书中的基础知识去理解,最终把我们设想的东西做出来。
这样不仅避免了死记硬背,学习效率更高,而且是一个创造的过程,每一点进步都是正反馈,整个过程都会处在心流的状态。
就说学习 JavaScript 这门语言,基本语法一看就会,但实际用起来可能得花点心思。比如我作为一个搞后端的,一开始确实比较难理解异步编程模型,甚至搞不懂Promise
到底是个啥,所以偶尔写出「量子代码」:这段代码可能执行,也可能不会执行;我也说不准它是否会执行,会在什么时候执行。
对于这个问题,我相信死磕语言本身是没有性价比的,只有在实践的过程中才能真正理解语言的用法,所以我就一直在思考能用 JavaScript 做点啥东西出来,于是就有了制作刷题插件的想法。
我开始做这个小产品时很快就进入了心流状态,熬夜研究了好几天才把插件做出来,不过丝毫不感觉疲惫,反而还很兴奋,最关键的是基本掌握了一门新的编程语言,并且插件给我的读者带来很大的便利。
好了,本文已经够长了,聊了很多我个人的经验总结,不见适合每个人,但对大家多少有些参考价值,这里总结下:
1、快乐源自内心的秩序,内心秩序井然,全神贯注的状态叫做「心流」。然而内心的秩序很容易被外界信息破坏,内在失序会导致注意力下降以及各种负面情绪。解法是找到一项能够长久凝聚注意力的活动来做,这个活动就可以是学习。
2、学习行为符合产生心流的条件,是进入心流的绝佳途径。不能坚持学习的原因在于学习方法不合理,我的经验是带着创造的目的去学习,在创造的过程中进入心流状态,体验专注和成长的快乐。
我们有时候会羡慕小孩子的专注,不过那是因为他们的思维很简单,而建立在天真无邪基础上的秩序对目前的我们来说已经不复存在了,唯有在复杂技能的磨练中创造心流体验,才能帮助我们对抗外界的混沌,重获内心的和谐。
最后,祝愿大家能够终生学习,走上构建内心秩序的旅途。
————————————
后台回复「目录」可查看精选文章目录,回复「PDF」可下载最新的刷题三件套。更多高质量课程请扫码查看我的知识店铺: