What makes a handmade dev?

Hi all,

I'm new to these forums and this community, but I have been following for a while. I've watched the first 50 or so episodes of Handmade Hero, and I greatly enjoyed Handmade Con last year. However despite that, and having read the Handmade Manifesto and Abner Coimbre's #001 news bulletin, I'm still fairly unsure what exactly a handmade dev is. I feel sure this conversion must have been had before, but I looked through the threads on the forum and I didn't spot anything. However as I say, I'm new around here, so if I'm missing something obvious, please just point me over to it.

With that said, I do have a few questions about handmade development and what it entails, and I wonder if anyone in the community here could help me understand what it means? For one thing, I'm having trouble discerning which aspects of handmade projects make them "handmade" and which are purely co-incidental. As an example, Handmade Hero is developed in C without any libraries or build system. My impression from the show was that this was to facilitate education, rather than as a preferred way of developing software in general, but I notice a lot of the projects here seem to follow suit. How important are these kind of traits to handmade development?

More personally, I was attracted to the handmade manifesto by, among other things, the feeling that a lot of software development is like wading through a thick treacle of ungainly legacy code, or trying to use those 18 square pegs the last programmer left on his desk before he left to fill the round hole letting water into your sinking ship. However I'm conscious that there are many aspects of my programming style which seem (at least from the outside) to fall well outside of the norms of this community. For example, I practice OOP, and to a lesser extent TDD. I use a lot of modern C++ in my development, as well as higher level languages like Python. I use libraries all the time, and build systems, and IDEs. And most importantly perhaps, despite my frustrations, I don't think the majority of existing software is terrible and ought to be scrapped and rebuilt. I suppose what I'm driving at here is how much room there is for programmers such as myself within this community? The last thing I want is to just come in here and piss everyone off!

I have plenty of other questions about handmade development, but I think I'll leave it at that for the moment.

TLDL; can anyone explain to a total newcomer what handmade development really entails?

Many thanks in advance.
At it's core, it means something along the lines of "conscientious, curious, with craftsmanship". Let me explain:

Handmade Hero sort of started it all with Casey's ambitious from-scratch, no-libraries mentality. For most of us here, that was a big challenge to our perceptions about what it meant to program in a modern setting. It had a few implications that have been seen through as the series continues:

  1. You can see every line of code (save for platform-obfuscated things) that runs in the entire project.
  2. You can see how long it took to write every line/piece of code. In most cases...not very!
  3. You can see how a large project with a lot of component pieces takes shape, in a way that maintains a standard of quality throughout the entire thing, but without needing external tools to enforce any kind of style guide or other constraints

What that meant was that suddenly it seemed possible, feasible, and interesting to write code where you could tell what was going on, how the code was running, and how all the pieces interacted together. And you can do it without having to use javascript or C++ templates or whatever. That was the big breakthrough.

So the reason a lot of the projects here forgo libraries is because the authors are curious about what it looks like to write it themselves. (And maybe they've been following along with the handmade hero code, and have already written some of their stuff as a result of that!) A lot of the projects here are C or C++ because those languages tend to map fairly straightforwardly to a mental model of a processor. They don't "hide" what's going on, so to speak.

But not everyone interprets it the same! We have projects in Javascript, a few libraries, and plenty of members who come from all sorts of different backgrounds who are just interested in interacting with a community of other programmers who care about the end product of their code.

We've facetiously compared ourselves to music hipsters, indie game developers / music producers, artisinal breweries and so forth, but that's not too far from the idea of what we're going for. We care about the craft of programming, we're curious about the possibilities that haven't been explored much (either at all, or in recent years), and we are not hesitant about "reinventing" something if we feel we can improve on it. That's not to say we think everything that exists is crap! (Though many of us like to vent about it, some days). We just see all the ways software could be better, and feel frustrated that the systemic problems surrounding it are so hard to overcome.

We've got both sides of open/closed source, small tools/big projects, serious productivity tools/games, low level/high level languages, etc etc. So basically, the only way you could come in here and piss everyone off is if you went around claiming software is sorcery and we should all go back to farming the land in anticipation of the imminent downfall of humankind. Actually, that might be an interesting conversation. I'll get back to you on ways to piss off everyone.

Hope to see you around more, glad you've decided to join us!

Edited by Andrew Chronister on
Thanks for your response! That definitely helps to clarify things. So would you say that handmade development is more about cultivating a community of like-minded programmers who care about their craft than it is about being a methodology in and of itself?

I think it's great that there's a community like this with such an interest in how things actually work and that is willing to put time into thinking about how to make software better. I'm excited to see how the projects hosted here develop!
+1 (we really need to get upvote/like buttons on here ASAP)
CC: ChronalDragon & J_vanRijn.

This is a good idea
Andrew's reply is on point. To be expected from the guy who wrote the manifesto.
Wow. This is awesome and I definitely identify with it. I know I haven't posted a whole lot here, but I think it's because I've been too busy learning/programming. However, this philosophy sounds amazing to me. I was struggling big-time in the web dev community because I couldn't stand the low-quality and usage of so many dependencies to rush boring products out the door. I'm happy to have been watching HH for a while now and making the official switch to C.

I have been involved in the "abstraction world" of C#, JavaScript, and related technologies and I got SOOOOOOOO TIRED of having my "projects" include 15-25 "packages" of CRAP that caused all kinds of issues and slowed my programs down. I mean, dealing with all the different versions and how they worked (or failed to) together and I found myself honestly spending the most time on fighting with the bs of these useless OOP and framework layers of garbage. In addition, the "learn to code" world right now is completely saturated with superficial money-seeking people who tend to think lower-level programming such as C is "unhip" and a thing of the past. I've spent hours arguing about the importance of understanding how computers work to call yourself a developer or engineer to no avail, so I decided to just give up and leave social media altogether aside from forums such as this and YoUTube.

That said, do any of you guys have any additional advice on getting more involved with this type of programming? I'm self-taught, been at it for 6 solid months (several thousand hours at this point because this is all I do right now due to an unfortunate event with my last career), and as I said, it's hard enough to find any C or C++ programmers in my area at all, let alone "Handmade Dev" types. On top of that, being self-taught with no degree, some people assume I'm lazy but the reality is, my life just didn't turn out as the typical HS-College-Job type of thing, as I had a previous career that did not require one and now don't really have the financial means of getting one. But the good news is, I don't really care because truthfully I love programming and computer science and I'm going to do it forever no matter what happens.

My current plan: Finish working on data structures and algorithms and make my own database software to implement/showcase them. I've thought about getting into game as well but if anyone wants to collaborate or work together on a C project, I'd love to! If anyone here is working on a C project and could use a hand, I'll work to the best of my ability for free as long as it is open source of course!

Edited by Todd on