I'm interested in becoming a systems programmer, but I previously tried learning reverse engineering and found it overwhelming. Is systems programming a realistic path for me, and what should I learn first? I know a little C and would appreciate a practical study plan and useful resources. I'm also unsure what areas are usually included under "systems programming," such as operating systems, memory, low-level debugging, or security.
3 Answers
A hands-on course such as pwn.college can be useful once you understand basic C and Linux. You could also build small projects: a command-line shell, a memory allocator, a file utility, a simple HTTP server, or a multithreaded program. Use tools like gdb, strace, make, and a compiler’s warning and sanitizer options while you work.
Reverse engineering is difficult because you need to recognize what the compiled code, memory, calling conventions, and operating system are doing. It’s usually better to build that foundation first rather than jumping straight into reversing. Work through small C programs, use a debugger, inspect memory, and gradually learn assembly and executable formats.
First, define which part of systems programming interests you. It can include operating systems, embedded development, compilers, networking, performance work, or security. A solid starting point is C, followed by pointers, memory management, data structures, processes, threads, files, and system calls on a Unix-like operating system.

I know a little C, but I still need more practice with pointers and memory. I’ll focus on those fundamentals before trying reverse engineering again.