Systems programming, or system programming, is the activity of programming
computer system software. The primary distinguishing characteristic of systems programming when compared to
application programming is that application programming aims to produce software which provides services to the user directly (e.g.
word processor
A word processor (WP) is a device or computer program that provides for input, editing, formatting, and output of text, often with some additional features.
Word processor (electronic device), Early word processors were stand-alone devices ded ...
), whereas systems programming aims to produce software and
software platforms which provide services to other software, are performance constrained, or both (e.g.
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
s,
computational science applications,
game engine
A game engine is a software framework primarily designed for the development of video games and generally includes relevant libraries and support programs. The "engine" terminology is similar to the term " software engine" used in the softwar ...
s,
industrial automation, and
software as a service
Software as a service (SaaS ) is a software licensing and delivery model in which software is licensed on a subscription basis and is centrally hosted. SaaS is also known as "on-demand software" and Web-based/Web-hosted software.
SaaS is co ...
applications).
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.
Overview
The following attributes characterize systems programming:
* The
programmer
A computer programmer, sometimes referred to as a software developer, a software engineer, a programmer or a coder, is a person who creates computer programs — often for larger computer software.
A programmer is someone who writes/creates ...
can make assumptions about the hardware and other properties of the system that the program runs on, and will often exploit those properties, for example by using an
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
that is known to be efficient when used with specific hardware.
* Usually a
low-level programming language or programming language dialect is used so that:
** Programs can operate in resource-constrained environments
** Programs can be efficient with little
runtime overhead, possibly having either a small
runtime library
In computer programming, a runtime library is a set of low-level routines used by a compiler to invoke some of the behaviors of a runtime environment, by inserting calls to the runtime library into compiled executable binary. The runtime enviro ...
or none at all
** Programs may use direct and "raw" control over memory access and
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an '' ...
** The programmer may write parts of the program directly in
assembly language
* Often systems programs cannot be run in a
debugger. Running the program in a
simulated environment can sometimes be used to reduce this problem.
Systems programming is sufficiently different from application programming that programmers tend to specialize in one or the other.
In systems programming, often limited programming facilities are available. The use of
automatic garbage collection is not common and
debugging
In computer programming and software development, debugging is the process of finding and resolving ''bugs'' (defects or problems that prevent correct operation) within computer programs, software, or systems.
Debugging tactics can involve in ...
is sometimes hard to do. The
runtime library
In computer programming, a runtime library is a set of low-level routines used by a compiler to invoke some of the behaviors of a runtime environment, by inserting calls to the runtime library into compiled executable binary. The runtime enviro ...
, if available at all, is usually far less powerful, and does less error checking. Because of those limitations,
monitoring and
logging are often used;
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
s may have extremely elaborate logging subsystems.
Implementing certain parts in operating systems and networking requires systems programming, for example implementing paging (
virtual memory
In computing, virtual memory, or virtual storage is a memory management technique that provides an "idealized abstraction of the storage resources that are actually available on a given machine" which "creates the illusion to users of a very ...
) or a
device driver
In computing, a device driver is a computer program that operates or controls a particular type of device that is attached to a computer or automaton. A driver provides a software interface to hardware devices, enabling operating systems and o ...
for an operating system.
History
Originally systems programmers invariably wrote in
assembly language. Experiments with hardware support in
high level languages in the late 1960s led to such languages as
PL/S,
BLISS,
BCPL
BCPL ("Basic Combined Programming Language") is a procedural, imperative, and structured programming language. Originally intended for writing compilers for other languages, BCPL is no longer in common use. However, its influence is still ...
, and extended
ALGOL
ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by th ...
for
Burroughs large systems.
Forth
Forth or FORTH may refer to:
Arts and entertainment
* ''forth'' magazine, an Internet magazine
* ''Forth'' (album), by The Verve, 2008
* ''Forth'', a 2011 album by Proto-Kaw
* Radio Forth, a group of independent local radio stations in Scotla ...
also has applications as a systems language.
In the 1970s,
C became widespread, aided by the growth of
Unix
Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, a ...
.
More recently a subset of
C++ called
Embedded C++ has seen some use, for instance it is used in the I/O Kit drivers of
macOS
macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac (computer), Mac computers. Within the market of ...
.
Alternative Meaning
For historical reasons, some organizations use the term ''systems programmer'' to describe a job function which would be more accurately termed
systems administrator. This is particularly true in organizations whose computer resources have historically been dominated by
mainframe
A mainframe computer, informally called a mainframe or big iron, is a computer used primarily by large organizations for critical applications like bulk data processing for tasks such as censuses, industry and consumer statistics, enterpris ...
s, although the term is even used to describe job functions which do not involve mainframes. This usage arose because administration of
IBM mainframes often involved the writing of custom
assembler code
In computer programming, assembly language (or assembler language, or symbolic machine code), often referred to simply as Assembly and commonly abbreviated as ASM or asm, is any low-level programming language with a very strong correspondence be ...
(
IBM's Basic Assembly Language (BAL)), which integrated with the
operating system
An operating system (OS) is system software that manages computer hardware, software resources, and provides common daemon (computing), services for computer programs.
Time-sharing operating systems scheduler (computing), schedule tasks for ef ...
such as
OS/MVS,
DOS/VSE
VSEn (''Virtual Storage Extended'') is an operating system for IBM mainframe computers, the latest one in the DOS/360 lineage, which originated in 1965.
DOS/VSE was introduced in 1979 as a successor to DOS/VS; in turn, DOS/VSE was succeeded by ...
or
VM/CMS. Indeed, some
IBM software products had substantial code contributions from customer programming staff. This type of programming is progressively less common, but the term ''systems programmer'' is still the de facto job title for staff directly administering IBM mainframes.
See also
*
Ousterhout's dichotomy
Ousterhout's dichotomy is computer scientist John Ousterhout's categorization that high-level programming languages tend to fall into two groups, each with distinct properties and uses: '' system programming languages'' and '' scripting languag ...
*
System programming language
*
Scripting language
A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.
A scripti ...
*
Interrupt handler
In computer systems programming, an interrupt handler, also known as an interrupt service routine or ISR, is a special block of code associated with a specific interrupt condition. Interrupt handlers are initiated by hardware interrupts, softw ...
References
Further reading
Systems Programmingby
John J. Donovan
John J. Donovan (born February 12, 1942) is a former management professor at MIT, and the former president and chief executive of the Cambridge Technology Group, an executive training company. On May 3, 2022, Donovan Sr. was convicted of a doz ...
{{DEFAULTSORT:Systems Programming
Computer programming
System software