系统性学习方法就是想掌握MySQL,那么搞几本MySQL专著和MySQL 官方DOC看下来,一般课程设计的好的话还是比较容易掌握下来,绝大部分时候都是这种学习方法,可是在种学习方法的问题在于学完后当时看着似乎理解了,但是很容易忘记,一片一片地系统性的忘记,并且缺少应用能力(理解不深)。这是因为一般人对知识的理解没那么容易真正
理解(掌握或者说应用)
。
钉子式的学习方式,就是在一大片知识中打入几个桩,反复演练将这个桩不停地夯实,夯稳,做到在这个知识点上用通俗的语言跟小白都能讲明白,然后再这几个桩中间发散像星星之火燎原一样把整个一片知识都掌握下来。这种学习方法的缺点就是很难找到一片知识点的这个点,然后没有很好整合的话知识过于零散。
钉子式学习方法看着慢但是因为这样掌握的更透彻和牢固实际最终反而快。
我们常说的一个人很聪明,就是指系统性的看看书就都理解了,是真的理解那种,还能灵活运用,但是大多数普通人就不是这样的,看完书似乎理解了,实际几周后基本都忘记了,真正实践需要用的时候还是用不好。
举个Open-SSH的例子
为了做通SSH的免密登陆,大家都需要用到ssh-keygen/ssh-copy-id, 如果我们把这两个命令当一个小的钉子的话,会去了解ssh-keygen做了啥(生成了密钥对),或者ssh-copy-id 的时候报错了(原来是需要秘钥对),然后将ssh-keygen生成的pub key复制到server的~/.ssh/authorized_keys中。
然后你应该会对这个原理要有一些理解(更大的钉子),于是理解了密钥对,和SSH验证的流程,顺便学会怎么看SSH debug信息,那么接下来网络上各种SSH攻略、各种SSH卡顿的解决都是很简单的事情了。
比如你通过SSH可以解决这些问题:
这些问题都是一步步在扩大SSH的外延,让这个钉子变成一个巨大的桩。
然后就会学习到一些高级一些的SSH配置,比如干掉经常SSH的时候要yes一下(StrictHostKeyChecking=no),或者怎么配置一下SSH就不会断线了(ServerAliveInterval=15),或者将SSH跳板机->SSH Server的过程做成SSH Server一步就可以了(ProxyCommand),进而发现用SSH的ProxyCommand很容易科学上网了,或者Git有问题的时候轻而易举地把SSH debug打开,对Git进行debug了……
这基本都还是SSH的本质范围,像Ansible、Git在底层都是依赖SSH来通讯的,你会发现学、调试X11、Ansible和Git简直太容易了。
另外理解了SSH的秘钥对,也就理解了非对称加密,同时也很容易理解HTTPS流程(SSL),同时知道对称和非对称加密各自的优缺点,SSL为什么需要用到这两种加密算法了。
你看一个简单日常的知识我们只要沿着它用钉子精神,深挖细挖你就会发现知识之间的连接,这个小小的知识点成为你知识体系的一根结实的柱子。
我见过太多的老的工程师、年轻的工程师,天天在那里SSH密码,SSH跳板机,SSH目标机,一小会SSH断了,重来一遍;或者SSH后卡住了,等吧……
在这个问题上表现得没有求知欲、没有探索精神、没有一次把问题搞定的魄力,所以就习惯了。