阅读本文需要5分钟
0. 今天给大家分享一个最近收获的一些思维上的认识,在意识到这种理念后,在去反推过去以来自己的学习之路,发现确实走了不少弯路。当所有的想法及改变都来源于生活,来源于和身边朋友、同时交流学习及结合自身体会到的。我将以我自身经历去倒推过去,反思这些年走过的路。
1. 什么是全局思维呢?简单来说就是要有【全局观】,能够把握【整体脉络】。更深层次就是看的更高点、看的更远点,能够【看清现象】,【把握本质】。当然,全局思维不是一天两天形成的,受个人知识储备、视野、圈子、格局的影响,自然每个人看到的层次不一样。我们能做的就是每一次比当前的你,拔高一个层次或者维度,这样慢慢养成。
2. 比如在学习嵌入式的时候,首先嵌入式到底是个什么东西?它的整体架构是什么样的?一个完整的嵌入式产品分为几部分?每一部分的角色与定位是什么?整个知识体系脉络是什么样的?结合自己现有的知识储备,我应该从哪一块切入比较合适?
笔者在刚开始,根本没有想过这些问题,只知道要学嵌入式,也不知道从何入手,今天找一堆视频资料、明天看另外一堆资料,像无头苍蝇一样乱穿
3. 【先搞清楚嵌入式主题脉络框架】,主要分为bootloader、kernel、rootfs、driver、应用。然后理清楚这些“模块”在整体嵌入式体系中的作用以及角色定位,将各个分散的“模块”串联起来,梳理一条清晰的脉络结构。然后先抛开技术细节,能不能从【设计思想】上先简单了解一个嵌入式产品的运行流程或者机制。
笔者一开始,根本没有从全局上想过这个问题,每个“模块”都是单独来学,由于是自学的,知识体系很散,也没有具体的实操项目,所以一直是迷迷糊糊的,而且还容易陷入技术细节,导致效率特别低。
比如学习裸机程序,遇到汇编不会,跑去看汇编,遇到Makefile又跑去看一段时间的Makeflie,结果导致花了大量的时间,效率也低,其实这些东西如果不常用,学了就忘了。这就是脉络不清晰,主次不分的表现(当然不是说这些不重要)。
4. 搞清楚整体脉络,即把握主主干。然后,【结合自身知识储备,看从哪个点切入,更合适】,每一块该看多深多浅,此时应该心里也明朗了。也不会无端陷入其他无关紧要的事情上。
此时,你不用在顾虑,到底用哪个平台的CPU,因为都是硬件平台。你更不应该纠结linux 到底用vim还是emacs或者其他,转而先去学编辑器,都是编辑工具罢了,哪个用着合适用哪个。
5. 以自己擅长的切入点入手,自上而下、自下而上或者从中间向两边,慢慢建立自己的知识体系,【打通整个脉络】。
如果知识一个点一个点的去学,而不形成体系,很容易忘记。形成体系最有效的方法就是你能理解它,头脑里都够有一张清晰的脉络图,而不是死记硬背。不要将各个知识点孤立开来
6. 当你的这个知识体系脉络初步建立后,也就是可以上手了。这个时候就可以深挖技术细节了。具体的技术细节,就是在工作中通过实践去钻研的。
7. 以上方法,仅适合有一定学习能力、知识储备,在学习新的领域时提供的一个快速上手的方法,当然要成为高手还是需要日复一日的训练,每个领域的东西一展开都是庞然大物。
对于嵌入式,如果一开始就想把每一块都搞的特别透彻是需要大量时间同时还是很痛苦的。很容易打击学习兴趣。
8. 最后说一点,关于学习,不要着急做。先理解设计思想,其他的就是具体实现了,至于怎么实现就无所谓了。每次看到编程语言鄙视链,想不通,不知道有啥好鄙视的,抛开语言本身,去看语言特性,很多都是大同小异,没有系统的学,不代表不会,或者会以后也不会,只是暂时不需要而已。懂得了面向对象思想,我发现linux kernel源码里 有很多面向对象思想都是通过c语言设计实现的,也就见怪不怪了。
9. 以上,都是个人这段时间的一个小结,总结就是几句话:把握主干、理清脉络、分清主次、先整体在局部。这些方法论其实是我从深度思维推演到学习思维得来的,目前对于深度思维理解的不是很到位,有机会在分享,深度思维还可以推演到财富思维、产品思维等多维思维!