lowlevelprogramming-university
How to be low-level programmer
A self-study roadmap for learning low-level programming in C and assembly, covering computer architecture, operating systems, Linux kernel internals, and device driver development with links to free courses and books.
This repository is a self-study roadmap for people who want to become low-level programmers. Low-level programming means writing code that works very close to the physical hardware of a computer, using languages like C or assembly rather than higher-level ones like Python or Java. The author, a Korean software engineer, was inspired by a similar university-style learning guide for coding interviews and decided to create one for this more specialized field.
The guide is organized into several topic areas. It starts with theory: computer architecture (how processors, memory, and buses actually work) and operating systems (how software manages hardware resources). The author recommends taking online courses over reading books alone, and points to free options on Coursera and edX. From there, the roadmap moves into assembly language, the most direct way to give instructions to a CPU. Readers are told to pick either x86 (the architecture found in most desktop and laptop chips) or ARM (common in phones and embedded devices), and start with simpler, older processor variants before moving to modern ones.
The C language section covers the fundamentals needed to write code that runs directly on an operating system without any extra layers in between. Topics include memory management, how the compiler turns source code into machine instructions, and how to understand what a running program is actually doing at a low level. There is also a section on Rust, a newer language that offers memory safety while still allowing direct hardware access.
Beyond languages, the guide covers hardware and firmware development (writing code that runs on microcontrollers and similar small devices), Linux kernel internals, and how to write device drivers that let the operating system communicate with hardware components. Each section lists specific books, open-source projects, and practical exercises rather than just abstract descriptions.
The author is candid about the job market: low-level programming roles are less common than they used to be, and anyone who has not yet started a career might want to weigh other fields carefully. The guide is intentionally a starting point, not a complete reference. It gives readers the keywords and direction they need to keep exploring on their own.
Where it fits
- Follow the roadmap to learn C at the level needed to write code that runs directly on an operating system.
- Use the recommended free courses to study how CPUs, memory, and buses work at the hardware level.
- Work through the Linux kernel section to understand how the OS manages hardware resources.
- Follow the guide to get started writing Linux device drivers that let an OS communicate with hardware.