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. 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. 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.
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. Most systems programmers hold a 4-year degree in computer science. Extensive knowledge of a variety of operating systems is essential for such workers.
This includes being able to configure an operating system to work with different types of hardware and having the skills needed to adapt the operating system to best meet the needs of a particular organization. Systems programmers also must be able to work with database systems, such as DB2, Oracle, or Sybase. 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. 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.
Required skills vary from job to job, but the demand for various skills generally is driven by changes in technology. Employers using computers for scientific or engineering applications usually prefer college graduates who have degrees in computer or information science, mathematics, engineering, or the physical sciences. Graduate degrees in related fields are required for some jobs. Employers who use computers for business applications prefer to hire people who have had college courses in management information systems (MIS) and business and who possess strong programming skills.
Although knowledge of traditional languages still is important, employers are placing increasing emphasis on newer, object-oriented programming languages and tools, such as C++ and Java. Additionally, employers are seeking persons familiar with fourth- and fifth-generation languages that involve graphic user interface (GUI) and systems programming. Employers also prefer applicants who have general business skills and experience related to the operations of the firm.