All programmers write executable code for computers, but what distinguishes system programmers from application programmers is the purpose of the software they write. Application programming produces software that causes computer hardware to generate something for the user, whether it be a spreadsheet or graphics for a game. System programming produces software that accesses and controls the inner workings of the computer’s hardware and operating system.

Application programming usually involves issuing system commands to use basic functions of the computer’s hardware and operating system, such as saving a certain piece of data in the computer’s physical memory or a file on the hard drive. Programs of this type have nothing to do with the details of hard disk or physical memory operation. Conversely, system programmers care about the details of the operating system and hardware components. This allows them to create software that defragments hard disks and checks the integrity of the computer’s physical memory.

In addition to their ability to create such tools, systems programmers are usually experts in the basic functioning of operating systems. All programmers are familiar with system calls, thread management, and I/O processing, but system programming requires the software engineer to be able to manipulate these operating system mechanisms. This allows the system programmer to perform specialized settings and automate system maintenance tasks.

Knowledge of the operating system kernel is also necessary to maximize application performance on a particular hardware configuration. For example, very busy online retailers need their websites and transaction processing systems to run as efficiently and reliably as possible. Using their knowledge of the internal mechanics of operating systems and hardware components, such as how to make a particular operating system optimize thread processing or which algorithms run faster on which hardware components, a systems programmer can help fine tune application performance.

This detailed access to the inner workings of hardware components and the operating system requires that system programming be done in a language that provides this type of low-level hardware access. Languages such as Java, Python, or Ruby on Rails are what programmers call high-level languages. This means that they make it easier to program applications without allowing the programmer to handle the fine details of hardware control. System programming requires exactly this kind of access, so system programmers use a low-level language such as C or C ++.