Try to spend a day with a working software engineer or technician in order to experience firsthand what their job is like. School counselors can help you arrange such a visit. You can also talk to your high school computer teacher for more information.
In general, you should be intent on learning as much as possible about computers and computer software. You should learn about new developments by reading trade magazines and talking to other computer users. You also can join computer clubs and surf the Internet for information about working in this field.
Every day, businesses, scientists, and government agencies encounter difficult problems that they cannot solve manually, either because the problem is just too complicated or because it would take too much time to calculate the appropriate solutions. For example, astronomers receive thousands of pieces of data every hour from probes and satellites in space as well as from telescopes here on Earth. If they had to process the information themselves, compile careful comparisons with previous years' readings, look for patterns or cycles, and keep accurate records of the origin of the data, it would be so cumbersome and lengthy a project as to make it next to impossible. They can, however, process the data with the extensive help of computers. Computer software engineers define and analyze specific problems in business or science and help develop computer software applications that effectively solve them. The software engineers who work in the field of astronomy are well versed in its concepts, but many other kinds of software engineers exist as well.
Software engineers fall into two basic categories. Systems software engineers build and maintain entire computer systems for a company. Applications software engineers design, create, and modify general computer applications software or specialized utility programs.
Engineers who work on computer systems research how a company's departments and their respective computer systems are organized. For example, there might be customer service, ordering, inventory, billing, shipping, and payroll recordkeeping departments. Systems software engineers suggest ways to coordinate all these parts. They might set up intranets or networks that link computers within the organization and ease communication.
Some applications software engineers develop packaged software applications, such as word processing, graphic design, or database programs, for software development companies. Other applications engineers design customized software for individual businesses or organizations. For example, a software engineer might work with an insurance company to develop new ways to reduce paperwork, such as claim forms, applications, and bill processing. Applications engineers write programs using programming languages like C++ and Java.
Software engineers sometimes specialize in a particular industry such as the chemical industry, insurance, or medicine, which requires knowledge of that industry in addition to computer expertise. Some engineers work for consulting firms that complete software projects for different clients on an individual basis. Others work for large companies that hire full-time engineers to develop software customized to their needs.
Software engineering technicians assist engineers in completing projects. They are usually knowledgeable in analog, digital, and microprocessor electronics and programming techniques. Technicians know enough about program design and computer languages to fill in details left out by engineers or programmers, who conceive of the program from a large-scale perspective. Technicians might also test new software applications with special diagnostic equipment.
Both systems and applications software engineering involve extremely detail-oriented work. Since computers do only what they are programmed to do, engineers have to account for every bit of information with a programming command. Software engineers are thus required to be very well organized and precise. In order to achieve this, they generally follow strict procedures in completing an assignment.
First, they interview clients and colleagues to determine exactly what they want the final program to accomplish. Defining the problem by outlining the goal can sometimes be difficult, especially when clients have little technical training. Then, engineers evaluate the software applications already in use by the client to understand how and why they are failing to fulfill the needs of the operation. After this period of fact gathering, the engineers use methods of scientific analysis and mathematical models to develop possible solutions to the problems. These analytical methods help them predict and measure the outcomes of different proposed designs.
When they have developed a clear idea of what type of program is required to fulfill the client's needs, they draw up a detailed proposal that includes estimates of time and cost allocations. Management must then decide if the project will meet their needs, is a good investment, and whether or not it will be undertaken.
Once a proposal is accepted, both software engineers and technicians begin work on the project. They verify with hardware engineers that the proposed software program can be completed with existing hardware systems. Typically, the engineer writes program specifications and the technician uses his or her knowledge of computer languages to write preliminary programming. Engineers focus most of their effort on program strategies, testing procedures, and reviewing technicians' work.
Software engineers are usually responsible for a significant amount of technical writing, including project proposals, progress reports, and user manuals. They are required to meet regularly with clients to keep project goals clear and learn about any changes as quickly as possible.
When the program is completed, the software engineer organizes a demonstration of the final product to the client. Supervisors, management, and users are generally present. Some software engineers may offer to install the program, train users on it, and make arrangements for ongoing technical support.