职场的程序员们或多或少都受到过前辈或领导的指点,应该都听过这么一句话 “学技术不能光会搭建个环境,使几个API,要学习了解技术的本质”。可能实际听得比较多的是 “学习技术原理”这句。所以这两个点都会说到,会说一说区别及联系。
本文就来码一码技术原理和技术本质这两个东西。
一、技术原理
先说一下「技术原理」这个词,这个应该大家都很熟悉,每每提起甚至感到一丝丝痛苦和折磨,一线互联网公司面试官的最爱,经常拿来挑逗一下面试者,"知道xx技术的实现原理吗?能不能说一说"。
技术原理即技术背后的 实现思想、架构设计、代码 ,学习一个技术的实现原理就是学习这三个方面的内容。
这三个方面也是层层递进的关系,越来越具体。
首先,思想是宏观的东西,构建起整个技术的理论支撑;
其次,架构是思想的进一步推敲和论证的产物;
最后,就是代码了,结合思想和架构设计变成一行行的可执行代码。
所以,你看技术原理的路线图和目标就出来了,第一,学习思想构建起宏观概念 ;第二,学习整体架构及局部架构掌握整体结构的组成和相互之间的关系;第三,学习代码的实现和逻辑。
举例说明一下,学习 "HashMap原理",这时候首先应该构建起的是它的数据结构知识即哈希表的概念和特点(其实如果再拔高一点,应当是先建立起各种数据结构和相互之间区别、特点及相关算法的思想和理论知识,当然这个要求就稍微高一些了),然后架构设计因为这是一个具体的类,所以这部分就是类中包含的核心方法及作用,最后就是深入代码,学习具体的代码实现逻辑,比如put方法是怎么存入数据的,又在什么情况下会进行扩容等等。
如果没有前面部分的思想和理论做支撑, 不建议直接上来就进入到代码细节,会学的很痛苦比较挣扎。发现概念和理论上的盲区,应及时补上,然后在继续代码的学习。
二、技术本质
说完技术原理,下面看技术本质。简单理解,技术的本质就是解决问题,将解决问题的前因后果分别具体化研究,展开来说本质就是除过上面说到的技术原理之外,还应该包括 技术所解决的核心问题 和 应用场景 以及 存在什么样的优势和不足。
总结一下,就是以下3点内容:
1、技术解决的核心问题和应用场景
2、技术原理
3、技术特性
所以,你看学习技术本质的路线图和目标也就出来了,第一,掌握技术解决的核心问题和应用场景,即搞明白它可以用来干什么;第二,研究技术原理,即搞明白它为什么可以做到;第三,了解它的技术特性,即搞明白它的优势在哪里。
拿redis来说,它解决的核心问题是提供高性能的内存数据缓存服务。虽说官方认为它还可以用作数据库和消息代理,但实际应用中更多作为数据的缓存服务。
技术原理上面专门做了介绍了,读者可以类比理解,这里就不在展开了。
技术特性即是该项技术与相关其他类似技术相比有什么牛逼的地方,拿redis和memcached比,多数据类型的支持就算redis的一个特性,持久化能力的支持也算是一个特性。特性在做技术选型的时候往往有着至关重要的作用。
搞清楚一门技术以上4点内容,才算得掌握到技术的本质。我们再学习技术原理的时候,不妨再加把劲,窥一窥它的技术本质。
再带大家理解一下「本质」这个词,下面这句是摘自网上的一句话
从面上看更像是一句定义,告诉你什么是IPFS,但是加上了本质二字,就让这句话看起来不是那么的简单,而支撑本质二字的背后就是IPFS这个技术的是内容可寻址,具有可以版本化、点对点、分布式传输的特性,解决的核心问题和应用场景就是标准化数据传输过程。
所以作者一定是窥透了这技术背后的本质内容而总结出这么一句话。希望这里没有让你看糊涂。
当我们再看到“xx的本质是xx”这种类似的话的时候,希望大家能多思考思考这句话中本质背后的支撑是什么,有点跑题了,收回来。
三、总结
可以看到,技术本质包含了技术原理,也就是一种包含关系。
本文就是理清技术原理、技术本质的真正含义和关系,经常我们对这些看似都懂的概念不去深究,而实际上真正搞明白这些东西能够帮助我们搭建自己的知识体系,而且知识结构脉络十分清晰,不易混淆。在学习一门新技术或深入研究一门技术的时候也会有一个清晰的方向和目标。
最后,随着学的东西越来越多,越往后大家就越会发现概念和理论(也就是思想)的重要性,有清晰的概念和理论体系作为支撑,能让我们的学习事半功倍。
关注作者公号「风象南讲全栈」,做有思想的技术人。