I'm looking for recommendations on where to start with learning systems programming. Ideally, I'd like to be able to get to a point where I can make a living doing it, but currently I just want to do fun stuff to build up curiosity around it.
Here's all of the "low-level" stuff that I know so far / imagine being useful. I... - Have enough of an understanding of networking to write a toy HTTP server on top of TCP - Know enough C to write some basic terminal tools + window applications if needed (on Linux) - Love terminal tools like neovim + several core utils - Have dabbled with Arduino/ESP32 & communicating via USB over the serial port with a host pc - Am pretty decent with Python, and have been using it for like 10 years
Some things that I've been curious about in the past - Converting parts of python libraries from pure python to C/C++ bindings for better performance - Writing a terminal based file manager to work with Google Chrome - Actually contributing to chromium (my laptop is a potato though so all of my builds fail)
About me: I'm in my junior year of uni studying CS, and I've been able to make money doing web dev for the past 2 years of my degree. For many reasons including curiosity and the fact that AI makes me feel replaceable doing many frontend + backend tasks, though I'm very curious about getting into lower level programming.
Any help would be greatly appreciated!
As you already know, C/C++ helps with low level software layers that interface with or manage hardware resources. In my experience, Go and Rust are also pretty much used as systems programming languages. For example, I use Go and EBPF to instrument systems calls on Linux kernel.
For me, most of my learning came from solving problems and building for specific use-cases. I think getting into builder mode and creating some cool will definitely accelerate your learning.
Provides familiarity with different types of things a kernel does via programs/scripts that make use of kernel.
Actually writing binary code for kernel bit can be done under qem[1][2]. aka don't need to buy actual hardware, can use 'software probes' to view what's going on, etc. Don't have to worry about 'crashing'/trashing box running on (just crash the qem software & loosing just what was done in qem session, if didn't save as 'export/save to external location outside of qem session')
"Reading OpenBSD source code daily (blog.tintagel.pl)" from [hn: 3] automated way to review code.
-----
[0] : https://www.linuxfromscratch.org/
[1] : qem for kernel developers - https://www.youtube.com/watch?v=LyWlpuntdU4
[2] : https://www.collabora.com/news-and-blog/blog/2017/01/16/sett...
[hn:3] : https://news.ycombinator.com/item?id=14521386