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:<p>- 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.<p>- Floating point representation and gotchas ("What Every Computer Scientist Should Know About Floating-Point").<p>- 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.<p>- Interrupt- and thread-safety (races, mutexes, deadlocks, orderings etc.)<p>- Storing state in maintainable ways (i.e. not just dumping C-structs to disk).<p>- Understanding basic computer architecture concepts like virtual memory, caches, and pipelines.<p>- Know what can be achieved with OpenMP and GPU programming using OpenCL/CUDA etc.<p>- Write great commit messages (What is the problem being solved, why this way, etc.)<p>- Basics of database and distributed systems theory like ACID properties and Lamport timestamps.<p>- Using regular expressions instead of lots of a complicated set of if-statements.<p>- Understanding networks regarding error sources and latencies.