Computer programmers write, test, and maintain the detailed instructions, called programs, that computers follow to perform their functions. Programmers also conceive, design, and test logical structures for solving problems by computer. With the help of other computer specialists, they figure out which instructions to use to make computers do specific tasks. Many technical innovations in programming—advanced computing technologies and sophisticated new languages and programming tools, for example—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, but computer programmers are individuals whose main job function is programming. Programmers usually write programs according to the specifications given by computer software engineers and systems analysts. After engineers and analysts design software—describing how it will work—the programmer converts that design into a logical series of instructions that the computer can follow. The programmer codes these instructions in a conventional programming language such as COBOL; an artificial intelligence language such as Prolog; or one of the more advanced object-oriented languages, such as Java, C++, or ACTOR.
Different programming languages are used depending on the purpose of the program. 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, such as Java programmers, or by the type of function they perform or environment in which they work—for example, database programmers, mainframe programmers, or Web programmers.
Programmers also update, repair, modify, and expand existing programs. Some, especially those working on large projects that involve 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 a program. Programmers working on smaller projects often use “programmer environments,” applications that increase productivity by combining compiling, code walk through, code generation, test data generation, and debugging functions. Programmers also use libraries of basic code that can be modified or customized for a specific application. This approach yields more reliable and consistent programs and increases programmers’ productivity by eliminating some routine steps.
Programs vary widely depending on the type of information they will access or generate. For example, the instructions involved in updating financial records are very different from those required to simulate flight for pilot training. Simple programs can be written in a few hours, but some programs draw data from many existing systems or use complex mathematical formulas. These programs may take more than a year to create. In most cases, several programmers work together as a team under a senior programmer’s supervision.
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 problems for as long as a program is used.
Programmers working on a mainframe, a large centralized computer, may prepare instructions for a computer operator who will run the program. Programmers also may contribute to the instruction manual for a program.
Programmers in software development companies may work directly with experts from various fields to create specialized 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. Programming of packaged software constitutes one of the most rapidly growing segments of the computer services industry.
Increasingly, advanced software platforms are bridging the gap between computer programmers and computer users. New platforms, such as spreadsheet, accounting, and enterprise resource planning applications, have created demand for computer specialists who have first-hand knowledge of a user-base. These workers use such platforms to develop programs that meet the specific needs of this base. Computer programmers often are responsible for creating the software platform, and then fine-tuning the final program after it has been made.
Computer 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 also may revise existing packaged software or customize generic applications purchased from vendors. Systems programmers, in contrast, write programs to maintain and control computer systems software for operating systems, networked systems, and database systems. These workers make changes in the instructions that determine how the network, workstations, and central processing unit of a 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 determine the source of problems that may occur with their programs.
In some organizations, workers known as programmer-analysts are responsible for both the systems analysis and programming.