In this article, I’ll be sharing my experience learning Move. It is not oriented to give a comprehensive description of the language, but to serve as a curated list of resources that may ease the on-boarding process.
The motivation behind this piece is that I found valuable material being scattered. Similar efforts that I found online seemed to be outdated (Awesome Move, Teach Yourself Move), but nevertheless I strongly recommend checking them out.
I’m a seasoned EVM/Solidity and Solana/Rust developer. While the following resources generally assume some web3 knowledge, they might be helpful for web2 developers as well.
Which Move
Move is an open-source, platform agnostic programming language for writing smart contracts. It was originally developed as part of the now abandoned Meta’s Diem project. Its syntax is inspired by c++ and rust. It’s oriented to Resources as first-class constructs.
Move was first described in Resources: A Safe Language Abstraction for Money. We recommend reading chapter 2 and the Bank example to have a first glimpse on the Resource model.
The first thing to notice is that Move has evolved in different paths, following the shape of the blockchains that adopt it as their native language, mainly Aptos and Sui. Each version, although building from a common ground, has differences, so it’s important to know from which version you are learning about. This might seem obvious, but it confused me for a while. For this guide, I’ll focus on Aptos Move (but I’m not implying this approach is better).
Move original github’s repository, now redirecting either to move-on-aptos or move-sui.
Tooling
- Aptos CLI
- If you use VS Code, I recommend the extension: aptos-move-analyzer. Please note that there are other extensions with similar names, but this particular one stands out to me as the most valuable. It depends on the Aptos CLI and a language server, so be sure to strictly follow the installation instructions.
My Recommended Path (Of Many Possible!)
I believe that a good place to start is by joining the Aptos Move community on Discord. There’s a lot to explore under dev-resources, and you’ll be able to browse FAQs and post yours.
Now, a warning: While the official Move Book might seem the appropriate way to go next, I didn’t find its definitions explanatory enough. Confusingly, there’s another completely different but identically named Move Book from Sui (which ranks first in Google), which didn’t ease the process either. My impression is that these are more suitable as a reference for intermediate Move devs rather than as onboarding resources.
So I think that a better place to go right after joining the community is movespiders.com. It is a code game organized into short lessons much like Solidity’s CryptoZombies, and it covers from beginner to intermediate. It is still a work in progress by May 24 (I spotted and reported some minor errors here and there) but overall it is a solid and gentle way to start.
Then you might want to check out the Aptos Tutorials. At this point, I would recommend doing the first three, which allow you to play from the client side, experimenting with the Aptos client, the Move compiler, and the Aptos SDK.
Now it is definitely a good time for:
- Installing the Aptos official wallet, Petra, and interacting on testnet/devnet with the modules deployed during the Aptos Tutorials. I was pleasantly surprised by two things: the speed of transaction finality in Aptos (the time that takes for a transaction to impact on the blockchain ledger) and that Petra has a built-in `Faucet` button on testnet/devnet chains (If you’ve developed smart contracts before, you’ll appreciate this perk)
- Interacting with the Aptos Explorer. Notice that for a given account, it offers tabs to review Transactions, Coins, Tokens, Resources and Modules. Remarkably, it has a built-in GUI to interact with blockchain!
Next, make your call:
- For hands-on learners, I suggest diving right into one of the e2e dApp tutorials provided by Aptos. While these tutorials may cover more than just Move, they offer an excellent way to immerse yourself in the ecosystem:
- A simple todo-list. It guides you through building contracts, tests, and a React application from scratch. While it isn’t completely error-free (We are early birds here!), overall it’s a great place to get a deeper understanding of the Resources concept.
- Aptogotchi, a Tamagotchi-style dApp featured on Aptos Learn, a site maintained by Aptos that extends the official documentation. Presented in its final form from the start, it’s an opportunity to delve into more advanced Move/Frontend code, in the form of a guided walkthrough. The intermediate tutorial, in particular, provides an opportunity to take a look at the implementation of Digital/Fungible Aptos Assets and Object Standards—some of the most challenging concepts in this journey.
- If you’re the type who really needs to understand what you’re doing before diving in, I would recommend going through this series from the IMCODING site by Wayne Culbreth. These pieces not only offer a hands-on step-by-step comprehensive tour through Aptos Move core concepts but are introduced alongside the author’s thoughts and ideas, which I found quite insightful.
Finally, exploring the code examples of the move-examples folder in the aptos-core repository can provide a general idea of what can be built with Move. It is actively maintained and constantly being augmented with more examples contributed by the community.
Bonus stage
- Since this guide is oriented towards Aptos Move, you might be interested in Aptos-specific topics. I found this article interesting: Understanding Aptos: A Comprehensive Overview.
- For Solana developers, I recommend reading this excellent piece: Smart Contract Development — Move vs. Rust
- Aptos Learn is constantly adding new tutorials, so be sure to check it once in a while. It also has a more concise Move/Rust comparison series that might be interesting to read for Solana devs too.
Outro
While my initial experience with Move reminded me of the long and steep learning curve from Rust/Solana, it started to click after a few weeks. Although there are still concepts I (and the official docs) need to explore further—like the relationship between private, public, and account addresses and how they impact the programming model—I’ve found that Move is easier than it initially appears. The compiler is less strict than Rust, yet, according to the documentation, it offers the same level of memory safety. Its resource-oriented nature makes it very blockchain-aligned, feeling almost tailor-made for most web3 everyday use cases.
I hope this very opinionated list can help others ease their own onboarding experiences. Please let me know in the comments if you think that there are valuable resources that should be included here!
Our research team is constantly venturing into new ecosystems. Recently, we've been looking into @Aptos Network.
— CoinFabrik (@coinfabrik) May 30, 2024
Did you know that the Move programming language evolved in different paths?
Here’s our guide to getting started with Aptos Move 👇https://t.co/NObWpebkr0