Visibility Jam

April 14 - 16. See the results.
Learn more

Handmade cities

Boston - Aug 3-4 2023.
Seattle - Nov 15-17 2023.
Tickets available now

We are working to correct the course of the software industry.

We are a community of low-level programmers with high-level goals. Originally inspired by Casey Muratori's Handmade Hero, we dig deep into our systems and learn how to do things from scratch. We're not satisfied by the latest popular language or the framework of the month. Instead we care about how computers actually work.

Software quality is declining, and modern development practices are making it worse. We need to change course. Help us get the software industry back on track.

Latest News

Hello, Handmade Network! We’ve got big plans for 2023 and it’s about time we shared them with you all. So let’s get into it!

Education: diving deep on networking

Last year we launched a new education initiative. Our goal is to cover topics that no one else is covering. And we’re not just making material for beginners - we want to dive deep into each topic and provide a rich understanding that can only come from real experts in the domain.

You see, we’re taking a different approach from most programmer education. We recognize that there are tons of great resources on the internet for a variety of topics. But if you’re new to a particular domain, there’s still an important question: where do I start?

We want to be your guide. We’ll point you to the best books, the best articles, the best resources that will help you gain real understanding. We’ll teach you the jargon and give you the context you need to understand each piece. We’re not just teaching you, we’re equipping you with the knowledge to learn for yourself.

We launched the education initiative with a focus on three topics: networking, compilers, and time. The compiler series will come eventually, but this year we want to laser-focus on one topic: networking.

There is almost no good networking education out there in the world. If you want to learn about TCP, your best bet is an O’Reilly book, Wikipedia, or the RFCs. The space is dominated by Cisco and other companies with expensive certifications. The end result is that almost all programmers are dependent on the network stack, and use it every day, but no one actually knows how it works. This is insane.

We’ve already started the series with an article taking you all the way from HTTP down to the Ethernet protocol, visiting TCP and IP along the way. This year we’ll be expanding the series with two more articles covering NATs, firewalls, internet infrastructure, and many other networking topics that affect programmers every day. We’re very excited to dig into these topics with you!

Time Machine: reminding ourselves how things used to be

The core of the Handmade philosophy is the idea that software has been getting worse faster than hardware is getting better. Despite the incredible advances in computer hardware, the user experience of computing today is worse than it was a decade or two ago.

We believe this. But many people don’t. So let’s prove it.

This summer we’ll be launching a project called Time Machine. We’ll be asking you, the community, to dig out your old devices and share video of yourself using them. We want to go back in time and remind ourselves what it was actually like to use these old devices. We’ll be tracking the specs of these devices too, so we have an idea of how computing resources were used.

We hope this will be a fun project for the community and will inspire you all to take advantage of the amazing hardware we have today. We’ll share more details later, but in the meantime, get your hands on some old devices!

Also, if you have installers for old versions of popular software, please ping us on Discord or contact us at [email protected]. When the project rolls around, we’d love to test out old versions of operating systems, browsers, office software, and anything else that represents the day-to-day experience of computing.

****: the Handmade answer to ********

We have an ambitious technical project in the works. It brings together all aspects of the Handmade community, from low-level systems programming to forward-thinking developer experiences, all designed to give real users a computing experience hundreds of times better than what’s on the market today.

This project reaches far beyond what a single developer can do. It will only be possible through the concentrated effort of a talented community of low-level programmers, with a common goal, and an inherent desire to make things better. I believe we are that community!

I’m excited to share more this summer. Until then, be intrigued >:)

Community events

These are our new flagship initiatives for 2023, but of course we’re still going strong with events for the community. The Visibility Jam starts tomorrow, and we’re going to do our third Wheel Reinvention Jam this fall. Abner has expanded Handmade Seattle into a new initiative called Handmade Cities, with conferences in both Boston and Seattle this year. And we’re still doing weekly Discord coffee chats, real-life meetups, fishbowls on various topics, and more.

I’m so excited for what this year will bring! Now let’s go jam 😁

Around the Network

Christoffer Lernö

Inevitably people will ask "what language should I choose for my compiler?".

The answer is really: "you can use any language, so all things being equal, pick one you're good at."

Of course there are caveats:

  1. You want it to go really fast? Then C is better than Python.
  2. Are you making a DSL? Then you probably want to do it in the host language.
  3. Do you want to experiment with some parsing techniques? Then some languages might be a better fit than others

... and so on.

So when someone says something like "C is a bad choice for writing a compiler" as a general statement, you know they are just it up as they go along.

The C3 compiler is written in C, and there is frankly no other language I could have picked that would have been a substantially better choice. – Sure, writing it in C2 or Odin would certainly have avoided some of C's warts, but the difference would not have been significant. And doing an OO-style C++, or worse, Java, would just have pushed the compiler to slower and more bloated, with no additional benefits other than there are more Java programmers than C programmers.

"Say you are bad at programming without saying you're bad at programming"

So what do you think are the arguments against C?

"C memory management is hard".

My god, if you think your compiler has to have a lot of free and that is the hard part about writing a compiler then you have ABSOLUTELY ZERO business handing out advice on compilers - or programming.

(Memory allocation can be handled in different ways in a compiler, with the simplest way being using arena allocators)

"C doesn't have feature X, so it will be a nightmare writing a compiler for it"

This is the prime argument for people arguing for writing the compiler in Ocaml or some other functional language. "C doesn't have extensive support for pattern matching, how can I use [my preferred technique] without that??? IT'S IMPOSSIBLE AND NO ONE SHOULD TRY IT"

If you point out that there are plenty of compilers written in C, the argument becomes "yes, but they are old and it's not modern to use C".

A carnival of made up arguments

There is no lack of people who want to give advice on language design. Even language designers that actually know what they talk about struggle to give good advice that are applicable to your particular design if you ask about it. It's just hard.

With that in mind, guess what the quality of advice is from people who just have some theoretical knowledge of compiler and language design? Yes, it is as bad as you might guess.

Also, somewhat unfortunately, the group that has little experience is the ones who tend to have the most time to argue for things. Of course their arguments are made up of what they just happen to think is true and what they read on blogs they liked.

To sum it up

So you want to write a compiler? Get some advice for language design? Well do ask, but just keep in mind that most of what you read is just trash advice made up by people who actually don't know what they talk about. Especially on forums where there aren't many people who actually write compilers. You'll get bad advice in places dedicated to programming language design as well, but your odds of picking up some good advice is better.

And the proof is in the pudding: if you actually look at what compilers are written and what languages they're written in, you at least know what's been proven to be production ready. And do look at compiler performance too, because that will matter if you're serious about the project.

And to me, if I find out that someone is making things up, then clearly other things they say isn't trustworthy either. Language design seems to be one of those things people like to have opinions on because they know the risk of being called out for lying is low.

Simon Anciaux
Forum reply: 4Coder Build System
Simon Anciaux
Forum reply: 4Coder Build System
Forum reply: 4Coder Build System
Jack Punter
Forum reply: 4Coder Build System
Simon Anciaux
Forum reply: VS Code Integration?
Forum reply: Watchpoint support?
New forum thread: 4Coder Build System
New forum thread: Watchpoint support?
New forum thread: VS Code Integration?

Community Showcase

This is a selection of recent work done by community members. Want to participate? Join us on Discord.