There are good general rules in a few comments here, but I think it's ok to say that in 2018 the specialization arrived to a point where system/low-level is too large to reply in a good way? One thing is to write games engines, another is to write networking code, yet another embedded systems, device drivers and so forth. There are certain common aspects, but the details of what you need to know change significantly.
This 1000x. The field is huge. Get the common basics down, then pick a specialization that seems interesting or useful.
Ask HN: What should a systems/low-level software engineer know?
201–210 of 231 posts
Re: Ask HN: What should a systems/low-level software engineer know?
#202Earlier quoted context omitted.
A quick word of warning: be sure to treat C and C++ as two completely separate languages that just happen to have similar syntax. Yes, you can use C++ as "C with classes" (I and many others sure have at times), but you're doing yourself a disservice most of the time if you do.
Huh. I always perceived C to be a subset of C++.
Re: Ask HN: What should a systems/low-level software engineer know?
#203Earlier quoted context omitted.
> Most systems programming jobs these days is C/C++ on Linux and will be for the foreseeable future. I don't disagree, but at least anecdotally a lot of the shops I've been involved with/worked with are really excited about Rust and Go. A previous employer that used C++ exclusively has even shipped a few Golang based tools, and is planning to introduce it into the main product soon. No new projects are being started…
Golang is garbage collected. I thought due to this, system programmers don't like it.
Re: Ask HN: What should a systems/low-level software engineer know?
#204Earlier quoted context omitted.
I don't do embedded systems, but as a self-respecting software engineer, I am intending to develop proficiency in C/C++ over this next year. Does anybody have any recommended books/courses/projects?
K&R,and Richard Stevens's books
Re: Ask HN: What should a systems/low-level software engineer know?
#205Nand to Tetris: https://news.ycombinator.com/item?id=18519883
Nand to Tetris II: https://news.ycombinator.com/item?id=14526344
I asked a question in a here before that might have some relevant answers: https://news.ycombinator.com/item?id=17282466 (not exact topic)
Re: Ask HN: What should a systems/low-level software engineer know?
#206I was also curious about choosing or creating a file format, when creating a low level program that outputs a lot of data. Any recommendations or popular reading? I realize some choices are for proprietary reasons, then compression, but that aside, there seems to be thousands of choices available. Compared to the web, using json etc, and releasing a schema, but not necessarily creating a new file extension.
My current go to for this is using SQLite. It's basically made for this purpose. If that doesn't serve, I like the idea of Apache Avro, but some of it's C++ bindings are a little lacking in my opinion.
OTOH, you have to know when no to use it and step up (down?) to something that is text editor hack-able (XML!?) or has barn burner I/O abilities (yah actually just dumping raw buffers with regularized binary data to disk). Or for that matter is used to exchange data with other apps with other services (JSON, and the long list of other data dependent formats, although for at rest exchange I have to point at XML again).
Re: Ask HN: What should a systems/low-level software engineer know?
#207If your are looking towards embedded: * put a cap between power and ground * get some nice ESD-birkenstocks * don't listen to anybody telling you how it's done The start of the art is BS and we need a revolution. There will be so many people who tell you that you can only do it in C and if you don't, you can't be taken seriously. The result is that everybody is keeping to C and nobody invests time in bringing new ide…
What would putting a single cap directly between power and ground be? Wouldn't that be a short circuit or boom?
People already explained the reasons. I just wanted to add that point.
Re: Ask HN: What should a systems/low-level software engineer know?
#208I was also curious about choosing or creating a file format, when creating a low level program that outputs a lot of data. Any recommendations or popular reading? I realize some choices are for proprietary reasons, then compression, but that aside, there seems to be thousands of choices available. Compared to the web, using json etc, and releasing a schema, but not necessarily creating a new file extension.
My current go to for this is using SQLite. It's basically made for this purpose. If that doesn't serve, I like the idea of Apache Avro, but some of it's C++ bindings are a little lacking in my opinion.
[0] https://en.wikipedia.org/wiki/Mass_spectrometry_data_format
Re: Ask HN: What should a systems/low-level software engineer know?
#209I'd start with everything by Hennessy and Patterson. That should cover most of how CPUs and memory systems work. I grew up with Tannenbaum for networking, though most people went toward Comer and Stevens. Maybe there's something even more current. I honestly don't know anything as good for storage, which is funny since it's my own specialty. I can try to cobble together a reading list if you'd like. Something on oper…
For compilers the dragon book has fallen out of favor (especially as a first compiler book/source). Modern Compiler in ML (don't touch the Java or C versions) and Engineering a Compiler tend to be the goto books now.
Re: Ask HN: What should a systems/low-level software engineer know?
#210For example, why not build a home automation system?
Start with a Raspberry pi and start hooking up peripherals...light switchtes, timers, sensors, etc. You'll stumble across buses like I2C/SPI, you'll learn about networking. You'll figure out what registers are and learn what interrupts are and what they mean.
You'll get lazy rewriting communication code and stumble across messaging frameworks like MQTT to communicate with devices on your network. You'll run out of money using Raspberry Pis for each new device you build, and you'll find cheaper ways of doing things like desiging devices using MSP430 or ESP8266s.
You'll make mistakes, and you will learn. Best of luck on this new adventure!