My 200 days of daily web3 learning and building
Published on
How it started
At the end of 2020, I have decided to make 2021 "a challenging year," meaning that I would come up with a challenge for each month and do my best to stick to completing it, no matter what. It ended up being a fantastic idea. Some of the challenges I've tried: zero sugar in April (then again in May), publishing something every day in February, taking a cold shower each morning in July, zero coffee in November and zero alcohol in August. You can read more about all the challenges here.
The month most relevant to this article was September.
The challenge
I decided to learn web3 for at least one hour every day in September. No exceptions. Monday to Sunday, come hell or high water.
To better prepare for the challenge, I started learning on August 12th, without the hard limit of at least an hour a day. It was going well. From August 12th to August 31st, I missed only three days. My unbroken streak has started on August 27th, and it's still active, more than 200 days later.
I have completed the September challenge and loved it so much that I've never stopped.
Here's what the September challenge looked like regarding how difficult it was to learn web3 for at least an hour. A few 10s you can see in the chart were when I postponed learning till the very end of the day. Those 10s were when I was sitting looking at the code at 5-6 am, falling asleep from time to time, trying to make sense of what I was reading and writing. Do not recommend. Starting first thing in the morning works best.
Why did I do it?
First, I was interested in web3 itself. As I started looking into it and wanted to start learning it, I noticed that the field is so new that there are no tried and proven paths to learning it effectively.
When you decide to learn Python, Java, Ruby on Rails or any other established programming language, there are plenty of books, tutorials, or high-quality courses. You can start learning immediately, with at least 6+ months of high-quality, well-structured content ahead of you.
There was no such thing for web3. Sure, there were many tutorials, each focusing on some aspect, but nothing holistic, no tried and proven path from zero proficiency. I decided that I would document my learning journey and help others learn from my experience and mistakes: which courses were good, which were not, what was helpful and in-depth, what was repetitive and a waste of time, what was hard, what was easy, what to start with, what to postpone.
The web3 industry, while still in relevant infancy, is moving at breakneck speed, though. What was missing just a few short months ago now exists, thrives even. There are plenty of good resources now that will reliably take you from zero to "dangerous enough," where you can venture out on your own.
So the part of learning from my mistakes got less important with time, but there's still a lot of value and wisdom to share, expectations to set and encouragement to give, and that's what I'll write about in this article.
What did I learn?
Learn, build, learn, build
You can go through someone else's code and nod along, understanding everything perfectly and thinking everything is easy and obvious. But if you were to sit down in front of a blank file, you wouldn't know where to start. You still don't have the conventions ingrained in your mind; you don't remember what goes where; you keep making simple syntax mistakes. This is why it's crucial to interchange learning and building. Learn something, build something, even something as simple as a "Hello world," a greeting smart contract, or a lottery machine. You'll learn the syntax and conventions and understand the structure that you didn't even notice before. Once you build a simple tool, move on to the next learning experience and create something new.
Create content
Write and share what you've learned. It will serve as much those who come after you as it will benefit you. You'll be amazed how often you'll be returning to what you've published previously. Memory is fickle. Whatever you write down will help prop up your memory and save you countless hours in the future. As a bonus, you'll earn the reputation of someone knowledgeable and helpful.
Engage
It's nice to be able to figure out everything on your own. Internet is a magic thing, and you can learn on your own pretty much whatever you want to learn. But "other people", and especially "other people in a helpful community" are even more magic than the internet. Quick, valuable, insightful feedback is invaluable. You'd be amazed how often and how readily people are willing to help, expecting nothing in return, maybe except for passing it forward. It might be a sign of a young industry or finding the right community, but it's amazing.A few communities I found particularly helpful: SpeedRunEthereum.com (by Austin Griffith and scaffold-eth), DeveloperDAO (started by Nader Dabit, you need their NFT to join their Discord), buildspace.
Prioritize
It's easy to get lost. There are so many directions you can go to (smart contracts, front-end, full-stack, NFTs, DeFi, security audits, etc.), so many tutorials, so many repositories. Decide on the direction, research what's available, and make a plan:
- What you will start with
- What simple project you'll build after that
- Which resource you'll tackle next
- What else you will build
- Which real-life repository you'll study when you feel confident enough.
- What you'll do when you think you're good enough.
Stick to the plan and review it monthly, as you learn more, as the new content comes along, and as the vision clarifies. If you don't start prioritizing and applying filters to everything you come across, you can end up in an endless learning loop, with not much to show for it.
Be consistent
Life actively tries to prevent you from doing anything. It will throw anything it can at you. If you're not consistently learning and working every day, life and other priorities will take over, and you'll end up nowhere. It's easy to take a break one day because something important came up or you're not feeling like working. Then there's another exception the next day. This time, it's easier to justify because you didn't work yesterday. When the next day comes, you're more likely to do nothing than get back on track.I believe that "100% is easier than 99%". If you know that there can be no exceptions, you don't even start negotiating with yourself or thinking if a given situation is serious enough to warrant the 1% exception. No. Every day is a workday. Simple (but not easy, I admit).
Document the progress
Make notes!!! It serves two purposes: notes can become content you can share with others. But more importantly, notes will help your future self. When you're learning new things, your memory's capacity is limited. Furthermore, you don't fully understand some things you're learning right now, but you will understand them well when you know more. But you must write them down now to be able to come back to them later.Another important aspect is to write down all the important steps in your projects: URLs of repositories, commands used to install, test or deploy the project, tricky code snippets. It's one of the best cheat codes for future efficiency. If you do something once and document it properly, you will not waste time on it in the future. Not wasting time when coding is a magic power-up. Use it. Get into a habit of writing down all the steps. You'll want to kiss your past self each time you come across a clean list of steps, commands, and code snippets that exactly match what you need.
Ask for help/advice
I've touched on it in the "Engage" point above. Asking for help and not being afraid to sound stupid is another underappreciated cheat code. First, nobody will think you're stupid. Second, you will get quick and professional help much more often and much sooner than you think.
Patience. Don't get frustrated.
According to Bill Gates, most people overestimate what they can do in one year and underestimate what they can do in ten years. Consequently, you overestimate what you can do in one day and may feel frustrated at the end of the day when you don't feel like you've done much. But if you're consistent and keep stringing those days one to the other, a year from now, you will suddenly realize that you are far further than you would imagine when you started out and that you're doing things you thought would take years to learn.For example, I have already had a talk at web3con (a premier online conference for web3 builders), analyzing a good NFT smart contract, and I will be a speaker at an NFT.NYC ("The Super Bowl of NFTs) in New York in June. Did I even think of such a possibility 200 days ago? Hell no.Patience and consistency.
What did I build/achieve?
Listed in a roughly chronological order (the most interesting ones at the end!) and excluding multiple simple tutorial projects not worth mentioning.
Simple NFT
Project #1 in Speed Run Ethereum challenge.
URL: https://nft-example-velvetshark.surge.sh/
What it is: A simple NFT to learn the basics.
Tech: Solidity, ERC-721, HardHat, React
Decentralized staking
Project #2 in Speed Run Ethereum.
URL: https://staking-app-velvetshark.surge.sh/
What it is: A decentralized application where users can coordinate a group funding effort.
Tech: Solidity, HardHat, React
Token vendor
Project #3 in Speed Run Ethereum.
URL: https://token-vendor-velvetshark.surge.sh/
What it is: A vending machine that will buy and sell digital currency (an ERC20 token).
Tech: Solidity, ERC20, HardHat, React
DEX
Project #4 in Speed Run Ethereum.
URL: https://dex-velvetshark.surge.sh/
What it is: An exchange that swaps ETH to ballon tokens ($BAL) and balloon tokens to ETH. Great to learn not just Solidity but also many fundamental DeFi concepts needed to be able to build a working exchange.
Tech: Solidity, ERC20, HardHat, React
NFT game
Buildspace project.
URL: https://nft-game-starter-project.velvetshark.repl.co/
Github: https://github.com/sabon/nft-game
What it is: A simple NFT game where you mint/purchase an NFT and go and fight a strong boss, which is also an NFT. All character stats (strength, health) are stored on-chain. Both a character and a boss can die, too, and stay dead on-chain forever.
Tech: Solidity, React
Solana NFT drop
Buildspace project.
URL: https://solana-nft-drop-phi.vercel.app/
Github: https://github.com/sabon/nft-drop-starter-project
What it is: A simple NFT minting experience on Solana.
Tech: Solana, React
DAO starter
Buildspace project.
URL: https://shark-dao.vercel.app/
What it is: Build your own DAO with just JavaScript and thirdweb tools.
Tech: JavaScript, thirdweb
Emojiverse
My own hobby project. The most fun one of all!
URL: https://nft-example-velvetshark.surge.sh/
What it is: An NFT collection of fully on-chain SVG NFTs. Show what you are about, with emoji.
Tech: Solidity, ERC721, Hardhat, React
web3con speaker
Presented at web3con and analyzed a good NFT smart contract: what it does, step-by-step, why it does what it does, what tricks it uses, what mistakes it avoids, what it could do better.
Event page: An analysis of a good NFT contract - Crypto Coven
Video presentation:
NFT.NYC speaker
https://www.nft.nyc/
I'll be heading to New York and speaking at NFT.NYC in July, again analyzing a good NFT smart contract.
The highlights
Permanent excitement. This is intangible but hard to overstate. The feeling when you wake up and can't wait to start working on whatever you were working on yesterday evening—you can't buy it. It drastically changes your life quality for the better. And this feeling doesn't stop! It's like a harmless, long-lasting drug without the hangover.
The community. Genuinely helpful and friendly people are rare species. When it seemed like this type was dying out, you suddenly find a Jurassic Park full of them.
The possibilities. There are so... many... things to do, opportunities to explore, roles to consider, DAOs to explore, Discord servers to join and ignore, areas to learn. It's both a blessing and a curse. There's no chance to be able to do 10% of what you'd like to do.
The optionality. While the world is slowly transitioning to a remote way of working, it's still far from the default mode. Web3 is remote-native. And it also offers many different ways of working and earning: traditional full-time work, well-defined one-time projects (aka "bounties"), contributing to DAOs. You can pick and choose what you want and build your professional life with your selected Lego blocks.
The downsides
Too much going on. A blessing is also a curse. The industry moves at a breakneck speed, and there's no chance to keep track of even half of it.
Monetary incentives. Where there's money, there are scammers. There is an abundance of them in web3, too. It's also scarier because "code is law." There's no customer support department to call, complain and ask for a refund or intervention if something happens.
Too little regulation, too much regulation. Governments want to regulate cryptocurrencies, despite knowing very little about them—that's more regulation than I'd like. On the other hand, as mentioned previously, some aspects could benefit from more regulation, like NFTs, where there's virtually no control or oversight, and good projects are mixed with bad ones, poisoning the public perception of the industry.
If I were to start today, how would I do it?
Do I still recommend it? Yes! In many ways, it's much easier to start now. There are much more resources, much larger communities, more guidance. You just need to put in work to learn and to keep consistent.
Consistency above all. However quickly you learn, the industry moves even quicker, so it's impossible to be up to date with everything. You need to choose a path and stay on it. This is why consistency is so important. It's the only way to move forward and not stay behind.Doing something for a week is not consistency. It's an infatuation. Doing something every day for three months, for half a year, going ever deeper—that's consistency.
Document it. Everything. Code, learnings, ideas. As much for everyone else as for your future self.
Start by doing. Learning is great, but it's better to start doing too soon than too late. As soon as you finish the first few tutorials, decide on something simple to do from scratch. Not a tutorial project but something you came up with. Whatever you need to learn for your mini project, google it and learn on the go. You will struggle mightily and be frustrated almost every minute of it, but you'll learn much more and much faster.
Build. Small projects are fun, but larger projects are essential too. A simple app won't teach you good coding practices or how you should structure a complex app. So learn from the best and apply those learnings to your own, ever-larger projects.Great places to learn how to build: EthereumSpeedRun, Buildspace, Web3University, Nader Dabit, Patrick Collins.
Ask for help/advice. Find a couple of spaces with like-minded people and learn with them together. Ask questions, answer what you can, grow faster together. DeveloperDAO and buildspace Discord servers are good starting points.
Get involved. Start contributing. Start answering more questions than you ask. Help fellow developers. Contribute to open-source projects, even if starting with something minimal.
What's next?
There was a much greater need for a high-quality and structured path from zero to web3 fluency when I was starting out. In my opinion, this need has since been filled. Now it's only a matter of deciding on a path and consistently following it. See the "Resources" section at the bottom and choose where to start.As for me, I'll keep learning and keep building. I'll be documenting the more exciting developments or projects here and sharing the wisdom.If you want to learn about web3, you can follow me on Twitter or subscribe to the newsletter (see the form at the bottom of this article).
Resources
- Crypto Zombies - if you're starting from scratch, start with this
- buildspace - beginner-friendly projects to build and learn from
- Web3 University - open community of developers learning and teaching Web3, by Alchemy
- LearnWeb3 - learning by doing, with multiple tracks: Freshman, Sophomore, Junior, Senior
- Speed Run Ethereum - a set of projects/challenges for when you're feeling more confident and want to learn more advanced concepts
- And... it should be obvious, but more often than not, it's not: read the docs! You'd be surprised how helpful the docs are and how much you can learn from them. RTFM!