作者: 张汉东
如果你学习 Rust 的过程感觉到艰难、痛苦或迷茫,不妨看一下这篇文章。 但如果你学 Rust 感觉很轻松,那这篇文章就对你无用,可以忽略。
虽然现在 Rust 学习资料非常丰富,但 Rust 是一门学习成本相对比较高的语言。面对不同语言经验的人,学习成本略有差别。
在学习 Rust 之前,需要了解你将会在 Rust 学习过程中付出什么样的心智成本。
零基础的人,需要补足一些必要的计算机科学相关的基础,以及建立对编程的理解。初学编程本身就是一项很大的挑战。
有一定编程基础的人,虽然对学习 Rust 有一定帮助,但还是会有一些阻碍。
有 Cpp 经验的人,默认其对 C 有一定了解,学习 Rust 时,有如下挑战:
只有 GC 语言使用经验的人,比如 Java、Python、Ruby 、Haskell等,学习 Rust 时面临的挑战和 Cpp 基本相同,但因为使用 GC 语言的人,大部分对底层内存管理没有足够深入的了解,入门曲线会更加陡峭。
所以, Rust 入门曲线陡峭与否,除了语言本身的复杂性之外,也跟每个人的编程基础有关。
认识到 Rust 学习曲线的根由之后,你会发现,你以往的编程知识其实无法平滑迁移到 Rust 语言的学习中。
所以,你需要一个通用的学习框架,按这个框架来给自己制定学习计划,来达到对抗这个学习曲线,并达成入门 Rust 并持续学习的目的。
这个学习框架其实很简单,只需要明白两点即可:
说是学习框架,其实也是一种认知框架。接下来,我们来看具体操作。
对于有一定编程基础的朋友,学习 Rust 要经历至少三个阶段:
这三个阶段,面对不同经验的学习者,学习时间可长可短,因人而异。在学习过程中,可以搭配一些项目,由简入深。
要点就是,不要急于求成。
对于编程零基础的朋友,则在遵循上面三个阶段学习之前,需要补充一些必要的基础:
第一个阶段的学习,目标是全面了解 Rust 语法。
需要做到什么地步?
这个阶段不是让你一次性学会 Rust ,所以有些不理解的内容,也不要太钻牛角尖,允许自己暂时不理解,最好能记录一个问题清单。这个阶段的重点在于全面了解 Rust 语法,在头脑里构建出语法体系结构,其中分类是重点。要对语法进行分门别类梳理。比如数据类型、控制流程、结构体、trait和泛型、宏等等,它们分别的作用是什么。
第一阶段配套学习资料
看这些资料学习的时候,要围绕第一阶段的学习目标:全面了解 Rust 语法。
对 Rust 语法有一个基本了解之后,可以通过官方出品的Rust by example 和 Rustlings 来检验自己的学习成果。
第一阶段练手项目推荐
第一阶段练手项目的选择存在一些误区,很多人喜欢用 Rust 来刷题来学习 Rust 。但其实刷题的效果并不好。
因为 Rust 所有权的限制,对于实现一些算法和数据结构,没有其他语言那么灵活自由。如果没有对 Rust 所有权有深入了解,那刷题遇到困难,比较容易放弃对 Rust 的学习,不容易坚持。
所以这个阶段比较推荐的项目,还是以做一些让自己容易产生成就感的项目比较好。总的原则就是:结合你自己的领域经验,选择简单的项目入手。
这里推荐一些练手项目:
达成第一阶段的学习目标之后,就可以开始第二阶段的学习了。
第二阶段的学习目标就是,掌握 Rust 语言的关键概念。主要包含如下概念:
其中 「所有权和借用检查」是重点,只有在掌握了这两个概念之后,才算入门 Rust 语言。至于其他概念,可以在边做项目过程中逐渐掌握,但不能不知道它们。
第二阶段配套学习资料推荐
这里推荐的学习资料,不一定要全部都看完,可以着重去深入学习「所有权和借用检查」这部分重点。然后去了解 「类型系统与编程范式」、「宏」和「Unsafe Rust」等概念,也可以深入了解 Rust 设计模式相关概念。
之后,再花时间深入阅读一下 Rust 标准库文档,以及 学习 《Rust 编码规范》。
经过上面的学习,就能为投入 Rust 生产实践打下良好的基础。
第二阶段练手项目推荐
这个阶段比较推荐的项目,依然还是那个原则,即,结合你自己的领域经验,选择简单的项目,由简入深。与此同时,也可以开始阅读一些比较知名的优秀项目源码开始学习。
经过上面两个阶段的学习,学习者可以投入到自己的实际项目中开始学习了。如果没有自己的实际项目,可以参与到开源项目的贡献中去。
这个过程就是一个长期的学习和应用 Rust 的过程了。比如 Rust 并发和异步开发相关的内容,重点概念中关于类型系统、编程范式、宏、Unsafe Rust 的深入学习和应用,都在这个阶段去完成。
学习的过程,要保持输入和输出平衡。
什么叫输入? 从各种学习资源中汲取各种知识,叫输入。
输出的形式很多。写一篇文章、参与一个项目、做一次分享,都是输出。
只有输入和输出保持循环,人的大脑才会处于思考模式,你输入的东西才会沉淀为结构化记忆。
所以,在上述学习阶段,除了输入,还要让自己保持输出。这样你的精力和时间才不会白费。
|