Monthly Archives: January 2024

Resources for learning systems programming

A note of caution: Be careful of spending too much time doing the easy work of looking for “resources”, rather than the hard work of consistent practice. Have fun πŸ™‚

Top Recommendations


Textbooks

Websites

University Course Materials

Youtube

Linux/FreeBSD

Linux/POSIX Userspace

  • The Linux Programming Interface: A Linux and UNIX System Programming Handbook

Blogs:

Concurrency & Parallelism

Turtles all the way down

Everything is an app to the layer below it.

  • A web app is an app to the web browser
  • The web browser is an app to the operating system
  • The operating system is an app to the bootloader
  • The bootloader is an app to the boot ROM
  • The boot ROM is an app to the CPU boot sequence

Tip: When you’re learning a new programming language, look up prominent open source projects and copy their style

Tip: When you’re learning a new programming language, look up prominent open source projects and copy their style.

Aside from the core language, there are many conventions & little details to learn: naming (variables, classes, files), file structuring, literal code formatting

These are things few blogs talk about because it’s highly opinionated. But nevertheless when you’re learning, you’ll benefit from at least some reference for these.

Find a few “professional” open source projects and browse to see what various interpretations of “professional style” are. Then pick one you like most.

Be careful of picking projects that are too old β€” they might use older style for consistency with legacy, even though they might ideally wish to modernize it.

And ideally pick projects whose contributors are experienced engineers who work on it full-time. Since they “live in” the codebase, they’re less likely to tolerate sloppiness – or are at least more invested in cleaning it up.

The last idea is influenced by @awesomekling, who talks about similar things in his classic “My top advice for programmers looking to improve” car-talk video =]