Lessons Learned from Teaching Over 500 Developers or: Why You Should Level Up

This is the text of the talk I gave on May 12, 2019 at the Magical Crypto Conference in New York City.

My name is Jimmy Song and I teach Bitcoin development. Just as a show of hands, how many of you have read the whitepaper? How many of you know how to code? How many of you have contributed to an open source project? How many of you have contributed to Bitcoin Core?

My goal here today is to inspire you to understand Bitcoin better and take you from one level to the next. I’ll do that through some of the insights I’ve gained by teaching over 500 people and make it applicable to you by showing you what’s effective in your journey toward understanding.

The Class

The first thing to learn about my class is why people take it. One reason is because Bitcoin is rather intimidating. The impression that a lot of people get is that Bitcoin is a super-security conscious network where a small screw-up could lead to a lot of money loss. That would be correct. The security implications and rather daunting for someone starting out and having someone guide them in their learning is a huge incentive.

Another reason is because Bitcoin is difficult to understand. It’s not an easy technology and most people have a hard time learning on their own. I’ve had people tell me that they spent 6–18 months trying to learn the technology on their own before giving up and taking my course.

The last reason is because a lot of people want the motivation of taking the course to get them into gear. The investment that people need to make in terms of time and money is quite a lot and that helps people get into the right state of mind to take the learning seriously.

I encountered all of these issues when I was getting started coding in Bitcoin, back in 2013. Back then, the documentation was sparse and any sort of learning platform, non-existent. One of the reasons I created this class and wrote my book was to help developers not suffer as I did.

The structure of my class is a 2-day workshop that consist of 8 hour days. The one major exception to this was a half-semester graduate class I taught at the University of Texas, which was split up into 7 weeks for 2.5 hours each. Since some of that class time was spent on exams, the total number of hours ended up being about the same. The students code a library for themselves that does a lot of what any Bitcoin library would do. They are positioned to learn together with peers that are basically starting from the same place.


The first learning is that most people think they know more than they do. It’s easy enough to talk about concepts, but presenting the details usually results in some real light bulb moments. Here’s one student’s evaluation of the course:

To be honest, if it wasn’t for the scholarship I would never have considered attending Programming Blockchain. More than the cost, I arrogantly thought that having a computer science background meant that I somehow already understood Bitcoin or that I could always fill in the gaps with a bit of light reading. How would a two day seminar help?
Oh man what a wake up call! Within a few short minutes of sitting down, reality set in. The scope of the task ahead was made clear. We were to digest a semester’s worth of new material in two days whilst solving programming puzzles at unrelenting pace. The average technical ability was insanely high and I felt like the dunce of the class!
It was a indeed a huge challenge, but one that was immensely satisfying. Each puzzle would build upon the previous ones, until we finally built up enough layers of understanding to create, parse and verify transactions and blocks with our own code. Now we can build our very own wallets!

The second learning is that near everyone is surprised by how much they learn in two days. We cover a lot of material, though, to be clear, we only really cover a small portion of all that goes into Bitcoin. The reason people are able to do this are three-fold.

First, because people are setting aside two days and in a setting where this is the only thing that they’re doing, they are truly focused on the task at hand. Yes, people still check their email and social media accounts between sessions, but sitting in a classroom for 8 hours with no other responsibilities really helps.

Second, because people have to code, the lectures really harden. The implementing helps students get a good grasp of what was just learned in concept.

Third, because they have peers, there’s a desire to keep up. Much like how crossfit incentivizes people into putting more effort than they would alone, being in a classroom setting motivates people to keep up with everyone else.

What does this mean for you? Well, first, if you want to understand Bitcoin, you’re going to have to do some reading/watching/listening. This could range from the most basic concepts to the most critical code. Why should you do this? As I’ll make clear later, this is really good for your investment! And finally, if you want to really absorb the information, you’re going to have to set aside time to really focus.


The next learning I want to emphasize is that concept is not code. The example here is of public key cryptography. Most people, at a high level understand that only a private key can create a signature and a public key can verify it, but do they really understand how it works? Most don’t. Implementing the code requires a much deeper understanding of the concept to make things work. What I’ve noticed with my students is that they have some general idea of how something works when they come in and a bit more when I lecture, but they don’t really understand until they code.

The beauty of coding is that there are no ambiguities. You can’t hand wave over anything. You have to be clear in what you mean and be precise in what you ask the computer to do. That level of rigor is helpful to understand what’s going on.

This in turn leads to appreciation for the coders that actually implement Bitcoin. Core developers are held in high esteem already, but learning about various concepts and how they’re implemented inspires gratitude. For example, UTXOs are a concept that many people know, but when students learn about how transactions are constructed, they gain a true appreciation of how elegant a solution Satoshi made to make keeping track of the ledger simple.

Another such example are Merkle Proofs. When students learn how you can prove a transaction is in a set without knowing the entire set, they’re surprised at its cleverness. The forethought involved in adding the Merkle Root to the block header is something students really start to appreciate.

Lastly, Segwit really tends to blow peoples’ minds. Generally, their reaction is, “Why was this so controversial?”. They see how it helps the network and cleverly makes things backwards compatible and how it really doesn’t break any precedents since they learn about pay-to-script-hash beforehand.

What does this mean for you? At the risk of getting banned from Twitter, learn to code! Not only is this good for your Bitcoin investment, but it’s great for your career. If you think that only programmers take my class, you would be wrong. I’ve had accountants, hedge fund managers, project managers and many other professions take my course. Knowing the bare metal, so to speak, helps in almost any endeavor involving technology and this is definitely true of Bitcoin. How do you get started? Find a group to learn with. This will help the same way that a yoga class or a crossfit class helps you get fit. You can hack your inner social animal to your advantage.


And this segways nicely into my next point. People learn a lot better in groups. Part of the reason is because you have peers that can help you. This helps both the helper and the helpee. The helpee obviously gets another explanation from another perspective. The helper is forced to articulate the knowledge in a clear way that another person can understand.

This is why I believe diversity in a classroom helps a lot. For a long time, my classes were mostly men. This is to be expected, I’m male and I generally know best how to market to people in my demographic. When Elizabeth Stark started helping me recruit women for some scholarships, I noticed something. First, the classes were a lot more fun to teach. Different perspectives mean that you get questions phrased differently. I’m forced to explain things in more complete ways as a result. Second, I noticed the students enjoyed the class more, too. The group dynamics in a learning environment seem to get better with more diversity. My favorite class that I’ve taught happened a year ago here in New York City. Due to Elizabeth’s recruiting efforts, we had a diverse group of 37 students.

After the two-day class we usually go for a drink nearby to unwind a little. We hang out, have a good time and talk about Bitcoin. What I noticed about the New York class is that we hung out for a good 6 hours after the class. Everyone enjoyed being with each other so much that we just kept hanging out!

Lastly, it turns out a lot of students enjoy explaining to others. Justin Moen, Stepan Snigirev, Pierre Rochard, Hugo Nguyen are all known in the industry for their explanations and teaching. They’re all alumni of my course. Each has found that explaining Bitcoin to others is a great way to learn themselves.

What does this mean for you? Well, teach! As they say, if you really want to learn something, teach it. Teaching forces you to learn the topic thoroughly as we all want to avoid embarrassment. But more subtly, it helps us to practice defending Bitcoin against attack.

There are so many ridiculous claims by altcoiners out there. For example, Ryan X Charles recently claimed that lightning nodes are money transmitters. Helping educate others through teaching helps people understand what’s going on.

How can you do this? Go to a local Bitcoin meetup and ask to present. Or use Medium to write an article. The level of rigor required for creating teaching material will really help you understand Bitcoin.


So here are some takeaways for you. First, realize that understanding Bitcoin is hard. Yes, Bitcoin is simpler and more secure than altcoins, but it’s still not easy to understand. What you think you understand, you can always understand better.

Second, understand Bitcoin deeper through reading/coding/teaching. This is not only good for you, as you’ll understand your investment better, but also good for the ecosystem.

Which brings me to my next point. The ecosystem is you! The traditional centralized way of running things is all based on trust. Trust ends up being about credibility, and in a darker way, about discrediting others. This generally leads to a lot of politicization of said entity as someone that can play that game usually ends up taking control.

This is the path that altcoins are going down. Ethereum, for example, has set up a cult of personality around Vitalik. Their system is so hopelessly complex and so few people understand how it works that very few people even bother setting up a full node. Instead of looking at new features critically, they end up trusting whatever Vitalik says. In other words, they’re trusting, not verifying.

Bitcoin is about verifying, not trusting. Many of us run full nodes so we can verify the transactions ourselves. That’s what makes the network decentralized. It’s also important to make the understanding of Bitcoin decentralized as well. Instead of trusting such-and-such person, we should be able to evaluate what they’re saying. That’s how we stay decentralized, by making Bitcoin a real meritocracy with critical evaluation of the code.

Now that said, this doesn’t mean that you need to understand the subtleties of possible security breaches in every line of code. I just want you guys to take one step toward verifying and one step away from trusting. In other words, I want you to level up! Only by understanding better yourself will we get stronger as a community. Thank you.

Some books you can read to start on this journey are my book, Andreas’s book, Grokking Bitcoin, Inventing Bitcoin, The Bitcoin Standard and Bitcoin Money.