Live data from Hacker News

Ask HN: How to learn proper systems programming?

news.ycombinator.com

1–10 of 97 posts

Ask HN: How to learn proper systems programming?

#1
I am a software engineer for the past 10 years, and did frontend and backend development. I am learning Rust at the moment and have the following books:

- "The Linux Programming Interface"

- "Systems Programming with Linux"

- "Adavnaced UNIX Programming"

What I struggle with: How to get exposure to projects to learn for a future job? I had a Rust job for around half a year, where people build web servers and came from a C and C++ background. Half of the stuff they wrote I didn't understand (flushing, opening another channel just for logs so we don't fill up the other ones etc. etc.).

Now I wonder how I can get access to this type of information, how to properly learn it?

Re: Ask HN: How to learn proper systems programming?

#3
I can't give you specific advice, but in general it sounds you are already on the right track. You are basically exposing yourself to this new stuff, it raises questions that you want to have answered and you reach out to a community to know more. The stuff they wrote you don't understand YET is part of the journey and if you continue to practice work in that domain, you will be able to connect the dots. TL;DR My advice is, be fair to yourself, accept it's a new domain and be resilient and continue despite the difficulties. I hope a systems programmer will give you more specific advice.

Re: Ask HN: How to learn proper systems programming?

#5
Find the kind of system you'd be interested in working on and start building one yourself. For me it was a game engine + an editor for it, but it could be anything you find the motivation to build.

Start with a book or a few texts/tutorials on the subject and begin building. Along the way you'll find the questions and choices involved. Find the answers from the internet or books. This is when I'd recommend some open source projects (not earlier) to see how they solved the specific problems. If you just go into an open-source project you won't have an understanding of the problem, just the answers, so it won't help you nearly as much.

Re: Ask HN: How to learn proper systems programming?

#6
> I had a Rust job for around half a year, where people build web servers and came from a C and C++ background

I don't think this is system programming rather network programming.

You should try embedded or try to write drivers

Better yet write a mini OS your own that interface with hardware

Edit: Wow, I'm getting down voted. I guess political correctness

Re: Ask HN: How to learn proper systems programming?

#7
A couple of books that are often recommended for understanding how to make robust software:

- Release It! (https://pragprog.com/titles/mnee2/release-it-second-edition/)

- Designing Data-Intensive Applications (https://dataintensive.net/)

I would suggest finding an open source project of interest and taking a deep dive into its code and documentation to understand how it works and why it was built that way.

Which reminds me, this should help with that: The Architecture of Open Source Applications (http://www.aosabook.org/en/index.html)

Re: Ask HN: How to learn proper systems programming?

#8

> I had a Rust job for around half a year, where people build web servers and came from a C and C++ background I don't think this is system programming rather network programming. You should try embedded or try to write drivers Better yet write a mini OS your own that interface with hardware Edit: Wow, I'm getting down voted. I guess political correctness

Drivers are not all system software there is.

Re: Ask HN: How to learn proper systems programming?

#9
Some books I learnt off and still seem to be around

Modern Operating Systems by Tanenbaum is a good theory book - this will probably answer your questions about flushing etc

for down and dirty:

Advanced Programming in the UNIX Environment

TCP/IP Illustrated, Volume 1 (2 and 3)

Re: Ask HN: How to learn proper systems programming?

#10
post #8

> I had a Rust job for around half a year, where people build web servers and came from a C and C++ background I don't think this is system programming rather network programming. You should try embedded or try to write drivers Better yet write a mini OS your own that interface with hardware Edit: Wow, I'm getting down voted. I guess political correctness

Drivers are not all system software there is.

I meant to be hardware drivers like Display drivers.

The OP asked about System Programming not System software.

Driver is an interface and you can write application software on top of it.

Post reply on HN