The 2024 Wheel Reinvention Jam just concluded. See the results.

Hello (Low-Level Programming) World

I've been lurking on here for a bit, but I want to get serious about learning some low-level programming. I'm a web developer who does mainly Javascript and Ruby, but I've been very drawn to the Handmade philosophy. Today, though, I finally ordered my copy of Computer Systems: A Programmer's Perspective (thanks, Abner, for the recommendation!).

I'm posting here mainly to keep myself accountable to some degree. It's a bit intimidating to really jump in (as I have no formal CS training), but I think I really owe it to myself and my career. It's also great to have such a great place to ask questions (of which I will soon have many). So hello, Handmade Network. Thanks for being awesome!



P.S. Are there any other web-devs here? Any good projects you found useful? I'm also interested in Game Dev (2D), so maybe I'll attack it from that angle.

Edited by James Sral on Reason: Initial post
Hi, and welcome.
Thanks!
Welcome! I'm also a Web Developer and maintainer of aframe.io. Doing Web full time for 8 years and I've been missing the low level stuff. Hoping to also put something out there very soon. Really looking forward to seeing what you make. I'll bother you if I don't see any progress :)
Fullstack web dev here.
Welcome.
Nice to know there are several others!

I've done full-stack web dev for 15 years, but found the joy of programming less and less in that line of work, which led me here. Also picked up CS:APP on Abner's recommendation, although my progress has been slow due to a lot of life things going on this year. :) It's a pretty dry book, but it's really satisfying to know how all the pieces fit together.

When you ask about "useful projects," what exactly are you looking for?
It's nice to see several other web devs! Thanks, dmarcos, I'm glad you'll hold me to it.

winnythefoo: It's hard to know in another domain (ie low-level stuff) what projects are bite-sized enough to achieve but also are challenging enough to allow one to level-up. I don't have a great frame of reference. Are there projects where you've been able to use existing knowledge from web-dev to learn just the low-level stuff? I'm interested in games as well, but that does mean learning games *and* learning low-level programming. On the other hand, maybe there is a cross-over project that is web-dev *and* lower level. Static site generator? Backend library? Something else?

dmarcos: AFrame looks really cool. I haven't played with it yet myself, but I do keep my eye on it!
Hey James, another long time lurking web dev here. If you're interested in 2D game development I would give Handmade Hero a go. I just started about a week ago, and have already learned a ton. The intro to C week was particularly helpful, given that Casey dives deep into things that, as far as I can tell, web developers just never think about.

Glad to see there are other web devs in here. Hopefully this philosophy keeps spreading and making websites becomes less terrible.
Hey, deron. Yeah, I've started watching Handmade Hero, but I usually use Linux, so I started looking at Handmade Penguin. It does seem to be missing some steps though. I may end up just having to use my Windows box for the regular Handmade.

Indeed. I'm giving a talk at a local meetup about some YAGNI thoughts in the context of web-dev. Hopefully I can spread a little bit of the Handmade ideas!
It's hard to know in another domain (ie low-level stuff) what projects are bite-sized enough to achieve but also are challenging enough to allow one to level-up.


I totally identify. Of course, I'll second Deron's recommendation of HMH and especially Casey's intro to C.

In terms of bite-size, I have been slowly making my way through DanZaidan's Making a game in C from scratch series. It's a great complement to HMH. HMH goes super in-depth on making an ambitious, professional 3D game, which gives it the virtue of covering many aspects of game dev in depth. However, it's a much bigger project than someone like me would choose for their first low-level programming project. By contrast, Dan's series tackles a smaller-scope game while still explaining everything along the way, so it's great for a beginner like me to see the entire process more quickly.

Outside of game dev, I've also thought for a while of making some web-dev-related things that I wish existed but are against the grain of the industry. For example, I've cried many tears working with CMS frameworks that have very counter-productive ways of letting you reuse their code. I would like something more based around the principles outlined in Casey's Designing and Evaluating Reusable Components lecture (basically, functions I can call to do what I want, rather than a monolithic engine that I write hooks for).

I've heard that the software running this very site is sort of along those lines. It's sort of a stripped-down Python/Django setup, but without too many of the heavy abstractions from Django. I'd be interested in the source code but it's not public AFAIK.

Finally, I find this new Büchse project very interesting. A similar idea occurred to me but I don't know enough about network programming, threading, etc. to tackle it as well as Stas is doing.
Hey James, welcome to Handmade Network! Really awesome that you're here and looking into growing as a programmer. :)

On the subject of projects: There are some pretty fun things you can do with static site generation, I've found! I wrote my own static site generator in C that's used for my own personal website. It's effectively a parser for my own custom page/blog format that can spit out HTML. It also has the potential of spitting out other formats, like BBCode for a Handmade Network post or Markdown; it'd just be a matter of writing a different generator backend.

I found that this was a very interesting little side project, because there were a number of things that can happen at 'generation time', instead of running on user computers with JavaScript, like syntax highlighting for code blocks in blog posts. Additionally, I recall my early days of learning HTML/CSS and having to copy/paste updated navigation bars around to different pages; the great part about a static site generator is that you learn that you don't need any fancy server setup to do this when the user requests a page, you can actually just do the copy/pasting with the generator, and all the simplicity of just having static pages is preserved, but you also obtain a more flexible setup where you can easily change or add things.

That's my two cents; looking forward to your first steps into lower level programming! You can also join us on Discord (and also link your Handmade Network site account) if you haven't already to chat more about this.

Ryan

Edited by Ryan Fleury on
Thanks Ryan,

You're the one that brought me here, actually. I've watched all of the Melodist videos! I hadn't really thought about making a static site generator, but there have been some cool ones popping up lately (like Hugo). It would be really fun to work on! Plus, I've always been interested in languages and language design, so this could have some of that too.

I'll definitely be on the Discord.
That's awesome, thanks for watching!

Yeah, definitely; if you're interested in learning about parsers, I highly recommend it. This small side project is a nice way to get into parsing problems in a lower level setting where you might have to make decisions you would otherwise not have to in a higher level setting, like how you might allocate abstract syntax tree nodes, the advantages and disadvantages of different ways of doing that, and how you might go about parsing in the first place.
Welcome!

I have a bit of web development experience from when I first started working at this company I work for. I did a bit of PHP, Javascript, CSS, etc. You could say what I did was full-stack development but I don't think I really did it long enough to count as a web developer. It mostly made me realize how little I enjoy web programming compared to what I was used to before that which was game development in C#. Handmade Hero was also a big starting point for me in the C/C++ world. I had tried C++ quite a few times over the years and always hated all of the template syntax and other stuff that people often throw around. However, Handmade Hero showed me a way of programming that I now love. Like others have said, if nothing else watching the intro to C episodes and maybe some of the first win32 window making stuff is a great start if you really like low level stuff on an operating system like windows.

Now days I work as a firmware programmer for embedded micro controllers which also feels very akin to the "handmade" mentality and most people would consider it to be "low-level". If you're interested in this or electronics in general I can probably answer some of your questions. Along that vein I also love Ben Eaters "Building an 8-bit breadboard computer" series on YouTube: https://www.youtube.com/watch?v=H...LowKtXNTBypGqImE405J2565dvjafglHU. It's a great series if you want to get into how a basic CPU actually works to run instructions and perform various arithmetic and logical tasks.
Hey, ProfessorSil! I'm very excited to learn the Handmade way. I'll definitely let you know when I've got some questions.