在极客时间录课的总结
(一)
昨天晚上忙了2个小时,不对,确切地讲,是今天凌晨忙活了2个小时,终于将《微信小程序全栈开发实战》所有已发布的源码链接,都在评论区发布了。今天早上起来,我看到大约165条评论被纳为精选。
现在读者看到的源码链接,是这样的:
每节课下面都有一个源码下载链接,如果想了解某节课对应的源码,直接从这个精选留言下载就可以了。
自己制定的计划自己买单
昨天从零点到凌晨1点半,我干到了97课,评了93节,我是从171课倒数往前评的。有点困,就想去睡觉,刚和衣躺下,一想不对。现在这个点正是程序员们学习的时候,想我20多岁的时候,不都是这个时间点披星戴月写代码吗?倘若有人此时学习,因为我未及时置评放链接而抓耳挠腮,我罪过不是大了。
于是我又爬起来,从凌晨1点半干到2点半,终于将所有课程的源码链接都评上去了。这样一来,每节课读者只要看一眼评论区第一条置顶的评论,就知道这节课对应的阶段是哪个,不必再去仓库里费心查找了。
在源码管理上的经验总结
如果你问我为什么对这件事这么上心,是因为源码没有贴上去吗?
不是。源码都在仓库里。因为我第一次录课,经验不足,在源码管理这件事上几番周折,走了不少弯路。
最早的时候在第2章,我用git.weixin.qq.com管理源码,这是微信团队整的git仓库。使用它每次下载源码都要扫码登录。就是下载一个源码,你让我登录干啥?github、gitee什么时候干过这事啊?
体验很不友好。很快,第2章没录完,就就把源码切到了gitee上。开始了章节号码+标签说明+课程名称的时代。
这个时期录了十几课,后来考虑到在已发布课程的目录上,有3.1、4.2这样的章节编号,于是到了第3章,标签说明与课程说明我犯懒就去掉了。我心想,既然每节课都有编号,那直接读者带着课程编号找源码就好了。
但是事情不久就发生了变化,因为读者感觉3.1、4.2这样的章节编号混乱等原因,课程上只保留了一个从1开始开始统一编号和名称,不再有章节编号了。
而我后知后觉意识到这个问题的时候,源码标签当时已经变成了这个样子:
标签上什么都没有了,除了课程章节编号。这个章节编号在课程目录上还是不显示的。在这种情况下,读者怎么查找课程对应的源码呢?
所以,看到这个问题后我就睡不着觉了。有人可能会说,把源码标签修改一下,加上那个从1开始的序号数字不就可以了吗?
但是标签打上去就是历史了,是不能修改的。这也是使用标签的限制。还有人可能会质疑,为什么要让章节编号去掉呢?这个可以保留,但同时统一编号数字也应该保留,可能这样更好一点。但平台有平台统一的规范,所有课程只能用一个软件架构,不可能为某节课做定制功能的。所以这条路也是不通的。
再到后期,为了读者查找源码方便,也为我自己查找方便,我重新又严格要求自己,在打源码标签时,将对应的课程名称也打了上去。有了这个名称,即使章节编号对不上,依赖名称也能对上。
昨天晚上我自己过课,就是把课程自己听一遍,看看有没有问题,有什么需要改进的。能改进的点还是挺多的,最大的一点,我总觉得自己该减肥了。大脸把整个视频都盖上了,感觉学员看了都可能觉得我累。还有最重要的一点,就是源码。
我尝试做为一个读者,下载某节课对应的源码,从源码仓库链接点进去,切到tags标签下,150多个标签真让人眼光缭乱。基于上面我们已经聊到的原因,想依赖一个从1开始的10、30这样的统一数字编号,和一个课程标题名称,想从源码堆里翻出它的源码,真的不容易。
因为标签命名规则不统一,因为有的课程有源码标签、有的还没有,因为有的有标题描述、有的还没有,等等,想找一个源码真不容易。想到这里,所以我才睡不着了,即使已经很累了,1点半了又爬来了,把所有源码链接都评上去了。现在读者看到的源码链接,是这样的:
每节课下面都有一个源码下载链接,如果想了解某节课对应的源码,直接从这个精选留言下载就可以了。
学习是一个不断自我否定的过程
有人可能会讲,为什么每节课都要有一个源码链接呢?
这源于我自己的坚持。我觉得咱们人的学习,认识过程都是螺旋上升的,是像绕山公路一样盘旋而上的,并不是像电梯一样直入云霄的。基于这个认识,我认为在一个阶段,对应每节课,都应该有它的阶段性源码。
在《微信小程序全栈开发实战》这个课程里面,有明显的好几个地方是这样的:前面课程里面在讲另一个主题时,将一部分代码实现的并不完善,是有缺陷的,这个缺陷是在后面课程里面发现并完善起来的。我很高兴看到很多读者,纷纷在留言时留言,说某课某代码有问题,这说明他思考了,在真正的学习。
学习的过程,就是一个不断推翻旧认知、建立新认识的过程,这肯定是一个螺旋上升的过程,是一个包括了自我否定的过程。基于这一点考虑,所以课程里面的源码,一定要与课程对应,是阶段性的阶段。
并且我也鼓励读者在学习者,看当课对应的阶段源码,而不是git仓库里的最终源码。而当我发现,读者在学习时,不能很快找到阶段源码时,我就很着急了。
一体化的Electron学习环境
上面讲的是我在录课过程中,在源码管理方面犯的错误,接下来我想分享一下,如果我重头开始录课,我会如何管理源码。
可以使用分支,分支名称对应着从1开始的课程编号,在分支的仓库描述里面,直接放上课程名称。这样读者在学习的时候,基本只要用一个git指令就可以了:
git checkout $num
学习哪一课,就check哪一课的源码。这样多简单。
这样还有一个附加好处,分支是可以修改的,分支名称、分支描述都是可以修改的。即使课程编号有变化,也有补救的措施。不像源码标签,打了以后就不好修改了。打源码标签这种方式,适合大佬,非常有经验的大佬,十拿十稳的那种;像我等,适用使用分支。
此外,我还有一个“大胆”的想法。因为小程序与web都是在可以直接在页面上展示运行结果的,我们看一下微信的官方文档就知道了,我们可以将课程与源码,在网站上直接做一个对应,也就是说,我学到某课的时候,比如第100课,旁边自动就出来第100课的源码,并且直接就可以在线预览效果。如果读者愿意,还可以直接启动微信开发者工具,在本地进行修改。
怎么实现这个功能呢?做一个Electron客户端软件,既可以展示web页面,又能呼起本地软件,还跨平台,上面提供的功能大体都是可以实现的。这是一个立体的、一体化的学习环境。
唯一美中不足的是,Electron的编译简直就是一个噩梦,不然我真想业务找点时间写写这个软件。
欢迎留言。
(2021年01月15)
后记:
昨天只算小忙。我有一次周未录课,因为那一周特别忙,白天一直给学生上课,根本没时间备课,周五晚上备课到第二天早上5点多,简单吃个早点,就打车去录音棚了。 不是我不想休息,也不是我贪财,是责任,答应的事,对读者做出的承诺,就要尽力做。 人都说老一辈人傻,有的人堵枪眼,有的人身体被火烧着了都一声不吭,有的人不怕疼用身体顶着炸药包炸桥梁。他们根本不是傻,是因为他们心里有信念,那信念像磐石一样不可动摇,为了维护信念,甚至不惜损害自己的健康,甚至牺牲生命。 我当然没有达到这种高度,但是如果我在那个年代,我很有可能就是那样的人。 包括疫情期间去武汉逆风支援的医生也是,我不是医生,我是医生我也会那样做。从这些年我干过的傻事来看,我肯定有这种傻劲。
(二)
竭尽所能,这既不是一句口号,更不是感动自己的鸡汤。所有努力都必须是真实的,脚踏实地的努力,因为结局不会陪我们演戏。
昨天我听樊登讲《准备》,特别有感触。很少见樊老师将某本书讲了45分钟以上,这本书讲了78分钟。在讲解视频开始的时候,樊老师介绍说,美国教育工作者黛安娜·塔文纳的这本书有国内人大附中校长等校内教育大伽的推荐,听了之后,果然名符其实,非常值得推荐。这本书的内容很丰富,在此仅列举与本文有关的两点:
- 竭尽所能
- PBL
竭尽所能
先说第一点,竭尽所能。塔文纳说:
竭尽所能不仅是一句口号,它是我们的文化,是我们做事的一种思维方式和行为准则,是驱动我们前进的力量。我们要始终坚信,总有办法打开一扇锁着的门。
因为她坚持不放弃任何一个孩子,有一次她为了让一个孩子回学校上学,拿到一把改锥跑到孩子家里要撬锁,“总有办法打开一扇锁着的门”就是从里来的。塔文纳自己童年非常不幸,有几次都差点被动辍学,她有这个坚定的信念,与她的童年不幸遭遇是分不开的。
竭尽所能是一种执念,是一种内心坚信必然如此的源动力。我在极客时间录课,是从每日一课开始的,当时小楠是我的责任编辑,负责和我对接。自从开始和小楠合作后,我发现我的内心就一直在受打击。为什么?
因为我的稿件递交上去,不行,打回来修改;修改了又递交上去,还不行,又打回来修改。前后我记得我和小楠在电话里沟通过数次,每次都至少有半个小时以上。做为一个出版过计算机图书,有十几年博客写作经验的作者,我感到的并不是生气,而是惭愧,因为每次修改的理由都很充分。
虽然一件事情站在不同角度,得出的结果是同的,甚至有可能是截然相反的评价。但在稿件修改和视频录制这件事上,我是新手,并且编辑代表的不是她个人,她代表是极客时间整个团队,她给我的建议是经过N多编辑实践之后得出的智慧。有些事我们不懂并不可怕,但如果我们不知道自己不懂更不怕。我们要感谢指出我们不足的人。所以,在改稿这件事上,我从来没有任何怨言。每次来活了,我都是挤出时间,尽快完成,马上完成,马上反馈。
我们今天有微信、邮箱等各种及时沟通工具,相比邮局时代,效率不知道快了多少倍。如果编辑和作者通过信封反馈与改稿,可能半年甚至一年才能完成这个过程。
我到现在还清楚地记得,在每日一课录制结束时,小楠送我下楼问我的一句话,她说:“老师,你的一丝不苟真的让人佩服!”
听到这样的肯定我有点不好意思。由于自己经验缺乏,让对方付出了更多的工作时间和精力,怎么好意思再得到赞美。我说:“我觉得做什么事情,要么不做,要做就要竭尽所能,把事情做好!”
其实小楠不知道,在录课这件事上我特别害怕失败,因为我失败过一次。大概在2018年,我受某个机构邀请,去一个录音棚录课。当时这个机构为了录这个课,租了一天的场地,花了不少钱。当时我没有经验,我以为我到了录音棚,打开电脑自然就能录好。结果那次我搞砸了。真真正正的搞砸了。录制这个事情,就像即兴演讲一样,真的是要准备的。
在极客时间录制《微信小程序全栈开发实战》的时候,计划是每周更新五节,因为开录后我的时间一直都很紧张,白天要在学校讲课,晚上还要备课,只能周末去叶青北园大厦录制。有一次周五晚上我记得很清楚,按计划第二天周六要录制了,我一点还没有备课呢!
怎么办?
所以那天晚上一宿没睡,第二天早上5点的时候把稿子发给了主编。因为我的拖延,编辑只有两个小时的审查、修改时间。
这就是竭尽所能,不做就不做,要做就做好。所以当我听樊登老师讲到塔文纳竭尽所能要让每个学生都考上大学时,我特别有感触。那是她的执念。
什么是PBL?
再说第二点,PBL。什么是PBL,它是Project-based learning的简写。这个词我也是听《准备》学来的。我原来没有听这本书之前,我写过一篇文章叫《关于知行合一的人工案例实践技术学习理论》,当时我还不知道PBL,如果我知道的话,我就不会大言不惭地涂这篇文章了。原来我想到的内容,这个世界上早有人想过并付诸实践了。读书很重要,这也是领读人的价值所在。
我在罗胖2020-2021跨年演讲中,听到了北京九渡河小学的案例。这个小学很成功,这个小学的学生不上课,上学就是学习磨豆腐、剪纸、制灯笼,这些都是一个个与身边生活结合紧密的实际项目。以磨豆腐为例,学生不仅要拜村里农民伯伯为师把豆腐学会,还要自己写宣传文案,把豆腐卖到村子里。老师则是负责把小学里的知识点,掰开了揉碎了,放在项目里。
九渡河小学的案例,与塔文纳的PBL理念大概是一个意思。
去年年底我去东北一汽大众企业做过短期的企业内训,既讲师,又带学员做项目。短短5天,学员既学习了新语言新技能,又将项目落地了。我回来以后,我自己都惊诧自己居然坚持下来了。有两点困难:一,我事先没有任何准备,现场了解需求现场开发,一边开发一边给学员讲解;二,学员是零基础或完全接近于零基础的,我不但要讲明白,而且更重要的时刻还要考虑学员是不是听明白了。压力特别大。
但是这种培训形式我特别认可,它是一种「软件定制+课程培训」的模式,既培训了学员,学以致用;又开发了项目,后续需求学员自己就可以维护了。我特别推崇这种模式。我觉得这就是PBL理念在程序员编程领域的具体实践。如果你这个需求,欢迎与我联系。
致良知
最后我想和你再聊一聊「致良知」。这个词语出自二个半完人之一王阳明。之前我对这个词语的理解有些偏差,我觉得良知指的是一种东西,是一种观念,或一种智慧。其实不是的,今天我听完《王阳明大传》三卷,我觉得这个词指的是一种状态,是人处于一种「良知」的状态,而「致良知」就是达到这样一种状态。这是什么状态呢?什么是「良知」状态呢?
其实这种状态每个人都有,或每个人都曾经有过。王阳明龙场悟道,有一天晚上突然从石头上跳起来,说「圣人处此,更有何道」。禅宗六祖慧能在悟道时说「何期自性,本自具足」。这两句话是一个意思,都指内心达到了一种「良知」的状态。而这种状态每个人生来都是具有的,只因后来我们因为欲望、因为执念蒙蔽了双眼,迷失了。而参悟,是消除世俗迷障的过程。
那么我们为什么要说致良知呢?这和本文有什么关系呢?
我们未致良知的时候,是为欲世迷眼、为执念迷路;而当我们致了良知的时候,我们便是竭尽所能。竭尽所能既是致良知的一种附加状态,也可以帮助我们致良知。良知这种状态,不是一旦致过就永远不变的;确实是需要「时时勤拂拭,勿使惹尘埃」的。
欢迎留言讨论。
(2021年02月09日)
(三)
曾几何时我也认为,课程录完了就万事大吉了,直到有一天我自己把课程看完了,看到最终的结课数字,我明白了:课程虽然录完了,服务才刚刚开始。
由于课程时长比一般课程要长,一般课程都是20~30个小时,这个《微信小程序全栈开发实战》竟然有48个小时。一个人不喝不吃不睡,也要两天两夜才能看完。再加上每个人有各自的工作、学习生活,学习时间并不是固定且充裕的,因此课程学习跨度长,往往学完后面的,前面的又忘掉了。
还有一点,就是由于我录课经验不足,我并未能将技术内容讲得像我预想的那样,具有脱口秀式的有趣特征(事实上谦虚地说,应该是一点没有),因此学习完这48个小时的内容,并不是一件轻松的事。再加上我们知道,人都是有惰性的,如果没有人督促,读者很难自律完成课程。
基于以上考虑,我决定在读者中发起一项活动。即日起,凡是完成课程,并主动在部落中晒出完课证书的读者,由我审核,赠送一本js零基础入门教材。图书封面是这样的:
这本书是完全面向零基础读者,适合新手学习。如果对这本书不感兴趣,可以商量换另一个我的《小程序从0到1:微信全栈开发工程师一本通》。
很多读者都没有完课,都没有见过结课证书,给大家看一下,结课证书是这样的:
活动要求是,需要你将自己的结课证书分享到极客时间的部落中,并艾特我知道。这一期活动数量有限,只有10本,先到先
发起这个活动,并不是单纯想促销,而是想帮助读者朋友们克服惰性,尽快结课。我甚至鼓励学习有进展的读者,在完全每一章,甚至每一课都可以在部落中分享一下自己进展;如果不好意思让别人看到,可以写在笔记里,私发给我其它任何一个朋友。
课程录完了,标志着服务刚刚开始。为了使读者们明确能得到具体什么样的服务内容,我将服务简单列举一下:
- 所有购课学员,都可以免费使用我在课程中使用的企业开发者帐号。我们知道,只有企业开发者帐号,才可以体验Webview、Live直播、微信支付等这些功能。申请方法是私信我,告诉我微信,由我手动为你开通。注意每个帐号同时只能添加50个开发者帐号,所以前面申请的学员会优先被移除,拿到帐号要尽快学习。
- 所有购课学员,都可以免费使用我在课程中使用的小微商户帐号。申请一个小微商户并不像申请一个可以支付的企业帐号那样代价高,但也需要大约100块钱,这个价格已经比大部分读者的课单价都高了。小微商户申请略为麻烦,需要时间等等,如果仅是体验,不需要这么复杂,在课程源码中就可以看到我的小微商户帐号及密钥,可以直接测试使用。
- 可以随时在课程下方评论区提问互动。提问内容不限于本课课程中讲到的内容,但凡读者在学习过程中遇到的问题,有疑惑,都可以提问。有的读者腼腆一点,怕别人看到自己的提问,除了提问区提问,还可以与我联系,换一种相对私密的方式,都可以。
- 我准备做课程直播答疑。在一个固定的时间,例如晚上8~9点,每天拿出一个小时,读者在写代码的过程中,遇到什么调试不通的bug,都可以将代码上传到github上,将问题描述清楚,提交给我。所有读者将按照先后顺序,排队在直播间中解答。解答一个读者问题的时候,其它人也可以观看学习。我要挑战的是,读者遇到任何问题,我都能当场找出问题所在,并将之解决。当然我知道这个有难度,如果当时解决不了,下播后我研究一下,第二天再给出答案。具体在哪个平台直播,我还没有想好。可能在知乎。如果极客官方可以,我会优先选择极客时间。如果你有听直播的意见,请告诉我,等人数多了,我就着手开始。
最后总结一下吧,线上技术网课培训,在我看来同线下是一样的,同样都是服务。区别在于,线下培训动辄学费就是3~5万起,而线上只需129元,线上价格更划算。有时间官方有活动做促销,最低可以降到19.9块钱。对我自己来讲,给每个线上学员像线下那样一对一辅导,这是不现实的;但我可以做到论坛区问答互动,及集中时间式单线程直播答疑。
我听闻国外SC课程的大学讲师,他们每周都有固定的线上、线下交流时间对外开放,在这些时间段学员可以找他们提问任何问题。我觉得这种模式非常好,有意在效仿他们;还有,我从塔文纳的《准备》这本书中学到PBL这个教育理念,我觉得它是最好的技能学习形式,编程语言包括在内。
单从收益来讲,这个课程并不值得我投入这么大的精力,提供上述四项服务,尤其是最后一项。但从我的志趣来讲,我希望将PBL这个理念在编程教育中发扬光大,同时也需要不断在实践中挑战自己用“有趣而不失严谨”的态度及方式传播技术内容,从这个意义上讲,我和我的读者都在修行,我的收获亦是满满。
最后声明一下,以上服务内容(除了提问区问答互动),特别是直播,并非官方承诺,有任何问题请联系我,客服小姐姐是不管这些事的。
欢迎留言讨论。
(2021年2月14日)
(四)
「持之以恒」看起来只是一句口号,因为我们都明白,做任何事情如果可以持之以恒的话,都可以成功。
难就难在一般人都难以持之以恒,而我们大多数人又都是普通人。不能坚持的原因,不一定就是意志和信念不坚定,可能还有客观上的原因,例如有本职工作要忙,遇到问题被卡住了很痛苦、无法继续等。
据教育心理学研究,我们人类在学习过程中,有两个困难:
- 遇到困难无人解答、无法前进,这是外在的客观困难
- 不能得到及时反馈、热情难以为继,这里内在的主观困难
学习遇到困难怎么办?
先说第一个问题,遇到困难了怎么办?问同学、问老师,讨论+请教就可以把困难拿下。因为这样的困难往往并不是真正的困难,有时候只是自己观念认知不到,眼睛被蒙蔽了,才没有看到解决方法。
具体到《微信小程序全栈开发实战》这门课程,可以在课程的留言区问我;也可以把问题留下来,在我直播的代码直接把代码链接发给我,我在你的代码基础上查找问题,尝试将之解决。
为什么要提供第二种方法呢?因为有些问题就是工程实践性比较强的,读者难以描述,解答者也难以领会,代码最直接;此外,采用直播的方式,即惠及更多读者,又锻炼作者本人。
现场查找 Bug,解决疑难,这对作者来说是一个挑战,我想试一试。
学习产生惰性是一种正常现象
再说第二个问题,不能得到及时反馈怎么办。
现代教育心理学认为,学习是一个客观的过程,并不单纯是一个主观行为;教育工作者应该把学生产生惰性心理,看作是一种正常现象,而不应该简单归因于学生懒惰、不上进、意志不坚定等主观因素。
学习本来就是一件反人性的事情,如果不能得到及时反馈,学习者很容易迷失方向、丧失学习动力。所有编程初学者基本都有这样的困惑,下面是最近又接到的一位读者的提问,大意是这样的:
学员没接触过编程,之前做的是编程以外的其它工作(与互联网或电脑有关,但不涉及编程),目前因工作需要,准备学习一下编程,学之前需要准备学习哪些内容呢?
我的回答是:不要准备,在实践中学习,有问题就问。
从线下学校课堂的实践总结来看,从一门有及时反馈的、简单的、系统化的、相对独立的技术入门学习编程,会坚持得更久,更容易成功。这样的技术以前是 Flash,现在是微信小程序。
有人会说,对于新手来说,像计算机基础、数据结构、算法、设计模式等等,这些都需要准备。其实都可以先不准备。如果将这些东西都准备好了再去学习,学习的热情先被浇灭了。特别像算法这样的大部头,它的作用对新手来讲,要么扼杀学习热情,要么将学员推进培训机构。
这门《微信小程序全栈开发实战》课程,因为当初定位在中级偏上程序员,所以对初级读者会有一些难度。但只要坚持把每节课作者敲过的代码都敲一遍,学过 179 节课,一定会大有收获。有时候有点困难,反而达成后更有成就感。
这门课最大的缺点就是我录的时间太长了,整整 48 小时,179 节课,比一般其它课程多了一倍。课程节数太多,需要长期坚持学习,这对学习者是一个挑战。如何坚持?就是上面我提到的,有问题就问+坚持在反馈中实践。
具体反馈指什么呢?
最后补充一下,上面提到的反馈指什么?
指我们能够看到的、听到的现实表象,例如在终端里敲一下指令,成功了,写一段新功能的代码,编译通过了等等,这些都是正向反馈。还有,同学学习遇到困难,找你请教或讨论,你帮他解决了,这种输出式巩固所学的副产品——来自同学的感谢,也是正向反馈。
编程大多数时间都是一个人做事情,微信小程序这门技术本身是相对独立的、语法简单的,更重要的是它还是个前端技术,它有丰富的表现力,一个按钮、一个图像、一段文本,这些都能给读者带来最直观的感受。而我们人类的大脑就需要这样接地气的反馈。如果学习一门语言,只能在终端里看到文本结果,有时候还只是黑白的,这会大大降低学员对反馈的满足感。
欢迎留言提问。
(2021年2月23日)