错误的学习思维

沉迷于高阶技术

源于「小师傅」对我错误学习指导的复盘。两个人的背景:小师傅是已工作三年的后端工程师,而我是一个还在学习的初级码农。
起因:我给「小师傅」推荐了 1 个我所认为还不错的 SQL 技术公众号。技术号的优质文章大致如下
在这里插入图片描述
然后师傅开始数落我看了些现阶段不该看的技术文章。还没等我回过神来辩解,小师傅问了我几个问题:

公众号中出现的几个关键字:性能、执行计划,索引、存储引擎。是否真正了解。
在现阶段的学习过程中是否有接触过这些概念,这些东西是否知道为什么要这样设计

我的回答是:

没有实际接触,只有听过索引和性能两个概念

师傅给出的建议

与其把日常时间花在这些高阶的技术公众号,不如实在的写一写 SQL 语句
把基础的知识学好学会。了解再多的高级知识并不能让自己有质的提高。表面上的明白根本没有落在实处。
基础没有学好,高级的知识连停留表面都做不到。

对于这个我很有体会,在学习编程的初级阶段很容易被华丽的各种框架所吸引,但是没有扎实的基础,完全理解不了框架的精髓,也更谈不上灵活的运用。在前端方面表现的非常明显,这里举一个我学习的反例。

错误示范

前端现在有三大主流框架:React、Vue、Angular.在我刚接触 JavaScript 的时候,简单的实现了一些图片轮播、表单验证后,我就去学 Vue 了。现在来看挺胆肥的,都没理解 JS 原生,没看过 ES5 就直接学了框架。

最后的结果就是 Vue 一点没学明白,照着视频做的项目完全没理解。也导致我对 JS 失去了热情。

这也是现在前端的典型例子,很多人没学明白原生的 JS ,并没有搞清楚:文法、语义。仅仅知道现有框架的使用,所以每出现一门新的技术都需要花费大量的理解。因为没有基础知识作为串联,所以对于学习高阶的知识如同「空中阁楼」,既不知它「怎么来」,又不知它「能怎么做」。

检验自己是否理解了基础知识

师傅在指出我的问题的同时,检验了我对于 SQL 索引的了解:

师:为什么会有索引?
我:是为了提高查找的效率。

师:索引为什么能够提高数据库查询的效率?
我:没有索引,数据库中的数据无序存储,需要逐行遍历,查找的时间复杂度是线性的,O(n) 复杂度。
因为索引按照指定列给表中的排列的成有序,可以通过二分查找法等在索引中查找自己想要的数据,时间复杂度是 O(logN)。
以字符串为例,将字符串生成对应的 ASCII 码值,根据值的大小排序。因为要有序,所以索引通常不能为空值

师:按照你的说法,每次建立索引的时候就是对数据库中的数据重新排序?
我:不,索引应该是建立一张索引表。查找的时候在索引表中找到对应索引值然后跳到指定的数据。

师傅的总结
我的表达并没有讲清楚我对索引的理解,而且这个理解也并不正确。

目前大多数关系型数据库采用的索引方式,最常用的是「B 树索引」,可分为:分据簇索引(主键)、非聚簇索引两种。都采用了「树」的结构,所有的数据都为叶节点,而索引则为非叶子节点。

以主键查询为例,查找的最终结果是一行数据而不是某一列。在聚簇索引中数据都按照主键顺序存储,所以不仅支持离散查询,还可以很好的支持区间查询。

通过查找资料,我了解了「B+ 树」,实际上是对二叉查找树的改进。
二叉查找树 and B+ 树
如果你看到了这里,可以对照我的理解,看一看自己对于数据库索引的理解是否有误,是否真正的了解了这部分基础知识。当然,如果文章中出现了任何错误可以直接在评论或者留言中指出。

检验自己对一某一方面知识是否真正理解的最好方式,就是用自己的语言给其他人正确且清楚的讲解概念。对于关键性的概念一定要知道它为何而来,能做什么事。

总结

**在编程的入门或者初级阶段,不要沉迷于高阶的技术,他们并不能带来质的提高。**认真把基础的知识巩固好才是最重要的,计算的发展离不开核心的 5 门课:计算机组成原理、计算机网络、计算机操作系统、数据库原理、数据结构和算法。这些才是能真正决定你发展高度,并给你带来本质提升的东西。而高阶的知识在工作中遇到了更高层次的需求,有了一定的经验积累,再去学习当初看似天书的高阶知识,你就能够轻松的明白以至于更好的运用于实际工作。

少看技术公众号,多看一些经典的书籍。 公众号因为受众和篇幅的原因很难将技术的实质讲透彻,而别人的理解和实际的概念可能千差万别。正如我所理解的数据库索引(以「跳表」为蓝本)和实际的的「B+ 树」索引并不一致,说明我并没有去深入的研究过数据库索引的知识。学会去知识的源头学习知识,一个错误的理解会轻易的让你偏离实际。

而经典的书籍经历了时间的检验,也并不像公众号写文章那样简单。 书中的每一个概念,作者都要考虑读者的不同水平,是否了解文中的概念进行必要的解释。书籍的前后章节大多相互关联,以一个整体的形式对某一技术进行解释。能够完整的描述出一项技术的发展历史,当下所呈现的怎样的形态,还有哪些未解决的问题,以及更重要的:这项技术为什么会发展成这个样子而不是其他方向。

理解清楚事物发展的必要性以及发展的趋势我们才能够更好的形成自己的「知识地图」。 以至于在技术更新的时候,快速的发现从前的技术所存在的缺陷,更好的理解新的技术。而一项技术在解决问题的过程中采用了哪些算法和设计模式,无法在公众号简短的文章中描述清楚。而这些直接影响了知识体系的完整性,决定了你技术提升的速度以及高度。
如果你不知道现阶段「该学习什么」可以从以下几个方面参考:

1、同龄人中的佼佼者,看他们在学习什么是如何学习的? 因为彼此水平相差不大,这也是刺激你去学习的动力,别人已经在优秀的道路上朝着更优秀的方法走了,我们是否应该起身追一追呢?

2、找一张靠谱的知识图谱,看看你所要从事的方向需要掌握的知识,以及正常的学习路线是怎样。 可以在一些知名的培训机构官网上,看到他们的培训课程大纲,这可以作为你学习路线的指南。也可以直接在 GitHub 或者 掘金 等比较靠谱的网站上搜索,你能得到比较专业的答案。

3、找一个技术水平远高于你,且认真负责的人作为你学习的引路人。 他们会用自己积累的经验指导你该学什么,要怎样去学。当然,好的老师可遇不可求,因为他们通常也是最为忙碌的一批人。

如果你想问如何提高自己的学习能力,在《如何高效学习》这本书中给出了一个整体性学习的框架:

1、获取。在保证信息获取的准确性时,尽量压缩信息。

2、理解。作为学习的基本,理解所获取信息的基本意思。

3、拓展。整体性学习的核心,将已有知识和新知识串联,提高我们对新知识的理解力。

4、纠错。找出现有知识体系中错误的部分。

5、应用。将所学的知识应用于实际,通过实际应用中的结果,调整自己的学习策略。

学习的过程可以归于这 5 个部分,如果你学习的效率不高,就在里面找到自己缺失的环节加以调整。

这是我对于自己最近一次错误学习思维的复盘,感谢我「小师傅」指出我的错误。如果你认为我的文章中有哪些和你理解有出入的地方,或者你有什么更好的学习方法,都可以在评论、留言中指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值