一个常见的误解是,学习区块链就是学习一门新的编程语言。事实并非如此。学习区块链更像是学习一个框架,而不是一门编程语言。
例如,仅仅因为你可以使用 Python 或 Go 编程,这并不能自动让你成为一名前端开发者,正如学习 JavaScript 或 TypeScript 也不会直接让你成为前端开发者一样。要成为一名后端开发者,你需要了解诸如 Express.js、React、Java Spring 等框架。
让我们直奔主题。
即使你明确知道自己想要在基于 Rust 的区块链(如 NEAR、Solana、Elrond 等)上进行开发,你仍然应该先学习 Solidity。
我敢冒昧地说,即使你已经掌握了 Rust 并且想在非 EVM 区块链上开发智能合约,你无论如何还是应该学习一下 Solidity。
Solidity 非常容易学习。它看起来和 JavaScript 很相似。大概只有十个左右常用的关键字和类型可能会让你感到陌生。一个有一定经验的开发者,通过一份好的 Solidity tutorial 并在周末进行长时间、无干扰的学习,就能熟练掌握 Solidity。RareSkills 的每位学生都在一周的学习后精通了它。学习这门语言反而是轻松的部分。
Solidity 有其自身让开发者感到困惑的怪异之处,但许多令人惊讶的特性往往源自区块链环境泄漏出来的那些意想不到的抽象概念。
真正的学习在于学习区块链环境,而不是语言。
以下是开发者向区块链转型时常见的绊脚石。
-
涉及资金转移的函数调用一开始会让人觉得笨重。
-
哈希映射的行为并不像你预期的那样(这对 Ethereum 和 Solana 都是如此)。
-
尽管区块链是一个数据库,但与它交互以持久化存储数据的方式,有别于你体验过的任何其他数据库。
-
某些函数的行为类似于远程过程调用,尽管它们看起来与普通函数完全相同。
-
你不能认为计算能力是理所当然的。即使是在那些标榜自己计算能力强大的区块链上,计算成本也会迅速累加。
-
开发者通常(且正确地)认为,在 web2 应用程序中,函数默认是受到保护的,因为如果没有中间件连接,它们就只能通过 API 层进行访问。但在区块链环境中,函数和 API 之间的界限非常模糊,因此访问控制的行为会有所不同。
-
用计算成本来思考对大多数开发者来说很不习惯。仅仅对代码进行看似微不足道的重新排列,就会导致执行成本发生巨大变化,这让人觉得很奇怪。
-
开发者常常惊诧于发现 NFT 只不过是一个包含所有者和代币 ID 的哈希映射。需要花点时间去适应“代币存在于智能合约中,而不是钱包里”(对于大多数区块链而言)这一事实。
上面只是部分列表。如果你看看我们提供的课程,通常我们期望学生在攻克 Solana 之前,先学习 EVM 链(Ethereum、Avalanche、Polygon 等)。这种学习顺序并非因为学习 Solidity 需要四个月的时间;事实远非如此。
而是因为学习一种新范式需要一段时间。
如果你曾有过作为一名后端开发者试图拼凑出一个前端 Web 应用程序的经历,那么你就会体会到第一次在区块链中编程是什么感觉。并不是说你很难理解 JavaScript,而是那个框架太难了。
开发者的迁移学习
区块链几乎与大多数开发者所熟悉的任何其他框架都截然不同。云计算?不同。前端框架?毫无共同之处。后端框架?也不是。移动应用开发?饶了我吧!系统编程?有点像,但不完全是。
一旦你了解了一个框架,就很容易掌握同类中的另一个框架。例如,如果你是初次学习前端,Vue js 将不会太容易,但如果你已经了解了 React js,那么学 Vue 相对来说就小菜一碟了。Ruby on Rails 和 Django 之间的关系也是如此。
因此,既然学习一个全新的框架很有挑战性,不妨绕个道,先去学习一个有着大量实用在线教程的简单框架,这样可能会更容易些。一旦你习惯了新范式并掌握了该框架,你就可以继续深入学习你真正想要掌握的那个框架了。
如果这是一篇关于“React Native vs. Flutter”的文章,我会说,“抛硬币决定吧;这无关紧要。两者都有很好的资源。”但是,目前 Ethereum 与所有其他智能合约链之间的学习资源存在巨大差异。尽管 Ethereum 有大量对初学者友好的教程可供选择,但它仍然缺乏针对更高级主题的教育资源。这种短缺情况表明,在那些新兴区块链中学习高级主题绝对不会一帆风顺!
当你正试图适应这种新范式时,能在 Stack Overflow 上找到大量可供复制的资源,并且能在 Google 上搜索到许多在线教程,将会极大地加快你的学习进程。
花费数小时为简单直接的问题寻找基本答案,只会带来不必要的学习过程拉长。
为区块链学习 Rust
Rust 是一门出了名的难学的语言,因为它包含所有权、借用和变量生命周期等古怪(但极其有用)的概念。如果再算上 Rust 在 async 和 concurrency 上的独特设计,你就面对着一头需要被驯服的“巨兽”级语言了。
幸运的是,区块链所使用的 Rust 子集非常小。我粗略估计,区块链实际上只用到了 Rust 25-30% 的特性,而其中大约 10-15% 被高频使用。所以,如果你能拿下这关键的 10-15%,Rust 就不会成为你进行 Web3 开发的绊脚石。
注意:这适用于 smart contracts(或者 Solana 所谓的 programs)。如果你要用 Rust 构建区块链客户端或智能合约工具,你需要对这门语言有更深厚的掌握程度。
你需要掌握多少 Rust 知识?如果你能毫无压力地用 Rust 解决 LeetCode 的 easy 级别问题,那么你在阅读 Solana 程序时就不会有太大困难。遇到知识盲区时,你也知道该在 Google 里输入什么关键字。至于你具体采用什么学习方法由你决定,但我建议选读《Programming Rust》这本书中的部分章节,以便建立一个概念框架。但同样要注意的是:不要陷入“教程地狱”。你需要通过实践来学习,而不是只靠研究、阅读或看视频。
总的来说,大约需要一个月左右的兼职学习,才能达到上述提及的 Rust 熟练度。
但即使经过了这 30 天的学习,你对区块链范式依然一无所知。这些时间本可以用来熟悉区块链本身。
无论你做什么,都不要试图同时学习区块链和 Rust。否则,你将需要同时应对两个陌生的概念,并且在遇到问题时甚至不知道该用什么词在 Google 上搜索。
此外,你会感觉自己就像这只标志性的狗一样:

注意事项
并没有哪条宇宙法则(甚至社会惯例)规定你必须在学习 Rust 之前先学习 Solidity。如果上面列出的那些障碍并没有让你望而却步,那么请无论如何都按你自己的节奏来,不要让我来教你如何生活。另一方面,如果你的内心真的渴望先学习 Rust,这也完全没有错。我凭什么评判呢?无论你选择哪条道路,你最终都会成为一名更优秀的开发者。
然而,比起那些试图不得罪任何人的含糊其辞的建议,听取有理有据的主观建议会对你更有帮助。
如果你非要问怎么选,那就先学 Solidity。了解更多关于我们的 Rust and Solana Bootcamp 和 Solidity Bootcamp 的信息。
原文首发于 2022 年 11 月 24 日