Hacker News new | comments | ask | show | jobs | submit login

"Systems Programming" at the minimum, requires knowledge of Language internals, Runtimes, Compiler Toolchains, OS internals, Drivers, Computer Architecture/Organization, CPU/Multiprocessors and Networking. There are other domains like Security, Parallel/Distributed Processing etc which are cross-functional or orthogonal to the above and can be focused on as needed.

But be warned, earning potential-wise you may lose out(unless you get lucky) to the latest whiz-bang Web/Mobile technology/framework brouhaha. That is the nature of the market. However i consider that the satisfaction of learning and "knowing" how things work, more than makes up for the small loss in earning potential. This technology is also more fundamental and stable and thus will not go away anytime soon.

I have found the following papers/books (somewhat different from the most commonly cited) useful in my study;

Languages: Fluency in C is a must. It is THE "portable assembly" language and is available on everything from 8-bit MCUs to multicore servers. You can also link C modules to everything under the sun thus allowing you to extend almost any other language. C++ is also needed; but judicious usage as a "better C" rather than heavy-duty OOP/Generic/Template-mataprogramming madness.

- Computer Systems: A Programmer's Perspective 3rd ed. based on x86-64. You might also want to get the 1st ed. which is based on 32-bit x86. These books cover the HW/SW interface and thus includes almost all the topics under "Systems Programming".

- The C Companion by Allen Holub.

- Inside the C++ object model by Stan Lippman.

Tools/Toolchain: Knowledge of the GCC toolchain is a must.

- The Definitive guide to GCC by Hagen

- ELF: A Programmer's perspective; paper by H.J.Liu

- C++ Under the hood; MSDN article by Jan Gray

- The Practice of Programming by Kernighan and Pike.


- UNIX Systems for Modern Architectures: Symmetric Multiprocessing and Caching for Kernel Programmers by Curt Schimmel.

- Linux Kernel Development 3rd ed. by Robert Love.

- Essential Linux Device Drivers by Venkateswaran.

- Embedded Linux Primer 2nd ed. by Hallinan

- The Unix Programming Environment by Kernighan and Pike

- Advanced Unix Programming 2nd ed. by Rochkind

Computer Architecture/Organization

- Modern Processor Design: Fundamentals of Superscalear Processors by Shen and Lipasti

- Computer System Design: System-on-Chip by Flynn and Luk

Parallel/Distributed processing:

- Foundations of Multithreaded, Parallel, and Distributed Programming by Andrews

- The Art of Multiprocessor Programming by Herlihy and Shavit.

Bare-metal Embedded: Where the "rubber meets the road"

- Embedded Systems Architecture: Explore architectural concepts, pragmatic design patterns, and best practices to produce robust systems by Lacamera

- Patterns for Time-Triggered Embedded Systems by Pont.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact