Only about a decade ago, the world of software was comfortably divided among systems, applications, and communications programs. Systems software refers to the operating systems (e.g., Windows, Linux) that provide the basic functions that power individual computers. Applications software runs the functions that provide value to end users, such as programs that capture research data in databases and generate reports from those data. And communications software handles the connections and exchanges of data between systems over public or private networks.
Neat Software Categories: A Thing of the Past
In the past decade, of course, the Internet irrevocably changed that world. With the ubiquity of the Internet, the boundaries between systems, applications, and communications software have blurred beyond recognition--a phenomenon IT experts call a disruptive technology. Systems and applications software now take on more and more communications functions (e.g., operating systems can automatically check for updates and service packs when users are online), and innovations such as Web services build computing functions into the network that can interact with Web browsers. These new features have accelerated the pace of change in the industry, providing new opportunities for software specialists but at the same time requiring specialists to stay current with these new developments or get left behind.
Openness and Security: Conflicting Dynamics in Software
These readily available and powerful networks have also revolutionized the way software is developed. The Internet is as much a testament to the value of open standards in computing as it is to technical sophistication, and the companion open-source movement has changed forever the way software customers acquire software and interact with software developers. Open standards are specifications for software, networking, or interconnections established by recognized consortiums within or across industries, usually with free or inexpensive access and using consensus to make decisions. The term open source refers to software in which the source code--the original program code used to generate the instructions used by the computer--is made freely available to the public and is often created as a collaborative effort among programmers.
In the cases of both open standards and open source, the Internet has created communities of interest that transcend geographic, business, and occupational boundaries. These collaborative undertakings, such as the Bioperl project in bioinformatics and genomics or the Chemical Markup Language, make it possible to agree on basic underlying standards or full-fledged software products that are open to all, yet rely on the same communities for maintenance and updates. From a career standpoint, these communities offer invaluable networking opportunities that few industries can match.
Yet, as all of us have discovered (sometimes the hard way), the Internet has a dark side: namely, the opening up of our systems and networks to security threats of increasing frequency and sophistication. Just as the Internet blurred the lines between the major segments in the software marketplace, the growing concern for security cuts across the software spectrum, affecting all software products and Internet-based services. Because the concern for security may require adding more protective functions to software, it opens up opportunities for computer scientists, engineers, and analysts with an interest and expertise in the field.
Software Career Options
Listed below are the major categories of software specialists that require at least some analytical expertise. These definitions come from U.S. Department of Labor's Occupational Outlook Handbook , but because there now is a global marketplace for software specialists, the definitions more or less apply worldwide.
Computer scientists work as theorists, researchers, or inventors. Their jobs are distinguished by the higher level of theoretical expertise and innovation they apply to complex problems and to the creation or application of new technology. Computer scientists employed by academic institutions work in areas such as complexity theory, hardware, and programming-language design. Some people work on multidisciplinary projects, such as developing and advancing uses of virtual reality, extending human-computer interaction, or designing robots. Their counterparts in private industry work in areas such as applying theory and developing specialized languages or information technologies, or designing programming tools, knowledge-based systems, or even computer games.
Systems analysts (also known as systems developers or systems architects) solve computer problems and apply computer technology to meet the individual needs of an organization. They help an organization realize the maximum benefit from its investment in equipment, personnel, and business processes. Systems analysts may plan and develop new computer systems or devise ways to apply existing systems' resources to additional operations. They may design new systems, including both hardware and software, or add a new software application to harness more of the computer's power. Most systems analysts work with specific types of systems?for example, business, accounting, or financial systems, or scientific and engineering systems?that vary within organizations.
Software engineers, working in applications or systems development, analyze users' needs and accordingly design, construct, test, and maintain computer applications software or systems. Software engineers may be involved in the design and development of many types of software, including software for operating systems and network distribution, and compilers, which convert programs for execution on a computer. In programming, or coding, software engineers instruct a computer, line by line, how to perform a function. They also solve any technical problems that might arise. Software engineers must possess strong programming skills, but they are more concerned with developing algorithms and analyzing and solving programming problems than they are with actually writing code.
Network systems and data communications analysts design, test, and evaluate systems such as local area networks (LANs), wide area networks (WANs), the Internet, intranets, and other data-communications systems. Systems can range from a connection between two offices in the same building to globally distributed networks, voice mail, and e-mail systems of a multinational organization. Network systems and data-communications analysts perform network modeling, analysis, and planning; they also may research related products and make necessary hardware and software recommendations.
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. Many programmers at the enterprise level are also expected to know platform-specific languages used in database programming.
The U.S. Bureau of Labor Statistics in January 2002 identified network systems and data-communications analysts and software engineers as two of the 10 fastest-growing career options across all industries, with anticipated growth rates of 57% and 45%, respectively, to the year 2012. The agency likewise predicted a future high demand for systems analysts and computer scientists, because these fields are anticipated to grow much faster than average (increases of 36% or more) between 2002 and 2012.
Among programmers, however, the agency anticipates only an average growth rate: between 10% and 20% over the same 11-year period. Programmers, who write code from specifications generated by analysts, are also the specialists most likely to be affected by offshore outsourcing, in which competition from lower-wage countries can drive down job opportunities and compensation. Although the issue of outsourcing is hotly debated in North America and Europe, it is one in which solid data are not readily available and goes beyond the scope of this feature. Scientists considering a career in software, however, should be cognizant of the issue and follow developments. The Economist magazine, Information Technology Association of America, and the Economic Policy Institute offer differing perspectives for readers to consider.
The outsourcing issue has cast a cloud over the public perception of IT's future, especially that of software. But signs now point toward better opportunities at the intersection of science and software, documented recently on Next Wave in features on mathematical biology, drug discovery, and radio frequency identification. In these cases, however, opportunities for expanding skills or moving into entirely new careers require imagination and innovation, as well as new technical know-how. An enterprising spirit and insatiable curiosity, two qualities often found in scientists, can accelerate a career in software as well.