Rust & The Revolution

How to learn Rust and change the world

Since I started this newsletter on Wednesday, I’ve gotten three subscribers! Awesome, thank you, you were here from the beginning. Also, don’t miss my appearance on a live podcast with my friend Jess, The Bitcon Bandicoot, where I’ll be talking about my two favorite things: Rust and Bitcoin. Orange Metal, Orange Coin. I’ll be on shortly, in about an hour from now, so don’t delay. If you miss it, however, don’t worry, there’ll be a recording. Link here:

Some things that might not be obvious to those wanting to break into tech is, there are lots of tech jobs in tech companies that don't deal directly with building the tech itself. The interesting thing is, it's also possible to learn and contribute by figuring out how to learn to code. I think Rust makes for a very good and modern foundation for this. Not only is the community diverse and active and receptive to newcomers, but all the docs are in one single place, and all the tools are standardized, making it easy to start a new project and jump right in without a bunch of preparation, unlike, say, the majority of modern JavaScript projects.

Rust also pays a lot of attention to correctness and gives you a lot of room to experiment and optimize, while also providing a large ecosystem of projects that you can leverage and build upon, all without having a cognitive load so high so as to making it seem impossible to get anything done in a language that values correctness as much as Rust. I see Rust as being no more difficult to learn for a beginner than NodeJS, but so much more is possible with it, everything from WebAssembly for replacing JavaScript, desktop apps using Iced and other desktop-native frameworks, and even mobile apps using cargo mobile, Rust is so much more than just a programming language that Linux nerds use to make databases and CLI programs.

If you’ve tried learning other languages, and they didn’t always make enough sense to you in order to be productive, give Rust a try. And you might not get it at first, either. Let it percolate, give it time. I first touched Rust in 2018, but I had to keep coming back to it before it stuck, and I got my first full-time job writing Rust professionally in 2020, and started using it in an open source blockchain project only just this year.

The fact that Rust is the only language other than C allowed anywhere near the Linux kernel should be enough to catch anyone's attention. C has been powering some of our most critical systems for the past 40 years. Rust has been said to be the language for the next 40 years. Adoption amongst Big Tech should also be a positive indicator, even if one is as skeptical of them as I.

I'd recommend Rust as anyone's first language. Beginners will need to find a good way to learn, though. Beyond the Rust book— which is of limited utility if not used for reference, since the context of that knowledge is only really most obvious when applied— there are GitHub examples (usually found by pressing the T key when on a GitHub repo and typing "examples") and Docs.rs, which I find most useful to understand what I can do with any particular project. Cheats.rs is another useful reference.

But let me be clear: The best way to learn Rust is to write Rust. Think of something you'd like to do, try to break it down into achievable pieces, then learn everything you need to learn to make it, but only as you're building it.

The next best way is to read Rust others have written, however, sometimes you'll come across Rust that doesn't always make sense for your skill level. Try looking around, and finding Rust that does make sense. Programming in Rust isn't like writing a mathematical proof. There's a number of ways to solve any problem, and choosing which tools one uses to do so are as much a matter of opinion and experience as they are fact. Which makes writing computer programs more similar to an art than a hard science.

Also, it's worth noting, the blockchain space hungers for Rust devs like you wouldn't believe. If you make contributions to an open source blockchain project, not only is that a great power move in the hiring process, it makes it easier for them to know what you can do, and you'll feel more confident you can get the work done. And if you’re not dedicating your time towards reinventing how the economy works, you know, the thing that’s one of the biggest determining factors in how anyone spends their time, well, for me at least, anything else would not be be sufficiently ambitious to be spiritually fulfilling.

You don't need a degree in computer science to be good at writing code. In fact, a degree in CS doesn’t guarantee you’d be any good at all at writing code. You know what does? Actual code you can point to that you’ve written and can speak to. That’s it.

I dropped out of high school and college several times, and just settled for a GED. Everything I know about what I do, I had to teach myself, because no amount of instruction or lectures or hand-holding would have made me learn something before I was ready to learn it, and when I was ready to learn, I sought out what I needed to know, all by myself.

A CS degree can be sidestepped entirely by just learning about the different data structures (map, list, tree, graph, etc.), getting a sense for computational complexity, understanding how computation occurs, such as the difference between the heap and stack, how memory and references work, and just appreciating the fact that we work with machines that aren't all that different, architecturally-speaking, from ones made 50 years ago. Try to balance the act of digging deeper and adding tools to your toolbox, with the actual practice of that knowledge and the use of those tools.

I used to be a web developer, taught myself PHP 15 years ago, JavaScript 10 years ago, and TypeScript 5 years ago. I then graduated to Rust, and I had to unlearn a lot of stuff that was necessary for web dev that isn't always going to be terribly necessary for the future. But you don’t need 15 years of experience to be any good. Newcomers can get closer to where I’m at with Rust by sidestepping all I had to learn. Did it give me valuable perspective to better appreciate what Rust has to offer? Sure. Did it distract me from actually learning Rust? Absolutely.

How does Rust fit into the revolution? Well, the web, as it exists right now, is designed to exploit and concentrate power and wealth. Cloud services commoditized infrastructure billed on a monthly basis, leading to an entire industry built upon a rent-seeking revenue model that discourages private ownership and wealth accumulation instead of encouraging personal responsibility, worker-ownership, and thus enabling big tech companies to put technology-- the common heritage of all humankind-- towards perpetuating a form of wage-slavery in an economic system without footholds, without promise, and without heart.

I see developing ways to be creative enough to no longer need centralized authorities would allow more people to have more ownership over their intellectual property and their means of doing business. The fact that Google can delete all your emails and photos right from under you and there's nothing you could do to get them back, should give anyone doing business with their services or using their software some measure of concern. Especially since their business model is simply productizing metadata, data about your data, sold to the highest bidder, so they may weaponize it into something used to change what you think and what you do.

However, the costs of centralizing all that technology cannot be understated. The web is designed for scale, not efficiency. It’s designed for a single giant corporation to serve billions of users. The web does not work like the internet does. The web has distinct roles, clients and servers, users and providers. The internet routes packets between IP addresses regardless of what role they have. We need the web of the future to be more like the internet it’s built upon. How different would the world be today if every browser was also a web server? To make existing systems run on a single user’s computer would be impossible. That’s why web technologies cannot be used to fight the revolution for decentralization. Performance and efficiency matters if we are to achieve sufficient self-ownership and self-empowerment. Every time a program is made more efficient, cheaper and cheaper commodity devices can be used to run it.

And there’s not much else out there that balances performance and efficiency, productivity and ergonomics, and stability and correctness like Rust does. Rust helps you treat the machine like the machine it is, not some higher-minded construct or virtual machine. You’re writing code that tells the CPU what to do, what memory to use, and how to use that memory most efficiently while making full use of the hardware it runs on. All that while helping you paint the broad strokes of the bigger picture all throughout your program.

So, that's why I taught myself Rust and why I'm using what I know to build the system beyond this system. There will be no people's revolution, gone are the factories in the countryside, one cannot seize worker-ownership of a global supply chain. So, time to make new technologies, built upon new foundations! And I'd encourage anyone to learn it if they want to do their part in fighting the good fight. The revolution won't be fought with weapons, but with better tools and ideas.