Computer software engineers design and develop software. They apply the theories and principles of computer science and mathematical analysis to create, test, and evaluate the software applications and systems that make computers work. The tasks performed by these workers evolve quickly, reflecting changes in technology and new areas of specialization, as well as the changing practices of employers.
Software engineers design and develop many types of software, including computer games, business applications, operating systems, network control systems, and middleware. They must be experts in the theory of computing systems, the structure of software, and the nature and limitations of hardware to ensure that the underlying systems will work properly.
Computer software engineers begin by analyzing users' needs, and then design, test, and develop software to meet those needs. During this process they create flowcharts, diagrams, and other documentation, and may also create the detailed sets of instructions, called algorithms, that actually tell the computer what to do. They also may be responsible for converting these instructions into a computer language, a process called programming or coding, but this usually is the responsibility of computer programmers.
Computer software engineers can generally be divided into two categories: applications engineers and systems engineers. Computer applications software engineers analyze end users' needs and design, construct, deploy, and maintain general computer applications software or specialized utility programs. These workers use different programming languages, depending on the purpose of the program and the environment in which the program runs. The programming languages most often used are C, C++, Java, and Python. Some software engineers develop packaged computer applications, but most create or adapt customized applications for business and other organizations. Some of these workers also develop databases.
Computer systems software engineers coordinate the construction, maintenance, and expansion of an organization's computer systems. Working with the organization, they coordinate each department's computer needs—ordering, inventory, billing, and payroll recordkeeping, for example—and make suggestions about its technical direction. They also might set up the organization's intranets—networks that link computers within the organization and ease communication among various departments. Often, they are also responsible for the design and implementation of system security and data assurance.
Systems software engineers also work for companies that configure, implement, and install the computer systems of other organizations. These workers may be members of the marketing or sales staff, serving as the primary technical resource for sales workers, or providing logistical and technical support. Since the selling of complex computer systems often requires substantial customization to meet the needs of the purchaser, software engineers help to identify and explain needed changes. In addition, systems software engineers are responsible for ensuring security across the systems they are configuring.
Computer programmers write programs. After computer software engineers and systems analysts design software programs, the programmer converts that design into a logical series of instructions that the computer can follow. The programmer codes these instructions in any of a number of programming languages, depending on the need. The most common languages are C++ and Python.
Computer 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.
As software design has continued to advance, and some programming functions have become automated, programmers have begun to assume some of the responsibilities that were once performed only by software engineers. As a result, some computer programmers now assist software engineers in identifying user needs and designing certain parts of computer programs, as well as other functions.
Computer programmers held about 185,700 jobs in 2020. The largest employers of computer programmers were as follows:
- Computer systems design and related services - 36%
- Finance and insurance - 8%
- Manufacturing - 6%
- Software publishers - 6%
- Self-employed workers - 2%
Programmers usually work in office settings, which may be in their homes.
Most computer programmers work full time.
Education & Training Required
For software engineering positions, most employers prefer applicants who have at least a bachelor's degree and broad knowledge of, and experience with, a variety of computer systems and technologies. The usual college majors for applications software engineers are computer science, software engineering, or mathematics. Systems software engineers often study computer science or computer information systems. Graduate degrees are preferred for some of the more complex jobs.
Many programmers require a bachelor's degree, but a 2-year degree or certificate may be adequate for some positions. 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, finance, or another area of business.
Employers who use computers for scientific or engineering applications usually prefer college graduates who have a degree in computer or information science, mathematics, engineering, or the physical sciences. 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. A graduate degree in a related field is required for some jobs.
In addition to educational attainment, employers highly value relevant programming skills and experience. Students seeking software engineering or programming jobs can enhance their employment opportunities by participating in internships. Some employers, such as large computer and consulting firms, train new employees in intensive, company-based programs.
As technology advances, employers will need workers with the latest skills. To help keep up with changing technology, workers may take continuing education and professional development seminars offered by employers, software vendors, colleges and universities, private training institutions, and professional computing societies. Computer software engineers also need skills related to the industry in which they work. Engineers working for a bank, for example, should have some expertise in finance so that they understand banks' computing needs.
Other Skills Required
Certification is a way to demonstrate a level of competence and may provide a jobseeker with a competitive advantage. Certification programs are generally offered by product vendors or software firms, which may require professionals who work with their products to be certified. Voluntary certification also is available through various other organizations, such as professional computing societies.
Computer software engineers and programmers must have strong problem-solving and analytical skills. Ingenuity and creativity are particularly important in order to design new, functional software programs. The ability to work with abstract concepts and to do technical analysis is especially important for systems engineers because they work with the software that controls the computer's operation. Engineers and programmers also must be able to communicate effectively with team members, other staff, and end users. Because they often deal with a number of tasks simultaneously, they must be able to concentrate and pay close attention to detail. Business skills are also important, especially for those wishing to advance to managerial positions.
How to Advance
For skilled workers who keep up to date with the latest technology, prospects for advancement are good. Advancement opportunities for computer software engineers increase with experience. Eventually, they may become a project manager, manager of information systems, or chief information officer, especially if they have business skills and training. Some computer software engineers with several years of experience or expertise can find lucrative opportunities working as systems designers or independent consultants, particularly in specialized fields such as business-to-business transactions or security and data assurance.
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 may be promoted to managerial positions. Programmers with specialized knowledge and experience with a language or operating system may 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.
Employment of computer programmers is projected to decline 10 percent from 2020 to 2030.
Despite declining employment, about 9,700 openings for computer programmers are projected each year, on average, over the decade. All of those openings are expected to result from the need to replace workers who transfer to other occupations or exit the labor force, such as to retire.
Computer programming can be done from anywhere in the world, so companies sometimes hire programmers in countries where wages are lower. As a result, employment growth for computer programmers in the United States may be limited. However, the high costs associated with managing projects given to overseas programmers sometimes offsets the savings from the lower wages, causing some companies to bring back or keep programming jobs in the United States.
The median annual wage for computer programmers was $93,000 in May 2021. The median wage is the wage at which half the workers in an occupation earned more than that amount and half earned less. The lowest 10 percent earned less than $47,560, and the highest 10 percent earned more than $155,240.
In May 2021, the median annual wages for computer programmers in the top industries in which they worked were as follows:
- Software publishers - $102,370
- Finance and insurance - $99,260
- Manufacturing - $98,320
- Computer systems design and related services - $79,860
Most computer programmers work full time.