From 17e2b057630052290e233109f02c4a86a7d2c0e9 Mon Sep 17 00:00:00 2001 From: gxlct008 Date: Sun, 20 Feb 2022 12:40:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=81=B5=E5=BE=AA=20MD=20=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E4=BF=AE=E6=94=B9=E6=8E=92=E7=89=88=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=83=A8=E5=88=86=E7=94=A8=E8=AF=8D=E5=92=8C=E8=AF=AD?= =?UTF-8?q?=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contents/sth-you-should-not-do.md | 46 +++++++++++++++++-------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/contents/sth-you-should-not-do.md b/contents/sth-you-should-not-do.md index af79e18e..dd57d752 100644 --- a/contents/sth-you-should-not-do.md +++ b/contents/sth-you-should-not-do.md @@ -1,61 +1,67 @@ # 避免从入门到放弃 -很多人都在学 Rust ing,也有很多人在放弃 ing。想要顺利学完 Rust,大家需要谨记本文列出的内容,否则这极有可能是又又又一次从入门到放弃之旅。 + +对 Rust 这门语言,很多人都在学习 ing...,也有很多人在放弃 ing...。想要顺利学完 Rust,大家需要谨记本文列出的内容,否则这极有可能是又双叒叕一次从入门到放弃之旅。 Rust 是一门全新的语言,它会带给你前所未有的体验,提升你的通用编程水平,甚至于赋予你全新的编程思想。在此时此刻,大家可能还半信半疑,但是当学完它再回头看时,可能你也会认同这些貌似浮夸的赞美。 -## 避免试一试的心态 -在学习 Go、Python 等编程语言时,你可能会一边工作,一边轻松愉快的学习它们,但是 Rust 不行。原因如文章开头所说,在学习 Rust 的同时你会收获很多语言之外的知识,因此 Rust 在入门阶段比很多编程语言要更难,但是一旦入门,你将收获一个全新的自己,成为一个更加优秀的程序员。 +## 打消试一试的心态 + +在学习 Go、Python 等编程语言时,你可能会一边工作,一边轻松愉快的学习它们,但是 Rust 不行。原因如文章开头所说,在学习 Rust 的同时你还会收获很多语言之外的知识,因此 Rust 在入门阶段比很多编程语言要更难,但是一旦入门,你将蜕变成一个全新的自己,成为一个更加优秀的程序员。 -在学习过程中,一开始可能会轻松愉快,但是在开始 Rust 核心概念时(所有权、借用、生命周期、智能指针等),难度可能会陡然提升,此时就需要认真对待起来,否则会为后面埋下很多难以填补的坑,结果最后你可能只有两个选择:重新学一遍 or 放弃。 +在学习过程中,一开始可能会觉得轻松愉快,但是当开始接触到 Rust 核心概念时(所有权、借用、生命周期、智能指针等),难度可能会陡然提升。此时你就需要认真起来,否则就会为后面留下很多难以填补的坑,最后的结果你可能只有两个选择:重新学一遍 or 放弃。 因此,在学习过程中,给大家三点建议: + - 要提前做好会遇到困难的准备,因为如上面所说,学习 Rust 不仅仅是在学习一门编程语言 -- 不要抱着试一试的心态去试一试,否则是浪费时间和消耗学习的激情,作为连续六年全世界最受喜欢的语言,Rust 不仅仅是值得试一试 :) -- 深入学习一本好书或教程 +- 不要抱着试一试的心态去试一试,那会是浪费时间和消耗学习的激情,作为连续六年全世界最受喜欢的语言,Rust 不仅仅是值得试一试 :) +- 找一本好书或一份优质教程深入学习 -总之, Rust 入门难,但是在你一次次克服艰难险阻的同时,也一次次收获了与众不同的编程经验,最后历经九九八十一难,立地成大佬。 给自己一个机会,也给 Rust 一个机会 :) +总之, Rust 入门难,但是在你一次次地克服了艰难险阻的同时,也一次次地收获了与众不同的编程经验,最后历经九九八十一难,立地成大佬。 给自己一个机会,也给 Rust 一个机会 :) ## 深入学习一本好书 + Rust 跟其它语言不一样,你无法看了一遍语法,然后就能上手写代码,对,我说的就是对比 Go 语言,后者的简单易用是有目共睹的。 这些年,我遇到过太多在网上看了一遍菜鸟教程(或其它简易教程)就上手写 demo 甚至项目的同学,无一例外,都各种碰壁、趟坑,最后要么放弃,要么回炉重造,之前的时间和精力基本等同浪费。 因此,大家一定要舍得投入时间,沉下心去读一本好书,这本书会带你深入浅出地学习使用 Rust 所需的各种知识,还会带你提前趟坑,这些坑往往是需要大量的时间才能领悟的。 -在以前我可能会推荐看官方那本书的英文原版 + async book + nomicon 这几本书的组合,但是现在有了一本更适合中国用户的书籍,那就是 [<>](https://github.com/sunface/rust-course),内容好坏大家一读即知,光就文字而言,那绝对是行云流水般的阅读体验,可以极大提升你的学习效率,也不再因为反复读也读不懂一句话而烦闷不堪。 +在以前我可能会推荐看官方那本书的英文原版 + async book + nomicon 这几本书的组合,但是现在有了一本更适合中国用户的书,那就是 [<>](https://github.com/sunface/rust-course)。内容好坏大家一读便知,光就文字组织而言,绝对可以获得行云流水般的阅读体验,再也不会因为哪一句话反复读也读不懂而烦闷不堪,因此可以极大地提升你的学习效率。 ## 千万别从链表或图开始练手 + CS 课程中我们会学习大量的常用数据结构和算法,因此大家都养成了一种好习惯:学习一门新语言,先用它写个链表或图试试。 -我的天,在 Rust 中**千万别这么干**,你是在扼杀自己之前的努力!因为不像其它语言,链表在 Rust 中简直是地狱一般的难度,我见过太多英雄好汉难过链表关,最终黯然退幕。我不希望正在阅读此文的你也成为其中一个 :( +我的天,在 Rust 中**千万别这么干**,你是在扼杀自己之前的努力!因为不像其它语言,链表的难度在 Rust 中简直是地狱一般的级别,我见过太多英雄好汉难过链表关,最终黯然退幕。我不希望正在阅读此文的你也成为其中一个 :( 这些自引用类型的数据结构(包含了字段,该字段又引用了自身),它们是恶魔,它们不仅仅在蹂躏着新手,还在折磨着老手,有意思的是,它们的难恰恰是 Rust 的优点导致的:无 GC 也无手动内存管理,内存安全。 -这两点的实现并不是凭空产生的,而是通过 Rust 一套非常强大、优美的机制提供了支持,这些机制一旦你学到,就会被它巧妙的构思和设计而征服,进而被 Rust 深深吸引!但是一切选择都有利弊,这种机制的弊端就在于实现链表这种数据结构时,会变得非常非常复杂。 +这两点的实现并不是凭空产生的,而是通过 Rust 的一套非常强大、优美的机制提供了支持的,这些机制一旦你学到,就会被它巧妙的构思和设计而征服,进而被 Rust 深深吸引!但是一切选择都有利弊,这种机制的弊端就在于实现链表这种数据结构时,会变得非常非常复杂。 你需要糅合各种知识,才能解决这个问题,但是这显然不是一个新手应该独自去面对的。总之,不会链表对于 Rust 的学习和写项目,真的没有任何影响,直接使用大神已经写好的数据结构包就可以。 -如果想要练手,我们可以换个方向开始,当然如果你就是喜欢征服困难,那没问题,就从链表开始。但是无论选择哪个,之前提到的那本书都会给你莫大的帮助,包括如何实现一个链表! +如果想要练手,我们可以换个方向开始,当然如果你就是喜欢挑战困难并征服它们,那也没问题,就从链表开始。但是无论选择哪个,之前提到的那本书都会给你莫大的帮助,包括如何实现一个链表! ## 仔细阅读编译错误 -在一些编程语言中,你可能习惯了编译器给出的错误只要看前面(或后面)几行就行,大部分是不怎么用到的信息,总之编译器总感觉笨笨的。 -但是 Rust 不是,它为我们提供了一个强大无比的编译器,而且会提示我们该如何修改代码以解决错误,简直就是一个优秀的老师! +在一些编程语言中,你可能习惯了编译器给出的错误只要看前面(或后面)几行就行,大部分是不怎么用得到的信息,总之编译器总感觉笨笨的。 -因此在使用 Rust 过程中,如果错误你不知该如何解决,不妨仔细阅读下编译器或者IDE给出的错误提示,绝大多数时候,你都可以通过这些提示顺利的解决问题。 +但是 Rust 不是,它为我们提供了一个强大无比的编译器,而且会提示我们该如何修改代码以解决错误,简直就是一位优秀的老师! -同时也不要忽略编译器给出的警告信息(warnings),因为里面包含了 `cargo clippy` 给出的 `lint` 提示,这些提示不仅仅包含代码风格,甚至包含了一些隐藏很深的错误!至于这些错误为何不是 `error` 形式出现,随着学习的深入,你将逐渐理解 Rust 的各种设计选择,包括这个问题。 +因此在使用 Rust 过程中,如果遇到的错误你不知该如何解决,不妨仔细阅读下编译器或者IDE给出的错误提示,绝大多数时候,你都可以通过这些提示顺利的解决问题。 + +同时也不要忽略编译器给出的警告信息(warnings),因为里面包含了 `cargo clippy` 给出的 `lint` 提示,这些提示不仅仅包含代码风格,甚至包含了一些隐藏的很深的错误!至于这些错误为何不是以 `error` 的形式出现,随着学习的深入,你将逐渐理解 Rust 的各种设计选择,包括这个问题。 ## 不要强制自己使用其它编程语言的最佳实践来写 Rust + 大多数其它编程语言适用的最佳实践在 Rust 中也可以很好的使用,但是 Rust 并不是一门专门的面向对象或者函数式语言,因此在使用自己喜欢的编程风格时,也要考虑遵循 Rust 应有的实践。 -例如纯面向对象或纯函数式编程,在 Rust 中就并不是一个很好的选择。如果你有过 Go 语言的编程经验,相信能更加理解我这里想表达的含义。 +例如纯面向对象或纯函数式编程,在 Rust 中就并不是一个很好的选择。如果你有 Go 语言的编程经验,相信能更加理解我这里想表达的含义。 不过大家也不用担心,在书中我们以专题的形式专门讲解 Rust 的最佳实践,看完后自然就明白了。 - - ## 总结 -对于新手而言,最应该避免的就是从**链表开始练手**,最应该做的就是认真仔细地学习一本优秀的书。 -总之,认真学 Rust,既然选择了,就相信自己,你的前方会是星辰大海! +对于新手而言,最应该避免的就是从**链表开始练手**,最应该做的就是找到一本优秀的书认真仔细地开始学习。 + +总之,认真学 Rust,既然选择了,就要相信自己,你的前方会是星辰大海!