目录
一、反思中发现
在搭建知识体系的过程中,拆解了一部分前端js的结构和理念方式。在这个过程中,对js这门语言感觉更加熟悉了。这种熟悉和写了很多变代码的熟悉不一样。是更加得心应手的那种熟悉,而不是单纯的使用某种方法更熟悉或者对某个属性用多了,记得更牢的那种熟悉。对语言的解读后,有了一种新的视角,将语言从宏观的角度,按照数据和对数据的操作来看待。在编写业务代码的时候,有明显的不一样的感受。这是为什么呢?
1.1 学习的方式
最开始的学习方式更倾向于视频,总觉得看文档,要么迷迷糊糊,再要么就是看着似乎看懂了,但过了就忘。觉得视频里面有人操作,一步步敲。后面觉得视频时间好长,觉得官方文档更简洁,能够相对快速的了解相关的基础内容和使用方式。但是官方文档很片面,因此参考不同的书籍。再到后面的自我提问式后的阅读,去寻找答案。之后再向自己发问,逐步寻找答案的过程。
每种方法应该都有相应的优点。但如果从挑战性和自我满足感来说,自我提问式的阅读书籍和文档,再逐步发问去寻找答案,这个过程会更崎岖一些,探索的过程也会更加映像深刻些。但是自我提问式的探索,在实际知识面的扩展中,感觉会相对比较窄。比较难成体系。相似问题,解决了一个,如同醍醐灌顶一样醒悟了。但是没有分类和归纳。也是零散的碎片记忆。比较容易忘记。
因此在自我提问式基础上,应该是依赖于知识体系的提问和扩展。因此,注意力从追逐相对零碎的知识碎片,转移到了知识体系的梳理和搭建上。在这个过程中发问和整理。会更加凝练。
1.2 求上得中,求中得下
不同的学习目标,带来的结果不一样。想到老师原来常念叨得一句话,求上得中,求中得下。报着不一样得想法观念,看同一本书,写同样一段代码,状态和收获也完全不一样。
(1)如果想着会用它得目的去学。看完了基本概念,会用了。无论写多少遍代码,所带来的感受,就是对概念记得更牢了。当我们完成了大脑意识层面的目标的时候,相应的思考会近乎停滞,而用本能和习惯去做相应的事情;而且相对枯燥,就像死记硬背一样,没有创造力和思考的因素,收获也会比较慢。
(2)如果抱着教自己得角度,也就是自己是这门语言的导师的视角去学习一门语言,从学习者的角度到授业解惑的思考角度转变。看相应的概念的时候,提出问题,然后作为自己的导师去思考和解决问题。这样的想法下,会因为活跃的思考,收获的更多。
(3)从创造者的角度去看,也就是学习不是为了学习,而是为了了解后创造新的事物。看相应的概念的时候,会推导和整理语言创造者思考的源头和逻辑。大脑皮层会始终处于较为兴奋的状态,因为创造本身就比学习这个字眼,令人兴奋。带着这样的想法去观看相应的概念。可以从高于局部,从整体俯视的角度去看相关的知识点,和梳理脉络。
1.3 简单与不简单
简单和不简单似乎很矛盾,但是确实是共存的。宏观角度看语言的核心,就是数据的容器和数据的操作,是一堆变量和一些方法,基本盘就是这样简单。但是正如生态系统下面的组成生命的元素细胞一样,每个都小的惊人。但是最后形成的生命体却至今难以穷尽头。语言的不简单,大概就在于,它只是基本组成元素,但是能组成的生命体是无穷无尽的。光我们自己的身体构造,生物学至今都没研究透。语言又怎么可能简单呢?
要让细胞形成的器官各司其职,要保持稳定,还要相互传递信息。还需要节省在这个过程中生命体所消耗的能量,才能生存的更久。与之相同的语言,所对应的问题和这个很像,无数人穷尽一生,都在思考这个问题。而宇宙也历经无数年,才有了丰富多样的生命。
二、局部路线细化
语言体系那么广,需要考虑的面又那么多。回到最初的问题,还是如何更有效的成长和学习?具体再具体,抽象的想法和概念如果只停留在想法,那就是空想。以想法和概念作为前路的指示灯,来主导后面行动的方向和路线,有助于更快更好的到达下一个里程碑。如果说结构决定功能,那么意识形态决定思考方向,思考方向决定奔跑的方向。细化的路线,跑起来更有方向感,不至于迟疑和彷徨。
2.1 单点突破还是多路并进?->1+2
语言的体系很广,很大。而且生态在不断的繁荣。从结果倒推的话,从使用人数和使用范围情况来筛选优先学习的内容。因此原来常常因此容易做的事就是,追逐时髦的理念和技术,因为没有足够深入,碎片化的知识,造成根基不深。语言真正意义上比较容易切换的程度,应该是在对一门语言极其精通的时候。学习另一门语言,才能真正意义上的较快上手。如果没有在语言的层面上持续向下挖掘到足够深,也就无法真正从俯视的角度去看待语言。 容易在庞大的概念中,疲于奔命。
只选择一个知识体系深入挖掘,容易陷入思考的停滞。对于有些概念,单独一个体系去理解和思考,比较难看到更多的角度去理解。在攻克一些较为生晦的知识点的时候,比较容易卡顿。
或许可以选择1个主要体系脉络,和1到2个与之相关或者相似的分支体系。js,react,webpack。或者是js,node.js,react的组合。在一个方向卡顿的时候,切换到另一个体系脉络,之后再回过头来思考,问题往往会在切换的过程中被解决了。
2.2 更多的视角,更立体的感受
2.2.1 思考的局限性
在探索语言领域的时候。因为知识和经验,无法思考到更深层次的东西,也就无法从更广的角度思考问题。同一个概念,不同的人的工作经验和阅历,带来的不同的思考,会有不同的解读。对比他们的思考和认识,或许在某个时刻,某个场景,我们也会遇到和他们相同的问题。首先认同自己思考的局限性,对于聆听和理解他人想法的有很大的帮助。不同的书,对应着不同的作者的思考,可以借助他们的视角,看到更广阔的视角。
2.2.2 从建立自我到追求无我
莫名想到这句话,建立自我可以是建立思考体系,可以是建立价值观,可以是很多很多。若按照40而不惑来看的话,在这之前,都是在建立自我的过程。思考和整理有助于审视自我到建立自我。追求无我是怎样的境界呢?我看过很多人的不同答案。同样也在思考着这个问题,自己的答案。
2.2.3 单点突破-场景分析和实现
真正意义上的突破,除了语言的核心思想实现脉络整理外,应该就是编程习惯的改变了。 编程习惯又似乎很虚无缥缈。 把大的问题,切割成小的问题。大的问题是一整个程序的编写,切割后就是单个业务场景的编写方式的选择。与之相对的就是设计模式和算法了。
无论多大的程序和体系,最后都是分割成业务场景,业务场景切割后就是代码块的实现。如何设计业务场景代码块的实现方式?如何书写代码是更高质量的。结构的设计,就是设计模式。算法很大程度上是为了设计更好的数据容器而存在的。脱离场景来看的话,这两个东西很高大上。但是结合业务场景来思考的话,这两样东西是代码的灵魂。
"大部分编程问题,都可以通过增加一层抽象来解决",最开始看到这句话的时候挺懵逼的。现在挺认同这句话的,不论是算法还是设计模式,大部分都是在原有的逻辑之上,增加了一层抽象。在初步建立知识体系后,结合场景实现分析和学习设计模式、算法,建立和优化编程习惯,和业务逻辑编写的思考方式。