编注:作者为香港大学计算机学院硕士,目前是区块链开发从业者。


以前并不算是一个很崇尚各种学习方法论的人,对这种「如何」体也比较无感,总觉得学习是一件很因人而异的事,常常固守着自己原本的习惯与方法。

发生转变是高中有一次在书店,遇到一些浙大的学生在售卖自己总结打印的高考备考资料和经验帖,出于好奇买了一本历史学科的,闲来无事就翻着看,里面有一些时间轴的整理和记忆的小技巧,后来真正学到这些知识的时候常常就能更加得心应手地运用。现在想想,可能那本书上的内容本身并没有什么独一无二的部分,只是从一个经历过高考且取得了不错成果的大学生视角来归纳方法,还是很有一种「降维打击」的效果的,这某种程度上也启发了我在其他学科的学习中也开始逐步探索一些新的方法。

本篇并没有打算(主要也讲不明白)介绍各种有理论基础的学习法。主要是关于「XX 学习法」这样的视频、文章有很多,可能经过一些总结和内化后也不如阅读原文,这里推荐「是落拓呀」学长的这篇「我是如何学习一门新的技术或知识的?WW 学习法?以区块链为例。」,我刚开始学习区块链和很多其他知识的时候从中获益良多。

我更想从以下两点讲讲我的一些想法和经验 —— 学习心态学习模式

学习前的准备:摆正心态

面对一项新事物时的心态会很大程度上影响我们对它的接纳程度,在学习前摆正心态能够很有效地提升自己的学习效率。

很多朋友可能会在刚开始学习一个不了解的东西时有一种很本能的畏惧感,觉得它很复杂,自己给自己设置了心理障碍,直到最后也没下定决心去学。例如,曾经我在带部门和社团时会培训一些实用软件技能,部员们常常会因为软件复杂的操作界面与各种快捷键而心生畏惧,得知这一点后,我在进行教学的时候大多会先用一个基础的实战项目带大家了解到这并不是一件那么「高不可攀」的事,打破了这一层心理因素并调整了学习心态后,学习软件操作本身就容易很多了。

但心态调整往往不是一件可以一蹴而就的事,难免会经历许多犹豫与自我怀疑的时刻。我大学主修的是英语专业,后续经过一步步自学,成功转码攻读了香港大学计算机系研究生,期间经历了许多坎坷,心态也是一波三折,但也算是一个「从零开始」学习探索的过程。

我大学被调剂去了并不喜欢的英语专业,大二时感觉自己很喜欢这种能够通过代码来创造、实现一些想法的职业,遂萌生了一个在当时看来有些大胆的想法 —— 「是不是我也可以把计算机作为自己的未来方向」,开始通过自学走上转码的「不务正业」之旅。

即便已经选择了转码而非跟着计算机系学习这样相对平缓的转换路径,中间依然有过无数次挣扎、觉得自己是个废物想放弃的深夜时刻。在转码过程中,有过盲目地学各种语言(因为觉得写上自己会一些小众语言听起来很酷),有过放弃枯燥的基础知识学习去写 Web 和小程序(因为可以赚外快),有觉得不需要去理解各种底层原理和数据结构自己也能写好代码的误区,也有学了很久但是似乎长进并不明显的瓶颈期。

焦虑、急于求成与自我否定成为了那几年的主线关键词,也常常怀疑自己是否真的能够在这条路上继续走下去。直到后来自己才逐渐从这种负面心态中调整过来,克服了对这些看上去「很难」的新领域知识的畏惧感,从夯实基础开始,一步步学习提升,最后也终于转码成功。

反思下来,其实在后续的学习中,自己心态上受益最大的是没有把「我是一个英语专业的学生」作为自己学不好的理由或是不如他人的自我安慰,毕竟现在已经没有什么太高的知识获取壁垒,别人能学到的知识我也能够在很多公开课、教程中学到,甚至有了一些自己选择的权利,可以找最好的最适合的课程进行学习,比如刷了好多门 MIT 的公开课和 Coursera 的课。

包括去参加港大计算机学院的面试时,我也没有把原专业作为自己的弱项避而不谈,而是提到了自己作为一个来自不相干专业的学生对热爱的专业所付出的努力和获得的成果,包括对于专业和行业的一些探索和想法,相信对于最后的 offer 也有一定帮助。

有了这样的认知前提,自己并不会将这些新技术/知识看得那么遥不可及,而是细化为一个个小目标去克服,学起来自然事半功倍。调整了学习心态后,还需要一个好的学习模式才能在较短的时间内掌握一门新的技术/知识。

学习模式

信息源采集

我非常倾向于在学习一项新的技术/知识时收集很多信息源。除了一些搜索引擎和算法推荐的结果,我还习惯去一些喜欢的 Youtuber 或是个人博客作者的历史视频/文章中进行翻找,常常会有意外之喜(主要是那些大佬都太强涉猎太广了,好多个之前看 Python 和 Go 的博主都更新了区块链的很优质的内容),从他们的视频/文章中能看到学习中的坑,以及这项技术后面的实际应用。

除了具体的知识和教程外,也能够从他们身上看到自己所向往成为的样子,能有更多的好奇心与探索欲,对未来有更多期待。

初步了解

在选择教程方面,我之前也提过很喜欢以「Crash Course」的方式开始,直译成「XX 小时带你学会 XXX」有些营销号的感觉,但 Youtube 上有非常多优质内容,比如搜「Next.js Crash Course 2022」就会有很多很有意思的结果。

boxcnljaIEuITaFBPj1ZYtpf8gc

我前段时间做一个 ÐApp Demo 的时候因为有用到 Next.js 做基础的前端显示,就看了一下搜索结果中 Traversy Media 的这个 Next.js Crash Course,很喜欢他的讲解方式,在一个小时里就让我对这个框架包括整个前端开发语言有了基础的了解,虽然没经过系统性地学习自己很难直接上手做一个项目,但在后来的项目中看到前端代码中出现的一些语法也能知道其作用,在别人框架的基础上做一些自己的定制化修改也比较容易。

比如这就是我看完 Next.js Crash Course 后通过另一个很喜欢的 Youtuber devaslife 开源的一个「GitHub - craftzdog/craftzdog-homepage」项目修改的个人主页,「Yu - Homepage」,花很短的时间就能做出一个很美观的小项目,也是在开始学习一项新技术时候很好的动力。

深入学习

但真正要写一些企业级项目或是自己从头做一个复杂的项目,仅仅靠 Crash Course 是远远不够的,会需要更系统的学习和很多项目的实践,这个时候需要一些更实战性的课程,这一点看个人偏好,很多 Crash Course 作者其实有自己的训练营或者付费教程,如果找到了喜欢风格形式的博主则可以跟着他继续学下去。

我个人更偏好的是 Udemy 平台,也算是一个比较老牌的在线课程网站了,虽然价格看起来比较离谱但是基本上都在打骨折,总是各种理由发优惠券,让我总是担心它哪一天就倒闭了,平均一门课大概就 9.99-12.99 美元左右,折合人民币 100 不到,还是很值得的。

比如我上文提到的 Brad Traversy 就在 Udemy 上开设了 React、Next.js、Tailwind CSS 等课程,因为我确实很喜欢他这种以项目为导向的方式和他的教学风格,虽然在 Udemy 上相关课程有比他购买/评分都高很多的课,我依然选择了他的,这些是我学 Web 相关购买的一些课(很多是前两天活动价购入,还没开始看)。

boxcnuJdqTJMuw3Czt9s6yIWqzg

成果输出/项目实践

之前跟我 leader 聊过学习方式,他学习一个新的语言/框架会先自己摸索着把项目运行起来,自己尝试着改点东西,然后可能项目里直接用上了,遇到问题再一点点解决。这是一种很高效的掌握方式,而且可能在项目工程应用上更加普适,但可能我还是偏学院派一点,会选择看课/看教程这一种起初效率相对较低,但能够在一开始就掌握一些最佳实践,且在后续遇到问题在心态上更稳一点的方式吧。

(内心 OS:要是我有我 leader 那样前一天晚上刚发现一个框架,第二天就把项目架子重构了的可怕工程能力,我还看什么课啊。)

看课也有一些完成作业、项目实践和最后的课程结业的成就感,能够在学习的各个阶段里给自己一些动力,比如我一周多学完的 React 课程拿到证书,并且成功用到了实际的 Side Project 项目中,还是蛮激励自己继续下去的。

boxcnmnP2s9V7s10lRUFlO3mFQd

当然,这种方式也还是有一个门槛就是很多这样比较高质量的课都还是在 Youtube 或是一些国外的平台的,基本只有英文,所以还是需要有一些克服的,不过也都会提供中文字幕,但我个人还是更倾向于英文来看的,毕竟也会牵扯到很多术语,而且机翻很一般。

另外,看课由于一般周期比较长,很容易中途放弃或是拖延到忘记了前面的内容,不进行实践或者记录很容易忘记,为了克服这一点,我采取了两种很简单却行之有效的方式 —— 以输出为导向与以结果为导向的学习。

输出导向很好理解,我有在更新自己的个人博客「Pseudoyu」曾经技术干货还是很多的,现在在日常博主和工具效率博主之间反复横跳,我会在学一门技术/知识的时候分屏在 Logseq 中记录下关键笔记,注意,这一定不能是直接粘课程资料,而是更多自己在编辑器里敲一遍并且勤加注释,顺便把关键的一些比如命令或者代码片段直接截图保存一下,完成后消化一段时间笔记。

过了 1-2 周后,再重新去看笔记,并且把笔记整理成文。这里有两点非常重要,一个是过 1-2 周,我们刚学完时会有比较深的印象,也常常会有一种「我已经会了」的错觉,但其实掌握得不一定很扎实,可能只是一些即时的记忆,1-2 周正好是一个不错的消化周期;而整理成文则是另一个很关键的点,我们常常会写一些零散的笔记或是思维导图,但其实能把一个知识点组织成文,用自然语言讲出来,让读者能够看得很流畅,是一件挺具有挑战性的事。

这时候上文的那些注释和截图就有用场了,我在写文章时有自己和自己对话以及反复回看的习惯,就是比如写完一个模块后,会常常问自己,如果我是读者,我在这里会提什么问题,我该怎么解答,那其实常常会发现一些讲得不够清楚的点,再加上反复回看后添加的补充说明,成文的时候一般来说还是一个挺行文完整且符合自己思维逻辑的技术博文了,作为以后温习或是当作参考文档查询也会比看别人的资料要有效得多。

其实更好的方式是录视频讲解,能把一件事在视频中讲清楚比起写明白的难度还是更上了一个层级的,但我还在克服需要录制视频讲课的一些心理障碍,也许后面会通过这种方式来进行输出。

除了输出外,我还有另一个并不建议大家轻易尝试的方式 —— 以结果为导向的极限操作。其实就是把一些超出自己目前能力范围(但也别太多)的任务先接下来,以结果和 ddl 来逼自己快速掌握,以及遇到问题会更拼命想办法去解决。

这个可能和个人心态、信心和多线程能力有关,我是一个遇事还算冷静处理的人,经常几个任务并行但也不至于会被压垮,而这么多年踩坑的经验也让我明白了一个朴实的道理 —— 再复杂的任务总是奇迹地能在 ddl 逼近之前的几分钟搞完,大概这才是第一生产力吧。

但现在随着做的项目越来越复杂还是少这样吧,万一翻车了呢。

总结

剩下的其实也没有太多方法可讲了,以上其实也都只是学习一门技术或知识的一些经验谈,学完了可能也只能说刚入门,工程能力的培养没有捷径,只能靠不断实践积累咯。

技术是一件很有趣且不同阶段去了解学习都有截然不同感受的事,就像我 leader 是一个二十多年工作经验的强者了,依然经常在半夜突然发个消息给我,说「XXX 框架/工具挺有意思的,可以玩一下」。

我很喜欢他的这种说法,「玩」一下,我们不需要再去纠结或是辩驳把爱好作为职业是一种怎样的体验,因为我们本就乐在其中,工作不过是顺便能够糊口的副产品罢了,也希望大家都能找到自己的心之所向吧。

自己并不是什么大佬,目前阶段很难能够在具体的一些技术和领域写出很深度的文章(但是也有在努力了),于是想把自己一直以来受用的学习经验作一些分享,希望对大家有所帮助。

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀