As far as languages go, C seems like a mess because you have to know offhand how your particular compiler and target architecture will react to all sorts of unspecified things. Then there’s all sorts of seemingly trivial things that either have to managed manually or outsourced to some library. I’ve probably seen dozens of C functions and macros across both the Windows Kernel and Userspace APIs for creating variations of string, many of which seem redundant. C++ seems pretty bad too, with it being a massive pile up of C legacy and modern features and I’ve even seen experienced C++ developers mention the language is often a complete mystery to them. Unfortunately these seem like the only two languages used in the sort of domains you’d classify under “systems programming”.
The the operating systems themselves seem as bad too. The Linux kernel documentation seems horrendous, with a lot of things getting nothing more than a brief overview. I recall looking at a particular feature for working with a standard platform hardware device and the documentation basically said “there are two API’s for working with this”. Without giving any more information on those API’s. Sometimes the source code might give you a better understanding, but that seems rare in the cases I’ve tried. Man pages seem decent on occasion, but some operating systems are sparse with them. Most notably I recall NetBSD not having a man page documenting the kernel interfaces for network adapters and having to ask around in random places for help. Windows kernel documentation seemed ok for a while, but some parts are still very rough, linking to obsolete versions of things (NDIS, particularly CoNDIS was bad about this and there were important, but trivial dteials I leanred that I couldn't find anywhere in the docs. Windows Userspace APIs seem to be bad though. I was trying to look into WMI stuff the other day and it felt like every other link was broken or linked to some obsolete docs.
All the sort of things I mentioned above make it seem like learning this stuff is damn near impossible without a decade of work and/or handholding. I can’t tell if what I’m seeing is real or if my learning abilities have severely atrophied over the years.
https://news.ycombinator.com/favorites?id=markus_zhang
Disclaimer: I collected those threads but didn't mean I know (anything) about sys programming.
For now I been trying to use Rust as a way to get into aspects of programming I couldn't before (Raytracing, Editor ), but I do wonder if ever I can crack into system programming.