今天来给大家讲一个在思维上的一个方式,就叫“死磕”。那这两个字为什么我印象会这么深呢?是因为来源于罗振宇的视频。我相信很多朋友应该知道,在早期的时候,罗辑思维栏目是出了很多视频的,主要是讲解历史书为主,分析和剖析书里面的观点,并给出了罗振宇自己的一些思考和观点,非常有意思。

论「死磕」的重要性_代理模式

那么罗振宇也就是罗胖,他选择的书都是比较冷门的但是观点独到的这种书,毕竟他是卖书的嘛,所以也会选择一些比较奇葩的观点,或者说具有雷人的观点的书。这些书有一个共性,就是书里的观点会与众不同,这些书的作者往往都会去细究某一些和我们所知道的事实里面的不同寻常的部分。比如说就谈到了李鸿章,谈到了曾国藩,也谈到了很多的一些历史上面的一些人物。他会透过这些人物里面表面上看起来不合理的一些现象,分析里面的本质原因。

我推荐大家去看看他的视频,出的还是比较多的,但是最近一期估计也在四五年前了。他给出一个核心的一个读书的方式,就是认为自己去死磕真相和逻辑。那具体是怎么操作的呢?那就是用一个成语可以解释,“刨丁解牛”。通过仔细的去分析这些看起来不同寻常的现象,探究背后的本质原因到底是什么?同时引经据典,参考各种各样的信息史料来分析其本质原因,最终的目的就是给出一个合理化的解释。

所以我就对“死磕”两个字的概念印象特别深,其实死磕不仅仅是用在研究历史上面,我们在生活的很多地方都应该有这个死磕的精神。

那么“死磕”背后的反义词到底是什么呢?我认为是浮躁,现在社会信息爆炸了,我们无时无刻都在接收海量的信息,新闻推送、各种媒体、各种小道八卦等等,这个时代我们社会发展的步骤也特别的快,日新月异。我们很难得像原来的手艺人一样,一辈子只编一个箩筐,一辈子只专注于雕刻一个印章。现在社会我们什么都想做,我们恨不得21天精通一门编程语言,4天精通视频编辑,3天上手ChatGBT。

论「死磕」的重要性_后端_02

所有的一切,整个社会教给我们的是快,而且我们认为快则横扫一切。所以很多人的现在的思维方式和工作方式就如同周星驰《功夫》电影里面说的一句话一样,天下武功“无坚不破,唯快不破”。所以快使得我们很多人都开始浮躁了起来,我们在研究东西的时候,我们在工作的时候,我们在思考的时候没有那种沉下来的心境。大部分我们都是拿来急用,不加思索,囫囵吞枣。

结果可想而知,我们研究的和做出来的东西都非常的表面和浅显。我们对事物的观察,对世界的认知力也显得只是表面而已。经不起时间的推敲,经不起别人的推敲,经不起反面的观点。简单来说,我们现在在浮躁的情况下,我们研究出来的观点,我们研究出来的理论,它是没办法立住的。看起来好像我们引用了大部分互联网上面的一些背景知识,看起来好像很扎实,实际上我们仔细研究我们现在做的事情,我们现在做的项目可能都是镂空的。就比如最近的日本排放核污染水,导致中国大量民众去抢盐一样,先不管科学不科学,只要有人抢了,大家就一窝蜂而上,最终结果就是一地鸡毛。

所以为什么我觉得「死磕」特别重要?不求甚解是做不出来好学问、好产品的。

死磕是一种精神,也是一种态度和方式。我们在做项目的时候就一定要死磕,为什么要做这个项目?这个项目到底该怎么做?用什么样的方案里面碰到的技术点我们能用,但我们是否懂得其本质?《函数式编程》的作者说过一句话,说得非常好,我们如果运用一个理论,我们一定要懂得理论背后更深的一个层次。这句话的意思是,当我们使用到了别人的一个工具,别人的一个方式,我们必须还懂得这个工具和方式背后的原理。

在技术这方面更是这样了。比如我们在使用一个多线程框架的时候,我们一定要明白多线程本身的原理到底是怎么样的,我们才能够用好这个多线程框架。比如我们在启动一个RPC远程服务的时候,我们一定要知道本质上的原理到底是什么?我们在使用各种开源中间件的时候,我们一定要明白这个中间件背后应对的原则和机理到底是什么?至少我们要明白这些中间件的特性是什么,有什么坑,适用什么场景,不适用什么场景。

我们拿来可用的东西真的太多了,现在不管是各行各业,我们都有大量的工具和现成的理论,我们在软件系统里面也是一样,基本上我们所依赖的底层的东西,包括一些上层的应用框架都被别人给封装好了,我们只要拿来即用,我们只要写上里面的业务逻辑就可以了。所有人都教我们怎么样开箱即用,我们也能够快速地支持业务,但是仔细研究下来,我们会发现我们对一切的一切懂得非常少,我们只知道简单的组装,我们只知道把业务逻辑翻译成一门语言或者几段代码。

这带来的问题很多,我们缺少的东西太多了,我们缺少了对这门语言本质上的了解,对这门框架本质上的了解,我们只是机械地去搬运,而不知道其本质的原理是什么,典型的“知其然而不知其所以然”。

比如我以前在淘宝工作台的时候,需要提供一些API给其他团队,我只要在框架的模块里面把业务逻辑写上,比如说接受用户的参数输入,然后查询数据库,更新数据库,再返回结果就可以了,这个工作看起来好像很简单,但是它的结果就是导致了我变成了一个CRUD的boy。只沉浸于这些基础的工作,根本经不住深层次的推敲。我知道了很多设计模式,比如说21种经典的设计模式,但是实际上在业务中使用的时候,根本也用不上这么多模式,那怎么样才能够了解得更加深入了?

再举一个简单的例子,我们在大部分的工程里面都会使用一些数据库的框架,比如MyBatis。这些数据库的框架很神奇,你只要按照它的配置写上相关的代码和相关的配置文件,你就能够在业务逻辑里面调用这些数据库的表数据。就算有不懂的地方,只要拷贝一下其他同事写的XML代码,或者实在不行在网上稍微搜搜,就有样板的案例,解决起来轻松简单。

论「死磕」的重要性_RPC_03

但是我从来就没有深入研究过,为什么有人能够设计出这么一个框架,这个框架里面核心的机理是什么?用到了什么原理和技术?这些技术有哪些可以参考和复用能提升我自己的底层技术能力?

于是我就买了这本书,进入了所谓的“死磕”过程,也就是我要一行一行的代码,死磕出这一套体系到底是怎么设计的?这本书我看到一半的时候恍然大悟,好像打开了天灵盖,开了天眼一样。我突然发现真正死磕下去,我能够发现出更多更有意思的底层的东西。对于很多原来所听过的理论突然有恍然大悟的感觉,真正找到了最合适的技术并使用到了最合适的场景。

举一个简单的例子,以前我自认为编程语言里面的代理模式到底是做什么用的?我既然有了这个对象,为什么还要生成一个代理?看了这本书以后,我就会发现有一个非常经典的场景,我们知道在整个MyBatis的DAO接口设计里面,它只有接口没有实现类。也就是我们在定义一个数据库的各种增删改查的能力的时候,我们仅定义了它的接口,而并没有定义它的实现类,我们是在实现的方式里面写到了配置文件里面。而代理在这里面就起了非常重要的作用,代理的能力就能够直接根据接口来生成代理的实例,代理的实例再去获取配置文件里面的SQL就能够执行调用。这里面就是非常经典的一个代理模式的使用,就是帮接口直接生成代理,用代理的方式来解耦接口能力和具体的实现配置。

这里的设计方式令我很震惊,原来代理还能这么使用。这里就给了我一个思路,如果未来我要实现一个远程或者其他的能力,那么我只要给对方提供一个接口就可以了,具体的实现我用代理的方式来实现,我可以使用配置文件,我可以使用网络存储,我甚至可以使用其他的更多的方式。

那么这里就能够让我联想到原来我们在RPC调用的时候,我们也仅仅定义了接口。毕竟在RPC调用里面我们给对方提供的也只能是接口因为实现是在我的服务端的。所以这里面也是用到了最经典的代理模式,也就是对方在发起RPC调用的时候,都是通过接口,然后把实际的请求送到了服务端,服务端统一有一个代理,这个代理分发不同的任务给对应实现的类。

所以就明白了这种代理的模式的本质的时候,我就发现一通百通,原来在一个框架里面实现的代理模式居然可以用得这么经典。这个就是“死磕”的重要性,把一个问题死磕到底,就会收获到令人意想不到的东西。

当然死磕是很困难的,因为你需要查找不同的资料,你需要问很多人,你需要去确定里面的不确定性,你需要反复的调试,需要很多耐心和时间。而且很多时候你可能仔细研究下去,你根本都找不到一个确定性的结论,毕竟你在网上现在的资料可能确实没那么多。而且很多内容说来说去都是应用层面的一些复制和粘贴,根本不会有这种特别深入原理性的介绍和研究。

当然,这个就是真正区别高手和普通人的水平的地方。当然不仅仅是在一个点上,我觉得在很多的技术点上都应该要去死磕。这一点我觉得有一个大牛叫做“左耳朵耗子”做得就特别好,他有很多博文,他这些文章都深入地去研究了某一个领域或者某一个知识点上的钻研。比如分布式技术,缓存技术,代理技术,编程语言,设计模式等等。他对每一个知识点都有非常深入细致的研究。比如在TCP协议上面,他就发了好几篇文章,这几篇文章的难度还特别的大,因为协议这一个层面特别抽象,特别的学术。甚至连我看他的文章只能够看一个开头,在中间或者后半部分,越看越乏味,很难再继续坚持下去。但就是他这种时刻的精神,使得他快速的成为了业内的大牛,能够解决别人解决不了的问题。

论「死磕」的重要性_代理模式_04

这种“折腾和琢磨”的心态让我想起来,我在初一的时候就开始学因式分解。我记得那时候因式分解是在初二的时候才有的,而我在初一的时候就开始研究二元一次的方程,并且去钻研出因式分解。我把我自己的研究跟其他同学分享,后面找到了一个初二年级的人,初二年纪人很轻松就告诉我,他说因式分解这个理论,在初二课本上已经有了,我突然一看,哦,原来这些知识已经有人研究过了。虽然我仔细研究,熬夜奋不顾身地学习的东西被我研究出来了,但实际上发现在二年级的课本已经有了,但是依然阻止不了我对于这些数学知识上面探究的乐趣。所以有些时候死磕本身的过程是很困难的,但是死磕之后你会有一种愉悦的感觉,这个我想就是我们CTO巴布经常说过的“心流”。

很多东西研究之后,你会发现其实它非常的简单。甚至你弄懂之后,你都觉得它毫无技术含量。但这个确确实实就是普通人和高手的区别,很多武林高手认为他的每一招每一次都非常的简单,但实际上每一招每一次叠加起来可能需要苦练十年,二十年才能达到这个水准。我想这个就是差距很多牛人为什么能够写出一个操作系统,能够写出一个框架,在他的这个水位看来,他觉得这个东西其实非常简单。但是在初学者在外人看来,已经是个扫地僧的感觉。

所以我觉得只有此刻两个字「死磕」这种精神才能够使得自己成为真正的绝顶高手,能够超越过大部分的人,并且真正能够在武学巅峰体会得到一种别人所不能够获得的快感。

公众号:ali老蒋