最近有计划做一个系列的技术分享,当然前提是自己需要了解很多东西,去查很多资料。

平时也看了很多技术分享视频,坦白说,能带给我收获和启发的寥寥。所以,国内的工程师(对,我希望大家都能称为工程师,而不是码农或者程序员)查资料,能看国外的就不会看国内的。

国内的技术,并不是一定落后于国外很多,但是为什么我们很难有高质量的技术文章出来呢?这可能和我们从小的教育模式有关。

国内的技术人做的分享,干货最多的,我推左耳朵耗子。前段时间听说他走了的消息,我还一度很悲伤。我的很多技术观念的转变,对于技术人的看法,都是从他的文章受到的启发。他的文章总能带给你不一样的启发,总是能够做到 干货满满。可惜,这么一位我认为纯粹的技术人,就这么走了。健康果然永远是第一位的。不知怎么,我总感觉从这几年开始,一切精致的、理想主义的好的东西,都逐渐在远离我们。

对于在探探的三年,我学到的技术方面比较硬核的东西不算多,但是,在这段经历中,我受到的一个最大的启发就是,如何去思考技术(这是一位96年的同事带给我的启发)。当今的技术新名词、概念、框架、编程语言等等,层出不穷, 大家都在感叹,要学的东西太多了,自己学不动了。

出现这种情况的原因,就在于我们永远是被动的接受知识。

出现一个新的东西,我们总在亦步亦趋地跟学,而很少去主动思考,为什么出现这个东西,这个东西的出现能够解决什么问题?比如最近 Java 21 版本发布,有一个史诗级的更新就是 Java 协程。我们如果不去想,Java 到底出现什么瓶颈 为什么要引入协程的概念,当时设计语言的时候为什么不考虑协程,或者为什么现在才引入,引入后对原来的语言架构有什么破坏性影响等等问题。这些问题没有考虑清楚,就一头扎到协程的实现细节中,我们必然会疲于奔命。

个人以为学一个新技术需要从以下步骤入手:

一、搞清楚解决的问题。

先把这个技术点的前世今生搞清楚,如果这个技术点的引入,只是为了炫技,只是为了蹭热点,那我宁可不学,吾生也有涯,要学的东西实在太多,我才没有必要为此浪费时间呢!而这一层分析,是好多技术文章或者技术视频里面 缺乏的。

二、如何解决

搞清楚要解决的现实痛点之后,接着就是要想如果是我们遇到了这个问题,我们该怎么办,它又是怎么做得?这一点可能比第一点更重要。思考这一点的好处多多。

首先,它能够帮你对这个技术点有个宏观的把握,之后研究这个技术点的时候,你永远有一个明确地导向,你不再会被里面天花乱坠的细节所误导和迷惑。 这就跟交朋友一样,你知道这个人所处的立场后,无论这个人怎么对你施加糖衣炮弹,你都不会为其所展现的表象所迷惑。你永远能够认清楚这个人的本质。用老毛的话来说,就是抓住事务的主要矛盾,透过现象看本质。

其次,如果我们冥思苦想也想不出更好的方案,然后看人家的实现,觉得既优雅,又简单,这个时候,你就会被它的设计所吸引。你的技术水平便会在无形中有所提高。下次你遇到类似的问题,或者别的问题时,你就会将此想法从此处迁移到彼处。 这就好比写文章一样,给到一个命题,我们自己写一篇,然后再看人家是怎么写的。二者一对比,高下立判。他和你实现的肯定有不同的地方,那么这些不同的地方,不外乎三种情形:

  1. 它不如你

这个时候一定不能傲慢,认为它这样做,就一定不如你。需要慎重考虑为什么这里出现一个表面看起来很明显的不太好的设计(这种情况,往往是因为一些历史原因或者有其特殊的需求背景)。

如果反复考虑之后,确实没有想出来更好的理由,那么你就可以理解你的设计比他的要高明(它的设计,并不一定都是最优方案,所谓战略上藐视,战术上重视),可以小小地得意一下。

  1. 你不如它

这个时候,你要暗自欣喜,因为你挖到矿了。这个技术点,没有白花时间研究。这就好比,你跟高手过招后,学到了几招新的武功,这是能够提升你的战力的。

  1. 殊途同归

你们的实现方案,各有利弊,各有其明显的缺点或者优点。

情形 2 和情形 3,都能在很大程度上拓宽你的视野,让你的技术品味升级。

最后,当前的技术点可能和你的工作没有太直接的关系(比如研究操作系统内核和写业务CRUD),但是里面的一些精髓的设计理念,其实完全可以迁移到业务中去(比如缓存、异步)。操作系统在有些时候,是追求极致的准确和性能的,这一点要求是比 99% 的业务高的。

三、总结和梳理

在前两步完成之后,基本上你对这个技术点,算是完全吃透了。这个时候别忘记及时梳理和总结,梳理过后的才会有条理的放在你的技能仓库中,不至遗忘或者记忆错乱。