Computer programmers write, test, and maintain the detailed instructions, called programs, that computers must follow to perform their functions. They also conceive, design, and test logical
structures for solving problems by computer. Many technical innovations in programming—advanced computing technologies and sophisticated new languages and programming tools—have redefined the role of a programmer and elevated much of the programming work done today. Job titles and
descriptions may vary, depending on the organization. In this occupational statement, computer programmer refers to individuals whose main job function is programming; this group has a wide range of responsibilities and educational backgrounds.
Computer programs tell the computer what to do—which information to
identify and access, how to process it, and what equipment to use.
Programs vary widely depending upon the type of information to be
accessed or generated. For example, the instructions involved in
updating financial records are very different from those required to
duplicate conditions on board an aircraft for pilots training in a
flight simulator. Although simple programs can be written in a few
hours, programs that use complex mathematical formulas, whose solutions
can only be approximated, or that draw data from many existing systems
may require more than a year of work. In most cases, several
programmers work together as a team under a senior programmer’s
supervision.
Programmers write programs according to the specifications determined primarily by computer software engineers and systems analysts. (Separate statements on
computer software engineers and on computer systems analysts, database administrators, and computer scientists appear elsewhere in the Handbook.) After the design process is complete, it is the job of the programmer to convert that design into a logical series of instructions that the
computer can follow. The programmer then codes these instructions in a
conventional programming language, such as COBOL; an artificial
intelligence language, such as Prolog; or one of the most advanced
object-oriented languages such as Java, C++, or Smalltalk. Different
programming languages are used depending on the purpose of the program.
COBOL, for example, is commonly used for business applications, whereas
Fortran (short for “formula translation”) is used in science and
engineering. C++ is widely used for both scientific and business
applications. Many programmers at the enterprise level are also
expected to know platform-specific languages used in database
programming. Programmers generally know more than one programming
language and, because many languages are similar, they often can learn
new languages relatively easily. In practice, programmers often are
referred to by the language they know, as are Java programmers, or the
type of function they perform or environment in which they work, which
is the case for database programmers, mainframe programmers, or Web
programmers.
Many programmers update, repair, modify, and expand existing programs. When making changes to a section of code, called a routine, programmers need to make other users aware of the task that the routine is to perform. They do this by inserting comments in the coded
instructions, so that others can understand the program. Many
programmers use computer-assisted software engineering (CASE) tools to
automate much of the coding process. These tools enable a programmer to
concentrate on writing the unique parts of the program, because the
tools automate various pieces of the program being built. CASE tools
generate whole sections of code automatically, rather than line by
line. Programmers also utilize libraries of pre-written code, which can
then be modified or customized for a specific application. This also
yields more reliable and consistent programs and increases programmers’
productivity by eliminating some routine steps.
Programmers test a program by running it to ensure that the instructions are correct and
that the program produces the desired outcome. If errors do occur, the
programmer must make the appropriate change and recheck the program
until it produces the correct results. This process is called testing
and debugging. Programmers may continue to fix these problems
throughout the life of a program. Programmers working in a mainframe
environment, which involves a large centralized computer, may prepare
instructions for a computer operator who will run the program. (A
separate statement on computer operators appears elsewhere in the Handbook.) They also may contribute to a manual for persons who will be using the program.
Programmers often are grouped into two broad types—applications programmers and systems programmers. Applications programmers write programs to handle a specific job, such as a program to track inventory within an organization. They may also revise existing
packaged software or customize generic applications called middleware. Systems programmers,
on the other hand, write programs to maintain and control computer
systems software, such as operating systems, networked systems, and
database systems. These workers make changes in the sets of
instructions that determine how the network, workstations, and central
processing unit of the system handle the various jobs they have been
given, and how they communicate with peripheral equipment such as
terminals, printers, and disk drives. Because of their knowledge of the
entire computer system, systems programmers often help applications
programmers to determine the source of problems that may occur with
their programs.
Programmers in software development companies
may work directly with experts from various fields to create
software—either programs designed for specific clients or packaged
software for general use—ranging from games and educational software to
programs for desktop publishing and financial planning. Much of this
type of programming takes place in the preparation of packaged
software, which constitutes one of the most rapidly growing segments of
the computer services industry.
In some organizations, particularly small ones, workers commonly known as programmer-analysts are responsible for both the systems analysis and the actual
programming work. (A more detailed description of the work of
programmer-analysts is presented in the statement on
computer systems analysts, database administrators, and computer scientists elsewhere in the Handbook.) Advanced programming languages and new object-oriented programming capabilities are increasing the efficiency and productivity of both
programmers and users. The transition from a mainframe environment to
one that is based primarily on personal computers (PCs) has blurred the
once rigid distinction between the programmer and the user.
Increasingly, adept end-users are taking over many of the tasks
previously performed by programmers. For example, the growing use of
packaged software, such as spreadsheet and database management software
packages, allows users to write simple programs to access data and
perform calculations.