1. Read “Mastering Ethereum”
https://www.amazon.com/Mastering-Ethereum-Building-Smart-Contracts/dp/1491971940
Initially, I was skeptical. The book was released in 2018. The space moves so fast, surely the content won’t be relevant in 2022? But I’m so glad I gave it a chance!
“Master Ethereum” is full of extremely helpful context: elliptic curve math, how wallet addresses work, why sha3
instruction is actually keccak256
, the history of the original DAO, and the most famous hacks. It also talks about some projects and aspirations that didn’t find their way to mass adoption.
It’s very accessible and easy to read. I breezed through the content in just a few evenings and it filled many gaps in my understanding of the ecosystem.
2. Read contracts on Etherscan
I used spent days hanging out on Etherscan, looking into odd contracts. I like picking up interesting tricks and the current dev “meta”. It’s also nice because you can stumble upon some code and wonder “why is it built this way?”
Here’s a list to get started:
WETH — simple and elegant way to wrap Ether in ERC20
Loot — influential NFT project with on-chain storage
Nouns — NFT project, auction and governance
Uniswap v2 — AMM at its finest
OKPC — NFT objects that can do stuff
Watchfaces.World — adaptable, on-chain and looks beautiful
If you are interested in a curated Hall of Fame, subscribe, I might have something for you soon.
3. Use tools to understand what’s happening under the hood
Etherscan is great, but not every contract has the source code available. The built-in transaction viewer is fairly limited too. Here are a few tools that you can use today to better understand how things work under the hood:
ABI for unverified contracts: analyzes the bytecode and guesses the functions that are available in the contract. Can give you a good idea of what an unverified contract can do
Ethereum Transaction Viewer: shows a very detailed trace of any transaction (example)
Tenderly: all-around great debugging tool. Tenderly Forks is a way to preview what’s going to happen when you interact with a contract.
4. Dive deeper into the lower levels
Solidity is a high-level programming language that compiles down to a very simple set of EVM instructions.
Yul and bytecode are low-level programming languages. I used to think they are complex and scary. But after diving deeper I was delighted to discover that the EVM is actually very, very simple!
Here’s how you can start learning Yul today:
Inspect ir-optimized Solidity output:
forge inspect $CONTRACT ir-optimized
will show you your Solidity code compiled into optimized Yul (before it’s converted to bytecode)Yul and Assembly is a great, fast-paced overview of Yul’s features
evm.codes is my favorite resource for learning individual opcodes or quickly trying out simple bytecode contracts
If you’d like to learn how EVM works, you might be interested in the new EVM course I’m working on. It’s a very practical path for people who learn through doing. During the course, we’ll implement EVM from scratch (in any programming language of your choice!) You’ll be surprised how elegant and simple it is.
5. Follow the best on Twitter and Farcaster
All the latest dev alpha appears on Twitter first.
But don’t follow accounts that already have 100K+ followers. The influencers don’t have the time for deep engineering work. They are in the business of making the existing knowledge more accessible via breakdowns, summaries, advocacy, etc.
If you want to get the latest tech insights, seek out the smartest devs. They tend to keep a low profile and don’t post often, but when they do, it’s really good.
A good place to start is my following list.
Farcaster (“the purple app”) is a new social network that’s gaining a lot of momentum. It’s in closed beta now and requires an invite. It attracted a lot of smart tech-minded people, and the discourse so far is excellent.
6. Join Discord communities
A good starting point is Developer DAO or Crypto Devs. Don’t buy tokens or NFTs to get in though.
Try going in and answering some questions.
These DAOs are very large and overwhelming. As you get better with Solidity, you’ll want to seek out smaller, more focused communities of builders, with a higher signal-vs-noise ratio.
I still visit a few channels there a few times a week. Scrolling through the questions gives me ideas for new content or areas I haven’t explored yet.
7. Build and ship (in the open)
Nobody can teach you things that you’ll learn by shipping real projects. This is my favorite way of getting better at anything.
Be careful though: don’t aim too high. I’ve met so many people in the space that dreamed up big ideas, so big that shipping them took years. By the end of it they were burned out.
Instead, aim for something small in the area you want to get better at. For example, release a custom limited edition NFT with fewer than 20 items (e.g. Runes of Ethereum, Snow v1).
If you are comfortable, build your project in the open. That means sharing work-in-progress ideas, designs, and code. It can be hard at times, but definitely worth it.
From time to time I do public “code roasts” 🔥: I can look at your Solidity code and give you some high-level feedback. Here’s an example. I usually announce roasts a day or so in advance.