I want to tell you a story. A story of how I went from knowing nothing about web3 to building my first full-fledged dapp in under two months - and how you can do it, too!
The secret? It's all about project-based learning!
Step 1 - jump right in!
Less than two months ago, I decided it was time to learn more about web3. I wasn't sure where to start, so the first thing on my agenda was to build a simple project, just to get a taste.
Luckily, at the same time, I was attending React Advanced London where Nader Dabit was leading a workshop on how to build your first dapp. This was perfect! ๐
I did nothing to prepare.
Still, in under 3 hours, I was able to learn the very basics of:
- how to setup my dev environment with Hardhat
- what is an Ethereum Web Client Library - ethers.js
- how to use Metamask
- what is a Solidity smart contract and how to create and deploy one locally
- how to make my very own ERC20 token with OpenZepplin
Of course, my understanding was (and partially remains) shaky at best! But, in reality, we don't need to fully understand something to be able to take advantage of it.
Here is a good rule - only dig deeper into a topic if your lack of knowledge blocks progress on your current project. In other words - learn more when it helps you solve a problem right now. Else - leave it for later! If it's important, it will pop up again.
Embracing this principle is what project-based learning is all about! It makes learning new technologies fast and efficient while keeping us productive at all times. But for it to work, we need to constantly be building increasingly advanced projects.
I was ready for my next challenge!
Step 2 - what is an NFT?
NFTs have become all the rage. And while I had a vague idea about what they are, I certainly wanted to know more. And what better way to learn than to build your own NFT game! So I did ๐
Right about the time I was done with my workshop, I stumbled upon buildspace - an amazing web3 resource with an even more amazing community. They offer a variety of projects you can choose from and build, including a mini turn-based NFT game where you can mint your own playable characters and - together with other players - defeat the boss! This was exactly what I needed. So I signed up!
It was a weekend challenge and once again, I went into it with zero preparation, apart from my previous workshop experience. Here's what I learned:
- what is an ERC-721 token
- how to create an NFT smart contract with OpenZepplin
- what is NFT metadata and how to manage it on chain
- how to deploy smart contracts on a test network using Alchemy
- how to mint NFTs
- what is OpenSea and how to see my NFTs there
- how to connect a Metamask wallet to my dapp
- how to add events to my smart contracts and listen for them on the front-end
Check out the game, if you are curious!
This was all very exciting. But as it's often the case, the more you know about something, the more you realize how much you have to learn. The amount of things I needed to read about and understand was becoming overwhelming. I was starting to drown.
So once again, I applied a project-based approach to narrow it down. I went trough my code multiple times and made really sure there isn't something in there that I have no idea what it does. A basic understanding was just fine for now - sophistication comes with practice, in my experience. Anything outside of my project, even if super interesting, had to wait!
With the game done, I needed to come up with my next challenge. You might have noticed that so far, I've been building tutorial-like projects with a lot of hand-holding and help provided.
To advance further, I knew I had to go out on my own.
Step 3 - Code NFTs
I was looking for my next web3 project when I came across the Chainlink 2021 Fall Hackathon. It was a perfect fit! Not only did the event welcome beginners but it also provided tons on useful resources and workshops to help you get started. In addition, there was so much freedom when it came to the project submissions - the only rule was that you had to use Chainlink!
I had little idea what Chainlink was or what it did at the time. So naturally, I signed right up! ๐คทโโ๏ธ
This time, I needed to come up with my own project idea. I had a vague notion of what I wanted to do. I've always found the code screenshots people share on social media very useful but also really creative. And there are a lot of apps to help us create and share code screenshots in a nice way. But there are none that let you turn those unique images into NFTs. I wanted to make this possible!
This time, I didn't jump straight into coding. Instead, I took advantage of hackathon workshops to learn more and get inspired. Always with my idea in mind, though, I only attended the sessions that had the potential to help me with my project directly. Once again, the rest, even though it was super interesting, had to wait.
The workshops helped me find exactly what I was looking for - a way to speed up my development significantly while also adding a little unexpected twist to my project.
In the end Code NFTs were born! It's a full-fledged dapp that will turn your code into a unique NFT with a random theme. It also lets you explore all Code NFTs other people have created. It's really cool, check it out!
Here's my list of learnings:
- how to build a dapp's backend with Moralis and take advantage of their awesome SDK on the front-end
- how to use randomness in a smart contract with Chainlink VRF
- what is IPFS and how to handle NFT metadata off chain
- how to take advantage of the OpenSea API
- how to use CodeMirror
This project was a ton of fun to build and I'm so happy with the result. As is always the case, there's a lot that can be improved. But for now, it's in the hands of the hackathon judges.
What's next? I'm not sure yet. If you have any cool project ideas, get in touch!
What I do know is that my next list of learnings will most likely come from the next project I build. Project-based learning really works!
Give it a try! ๐
If you found this article useful, follow me on Twitter for more tech content!