我知道一定会有同学问这个问题,正好跟大家交流一下。如果同学比较着急,可以看后面的简要版本。
另外,作为参考,Kotlin 协程我从它刚一出来就开始学,学了前后两年,终于觉得自己学懂了,学得的精华全在课程的视频里面体现了。
详细版本:
我曾想过把协程讲的简单一些,在老课当中也确实做了这样的实验,公众号也尝试做了类似的推文,结果效果并不好,当时也有同学跟我仔细的交流了他遇到的问题,对我设计协程的教学思路的帮助很大。基于官方框架介绍launch、async、调度器等等的用法,看似很简单,实际上大家会提出很多的问题,例如为什么这个代码比那个先执行?为什么这个要运行在那个线程上?结果大家提了一堆基础概念相关的问题,想了想就是基础没有打好,想要起飞确实很难。
在我犹豫怎么讲的最后那么一段时间,恰好我们公司的一位比较资深 Android 技术 Leader 找我聊他们目前协程实践的情况,他也是上来就直接研究官方框架,结果仍然有不少因基础欠缺而引发的问题,他也跟我说目前他们团队他是不太放心让大家直接上手 Kotlin 协程的,因为感觉欠缺的知识太多了,很多时候看着容易上手却难。说白了,还是基础问题。我当时看了看他的职级,比我高一级,他这个职级在 BAT 基本上是技术人员里面的 TOP 级别,经验也已经相当丰富,即便如此上来就从官方框架入手学习框架的使用仍然感受到了吃力,更何况广大开发者们呢?
我个人比较倾向于认为,上手这么难,其实是 Kotlin 协程设计的失误。其实设计成 C#、Js、Dart 的 async await 那样就足够好了, 可 Kotlin 的设计者们想要的更多,自然也引入了更多的复杂度。
在敲定协程的讲法的过程中,我做了挺多次尝试和很长时间的思考,最终决定从基础讲起,但这并不是从背后的原理开始讲,也不算是内部实现,因为标准库的 API 总共也没几个,即便我们用官方框架,像 suspendCoroutine/Continuation这样的东西也会天天用到,了解它们对于我们理解协程怎么运行有很大的作用。
正如我在视频里面经常提到的,如果大家在看协程的视频的时候感觉迷惑,那就重复看几遍,并且一定要动手。难以理解往往是因为背景知识掌握的不够,有个类似的例子说明这一点:我在读书的时候有门课叫《通信原理》,我读了5遍才把课本读懂,也不是课本写的不好(毕竟国内顶尖通信专家编写),也不是我太菜了,就是因为过去对这个领域一无所知,以及对涉及到的数学基础不够扎实。
简要版本:
实践表明,协程的基础必须打扎实才能够在运用官方协程框架上游刃有余
同样是实践表明,直接从协程的官方框架开始学习协程对于大家理解协程的概念是远远不够的
除非过去有过其他语言的协程实践经验,否则在学习协程的时候,经验丰富的高工也同样面临基础问题
解决疑惑的两大法宝:反复多看,动手实践。
感谢同学的支持,如果遇到具体的问题,提出来我帮你解答,问答区和QQ群欢迎你~