本文作者:Tiny 熊
AI 和 Web3 是当前为数不多认为有巨大潜力的两个方向,Web3 薪资相对较高、有很多远程岗位、可全球就业,因此很多 Web2 开发者想进入 Web3 。
学习 Web3 开发最难的估计是不知道从何处下手,Web3 经过 10 多年的发展,内容越来越广,很多内容还相互依赖,给想进入 Web3 的开发同学带来了困惑:从哪里开始学、应该学什么。
我自己 2017 年进入 Web3 ,从事合约开发、技术布道、并一直跟踪区块链技术的发展,根据我对整个 Web3 的理解,整理下面这个学习路线图,希望可以帮助大家在学习的时候有更清晰的路线。
本文算是对这个学习路线图的解读,路线图是可交互式的,遇到不理解的术语,可以点击术语右上角小箭头查看右侧说明。
在学习路线图中,我将学习 Web3 分为几个阶段:了解区块链基础、区块链使用探索、然后根据自己的兴趣选择一个方向精进。
刚进入 Web3 开发的同学,在选择方向上不能贪多,而是应该做一些取舍,聚焦一个点往深处扎根,这样不容易迷失方向,也更容易看到自己的成长。
区块链背后的技术,依旧是传统计算机技术的延伸,在 Web3 从事开发,掌握数据库、数据结构、计算机网络、编程语言依旧是必须的。
但区块链的去中心化运行方式,刚开始的时候不好理解,是因为它不单单是技术问题,还包含了一个社会化的思想。
纯从技术角度想,容易想不明白为什么 BTC 的数量会限制在 2100 万个?心想:程序不都是可以修改的么?
如果能回答这个问题,区块链基础(什么是区块链、是如何工作的)其实理解的差不多了。
区块链有什么用,为什么有用、什么场景需要区块链技术,是一个随着时间推移不断加深理解的过程。
当下区块链技术依旧有不少的问题,但总体上来讲,区块链是一个强化个人主权、同时让群体协作更透明的技术。
我遇到不少同学总是拿 Web2 的优点与 Web3 的不足比较,我们在学习一个新技术时,要尽量保持开放的心态、这样才能吸收更多。
区块链带来的改变没有 AI 那么直接,因此我们容易低估他的价值。
在对区块链有了基础的认识之后,可以上手体验真实的区块链应用,例如使用钱包软件创建自己的账号,有条件的也可以持有一点加密货币(会有一点门槛,虽然也可以用测试币体验。但真金白银的体验会不太一样)。
感受发起交易时的签名,查看区块链浏览器,交易打包出块的过程。
在使用时,会感受到不同链的交易速度,可以借此了解不同的共识机制、尝试理解不同共识在去中心、安全及效率上的权衡。
如果觉得有趣,可以感受一下 DEX资产兑换、 NFT交易、DAO 治理。
对比 Web2 ,Web3 应用的关键不同是:你的资产只属于你(任何信息都可以看作是一种资产),只有自己私钥签名后才能支配资产,任何人都无法剥夺你的资产。 另一个不同是:Web3 应用通常都是开源的,所有人都是平等的参与一个透明的规则。
如果你认可 Web3 的价值和意义,可以尝试加入 Web3 建设。
这个文章主要以技术的角度讨论,大家可以选择研究方向和开发方向( Web3 项目里还有社区运营的事情也很有意思,这里不讨论)。
如果有比较好的理论或学术背景,或者更喜欢探索新事物,想走研究方向,比如研究密码学、共识算法、扩容方案、代币经济学等,通常需要阅读大量的英文论文。
开发方向分两大类:链开发和应用开发
链开发对开发者的技能要求会高一些,薪资也会高一些,不过市场需求比应用开发会少。随着时间推移,应用逐步拓圈,应用开发需求会越来越多,链开发会逐步稳定,新链的机会并不多,链开发比较适合喜欢钻研底层的同学。
从事链开发,可以选择开发新链、或者是做二层、三层扩容链:
另外还有部分使用 Move 虚拟机和 Solana VM 虚拟机开发的链。
由主链的交易容量有限,尤其是以太坊及比特币,无法承载大规模的用户使用,Layer2 的思路是,将部分交易转移到主链外( Layer2 )执行,Layer1 仅负责验证 Layer2 的执行,三层则通常是针对特定应用场景进行定制的区块链。 链开发者需要了解的内容有:
想做链开发,模块化区块链也需要了解一下,模块化的思想是将之前一个整体的区块链分成多个层,不同的层解决不同的问题,甚至由不同的链来承担,4 个层分别是:
还有一个趋势是,区块链上逐步集成 零知识证明( ZKP ) 能力,例如使用 ZKP 来做交易执行的证明( zkRollup 也在 Layer2 层的应用,在 Layer1 层上也可以采用),用 ZKP 做存储状态的证明,实现轻客户端、无状态客户端来实现更好的去中心化。还有链通过 ZKP 来实现隐私交易。
如果你选择链开发,给初学者的建议是学习 Go ,探究 Geth 和 Op Stack,其他的框架根据需要和兴趣研究。
上面 Layer2 扩容更多是以太坊的视角,最近比特币上扩容方案也有不少团队在做,关注度挺大,大体上有(状态)通道类扩容和侧链类扩容方式,前者继承比特币安全性较高,但在编程能力扩展上较差。典型的代表有闪电网络、以及与 RGB、RGB++ 客户端验证方案的组合。 后者继承比特币安全性较差,例如采用 MPC 的方式跨链,但可以做到更好的编程能力扩展。也有一些结合两者的方案。
目前比特币上扩容方案行业依旧处在探索阶段,如果你是比特币信仰者,可以多多关注。
如果想做应用开发,链的底层实现并不需要很深的理解,但我们需要了解各链的特点,如区块链性能、去中心化程度。
例如想开发社交或游戏类应用,对底层链的性能较高,而开发高价值的 DEFI 类型应用,对去中心化可能有更多的要求。
另外,底层链支持的开发语言以及生态的活跃度及对应用扶持力度等,也要考量的,这些关系到应用实现的工作量以及获取的用户的成本。
对于找工作的朋友也是类似,生态活跃度越高,工作机会越多,竞争也会大一些。
选择一个适合的底层链对应用的成功相当重要,多数通常是选择基于一个或一类链开发,也有一些应用需要支持很多的链,尤其是基础设施类应用, 例如,钱包、跨链桥、喂价预言机等,通常要支持很多个链。
简单对比一下各个生态,供大家参考:
比特币 :有最大的共识与资金体量,但是脚本能力有限,基于比特币链上能做的应用较少,很多应用需要结合索引器或者客户端验证方案来实现,生态还不够成熟,不过从发展的角度看,可能有更多的机会。
**EVM 生态**:包含了以太坊、以及众多的 EVM 兼容链(包括波场 Tron 也算 ),一部分 BTC Layer2 也是 EVM 兼容链,这些兼容链编程模型相同,都使用 Solidity 开发智能合约(及链上运行的程序),应用生态丰富,开发工具完善、开发资源比较丰富。
**Solana**: 过去一年发展很强劲,生态体量上是老二,比 EVM 生态差距依旧比较大,Solana 的优势是吞吐量大,交易块,Solana 合约使用 Rust 开发,入门门槛较高。
**TON**:背靠有大量用户的 Telegram ,近期热度很不错,TON 同样具备高性能特点,智能合约主要使用 Func ,但 TON 生态发展时间较短、工具库不完善,开发资源较少。
还有一些其他的区块链生态,如:Move 生态(包括 Sui / Aptos )、Starknet 生态、ICP 生态、AO/AR 生态等,都有各自的优点,但目前关注度更小。
这里描述的是当前的生态情况,各个生态的发展都是动态的,不同的生态也有不同的文化特点,大家可以根据自己的偏好选择。
给初学者的建议是从 EVM 生态入手,资料丰富、生态也比较稳。
Web3 应用开发和互联网应用开发相比,很大的变化是大量后端逻辑转为智能合约在链上运行(也有一部分后端逻辑转移到前端,参考下一小节),以此来去除对中心化服务端的依赖。
也有很多 Web3 应用不涉及合约开发,例如:钱包、交易所、链上数据服务等,开发这些应用时,需要了解如何与合约交互。参考下一小节。
EVM 生态开发合约最常见的以太坊智能合约语言是 Solidity,一定要学习,Yul 是开发合约的汇编语言,如学有余力,可以研究一下。
Solana 、TON 、Move 等生态链,有各自的开发语言,我们以后有机会单独介绍。
Solidity 开发 IDE ,入门推荐使用在线 Remix IDE , 一般在项目开发中是使用 VS Code + 开发框架, 开发框架帮助我们编译、部署及测试智能合约,开发框架首选 Foundry ,测试更方便,其次是 Hardhat 。
开发智能合约时,需要理解常见的 Token / NFT 标准并会使用,如 ERC20 、ERC2612、ERC721、ERC1155 , 使用轮子也是一个很好的习惯,OpenZeppelin 是一个智能合约库,实现了各种标准,使用库可以减少自己的工作量,提升程序安全性。
开发合约程序时,要尽量遵循标准。这一点与 Web2 开发也是不同,Web2 程序通常是自己在调用,智能合约通常是公开给任何人调用,而且他人调用越多,程序价值越大。遵循标准可以让他人更方便的调用自己的程序。
合约开发进阶
Solidity 的入门简单,但要成为一名优秀的合约工程师有很多东西要学(练)习,例如掌握优化合约技巧来降低 Gas 费用、使用 Create2 创建及预测合约地址、理解底层 Call 调用和委托调用的机制、理解如何对合约进行升级、如何灵活应用离线签名减少用户费用、使用 Merkel 树降低链上存储成本、熟悉常见的安全漏洞、理解 DAO 治理方式及实现、理解账户抽象、了解如何利用预言机来获取链外数据等等。
另外,DEFI 去中心化金融是目前 Web3 最重要的一个应用场景,了解常见金融概念、熟悉常用 DEFI 的运行、理解闪电贷的运行,会让我们有更多的机会。
合约扮演的是后端程序的, 一个体验好的 Web3 应用同样需要少不了前端、Web3 应用是由用户自己托管资产的,因此前端需要和钱包链接一起完成交互。
Web3 应用后端更多的是当做一个缓存层,因为链上的数据不是类似数据库的结构化数据,对查询不够友好,加一个后端作为数据缓存层,可以优化用户体验。
现在也有很多专门的链上数据服务商,链上有大量开放的数据,是一个数据宝库, 如果你对大数据感兴趣,这也是一个很好的方向。
开发 Web3 前端时,需要了解常用的钱包接入方法,如会接入 MetaMask、WalletConnect 、Web3 Model 等前端钱包组件,前端与链交互通常是通过 Vim.sh 、Ethers.js 、Web3.js 等交互库来完成,这些交互库其实是链节点提供 RPC 服务的包装。在调用时,前端通过 RPC 节点的 URL 来确定和哪一个链交互,通过 ABI 及合约地址来确定和哪个具体的函数交互。
Web3 后端主要处理数据,例如扫码区块,获取指定合约的指定事件的的数据,和链交互使用的方法与前端类似, 但根据后端语言不同,会使用不同的包装库与 Web3 RPC 节点通信,使用比较多的是 Go 后端使用 go-ethereum 库、Node.js 后端使用 Vim.sh 、Ethers.js 等库,这几个库可以多熟悉一下。
以上每个知识点,需要大家去编码实践来加深理解。
Web3 发展阶段性起伏很大,也伴随不少行业乱象,平均来讲工作的稳定性没有 Web2 高。
Web3 发展快速,需要我们保持不断的学习,跟踪新的技术进展。
如果你想快速进入到 Web3 行业,参加登链社区的 区块链线下集训营 是不错的选择。
最后祝愿读者都能在 Web3 大展拳脚。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.