前言
本篇是对 2022-12-14
到 2022-12-19
这周生活的记录与思考。
本周同样因为疫情而居家办公(感觉这个开场白之后可以去掉了,已经是常态了),依然还是在“不务正业”地学前端,顺便工作写一点后端代码,有几天甚至不知不觉都已经拂晓了,感觉找回了去年在香港赶 due 和备战期末考的状态,但这次少了很多外界的压力和焦虑感,更加享受其中。
有过前一段时间天天加班到深夜的体验,才更加意识到能够自由支配一些时间,学习想学的东西,或是单纯和猫猫一起发呆的日子是多么珍贵。但是感觉已经有很久的时间都在状态调整和分享自己的一些日常,很久没有写些什么干货或是经验了,今天就来浅分享一下自己的一些学习经验、方法和思路吧,可能更多还是一些概念上的,后续(大概?)也有更具体的分享。
想了想还是补充了下面这两段话。
其实一开始只是想着该写年度总结了,于是看了看自己这一年(或者其实严格意义上是从 5 月才开始恢复更新的这半年)的文章,除了 5 月发了很多工具效率类的文章外,大多都是周报,一些思考、想法、情绪和碎碎念,虽然说更多只是一个表达欲的渠道,但偶尔也会惭愧自己讲情绪太多,似乎把博客作为了一个出口,于是想着还是能够带来一些干货吧,所以就有了这篇经验谈,不知不觉竟然也写了快 7000 字了。
年度总结也会有,会有自己这一年的各种事,失去的、得到的、值得感谢的、难免遗憾的,虽然也犹豫过要不要再提一些东西,但还是决定更真实地面对吧。毕竟所有东西都会过期,凤梨罐头也是,这一年也是,是这些喜怒哀乐构成了我的 2022,也构成了一个更加完整的我。
然后,会在 12 月 31 日发,一个对我挺特殊的日子。
从今年的某个时候开始,我在每篇文章加上了主题曲,五月天的《后来的我们》,一首我很喜欢的歌。今天换成了《Brand New Day》,垫底辣妹电影的主题曲,一直觉得很好听,也挺适合这篇文章。
如何学习一门新的技术
我的学习方法探索之旅
初探
自己以前并不算是一个很崇尚各种学习方法论的人,对这种“如何”体也比较无感,高中在阅读『如何阅读一本书』时也没能成功读完(?),总觉得这是一件很因人而异的事,看过许多帖子可能也比不上自己某个阶段的带点玄学的所谓“开窍”,当然,这里的开窍大多与天赋无关,只是在摸索中找到了一些自己的路子而已。
发生转变是高中一次在书店,遇到一些浙大的学生在售卖自己总结打印的高考备考资料和经验,出于好奇买了一本历史学科的,闲来无事就翻着看,里面有一些时间轴的整理和记忆的小技巧,后来真正学到这些知识的时候常常就能更加得心应手地运用,后来历史成为了我常常能拿年级前列的学科,慢慢也积累了我对历史学习的兴趣(甚至一度想报考历史系)。
现在想想,可能那本书上的内容本身并没有什么独一无二的部分,知识就是那些知识,只是从一个经历过高考且取得了不错成果的大学生视角来归纳方法,还是很有一种“降维打击”的效果的,这某种程度上也启发了我在其他学科的学习中也开始逐步探索自己的方法。
学习心态
本篇并没有打算(主要也讲不明白)介绍各种有理论基础的学习法,主要是关于“XX 学习法”这样的视频、文章有很多,可能经过一些总结和内化后也不如阅读原文,这里先推荐『是落拓呀』学长的这篇『我是如何学习一门新的技术或知识的?WW 学习法?以区块链为例。』,我刚开始学习区块链和很多其他知识的时候从中获益良多。
这次更多想从一个我觉得很重要但常常被忽略的点讲讲我的一些想法和经验 —— 学习心态。
大学被调剂到了英语专业,只花了大概半个学期的时间,我就非常清晰地意识到了这并不是一个我会持续投入热情并能够赖以为生的专业。但当时的自己还没有很清晰的目标,于是开始不停地学各种技能以缓解迷茫和焦虑。
因为在社团主要是负责一些“技术”相关的工作任务,当然,这里的技术主要是指平面设计、摄影和视频剪辑这样的技能。还记得我第一个重点负责的晚会项目有一个很赶的宣传视频/MV 的工作任务,印象里并不复杂,也没什么特效,就是一些视频的素材基础处理、拼接和导出,最多也就是适配不同尺寸的屏幕以达到不错的显示效果。
于是在一个周末,下载了 Adobe Premiere Pro(也就是俗称的 PR,一个万恶的折磨了我长达五六年的软件,也没想到后来自己的很多事都和视频剪辑相关,也是奇妙的际遇了),看了一些入门教程,两天赶完了。去交任务的时候社员包括部长都挺惊讶的,问我之前学过么,怎么那么快。
其实我对于视频拍摄、剪辑的了解也不过就是在高三时做了一个生日祝福视频,还是找朋友帮忙一起做的(好像用的是绘声绘影还是爱剪辑来着,也是好遥远的名词了,然后这位朋友现在在做导演、剪辑相关的工作,奇妙际遇 * 2),而在用 PR 时也下意识地并没有觉得这是一个很难的软件或者说没觉得剪辑是一件很难的事,学习起来也就很顺其自然,遇到不会的问题现查就可以了,也并没有太多的技术含量,只是我去学了,仅此而已。
而很多朋友可能会在刚开始学习一个自己不了解的东西时候有一种很本能的畏惧感,觉得它很复杂,自己给自己设置了心理障碍,直到最后也没下定决心去学,后续我在带部门和社团进行教学的时候也大多用一个基础的实战项目带大家了解到这并不是一件那么“高不可攀”的事,打破了这一层心理因素并调整了学习心态后,学习操作本身就很容易了,效果很好。
当然这些只是一些通用性的技能,真正编程相关的技术还是差异很大的,但这一方面的心态变化历程可能就说来话长了,因为也常常被问到,也算是顺便提一下自己的文科转码之旅了。
我的文科转码之旅
VB 入门
作为理工院校的文科学院,我们非常具有理工特色的就是需要学计算机,但是只是基础的 VB (Visual Basic) 语言。得益于浙江的学业水平考试的信息技术学科需要 VB 上机考,已经在高中有过一些基础的了解,再学起来也比较轻松,虽然语法都需要重新学,但同样的,在心态上也觉得是一件并不那么难的事。
当时由于身边许多朋友都是初接触编程语言,对语法和各种符号有着非常强烈的畏惧感,所以我在学的时候以自己的思路和解释整理了一份几十页的笔记,从一本书变为了薄薄的几十页纸,朋友们在学习的心态上有了很大的变化,卓有成效(后来还“继承”给下一届,有成为了传说中的学长学姐宝典的经历也是一件很开心的事了)。
转换方向
重温了 VB 后,突然觉得自己很喜欢这种能够通过代码来创造、实现一些想法的感觉的,然后也觉得某种程度上还算“擅长”,遂萌生了一个在当时看来有些大胆的想法 —— “是不是我也可以把计算机作为自己的未来方向”。
当然,因为学校莫名的“高考文科招生不能转理工专业”的规定,转专业这一条路已经被堵死,武大计算机辅修的申请也因为绩点差一点而失之交臂。
算了,那就自己学吧。
于是向认识的在华科辅修计算机的朋友要了课表和教材,当时的心态很简单,可能科班的很多课我确实没有那么多时间精力来通过自学同步补,但是辅修的课程负载还是可以接受的。于是,一边补着操作系统、计算机网络这些基础课程,一边学 Python(没错我也是从廖雪峰老师的 Python 课程开始的),开始了自己的“不务正业”之旅。
艰难前行
中间有过无数次挣扎和觉得自己是个废物想放弃的深夜时刻,以及在挣扎期间因为迷茫去做过公众号运营、产品经理、区块链游戏策划、平面设计等各种岗位实习/兼职以及后来注册公司开了工作室做视频剪辑等等的经历,这就在另一篇『周报 #19 - 忆一次创业经历』了。
自己那几年真的在这条路上坎坷地走了很久,有过盲目地学各种语言(因为觉得写上自己会一些小众语言听起来很酷),有放弃枯燥的基础知识学习去写 Web 和小程序(因为可以赚外快),有觉得不需要去理解各种底层原理和数据结构自己也能写好代码的误区,有学了很久但是似乎长进并不明显的瓶颈期,当然,也有很多开心的收获,但这已经是日常了,就不细数了。
后来出于职业规划(诚实来讲,大多英语专业本科出去在现在的环境想找一个技术工作确实是简历都递不出去的,无奈却也不得不面对的现状)与想在具体的领域有所造诣的考虑,我在毕业后 Gap 了一年去申请了香港的计算机系研究生,这部分在『23 岁的自白:去追寻意义』里有提到,因为之前有拿到了台大计算机一名区块链方向教授实验室的邀请最后却被鸽的对我打击挺大的事,也算是圆了自己的一个梦(你不要我,我值得比你更好的)。
摆正心态
其实在后续的学习中,自己受益最大的是从来都没有把“我是一个英语专业的学生”作为自己学不好的理由,毕竟现在已经没有什么太高的知识获取壁垒,别人能学到的知识我也能够在很多公开课、教程中学到,甚至有了一些自己选择的权利,可以找最好的最适合的课程进行学习,以至于刷了好多门 MIT 的公开课和 Coursera 的课。
包括真正去参加港大计算机学院的面试时,我也没有把原专业作为自己的弱项避而不谈,而是提到了自己作为一个来自不相干专业的学生对于热爱的专业所付出的努力和获得的成果,包括对于专业和行业的一些探索和想法,相信对于最后的 offer 也有一定帮助。
鸽了的文科生转码指南
题外话,关于文科转码其实之前自己一直有想写一个指南,大概就叫『文科生编程入门/转码指南』之类的(虽然听起来就很营销号的 Python 广告),但总是觉得无非是一些教程推荐和申请经验,最后的结果运气也占了很大的成分,分享出来也并没有太多的干货,反而更容易像是一种幸存者偏差的“炫耀”,于是一直没动笔。
但现在经过了一年多的工作和探索学习,自己也算是真正在程序员这个职业或者说区块链这个行业勉强站稳了脚跟,也觉得自己或多或少在学习新技术/知识上有着一些小经验,所以打算重启这个想法了,也挖一个小坑,慢慢填。
但其实想做这件事并不是说标榜转码有多好或是这件事有多容易,行业确实有一定红利,但转码和技术学习的个中艰辛苦楚也有不少,有很多熬夜的夜晚,也有很多怀疑自己的时刻,只是不值一提罢了。而且终究还是靠一点点的积累,就像那句朴实却很真切的道理 —— “无他,唯手熟尔”。
在 Podcasts 和推特上也见到过很多崇拜的技术大佬,也不乏转码的,相比之下,以自己的能力尚不足以去教导大家些什么,但想把这些写下来其实也只是想传达一下自己的想法与心路历程,或多或少让对这一领域有所好奇的人不要因为心态问题怯而不前。
有相关经验心得的也欢迎一起参与贡献。
我是如何学习的
回归正题,浅谈一下我学新技术或是接触一个新领域的一个基本模式吧,纯个人经验分享。
信息源采集
可能由于之前学习模式和个人信息控特质的一些影响,我非常倾向于在学习一项新的技术/知识时收集很多信息源,可能比起一些搜索引擎和算法推荐的结果,我更习惯去一些喜欢的 Youtuber 或是个人博客作者的历史视频/文章中进行翻找,常常有一些意外之喜(主要是那些大佬都太强涉猎太广了,好多个之前看 Python 和 Go 的博主都更新了区块链的很优质的内容),从他们的视频/文章中能看到学习中的坑,以及这项技术后面的实际应用。
比如在推友『STRRL』的博客『strrl.dev』中能看到他折腾的很多小玩具,有些就是我同样需求但是没想到(或者做不到)能够以这种方式实现的,能有很多启发;以及在看另一个推友『Nova Kwok』的博客『Nova Kwok’s Awesome Blog』时常常会发现,“这个人怎么什么都会啊”。
除了具体的知识和教程外,也能够从他们身上看到自己所向往成为的样子,能有更多的好奇心与探索欲,对未来有更多期待。
初步了解
在选择教程方面,我之前也提过很喜欢以 Crash Course 的方式开始,直译成“XX 小时带你学会 XXX”好像有些营销号的感觉,但 Youtube 上真的有非常多这种系列,直接搜索比如『Next.js Crash Course 2022』就会有很多很有意思的结果。
我前段时间做一个 Ð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 相关购买的一些课(很多是前两天活动价购入,还没开始看)。
成果输出/项目实践
之前跟我 leader 聊过学习方式,他学习一个新的语言/框架会先自己摸索着把项目运行起来,自己尝试着改点东西,然后可能项目里直接用上了,遇到问题再一点点解决。这是一种很高效的掌握方式,而且可能在项目工程应用上更加普适,但可能我还是偏学院派一点,会选择看课/看教程这一种起初效率相对较低,但能够在一开始就掌握一些最佳实践,且在后续遇到问题在心态上更稳一点的方式吧。
内心 OS:要是我有我 leader 那样前一天晚上刚发现一个框架,第二天就把项目架子重构了的可怕工程能力,我还看什么课啊。
看课也有一些完成作业、项目实践和最后的课程结业的成就感,能够在学习的各个阶段里给自己一些动力,比如我一周多学完的 React 课程拿到证书,并且成功用到了实际的 Side Project 项目中,还是蛮激励自己继续下去的。
当然,这种方式也还是有一个门槛就是很多这样比较高质量的课都还是在 Youtube 或是一些国外的平台的,基本只有英文,所以还是需要有一些克服的,不过也都会提供中文字幕,但我个人还是更倾向于英文来看的,毕竟也会牵扯到很多术语,而且机翻很一般。
另外,看课由于一般周期比较长,很容易中途放弃或是拖延到忘记了前面的内容,不进行实践或者记录很容易忘记,为了克服这一点,我采取了两种很简单却行之有效的方式 —— 以输出为导向与以结果为导向的学习。
输出导向很好理解,我有在更新自己的个人博客,曾经技术干货还是很多的,现在在日常博主和工具效率博主之间反复横跳,我会在学一门技术/知识的时候分屏在 Logseq 中记录下关键笔记,注意,这一定不能是直接粘课程资料,而是更多自己在编辑器里敲一遍并且勤加注释,顺便把关键的一些比如命令或者代码片段直接截图保存一下,完成后消化一段时间笔记。
过了 1-2 周后,再重新去看笔记,并且把笔记整理成文。这里有两点非常重要,一个是过 1-2 周,我们刚学完时会有比较深的印象,也常常会有一种“我已经会了”的错觉,但其实掌握得不一定很扎实,可能只是一些即时的记忆,1-2 周正好是一个不错的消化周期;而整理成文则是另一个很关键的点,我们常常会写一些零散的笔记或是思维导图,但其实能把一个知识点组织成文,用自然语言讲出来,让读者能够看得很流畅,是一件挺具有挑战性的事。
这时候上文的那些注释和截图就有用场了,我在写文章时有自己和自己对话以及反复回看的习惯,就是比如写完一个模块后,会常常问自己,如果我是读者,我在这里会提什么问题,我该怎么解答,那其实常常会发现一些讲得不够清楚的点,再加上反复回看后添加的补充说明,成文的时候一般来说还是一个挺行文完整且符合自己思维逻辑的技术博文了,作为以后温习或是当作参考文档查询也会比看别人的资料要有效得多。
其实更好的方式是录视频讲解,能把一件事在视频中讲清楚比起写明白的难度还是更上了一个层级的,但我还在克服需要录制视频讲课的一些心理障碍。
明年的一个小目标就是成为一名技术 Youtuber/up 主了,可能最后成为了萌宠博主呢,毕竟谁看我啊,点开周报的都是来看捏捏的吧,我今天就不发,囤到年终总结攒一波出片。
除了输出外,我还有另一个并不建议大家轻易尝试的方式 —— 以结果为导向的极限操作。其实就是把一些超出自己目前能力范围(但也别太多)的任务先接下来,以结果和 ddl 来逼自己快速掌握,以及遇到问题会更拼命想办法去解决。
这个可能和个人心态、信心和多线程能力有关,我是一个遇事还算冷静处理的人,经常几个任务并行但也不至于会被压垮,而这么多年踩坑的经验也让我明白了一个朴实的道理 —— 再复杂的任务总是奇迹地能在 ddl 逼近之前的几分钟搞完,大概这才是第一生产力吧。
但现在随着做的项目越来越复杂还是少这样吧,万一翻车了呢。
总结
剩下的其实也没有太多方法可讲了,以上其实也都只是学习一门技术或知识的一些经验谈,学完了可能也只能说刚入门,工程能力的培养没有捷径,只能靠不断实践积累咯。
技术是一件很有趣且不同阶段去了解学习都有截然不同感受的事,就像我 leader 是一个二十多年工作经验的强者了,依然经常在半夜突然发个消息给我,说“XXX 框架/工具挺有意思的,可以玩一下”。
我很喜欢他的这种说法,“玩”一下,我们不需要再去纠结或是辩驳把爱好作为职业是一种怎样的体验,因为我们本就乐在其中,工作不过是顺便能够糊口的副产品罢了,也希望大家都能找到自己的心之所向吧。
自己并不是什么大佬,目前阶段很难能够在具体的一些技术和领域写出很深度的文章(但是也有在努力了),于是想把自己的各种经验作一些分享吧,后面也想针对一些更细节的技术输出一些视频教程和文字教程。
让我数数今天挖了几个坑要填。