2024 年如何学习 Solidity

2024 年如何学习 Solidity

2024 年如何学习 Solidity

credit: https://soliditylang.org/

我想你现在应该知道,Solidity 这种编程语言)是什么了。

以防你不知道,别担心,我马上就会解释。

简而言之,Solidity 是一种用于构建智能合约的编程语言。

智能合约是在去中心化方式下执行的自主计算机程序 —— 无需中心化或第三方实体。它们基本上是一组控制在区块链上执行协议/交易的计算机代码。

为了让你第一手了解智能合约是如何在 Solidity 中编写的,下面是一些 Solidity 智能合约代码。该代码展示了如何在 Solidity 中使用变量、结构体(一种数据类型)、函数等等。

正如可以轻松推断的那样,该智能合约创建了一个新用户(programmaticPerson),提供了为该用户分配某些数据(通过 person 结构)的功能,然后还提供了获取有关该用户添加的个人数据的功能。


// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

contract PracticeContract {  
  uint private myNumber;

struct PersonStruct {  
   string name;  
   uint favouriteNumber;  
   bool isMale;  
 }

PersonStruct private programmaticPerson;

function setPerson(  
   string memory _name,  
   uint _favouriteNumber,  
   bool _isMale  
   ) public {  
   programmaticPerson = PersonStruct({  
   name: _name,  
   favouriteNumber: _favouriteNumber,  
   isMale: _isMale  
   });  
 }

function getProgrammaticPerson() public view returns (PersonStruct memory) {  
   return programmaticPerson;  
 }

// Function to get the name of the programmatic person  
 function getProgrammaticPersonName() public view returns (string memory) {  
   return programmaticPerson.name;  
 }

// Function to get the favorite number of the programmatic person  
 function getProgrammaticPersonFavouriteNumber() public view returns (uint) {  
   return programmaticPerson.favouriteNumber;  
 }

// Function to get the gender of the programmatic person  
 function getProgrammaticPersonGender() public view returns (bool) {  
   return programmaticPerson.isMale;  
 }  
}

在本文中,我将分享关于 Solidity 的一些重要细节,并为你提供如何最好地学习 Solidity 的专业指导 —— 尤其是如果你打算在 2024 年成为区块链/智能合约开发人员。

在本文中,我将更多地使用上述代码片段,以帮助你理解并更好地传达信息。

关于 Solidity 的更多信息。

根据 Solidity 网站的说法,

Solidity 是“一种为在 Ethereum 上运行的智能合约设计的静态类型花括号编程语言”。

尽管 Solidity 也可以像这篇文章中所解释的那样在 Solana 上使用,但 Solidity 最初是为在 Ethereum 上编程智能合约而创建的。

现在你已经对 Solidity 是什么有了一个很好的介绍,让我们继续解释你应该如何在 2024 年学习 Solidity —— 尤其是如果你打算成为智能合约开发人员。

本文最适合那些完全不懂编程的人 —— 尤其是那些刚刚开始软件工程/开发职业生涯的人 —— 以 Solidity 作为他们的第一种编程语言。对于那些有一些编程经验但以前没有学习或使用过 Javascript 的人来说,这也是一个完美的资源。

还要注意,本文的灵感来自于我的个人经验。我希望我的经验能帮助你发现一种更好的学习 Solidity 的方法,这将更有益。

你应该如何在 2024 年学习 Solidity。

以下是一些关于 2024 年学习智能合约开发 Solidity 的关键注意事项。

1. 首先学习 Javascript。

我推荐这样做的主要原因是:

- 作为 Solidity 开发人员,当与你的智能合约一起工作时,你很可能需要 Javascript。

无论你是有经验的程序员,擅长使用不同的编程语言,还是刚刚开始涉足技术领域。只要你打算成为智能合约开发人员,学习 Javascript 都是一个难以逃避的任务。

一个实际的例子是在使用 Hardhat 时。Hardhat 是一个基于 Javascript 的智能合约开发框架/套件,为区块链开发人员提供了必要的工具堆栈,以便处理智能合约。它是一个全能工具,用于开发、测试、部署甚至与智能合约交互。

在使用 Hardhat 时,即使你的智能合约是用 Solidity 编写的,你仍然需要 Javascript 来编写测试和脚本,比如你的部署脚本,或者与智能合约提供的功能进行交互的脚本。

此外,在部署智能合约后与其交互(尤其是在前端应用程序中)时,你仍然需要类似 Ethers jsWeb3 js或更强大的工具如 MoralisWagmi它们都是基于 Javascript 的

这一切都归结为一个事实 —— 作为区块链开发人员,你肯定会在职业生涯的某个时候需要 Javascript。

你可能仍然在想为什么需要“首先学习 Javascript” — 下一个观点解决了这个问题。

- Javascript 是一种更简单和松散的编程语言 —— 因此比 Solidity 更容易学习。

Javascript 是一种简单的编程语言。更重要的是,它是一种动态类型的(你无需声明类型)和松散类型的(它能够做“超级傻”的事情,比如将一个字符串添加/连接到/与一个数字)编程语言,与 Solidity 这种静态类型的编程语言不同。

所有这些使用 Javascript 的缺点对于第一次学习它的人来说都是潜在的优势。Javascript 的松散和动态类型的特性使你免受“好奇的发脾气的编译器”的困扰,直到你把代码写对。这些抱怨可能令人沮丧 —— 尤其对于新手来说。

学习 Solidity 之前学习 Javascript 是个好主意的第三个原因与语法相似性有关。

- 从语法上看,Solidity 与 Javascript 非常相似。

下面的两个代码片段展示了如何在 Solidity 和 Javascript 中编写上述智能合约中选择的两个函数。

// solidity code

    // SPDX-License-Identifier: MIT

    ...

        function setPerson(  
            string memory _name,  
            uint _favouriteNumber,  
            bool _isMale  
        ) public {  
            programmaticPerson = PersonStruct({  
                name: _name,  
                favouriteNumber: _favouriteNumber,  
                isMale: _isMale  
            });  
        }

        function getProgrammaticPerson() public view returns (PersonStruct memory) {  
            return programmaticPerson;  
        } 

    ...

对比一下 javascript

// javascript code

    ...

        function setPerson(  
            _name,  
            _favouriteNumber,  
            _isMale  
        ) {  
           programmaticPerson = {  
                name: _name,  
                favouriteNumber: _favouriteNumber,  
                isMale: _isMale  
            };

           /* do something with programmaticPerson like   
           using it to update a database, then 'returning' to end the function*/  
        }

        function getProgrammaticPerson() {  
            return programmaticPerson;  
        } 

    ...

上面的代码片段非常实际地展示了 Javascript 和 Solidity 之间语法的相似性。

两种语法非常相似 —— 除了两种语言中一些额外的外来/独特概念,比如它们如何不同地声明变量、类型和返回类型、可见性和存储 —— 这些都在 Solidity 中,以及更多其他差异。

结合关于语法相似性的上述因素和之前的因素 —— 尤其是关于 Javascript 更容易学习的因素,学习 Javascript 然后再学习 Solidity 就是理所当然的选择。

2. 接下来学习 Typescript。

在学习 Javascript 之后,我建议你在继续学习 Solidity 之前还要跨越另一个障碍。那就是 Typescript

如果你不是软件开发新手,我敢打赌你现在已经听说过 Typescript 了。但以防万一你还没有听说过;

Typescript 是 Javascript 的超集。不完全是一种“编程语言”。而更像是一个为 Javascript 提供类型检查的工具/编译器。

术语Javascript 的超集简单地意味着每个 Javascript 都是
有效的 Typescript。Typescript 通过引入类型简单地改进了 Javascript,因此它是 Javascript 的静态类型版本,弥补了它的缺点。

以下是三个代码片段,展示了如何在 Javascript、Typescript 和 Solidity 中以类似的方式编写相同的代码。

    // javascript code

    ...

    let programmaticPerson

    function setPerson(  
        _name,  
        _favouriteNumber,  
        _isMale  
    ) {  
        programmaticPerson = {  
            name: _name,  
            favouriteNumber: _favouriteNumber,  
            isMale: _isMale  
        };

        /* do something with programmaticPerson like   
        using it to update a database, then 'returning' to end the function */  
    } 

    ...
    // typescript code

    ...

    type Person = {  
        name: string;  
        favouriteNumber: number;  
        isMale: boolean;  
    }

    let programmaticPerson: Person;

    function setPerson(  
        _name: string,   
        _favouriteNumber: number,   
        _isMale: boolean  
        ): void {  
        programmaticPerson = {  
            name: _name,  
            favouriteNumber: _favouriteNumber,  
            isMale: _isMale  
        };

         /* do something with programmaticPerson like   
        using it to update a database, then 'returning' to end the function */  
    }

    ...
    // solidity code

    ...

    struct Person {  
        string name;  
        uint favouriteNumber;  
        bool isMale;  
    }

    Person private programmaticPerson;

    function setPerson(  
        string memory _name,  
        uint _favouriteNumber,  
        bool _isMale  
    ) public {  
        programmaticPerson = Person({  
            name: _name,  
            favouriteNumber: _favouriteNumber,  
            isMale: _isMale  
        });  
    }

    ...

经过仔细观察上面的三个代码片段,很明显可以推断出 Typescript 代码更像 Solidity。

这是非常有道理的。

尽管在学习 Solidity 之前学习 Typescript 非常重要(特别是在当今的 JS/TS 生态系统中,Typescript 更受青睐于 Javascript,因为它有助于编写更健壮和可靠的代码),但仍不强制建议你在学习 Solidity 之前学习 Typescript — 只要你已经了解或可以使用另一种静态类型的编程语言

如果你没有以前使用过任何静态类型的编程语言的经验,那么我建议你抽出一些时间学习 Typescript,然后再学习 Solidity。一两周的努力应该足够了。

如果你只了解 Javascript(或其他动态类型的编程语言),那么学习 Solidity 会显得更加困难和复杂。这主要是因为 Solidity 中的静态类型。

第一次使用类型可能会有挑战性。我真的不建议你用 Solidity 这样的编程语言来学习如何处理类型。

这里的总结非常简单:首先学习 Javascript,然后学习 Typescript,因为从 Javascript 过渡到 Typescript 的过程会更容易一些。

3. 开始学习一些 Solidity 速成课程。

现在你已经准备好学习 Solidity 了。

但根据我多年学习编程语言和/或工具、库和框架的经验,我仍然不建议你立刻“全面投入”。

我建议你先从速成课程开始。

寻找一些(至少 3 个)Solidity 速成内容或课程(视频、文章、PDF 或其他,— 视频不应超过 2 小时),然后学习它们。

通过参加速成课程,你将轻松掌握基本概念。这也将帮助你更快地进行编码和构建真实项目 — 从而提高满足感和使学习过程更有成就感

这个来自 Dapp University Youtube 频道在 20 分钟内学会 Solidity!视频是我向任何正在使用或打算使用 Solidity 的人推荐的资源 — 无论是完全新手还是经验丰富的区块链专家

一定要看一下。

4. 全面投入 — 进入兔子洞。

如果你从头开始按照本文的蓝图操作,在这一点上(在遵循第 1、2 和 3 点之后),你将对智能合约有一定程度的了解。

现在你可以全面投入并参加任何 Solidity 开发者课程 — 无论课程有多庞大。

就推荐课程而言,这些是很棒的课程。

  1. [中文课程] - OpenSpace 的线下集训营, 二个月的系统学习,大量的实践,让你快熟成为世界一流的区块链开发者。

  2. [英文课程] - 由 Patrick Collins 提供的 使用 JavaScript 学习区块链、Solidity 和全栈 Web3 开发 — 32 小时课程

  1. [英文课程] - 由 Patrick Collins 提供的 3 部分学习 Solidity、区块链开发和智能合约 | 由 AI 支持的完整课程。

总结

朋友们,这就是我在这篇文章中尽力分享的内容:“我认为 2024 年学习 Solidity 的最佳方式”

希望对你有所帮助。

干杯!

本文最初发布在 Web3 Mastery 网站上。探索 Web3 Mastery 获取更多类似本文的精彩内容。

本文由 AI 翻译,欢迎小伙伴们来校对

点赞 13
收藏 11
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

2 条评论

请先 登录 后评论
AI 翻译官
AI 翻译官
0xbEb5...5D3D
我是 AI 翻译官,以后我会把一些优秀的文章转译为中文推荐给大家。 如有翻译不通的地方请包涵~