- 学会别人手把手教的技能
- 学会书本上教的技能
- 学会没有人教的技能
那么我们要如何一点点突破呢?
练会更重要
我想,很多人和我一样,不太愿意和那些觉得自己知道,但是做不出来东西的人合作,虽然我以前就是那样的人。另外一方面,我自己的原则是绝对不能说:「你连这都不知道啊」,「只要那么那么做就可以了」之类的话来显得自己好像知道一样。困难是别人要面对的,自己不能在行动上帮忙就不要瞎指挥,连提出建议也最好在别人明确表示自己希望得到帮助的情况下。
我这么选择,是因为很多东西我也只是知道,而不是做到过。我们都知道做出一家 Alibaba 能挣钱,但我们都没做出过 Alibaba,所以千万别给别人这样的建议:「想挣钱,做出一家 Alibaba 就行了」。
这个例子可能有点极端,但生活中这样的例子挺多的。关于工作的,关于婚姻的,感觉自己知道的人挺多的,真正有高度的建议可能是很少的,更别说有意义的指导了。
所以我希望和大家探讨的是「如何练会书上的知识」。不过,我们先来看看第一个阶段:学会有人手把手教的技能。
如何练会别人手把手教的技能
有人手把手教的技能其实很多,在 google 上输入这样的关键词,比如how to cook jiaozi
,how to make noodles
都可以搜到很多手把手的教程,甚至还有手把手的视频;百度上这样的内容也不少。甚至,很多更有难度的技能也有手把手的教程,比如编程,弹吉他之类的。
如何学会这些有人手把手教的技能呢?我的个人经验是,老老实实练到手熟。
选择那些看起来最靠谱的教程(流量越多的教程可能越靠谱),或者花钱买来更靠谱的作者出版教程,然后放下自己的各种情绪:觉得老师太啰嗦啊,觉得自己很聪明之类的。老老实实的按照教程做一遍,纯模仿。一遍练不熟,就练 3 遍,5 遍。
我给出这样的思路是因为我自己的学习经历。
编程这样看起来需要思考才能下手的事情,怎么能靠纯模仿(甚至是死记硬背的模仿),来学会呢?
举个例子。现在(2018年4月)非常热门的两个科技创业方向是:区块链和人工智能。我曾在一段时间以前听一个在区块链行业里开交易所的老师,一个被很多人视为大咖的人说,现在进入人工智能领域已经没什么机会了(他建议进入区块链行业)。当时他没有解释为什么,但我想这在很多人看来是错误的判断。我现在在一家做计算机视觉(和 AI 沾边)的公司工作,了解到这个行业中比较成熟的 AI 技术不过是语言识别和计算机视觉等,更多 AI 技术的问题其实还没有解决,比如自动驾驶,比如大数据医疗。怎么会没有机会呢?
其次是,入门的时候不要太贪婪。很多领域都有几十年甚至几百年的历史,这期间又有无数比我们聪明的人为这个领域创造了大量的知识,我们不应该期待自己一两天就消化了这样大量的积累。
更重要的是,入门时也没必要贪婪。
以编程为例,很多人可能知道int a = 1;
这句话是在给 a 赋值,但如果问:为什么计算机会把这行代码理解为给 a 赋值,以及计算机是怎么给 a 赋值的,如何检查计算机真的给 a 赋了值;这些问题对刚刚入门的我来说是没法回答的。然而,这并不影响我继续使用 int a = 1;
这样的代码,写出我预期的结果。这就好像很多人并不知道感冒时怎么发生的,也不知道感冒药是怎么治疗感冒的,但是知道吃感冒药能解决自己的不适。
这或许就是传说中的「先用起来再说」,或者用英语说 heuristic。在刚刚入门一个领域的时候,如果奢求自己什么都要一下搞懂,那更有可能实现的是不是从入门到精通,而是「从入门到放弃」。
当然,那些「为什么是这样」的思考其实很有价值,只不过他们的价值在学习的初期阶段体现不出来。如果我们能把他们记下来,其实有助于我们突破第二阶段的学习。
从手把手中进阶
正是在改正这些错误的过程中,我们学到了做出产品的基本逻辑:哪部分的工作和另外一部分的结果是有因果关系的。
以煮饺子为例,我以前煮的饺子经常会黏在锅底;在我看来,别人煮饺子都是把饺子放进沸水锅里,然后等一会就熟了,然后就可以吃了,从来不沾锅底;但后来我知道,在把饺子放入锅里之后,需要用大勺子轻轻搅动一下饺子,让沉在锅底的饺子浮起来;这个搅动的含义简直太隐蔽,谁会第一次就知道那个大勺子伸进锅里是为了让饺子浮起来呢?我看到的只是大勺子伸进了水里,然后出来了,中间埋下了什么伏笔,完全不清楚;直到自己煮的时候真的犯了错误,就有了机会能学习到这个因果逻辑。
但手把手的学习到这里还没有结束,手把手的教程中还有更多可以挖掘的东西:自己主动改变一些示例作品中的组件,看看会有什么结果(或者错误)。从中你可能会遇到更多问题,也会从这些问题中学到更多的因果逻辑。
当我们尝试着跳出教程中设计的示例时,会有更多未知的问题等待着我们。不断解决这些问题同时,你的学习简直就是超速行驶;虽然有些问题真的会难到我们,但这就是学习的过程,痛并快乐着。
如何练会书本上教的技能
看书,绝对是超越自身感觉的一种很好的途径。
上文提到,我们在不断模仿经典案例的过程中,可能会发现一些因果关系;在以后的实践中,我们就可以通过控制不同的因,来实现不同的果。
但通过模仿学到的所谓「因果关系」中,可能有很大一部分其实是「相关关系」,而不是真正的因果律。
我在统计学中学到过一句话:
Correlation does not imply causation
中文意思是说「相关性不等于因果律」。如果我们把相关性误以为是因果律,下次再想通过控制因来得到果,却不知道某些未知的变量已经发生变化时,结果就会出乎意料。这是一个很重要的概念,但我们的主题不是讨论它。我们想讨论的是如何学习到更深层次的知识,来让自己把握更接近真实的因果律。
把那些小知识放到大的项目中去用!
现在,我可以告诉你,我读完的那本工具书叫做《Ruby 基础教程》。它里面讲的都是 Ruby 这门编程语言中的一些基本语法:如何赋值,如何操作字符串等等。看这种书其实是大多数想学编程的人的选择,但这些同学应该都会遇到一个问题:看完了,然后呢?
可能很多人都踩过这样的坑:知识点都看过了,甚至背下来了,但是不知道怎么应用。更重要的是,因为不知道怎么实践工具书中的这些知识,所以对这些知识的理解总是停留在知道的层面,无法深入。
有些人学习这些工具性知识的条件比较好。他们可能正在做某个工程,带着工程中的问题去学习这些知识,会很有动力,也很有目标的去实践这些知识。但另外一些人可能没有这样的场景,甚至会遇到这样的尴尬:比如我在找工作的时候发现,要想找到工作,从而获得在工程实践中学习的机会,需要先学会那些通过工程实践才能学会的知识。
最后,我们要能够从讲述原理的书中学习。不过,让我们先来定义一下什么是「讲述原理」。
物理学家费曼,在他的物理学讲义中提到这样一件事:假如人类毁灭,而地球人只能给以后的世界留下一句话的时候,他选择留下的是「这个世界是由原子构成的」。在他看来,整个世界都是运行在原子和原子的互相作用之上的吧,而原子就是这个世界最底层的原理。
然而,对于单独一本讲述原理的书,几乎不太可能一路深挖到原子在其中如何作用。因为那样的话,这本书几乎是写不完的,甚至连科学家都已经过世了,都还没有写完。根据我的观察,大多数探讨原理的书,都会假定某些更底层的概念已经是正确的,然后以这个假定为基础,探讨具有一定深度的原理,而不是无限深度的原理。
更进一步,他们会假定读者已经理解了那些更底层的概念,但是,事实并不是这样的。我就经常是那个并不理解更底层原理的读者。如果按照作者的建议先看那些更底层的原理,我们可能会发现,理解那些更底层的原理需要更更底层的原理。这样无限循环,一本书是看不完的,甚至连读者都已经过世了,一本书还没看完。
为了突破这个窘境,我们可以选择冒着一定风险,先接受那些更底层的原理是正确的,只对那些原理做一个大概了解,就在原来的书中继续探索下去。
另一方面,根据我们一开始提到的原则,「练会」在这个阶段依然是最重要的,尽管他们是原理,看起来和实践无关。但我们也要自己给自己设计方法,让自己刻意的用。设计不出来怎么办?和之前提到的方法一样,搜索一下别人是怎么用的。
后话
当然,还有第三个阶段:学会没人教,甚至没人能教的技能。我目前对此也是无能为力,希望能够和朋友一起探索吧。