Sixty-seven percent of computer programmers held a college
or higher degree in 2004; nearly half held a bachelor’s degree,
and about 1 in 5 held a graduate degree.
Employment is expected to grow much more slowly than that
for other computer specialists.
Prospects likely will be best for college graduates with knowledge
of a variety of programming languages and tools; those with
less formal education or its equivalent in work experience are
apt to face strong competition for programming jobs.
Nature of the Work
Computer programmers write, test, and maintain the detailed instructions,
called programs, that computers must follow to perform their functions.
Programmers 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 programmers are
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 on 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 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
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 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 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 ACTOR. 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. Extensible Markup Language (XML) has become a popular
programming tool for Web programmers, along with J2EE (Java 2
Platform). 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.
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 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
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.) Programmers
also may contribute to a manual for persons who will be using
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 which are
frequently purchased from vendors. Systems programmers,
in contrast, write programs to maintain and control computer systems
software, such as 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
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
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. Programming of packaged
software 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 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.
Programmers generally work in offices in comfortable surroundings.
Many programmers may work long hours or weekends to meet deadlines
or fix critical problems that occur during off hours. Telecommuting
is becoming common for a wide range of computer professionals,
including computer programmers. As computer networks expand, more
programmers are able to make corrections or fix problems remotely
using modems, e-mail, and the Internet to connect to a customer’s
Like other workers who spend long periods in front of a computer
terminal typing at a keyboard, programmers are susceptible to
eyestrain, back discomfort, and hand and wrist problems such as
carpal tunnel syndrome.
Although there are many training paths available for programmers,
mainly because employers’ needs are so varied, the level of education
and experience employers seek has been rising due to the growing
number of qualified applicants and the specialization involved
with most programming tasks. Bachelor’s degrees are commonly required,
although some programmers may qualify for certain jobs with 2-year
degrees or certificates. The associate degree is a widely used
entry-level credential for prospective computer programmers. Most
community colleges and many independent technical institutes and
proprietary schools offer an associate degree in computer science
or a related information technology field.
Employers primarily are interested in programming knowledge,
and computer programmers can become certified in a programming
language such as C++ or Java. College graduates who are interested
in changing careers or developing an area of expertise also may
return to a 2-year community college or technical school for additional
training. In the absence of a degree, substantial specialized
experience or expertise may be needed. Even when hiring programmers
with a degree, employers appear to place more emphasis on previous
Some computer programmers hold a college degree in computer science,
mathematics, or information systems, whereas others have taken
special courses in computer programming to supplement their degree
in a field such as accounting, inventory control, or another area
of business. As the level of education and training required by
employers continues to rise, the proportion of programmers with
a college degree should increase in the future. As indicated by
the following tabulation, more than two-thirds of computer programmers
had a bachelor’s or higher degree in 2004.
High school graduate or less
Some college, no degree
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
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-generation and fifth-generation
languages that involve graphic user interface and systems programming.
Employers also prefer applicants who have general business skills
and experience related to the operations of the firm. Students
can improve their employment prospects by participating in a college
work-study program or by undertaking an internship.
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.
When hiring programmers, employers look for people with the necessary
programming skills who can think logically and pay close attention
to detail. The job calls for patience, persistence, and the ability
to work on exacting analytical work, especially under pressure.
Ingenuity and creativity are particularly important when programmers
design solutions and test their work for potential failures. The
ability to work with abstract concepts and to do technical analysis
is especially important for systems programmers because they work
with the software that controls the computer’s operation. Because
programmers are expected to work in teams and interact directly
with users, employers want programmers who are able to communicate
with nontechnical personnel.
Entry-level or junior programmers may work alone on simple assignments
after some initial instruction, or they may be assigned to work
on a team with more experienced programmers. Either way, beginning
programmers generally must work under close supervision. Because
technology changes so rapidly, programmers must continuously update
their knowledge and skills by taking courses sponsored by their
employer or by software vendors, or offered through local community
colleges and universities.
For skilled workers who keep up to date with the latest technology,
the prospects for advancement are good. In large organizations,
programmers may be promoted to lead programmer and be given supervisory
responsibilities. Some applications programmers may move into
systems programming after they gain experience and take courses
in systems software. With general business experience, programmers
may become programmer-analysts or systems analysts or be promoted
to managerial positions. Other programmers, with specialized knowledge
and experience with a language or operating system, may work in
research and development for multimedia or Internet technology
and may even become computer software engineers. As employers
increasingly contract with outside firms to do programming jobs,
more opportunities should arise for experienced programmers with
expertise in a specific area to work as consultants.
Certification is a way to demonstrate a level of competence,
and may provide a jobseeker with a competitive advantage. In addition
to language-specific certificates that a programmer can obtain,
product vendors or software firms also offer certification and
may require professionals who work with their products to be certified.
Voluntary certification also is available through various other
Computer programmers held about 455,000 jobs in 2004. Programmers
are employed in almost every industry, but the largest concentration
is in computer systems design and related services. Large numbers
of programmers also work for telecommunications companies, software
publishers, financial institutions, insurance carriers, educational
institutions, and government agencies.
Many computer programmers are employed on a temporary or contract
basis or work as independent consultants, providing companies
expertise with new programming languages or specialized areas
of application. Rather than hiring programmers as permanent employees
and then laying them off after a job is completed, employers can
contract with temporary help agencies, with consulting firms,
or with programmers themselves. A marketing firm, for example,
may require programming services only to write and debug the software
necessary to get a new customer database running. Bringing in
an independent contractor or consultant with experience in a new
or advanced programming language enables the firm to complete
the job without having to retrain existing workers. Such jobs
may last anywhere from several weeks to a year or longer. There
were 25,000 self-employed computer programmers in 2004.
As programming tasks become increasingly sophisticated and additional
levels of skill and experience are demanded by employers, graduates
of 2-year programs and people with less than a 2-year degree or
its equivalent in work experience will face strong competition
for programming jobs. Competition for entry-level positions, however,
also can affect applicants with a bachelor’s degree. Prospects
should be best for college graduates with knowledge of, and experience
working with, a variety of programming languages and tools—including
C++ and other object-oriented languages such as Java, as well
as newer, domain-specific languages that apply to computer networking,
database management, and Internet application development. Obtaining
vendor-specific or language-specific certification also can provide
a competitive edge. Because demand fluctuates with employers’
needs, jobseekers should keep up to date with the latest skills
and technologies. Individuals who want to become programmers can
enhance their prospects by combining the appropriate formal training
with practical work experience.
Employment of programmers is expected to grow more slowly than
the average for all occupations through the year 2014. Sophisticated
computer software now has the capability to write basic code,
eliminating the need for many programmers to do this routine work.
The consolidation and centralization of systems and applications,
developments in packaged software, advances in programming languages
and tools, and the growing ability of users to design, write,
and implement more of their own programs mean that more of the
programming functions can be transferred from programmers to other
types of information workers, such as computer software engineers.
Another factor limiting growth in employment is the outsourcing
of these jobs to other countries. Computer programmers can perform
their job function from anywhere in the world and can digitally
transmit their programs to any location via e-mail. Programmers
are at a much higher risk of having their jobs outsourced abroad
than are workers involved in more complex and sophisticated information
technology functions, such as software engineering, because computer
programming has become an international language, requiring little
localized or specialized knowledge. Additionally, the work of
computer programmers can be routinized, once knowledge of a particular
programming language is mastered.
Nevertheless, employers will continue to need programmers who
have strong technical skills and who understand an employer’s
business and its programming requirements. This means that programmers
will have to keep abreast of changing programming languages and
techniques. Given the importance of networking and the expansion
of client/server, Web-based, and wireless environments, organizations
will look for programmers who can support data communications
and help implement electronic commerce and intranet strategies.
Demand for programmers with strong object-oriented programming
capabilities and technical specialization in areas such as client/server
programming, wireless applications, multimedia technology, and
graphic user interface likely will stem from the expansion of
intranets, extranets, and Internet applications. Programmers also
will be needed to create and maintain expert systems and embed
these technologies in more products. Finally, a growing emphasis
on cybersecurity will lead to increased demand for programmers
who are familiar with digital security issues and skilled in using
appropriate security technology.
Jobs for both systems and applications programmers should be
most plentiful in data-processing service firms, software houses,
and computer consulting businesses. These types of establishments
are part of computer systems design and related services and software
publishers, which are projected to be among the fastest growing
industries in the economy over the 2004-14 period. As organizations
attempt to control costs and keep up with changing technology,
they will need programmers to assist in conversions to new computer
languages and systems. In addition, numerous job openings will
result from the need to replace programmers who leave the labor
force or transfer to other occupations such as manager or systems
Median annual earnings of computer programmers were $62,890 in
May 2004. The middle 50 percent earned between $47,580and $81,280
a year. The lowest 10 percent earned less than $36,470; the highest
10 percent earned more than $99,610. Median annual earnings in
the industries employing the largest numbers of computer programmers
in May 2004 are shown below:
Computer systems design and related services
Data processing, hosting, and related services
Management of companies and enterprises
According to the National Association of Colleges and Employers,
starting salary offers for graduates with a bachelor’s degree
in computer science averaged $50,820 a year in 2005.
According to Robert Half International, a firm providing specialized
staffing services, average annual starting salaries in 2005 ranged
from $52,500 to $83,250 for applications development programmers/analysts,
and from $55,000 to $88,250 for software developers. Average starting
salaries for mainframe systems programmers ranged from $50,250
to $67,500 in 2005.
Other professional workers who deal extensively with data include
computer software engineers; computer scientists and database
administrators; computer systems analysts; statisticians; mathematicians;
engineers; and operations research analysts.
Sources of Additional Information
State employment service offices can provide information about
job openings for computer programmers. Municipal chambers of commerce
are an additional source of information on an area’s largest employers.
Further information about computer careers is available from:
Association for Computing Machinery, 1515 Broadway, New York,
NY 10036. Internet: http://www.acm.org/
Institute of Electrical and Electronics Engineers Computer
Society, Headquarters Office, 1730 Massachusetts Ave. NW., Washington,
DC 20036-1992. Internet: http://www.computer.org/
National Workforce Center for Emerging Technologies, 3000
Landerholm Circle SE., Bellevue, WA 98007. Internet: http://www.nwcet.org/
Source: Bureau of Labor
Statistics, U.S. Department of Labor, Occupational
Outlook Handbook, 2006-07 Edition,