Computer software can be put into categories based on common function, type, or field of use. There are three broad classifications:

  • Application software is the general designation of computer programs for performing user tasks. Application software may be general purpose (word processing, web browsers, ...) or have a specific purpose (accounting, truck scheduling, ...).
  • System software, a generic term referring to the computer programs used to start and run computer systems and networks; and
  • Computer programming tools, such as compilers and linkers, used to translate and combine computer program source code and libraries into executable RAMs (programs that will belong to one of the three said categories).

The software industry includes businesses for development, maintenance and publication of software that are using different business models, mainly either "license / maintenance based" (on-premises) or "Cloud based" (such as SaaS, PaaS, IaaS, MaaS, AaaS, etc.). The industry also includes software services, such as training, documentation, and consulting.

Software remains one of the most innovative and fastest growing sectors of the global economy. The world software market exceeded $305 billion last year and growth is expected to exceed 6% per year over the next five years, bringing the market to almost $397 billion. Home use and general business applications lead the market at almost $84 billion, accounting for over a quarter of the overall market, which encompasses systems and application software. The former includes network and database management, operating systems and other systems software, while the latter involves application software for office and home, and vertical applications.

The software market is extremely globalized, with expansion proving fastest in developing markets. Over the past twenty years there has been extensive consolidation within the software industry. Revenue recognition is a significant challenge for the industry. About half of those sales come from software applications, with the remainder split between development tools and infrastructure software (operating systems, network management, middleware, and security software).

The Internet has vastly altered the dynamics of the software industry over the past decade. Formerly restricted to a cycle of lengthy R&D concentrated in one geographic area -- followed by an arduous process of distribution through a worldwide network of resellers, systems integrators, and other independent vendors -- the software industry has found new efficiencies on the Web. Companies such as Sun Microsystems and Oracle have employed the Web to anchor their products, in much the same ways that Microsoft used the desktop PC and IBM used the mainframe to corner their respective markets.

In the past five years, the formerly explosive market for enterprise resource planning (ERP) software -- which helps companies save money by integrating back-office operations such as accounting, distribution, and human resources -- has given way to software that helps companies make money, including customer relationship management (CRM) and supply chain management software.

The standardization of Internet technologies such as Java and XML (extensible markup language) -- which in tandem enable end users on the Web to interact with data stored on servers for configuring orders or personalizing services -- is speeding up the conversion to Web-enabled applications.

A software process is a set of related activities that leads to the production of a software product. These activities may involve the development of software from scratch in a standard programming language like Java or C. However, business applications are not necessarily developed in this way. New business software is now often developed by extending and modifying existing systems or by configuring and integrating off-the-shelf software or system components.

There are many different software processes but all must include four activities that are fundamental to software engineering:

  • Software specification - The functionality of the software and constraints on its operation must be defined.
  • Software design and implementation - The software to meet the specification must be produced.
  • Software validation - The software must be validated to ensure that it does what the customer wants.
  • Software evolution - The software must evolve to meet changing customer needs.

In some form, these activities are part of all software processes. In practice, of course, they are complex activities in themselves and include sub-activities such as requirements validation, architectural design, unit testing, etc. There are also supporting process activities such as documentation and software configuration management. When we describe and discuss processes, we usually talk about the activities in these processes such as specifying a data model, designing a user interface, etc., and the ordering of these activities. However, as well as activities, process descriptions may also include:

  • Products, which are the outcomes of a process activity. For example, the outcome of the activity of architectural design may be a model of the software architecture.
  • Roles, which reflect the responsibilities of the people involved in the process. Examples of roles are project manager, configuration manager, programmer, etc.
  • Pre- and post-conditions, which are statements that are true before and after a process activity has been enacted or a product produced. For example, before architectural design begins, a pre-condition may be that all requirements have been approved by the customer; after this activity is finished, a post-condition might be that the UML models describing the architecture have been reviewed.

When computer software succeeds—when it meets the needs of the people who use it, when it performs flawlessly over a long period of time, when it is easy to modify and even easier to use—it can and does change things for the better. But when software fails—when its users are dissatisfied, when it is error prone, when it is difficult to change and even harder to use—bad things can and do happen. We all want to build software that makes things better, avoiding the bad things that lurk in the shadow of failed efforts. To succeed, we need discipline when software is designed and built. We need an engineering approach.

Although managers and practitioners alike recognize the need for a more disciplined approach to software, they continue to debate the manner in which discipline is to be applied. Many individuals and companies still develop software haphazardly, even as they build systems to service today’s most advanced technologies. Many professionals and students are unaware of modern methods. And as a result, the quality of the software that we produce suffers, and bad things happen. In addition, debate and controversy about the true nature of the software engineering approach continue. The status of software engineering is a study in contrasts. Attitudes have changed, progress has been made, but much remains to be done before the discipline reaches full maturity.

Software Developers

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.

Software developers design, install, test and maintain software systems. This can involve co-ordinating the entire development process, from discussing clients' requirements, choosing content and working with programmers, through to the assembly and installation of the product.

Sites Worth Finding

Sites Worth Finding is a simple way of searching for free information on a wide range of subjects; simply choose your search term and search below: