Ask HN: What should a systems/low-level software engineer know?
From the top of my head, these are some areas I often would like other system programmers to know better:- Understanding how to write purely event-based programs using e.g. epoll since that will avoid lots of complexity and potential problems compared to throwing threads at everything.- Floating point representation and gotchas ("What Every Computer Scientist Should Know About Floating-Point").- Unit-testing as part of designing interfaces to get low coupling, sane ergonomics, and forcing some thought to error handling instead of just working in the happy-path case.- Interrupt- and thread-safety (races, mutexes, deadlocks, orderings etc.)- Storing state in maintainable ways (i.e. not just dumping C-structs to disk).- Understanding basic computer architecture concepts like virtual memory, caches, and pipelines.- Know what can be achieved with OpenMP and GPU programming using OpenCL/CUDA etc.- Write great commit messages (What is the problem being solved, why this way, etc.)- Basics of database and distributed systems theory like ACID properties and Lamport timestamps.- Using regular expressions instead of lots of a complicated set of if-statements.- Understanding networks regarding error sources and latencies.