This articleneeds additional citations forverification. Please helpimprove this article byadding citations to reliable sources. Unsourced material may be challenged and removed. Find sources: "Systems programming" – news ·newspapers ·books ·scholar ·JSTOR(November 2024) (Learn how and when to remove this message) |
Systems programming, orsystem programming, is the activity of programming[1]computersystem software. The primary distinguishing characteristic of systems programming when compared toapplication programming is that application programming aims to produce software which provides services to the user directly (e.g.word processor), whereas systems programming aims to produce software andsoftware platforms which provide services to other software, are performance constrained, or both (e.g.operating systems,computational science applications,game engines,industrial automation, andsoftware as a service applications).[1]
Systems programming requires a great degree of hardware awareness. Its goal is to achieve efficient use of available resources, either because the software itself is performance-critical or because even small efficiency improvements directly transform into significant savings of time or money.
The following attributes characterize systems programming:
In systems programming, often limited programming facilities are available. The use ofautomatic garbage collection is not common anddebugging is sometimes hard to do. Theruntime library, if available at all, is usually far less powerful, and does less error checking. Because of those limitations,monitoring andlogging are often used;operating systems may have extremely elaborate logging subsystems.
Implementing certain parts in operating systems and networking requires systems programming, for example implementing paging (virtual memory) or adevice driver for an operating system.
Originally systems programmers invariably wrote inassembly language. Experiments with hardware support inhigh level languages in the late 1960s led to such languages asPL/S,BLISS,BCPL, and extendedALGOL forBurroughs large systems.Forth also has applications as a systems language. In the 1970s,C became widespread, aided by the growth ofUnix.More recently a subset ofC++ calledEmbedded C++ has seen some use, for instance it is used in the I/O Kit drivers ofmacOS.[2]Engineers working atGoogle createdGo in 2007 to address developer productivity in largedistributed systems, with developer-focused features such asConcurrency,Garbage Collection, and faster programcompilation than C and C++.[3]In 2015Rust came out, a general-purpose programming language often used in systems programming. Rust was designed with memory safety in mind and to be as performant as C and C++.
For historical reasons, some organizations use the termsystems programmer to describe a job function which would be more accurately termedsystems administrator. This is particularly true in organizations whose computer resources have historically been dominated bymainframes, although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration ofIBM mainframes often involved the writing of customassembler code (IBM's Basic Assembly Language (BAL)), which integrated with theoperating system such asOS/MVS,DOS/VSE orVM/CMS. Indeed, someIBM software products had substantial code contributions from customer programming staff. This type of programming is progressively less common, and increasingly done in C rather than Assembly, but the termsystems programmer is still used as the de-facto job title for staff administering IBM mainframes even in cases where they do not regularly engage in systems programming activities.