· 5 min read

How to Learn Programming - Geohot

This article was auto-translated from Chinese. Some nuances may be lost in translation.

The only advice I have for learning programming is go program.

After watching so many programming channels and reading countless articles, I still find Geohot’s advice to be the most incisive. There is no secret sauce—once you see through it, it’s plain as day: you won’t suddenly become great just by watching videos, nor will AI assistance magically turn you into an enlightened developer overnight (even if leveraging AI can certainly speed up the process). You just have to start coding.

This quote comes from a clip of his appearance on the Lex Fridman Podcast. The entire episode runs for three hours and is well worth watching in full.

Who is Geohot?

A quick overview: He cracked the PS3 root key and was sued by Sony, and he jailbroke the iPhone so it wasn’t locked exclusively to AT&T’s network. In recent years, he has been building the autonomous driving software comma.ai and the deep learning framework tinygrad (think of it like PyTorch). tinygrad started as a side project on his Twitch livestreams, with the goal of writing a usable deep learning framework in under 1,000 lines of code. You can find the stream archives on YouTube, or check out the code directly on GitHub.

I plan to write a separate post covering more of his accomplishments.

Which Languages Should You Learn?

Geohot recommends this order: C, Assembly, and Python, followed by three branching paths:

  1. Functional Programming. Learn something like Haskell to understand the world of pure functions. He wrote a simple Scheme interpreter in Haskell himself; writing an interpreter helps you understand how a programming language turns into something a computer can actually execute. You can check his stream archives for details.
  1. Verilog or other HDLs to understand the hardware world. Hardware and software require two completely different mental models. Geohot once created a repository called fromthetransistor with an outline intending to build a simple browser all the way up from transistors. The concept is very similar to From Nand To Tetris.

  2. Deep Learning, such as PyTorch. His way of learning is to read papers directly and then figure out how to implement them in tinygrad. This is actually the most effective way to learn deep learning—otherwise, many engineers simply plug in existing frameworks, tweak a few hyperparameters, and have zero clue about the underlying principles.

Understand how the low level works first: how C compiles into assembly, which naturally leads to core computer architecture concepts like the stack, heap, CPU, and RAM. Once you understand all that, you’ll truly appreciate everything Python gives you.

What You Can Learn from His Livestreams

You can uncover a lot of gems from Geohot’s livestreams.

Back then, he mostly used Vim in his streams (though he switched to VS Code after discovering its perks). His typing and thinking speeds were incredibly fast—fast enough that you could really feel his mastery of Vim and his intuition for where to start tackling a problem.

I used to not care much about typing speed, nor did I pay attention to keeping my hands on the keyboard. But it turns out to be more important than I thought: if you aren’t fast enough, your train of thought gets interrupted easily. This interview took place back before LLMs could take over day-to-day development, so hand-coding was still the norm; though in his recent streams, Geohot himself writes less by hand and has switched to Opencode.

His debugging style is equally worth watching. Even a legendary engineer like him still looks up syntax and documentation when running into issues—there is no secret magic. In his streams, you see a ton of trial and error: add a log here, add a log there, see what happens. It’s simple, but it works. He strives to keep his code as simple as possible, writing a tiny chunk and verifying it immediately, rather than writing a huge block before running it only to have no idea where things went wrong.

Over the years, he has accumulated quite a few projects. If you’re interested, you can dig around in this YouTube channel that archives his streams.

Why Are People Like Him So Rare?

Lately, I’ve noticed quite a few engineers who haven’t even written much functionality before clamoring for DDD, demanding the latest frameworks, layering state management tools B and C on top of A, and calling for refactoring at every turn—yet their idea of refactoring is just wrapping a blob of code in a function and moving it elsewhere. In the end, before the features are even built, the project is already so convoluted that nobody can touch it.

Due to the nature of frontend development, building web pages without a bundler can feel a bit restrictive (though it’s still doable), but most of the time, building a project really doesn’t need that much fancy packaging.

Geohot once joked that as long as you can submit high-quality pull requests, he doesn’t care whether you’re a human or a monkey—he’d happily pay you in bananas.

In my ten-year career, I’ve worked with dozens of engineers who possessed deep expertise in their respective domains, but I’ve only ever met one who also had a thorough understanding of the lower levels. Working with someone like that is completely different: the perspective they take on problems, the direction they take when debugging, and their tolerance for “complexity” are worlds apart from average engineers.

Explore Other Topics