上课篇(1) 如何省力向老师学习¶
学习通常分为两个方向,一个方向是自学(看书),一个方向是上课老师学习。
跟老师学习其实通常是比较快的学习方方式。这是因为人类自带动作複制的镜相神经元功能,看过一次通常就能模拟做出。有时候看好几本书的效果,都不如亲眼看大师示范一次。
虽然跟购买课程,跟老师上课学习速度较快。但是这其实也不太是出社会大家会选择的一条路。这有几个原因:
- 上课课程费用太贵了
- 自己听不懂浪费钱
- 一些很简单的东西讲很久,真正重要的东西却草草带过
- 有时候课程很浪费时间(出社会后,自己的休息时间很少,能做作业的时间更少)
- 有的老师教得很好,有的教得超烂,上到一半就想睡著
- 老师教得烂也还是一样不能走。重演上学时的恶梦。
我们又可以把这些抱怨整理成
- 浪费时间、浪费钱
- 听不懂,学不会,记不住
- 老师烂,老师程度太高但我听不懂
这其实背后又有几个可能
- 老师不懂怎麽教让你学起来比较省力
- 老师只会专业知识,不懂“教学”
- 课程与你的程度匹配不上
- 上课老师用讲的很耗你的注意力,你听了前面忘记后面的
- 上课累,想睡。下课累,没时间练。
我们要如何闪开这些雷呢?
Step 1: 分辨出你学习的对象是老师、前辈还是高级新手¶
在“向老师”学习的这个领域裡。最大坑的就是挑选老师了。因为在“向老师学习”学习的过程中,我们通常是採“被动学习法”,也就是老师教什麽,我们就学什麽。
所以,如果你上课的老师是大师,他可以让你上天堂。你上课的老师是不好的老师,下场通常不只是住套房而已,而是当场让你从兴致勃勃的入门到瞬间放弃。
但是,初学者就是对于这个领域不熟悉的人。那我们要如何有办法挑出相对比较好的老师呢?
这当中有一个观念。就是不是所有比你厉害的人,都是老师。它们也有可能只是前辈而已。
我们可以把比你厉害的人分为几种等级:
- LV 1 只是比你经验还多的人
- LV 2 有自己独特做事方法的人
- LV 3 能够 1 对 1 教人做事方法的人
- LV 4 能够 1 对 多教方法的人
- Lv 5 能够 1 对多,还能学成率超高的人
- LV 6 精通领域技术也精通教学方法的人
通常 LV 4-6 可以称之为老师。LV1-3 的只能称之为前辈而已。
当我们将“老师”也分级出来,学习踩坑的机会可能就会少一些。为什麽我会这样说呢?
前面我们有谈到了一章德雷夫斯模型。
我们通常会把比你经验值还多的人都以为是老师。事实上一个领域裡面充斥著大量高级新手。这些人只是刚学会基础流程与基础知识而已。因为它们只懂得非常少的皮毛,程度通常只能有办法处理基础问题。
- 不知道有捷径、不相信有捷径
- 不知道有套路、也不相信有套路
如果你向“高级新手”学功夫。这就惨了。它们一律会跟你说学习是很辛苦的,没有捷径,而且要从“基础”学起,否则容易翻车。
听到这件事你会有点吃惊,不是每个领域“大家”都说要从基础学起吗?
这是因为“大家”这个词,是一个数学问题。当整个领域的 50% 以上都是高级新手时,依照大数法则。我们自然以为“声音大”“出现多次”的就是对的。
你想想看精通者+专家,比例也才 11%。它们甚至懒得上网反驳那些智障言论。
我曾经无数听过新手抱怨他们想学写程式,网上的人劈头就让他回去学 C 语言,从“基础知识”学起。结果害他从入门到放弃。而且这些新手就算去上编程套路班。也被这些“高级新手”严重排挤。
高级新手会称程序员是没办法用补习班教出来的。真男人都是上网自学,野生苦练。这个爱鄙视的群体不仅鄙视去上编程班的老师,甚至也鄙视编程班的老师(认为他们都是混不下去的程序员才出来骗新手赚钱)。
程式技术真的是没有办法系统性培养的吗?这怎麽可能。
你可以想想,业界需要程序员之多,难道靠程序员自学来得及吗?更何况一个网际网路公司的工程师,除了要会写程式之外,还要学习业务需求之后,再把程式写出来。
公司裡面当然会有架构师、专家等级以上的同事在培训新人,而且培训的速度往往是指望1-3个月就能即战力。毕竟公司招人不是开学校,而是招人干活的。如果行业裡面没有捷径、没有速成武功密笈的话。行业怎麽发展成长起来?
更甚至业内会出现大家都想要的名公司或名团队,因为这些团队,新手加入以后成长速度都是超级飞升。
而这些高级新手为什麽觉得从基础知识学起来很重要呢?
这是他们刚好处于一个尴尬的节点,刚被前辈用框架硬拉上来,熟悉了基本流程,却缺乏基本的常识,所以要流畅自如解出问题的答案,还是坑坑绊绊的。所以他们才觉得基础知识很重要。
甚至还会觉得他们之所以会一直遇到坑坑绊绊的事情,是他的师傅没用“正确顺序”教他,才害他一直碰壁。所以他们才会反覆跟新手洗脑说,要练基础,没有捷径。
如果你是跟“高级新手”学技术,那坑都坑死了。
它们不仅身上没有套路,还会叫你得从“基础”学起,活活累死(无聊死)你。
你现在知道为什麽有时候有些课,上起来真是令人生不如死对吧。
所以得千万分清楚,高级新手、前辈、老师的区别。
Step 2:跟“正确”的老师学套路¶
那麽“正确”以及“好的”老师。有什麽特点呢?
这些好老师其实有时候真也是可遇不可求。你也有时候很难分辨到底谁好谁坏。甚至有时候把厉害的当坏的(有时候一般人甚至会把又贵教的又浅显直白的老师,当作是坏的)
好的老师必然上来就是先教套路。江湖上老师太多了,你可能很难分辨谁好谁坏。但我必须要说的是,一个有丰富实战经验的老师,先不论他教学技巧好不好,绝对自带套路。
且它们的教学,绝对一开始从套路开始教起。而这个“套路”就是所谓的“程序性知识”。
别看了“套路”这一词,就小看这套“程序性知识”了。这套知识很可能是这个老师在该行登峰造极后,将这个行业裡面数十个最常见的场景中当中重要的知识点、坑点,精编浓缩到一套流程传授给你的宝藏。
有时候,有一些老师甚至还会因为教材编的太好。被新手认为“太容易”、“太简单”、“太基础”,所以不想学。
其实,如果你觉得容易、简单、直观。这往往是对方很会教,很懂得把複杂的事情简单化。甚至善用比喻(跨界在脑内建立相关性)让你能够轻易的理解。
行内的“基础”,是这些场景最常出现,而且场景常见到会有固定的输出成果且能够被预测。学会这些场景与熟练输出结果就能解决 80%的问题。
人类本质上是依靠确定性机制过活的生物性机器人。如果结果不固定,不常见。就会被认为是困难。场景太常见、太容易被预测且逻辑简单,就会被认为是简单。
Step 3: 跟著套路练三遍¶
但是常见,不代表不需要花时间内化,因为“学习”本身是一个内化到让体内能够正确执行重现结果的过程。
既然这个套路,是老师在该行登峰造极后,将这个行业裡面最常见数十个的场景中重要的知识点,浓缩到一套流程传授给你。
所以熟练这个套路的流程是非常重要的。
就像是如果你学踢足球,连反覆运球、控球自如都不会,何况带球射门呢?
但是绝大多数由高级新手设计的烂课程是这样的。让新手花了 20 分钟在理解/背对他们无意义的知识。
等到到练习阶段,他们已经没有兴趣练习了。
而甚至多数人,会把“记住知识”当成是“学会技能”。甚至觉得不练习也无所谓。
所以,这样怎麽学得会呢?
我们在前面章节解释过,所谓“记住知识”与“学会技能”甚至是不同区域所掌管的,甚至保护留存时间也不一样。
而且甚至你要使用保存性高的记忆器官(肌肉神经束)去学,而不是使用遗忘性高的记忆器官(大脑)去记。
如果你回家有认真练过三遍,那麽甚至你这样上一次课,效果几乎也几乎抵得上一些无头苍蝇般的高级新手在那裡瞎耗一年多了。
秘诀 1 :下课马上练¶
跟老师学套路,除了这些顺序外,事实上还有一些额外秘诀。当中我觉得最重要的就是:下课马上练。
这是因为技能的留存,是有时间限制的。
即便老师将厉害的框架教给你,如果你在时限之内不用身体练习,也不应用的话。久了(大概1-2礼拜)就会忘光光。
所谓身体的感觉记忆,原理是身体执行动作时,会给神经纤维带来脉衝。而髓鞘质所谓的记忆神经迴路是电流脉衝传过神经纤维。髓鞘质是包裹在神经通路外侧的一层绝缘物质,当练习用到某部分神经通路时,这部分的髓鞘质就会生长起来。练习得越多,绝缘层越厚,通路中的信息传递速度就越快。
我自己的习惯是,就是上完技能课,会视情况情况马上练一遍,短的技能甚至练三遍。
确保我记住这样的流程与“感觉”。
秘诀二:用身体学习、不要用脑袋学习¶
再来,程序性知识最重要的是用身体去複制动作、记住感觉。
其实,我不论学任何技能都是用这样的流程。这样学习的好处:
- 複制技能很快
- 把握整个流程,且练到基本动作流利后,就不容易被一些细琐分支问题卡到分心,身体可以自动反应
- 当身体能够自动反应时,大脑耗费的力气也就不用那麽多,也不会一直觉得自己怎麽老是做的七歪八扭。只有 20 分,是不是反而自己没天分。如果你用身体学习,练习时反而容易觉得自己是一学就上手的 80 分天才。
我在学开车时,也用这个方法去学车。在 1 小时之内,就学会了“倒车入库”“S 型转弯”“路边停车”。老师一直夸讚我是学车天才,进度超快
因为我当时是第一次学车。也没多在意。
回来同事问我在今天驾训班的进度时,我说我一天学了三样:“倒车入库”“S 型转弯”“路边停车”,后面还会教什麽?
他非常的吃惊。因为这三样在一般人的进度来说,几乎得至少得学一个礼拜。怎麽开怎麽压线。我竟然1小时内全学会了。
我才理解到我无意中可能又用对方法了。
因为,开车本身是门技能活,要是用“脑”开车,肯定开到打结了。我猜这也是为什麽这麽多人,学这三样运车方法,要学这麽久的原因。
秘诀三:回家至少完全依样画葫芦至少做两遍,第三遍再依自己喜好修改¶
新手在刚开始学习时,还有一个学习上的误区。就是过于心急。因为人去学一样技能,往往是要马上运用。
所以他们的学习方法,就是还没完整的照著框架至少练 1-2 遍,便自作聪明的边学边改来用。这看起来好像比较快。但实际上多半会爆炸。
因为大师这些套路,是他们走过无数的坑,才好不容易设计出来一套完全无坑的套路。
新手可能完全不知道这个领域学习之路多凶险,多充满地雷。所以往往只要自己一改,就把自己摔到不知道什麽地雷坑裡面了。
反倒回出现,老师上课教很完美,我上课模仿也完美,结果回家自己做就爆炸了。
这真的是因为你还没内化的原因。如果你真要实际应用到业务上,最好务必先依样画葫芦几遍,再开始修改成自己的版本。
我通常是学习框架后,绕著路把这条路摸熟了,才会开始魔改。
但这也需要一点耐心。但是真的相当有效
不喜欢的知识,也能这样学会¶
这个练三遍的经验,我可以举一个超难学科(学习大学数学系裡面“现性代数”的例子。
我在念大学时,虽然我念的是应用数学系。但是我其实对数学没有那麽大的狂热。所以对很多学科,都是随便应付。毕竟,我念这个系其实是想来学编程的。
但是,由于我爸爸希望我在大学后念个硕士。所以我不得不去补习。考硕士时有个学科是线性代数,这门课我在大二时,期中考期末考都只考 20 多分,所以被当了。
所以,我只好在大三时,去参加补习。当时教我的老师,是坊间号称“线代之神”的黄子嘉老师(现在已故)。我跟著黄老师补一两个月后,线性代数的功力竟然突飞猛进,大三重修线性代数,期中考竟然考了 80 多分。我的线代老师完全不知道我吃了什麽猛药。
但是当年跟著黄子嘉老师用他的方式做数学后,我似乎对于线性代数与代数类的数学,竟然开窍,并且产生兴趣了。代数与线性代数名字虽然很像。但其实这是完全不同的两门学科。
对代数重新燃起兴趣,本来这门课也被当导致重修的我。在期中考不但是第一个交卷,更是考了 120 分(满分100,加分题20)的破表成绩。更扯的是,当次全班 60 多人。有超过 40 人考到了 100分。要知道数学系的期中考分数,其实多半全班平均是大约徘徊在 40 分上下的。让老师怀疑我们全班作弊。
你知道发生了什麽事会变成这样吗?
当时因为线性代数的考高分,让我燃起了对数学的希望。于是我去重读了代数,用在线性代数学到的解题思维,把代数课本上的习题全做完解开了。不仅如此,我还将所有的习题解题答案,加上简单基础代数观念写成一本册子。送给友好的同学。吩咐他们,至少把这本册子抄 1-2 遍。
而老师在期中考时,用的全是课本上的习题,然后做些修改出成考卷。
那些有“抄过”这本册子几遍的同学。毫无意外都拿了满分!
所以自此之后,我就非常喜欢这个练习法,也喜欢写册子!这就是为什麽我的书籍系列都有那麽浓“册子”味道的原因。
Step 4: 随手记笔记,并公开发表¶
能够将一门功夫,练得扎实,并非只光靠练三遍而已。还要记笔记。
但说到记笔记这件事。老实说,我还真不是在学校养成的。而是出了社会才学会的。
当时我在学校学习时,我是一个并不喜欢记笔记的人。
为什麽不喜欢记笔记呢?
理由有几个:
- 上课我听不懂老师讲的内容,所以我不知道要选择听懂,还是要选择写笔记。当我还在犹豫的时候,已经下课了 Orz
- 我看到其他人写的笔记都很漂亮,我也想模仿其他人的笔记方法。但是当我忙著用他们的笔记方法抄笔记,下课后我却什麽都不记得
- 我如果自己按照自己的方法抄笔记,上面会写的非常潦草。我又不知道如何整理,也不知道整理有什麽意义。结果就是当期中考前,我看著自己的笔记发呆。只好再去借同学的精美笔记回来恶补。
所以,在 K12 前期,我还能仗著因为教材简单,且可靠刷题练习,用短期记忆考出高分。
但是在大学这个阶段,我就被庞大的知识痛揍,更何况,我念的还是大学数学系。
大学数学系跟高中数学是截然不一样的“数学”。
如果说高中数学可靠刷题过。
那麽大学数学本身可形容为是教你重新思考宇宙万物的学科。
每个数学系的学生,毕业成绩都不是太好看,是因为在大二之后,我们学的是“真正”的数学。所谓真正的数学,就是要你学会一套新的逻辑推演方法,去理解数学,去以各种角度去拆解数学问题,甚至证明数学定理。
如果你还用高中数学用短期记忆的方式,那麽肯定会被当到退学。所以能从数学系毕业的人,很多都是人才,没有人不是被剥了几层皮才毕业的。
我在打造超人思维裡面,之所以能用有那麽多魔幻角度来拆解问题。
那是因为说穿了,那些看似魔幻的方法,本质是数学上用的解题、拆解、证明手法。
将找到的资源,储存到外部空间¶
我真正在技术上突飞猛进,是因为在 25 岁遇见了一位前辈。当时前辈在技术上领先我非常多,我当时本身也很崇拜他。
他本身非常喜欢写笔记,桌上常摆著笔记本,背包也摆著笔记本。口袋甚至还有个小本本。什麽东西都记一下。
我有天就忍不住好奇了。问他为什麽技术这麽厉害了,为什麽还一天到晚记来记去。还有,到底他记东西上有什麽诀窍。
他就说,没有,他只是怕自己会忘事情,特别是他专长领域是管机器的,有很多琐碎的东西要记下来。所以,他觉得自己会忘记的事东西,就习惯性写下来。
他也给我看了他的笔记本,裡面真的没什麽特别的,甚至只是他一些临时性的鬼画符。
我心想,前辈技术都这麽厉害了,还觉得自己会忘东西,所以记笔记。
我这麽废,怎麽可以不记呢?于是我就也买了笔记本,什麽都记。
开始记笔记之后,虽然我也只是记一些鬼画符的东西,没整理,但果然我能记得住的更多了。
后来,我觉得写笔记速度太慢。于是我就不把东西写在笔记上了。
我写在专案管理系统上。专案管理系统,比较像是任务系统。
比较有规模的网路公司,内部都会有专案管理系统,因为一套网站程式,本身可能要多个程序员一起写,所以内部多会用类似任务系统方式,把工程切碎,发给每个协作的工程师,当做任务解掉。
我们工程师,在写程式,其实并不像是作家一样,挥笔而成。
许多在资深工程师等级以下的工程师,更像是 "Google 答案并且拼凑起来"的“组装工程师”。
听起来你可能会觉得很废很难想像。但这却是实情,行业裡面更多人称呼自己是 Stackoverflow 工程师。Stackoverflow 是工程师的问答社区。通常我们上 Google 去找实施方案时,最后都会在 Stackoverflow 找到最终答案。所以大家就複制了上面的程式码,回去拼装修改。
如果你不是工程师,听到这件事可能会很震惊。我们工程师却觉得这根本是行业日常。
也因为我们的电脑上,不仅开了编辑器,还开了满满的 Chrome Tab。当时我觉得找问题因为电脑开始变慢了,常常关 Tab 会不小心关到刚刚找的答案,而且找到的都是网址或者是片段程式码。
于是我就养成了将网址与找到的答案,一五一十的都贴到任务系统的进度更新上。
只有我看的懂在记什麽也无所谓。这样反正我就算 Tab 不小心关掉了,还是可以回来这裡捞到研究进度。
后来,我却发现这样的习惯,大大改变我的效率,甚至产生巨大的质变。
因为我有写册子的习惯。所以我习惯在学会写一个功能后,想要把他写成一篇教程发出来。
这样我下次再写这个功能时,看著我的教程贴 code 就写完了。这样我再写代码的效率会快上非常多倍。
也因为我平常週一到週五工作时,都会把找到的资源,贴在我的任务更新下。而每一个任务,基本上就是一个功能。
导致我週末在写教程时,简直毫不费力。打开那些笔记与连结,我的记忆就回来了。
所我教程写的又快又好。曾经我的朋友还打趣说,我当年简直是霸屏 Ruby on Rails 界,凡是你想找到功能与问题,只要上 Google 一搜,几乎都可以在我的博客上找到中文答案 XD
而我也不是故意要霸屏,因为写教程实际上这是我週末整理知识的一种方式。
公开发表¶
几乎很多资深工程师,都有养教程以及养代码库的习惯。差别只是他们公开与不公开而已。
我当年也曾经问过前辈公开还是不公开的问题。他说他的习惯是公开,他说因为如果你公开贴在自己博客,还能在 Google 上搜回来。你不公开,难道自己盖个搜寻引擎吗?
我想想也是。这也就是最后为什麽我有那麽多教程放在网路上。
说穿了,是为了我自己找资料方便。
而且,公开写笔记并发表以后实际上非常多好处。
- 在科学上,完成了短时间複习、整理、重构的动作,写到长期记忆裡面
- 大家会称讚你慷慨
- 自己会因为这些公开的笔记,连结到想像不到的机会。认识很多不同的朋友,给你反馈。
- 这些意料之外的反馈,不但给自己带来修正的机会。甚至,在心理上,也会形同变动奖赏一样。
Addict = Trigger -> Action -> Dynamic Reward。
于是,学习编程,竟然就变成了上瘾好玩的真人电动,好玩到停不下来。