Software

Software

Our interest in software is not that of a programmer, but rather an economist. What are the market forces operating on the evolution of software? We are concerned with the increasing capability of software as it moves from number crunching to multimedia applications on networks. We are also interested in the increased efficiency of programmers and how market forces tend to make software more `user friendly.'

Software Basics

We will consider three aspects of software:

  1. Operating systems: This code coordinates the operation of the computer such as allocating memory for programs to run, sending output to the printer, and connecting the computer to the Internet through a modem or perhaps a high capacity line.
  2. Programming languages: These are computer languages in which at all software is written.
  3. Application programs: These are the programs that the end user actually uses to accomplish his or her tasks.

Because of Moore's Law computers at all levels are becoming more powerful. This means:

  1. Software is constantly adding new features to take advantage of the increased power. Remember the rule of thumb. Man is a visual animal so if it is possible to economically give many visual processing that is where we are headed.
  2. Constant effort is being made to increase the efficiency of creating software. When I was an aerospace engineer at Douglas Aircraft in the early 60s, hardware availability limited computing. System programmers made FORTRAN programs that were used frequently faster by working with the compiled version. Today, the creation of hardware has been partially automated and is plentiful. The creation of software is still labor intensive and now has become the limiting factor.
  3. Applications programs are increasingly becoming "user friendly". Economically speaking, this buzz word means that it pays to constantly reduce the labor costs of using software to attract customers.

Market Forces: Software

More features:

Initially computers were number crunchers for science and accounting. Next software was created for text processing. Then as computers became more powerful, increasing amounts of software was created for graphics. Because man is a visual animal, the trend will be towards ever more powerful multimedia software. Personal computers are just now acquiring sufficient power to process dynamic visual images. Apple is now selling the iMac with a digital video cam, DVD and the software to edit videos. If you are into computer games, reflect for a moment on the increased dynamics and realism of the pictures.

In the future, virtual reality that might be described as a 3-D animated world created on a computer screen should become commonplace. The viewer wears a special glove and helmet with goggles which enables him or her to interact with the 3-D world. Virtual reality is great for computer games and has numerous business applications. For example, engineers can determine if parts fit together in virtual space. As the number of electronic components on an integrated circuit continues to increase, software will be created to edit videos on personal computers.

Software developers have powerful incentives in using the ever increasing power of computers to constantly create new software to perform services for users. One aspect of creating ever more powerful software is to continually add new features to software packages such as word processors. Another is to specialize software into niche markets such as specialized CAD programs for each industry. In addition, software programs are created for new human tasks. Operating systems become every more complicated in adding features for multitask management, security, and Internet integration.

More Features

More efficiency in program creation:

In order to compete, software companies constantly innovate to reduce the cost of creating software. Originally, programs for a computer had to be written in machine code, that is binary numbers for each operation. Because humans do not think in terms of strings of binary numbers, this meant the development of software was a slow, tedious affair. The first innovation in programming was assembly language which substituted a three letter code for the corresponding binary string, such as ADD for the binary string add. In the 50s computer scientists invented FORTRAN, which allowed engineers and scientists to write programs as equations, and COBOL, which allowed business programmers to write programs in business operations. In the 50s and 60s when memory was very expensive, the year was recorded with two digits. This was supposed to cause a major problem in the year 2000, and came to be known as the Y2K problem, when software that has not been upgraded will treat the year 2000 as the year 1900. Industry and government spent $Billions to correct the problem and the fiascos turned out to be minor.

Since that time, computer scientists have developed thousands of languages. The applications programmer generates statements in the language most suited for the application and a translator (an assembler, an interpreter, or a compiler) transforms the statements of the language into machine language for execution. One trend in languages is specialization, such as Lisp and Prolog for artificial intelligence. A second trend is to incorporate new concepts, such as structured programming in Pascal. Another trend is to incorporate more powerful statements in new languages. For example, being able to perform matrix operations in a single statement rather than write a routine to process each matrix element. Finally, effort is made to constantly improve the efficiency of the machine code created by translators.

Because it is much easier to automate the production of hardware than software, software development has become the bottleneck in the expansion of computation. One method of making programmers more efficient is to create libraries of subroutines. This means that rather than start from scratch with each program the programmer can write a code to employ the appropriate subroutines. Because there is a very large investment in FORTRAN and COBOL libraries and programs and new features are constantly being added, these languages were actively used until the 80s.

The current rage is the move towards Object Oriented Programming, OOP, which can be considered an innovation on the idea of writing code using libraries of subroutines. The new wrinkle is to expand the concept of a subroutine to include not only code but also data. The data-code modules in OOP have three basic properties: encapsulation, inheritance and polymorphism. Encapsulation means that each module is a self-contained entity. Inheritance means that if you create a module A from module B which contains a subset of the data in A, module A inherits all the code which runs on module B. Polymorphism means that general code can be applied to different objects, such as draw command to draw both a square and a circle simply from their definitions. A current example of an OOP language is C++.

From the perspective of economics, the concept of OOP is an example of the specialization of labor. OOP improves efficiency because highly skilled, creative programmers will create libraries of OOP modules. Users with some programming skills will then use these modules to easily create their application programs. More advanced is the development of toolkits for programmers which write standard software for routine operations. For example, sending text to the printer. With Visual Cafe, Symantec created a visual way to create the layout of the graphically interface that software created the Java code.

Error control in program development: Creating software is still a labor intensive effort and large systems such as Windows 2000 can involve thousands of programmers. What is needed for better software development is a systematic approach to quality control to reduce the number of errors. When Netscape and Microsoft competed with their browsers they had incentives to compete in the number of new features not so much in code that was bug free. Debugging was done in response to consumer complaints. In many instances this is entirely unacceptable. You can not debug an air traffic control program in response to aircraft crashes or debug a program to control a nuclear reactor in response to accidents that release radiation.

Improving programmer efficiency and reducing errors

User friendly:

Another very important software cost is the cost of learning how to use an application program. For example, how long do you have to send a secretary to school to use a new wordprocessor effectively. As computer memories grow and computers become faster, part of these increased memory and speed are used to develop operating systems and application programs which are much easier for the final user to learn how to use. While in large computer systems the trend has been to develop interactive operating systems so that many users can interact with the computer at the same time, the trend in personal computers has been to develop visual icon, mouse-driven operating systems. The great advantage of an icon based operating system is that it is intuitive to man, a visual animal. Moreover, Apple has insisted all software developers use the same desktop format in presenting programs. While such a strategy meant that a considerable portion of Macintosh resources were devoted to running the mouse-icon interface, Apple was successful with the Macintosh because the user does not have to spend hours over manuals to accomplish a simple task. With Windows the PC clone world is imitating Apple. Windows 95 and Windows NT are almost as easy to use as the MacOS.

 

In a similar vein, software developers constantly try to reduce the user's labor costs in using applications software. One example is the trend towards integrated software. At first, it was very time consuming and labor intensive to transfer information from one type of software program to another. The user had to print out the information from one program and input it to another. Today in packages called office suites, word processors are integrated with such programs as spreadsheets, drawing programs, and file programs to automatically transfer information from one type of program to another. The frontier in integration is creating software which facilitates group interaction in networks of computers. An example here is Lotus notes. Group integration software improves the productivity of work groups in their joint efforts. Thus, integration simultaneously makes software more powerful and easier to use.

Computers will never be common home items until they are much easier to use. The long term vision is to have computers which are controlled by English language operating systems and programs. This will require major advances in voice pattern recognition and in creating English type computer languages. This, in turn, may require the integration of neural network computers for pattern recognition with the current type digital computers.

User Friendly

Some issues:

Thin versus fat: The advance of the Internet as the network of client server networks raises an important question concerning the appropriate power and software for each entity in the network. With Microsoft Window development the operating system is complete with features that the average user seldom uses. Also, application programs are replete with features that the average user may seldom use. Sun's distributed processing model is with thin clients (little power and resources in the form of hard drives). These thin clients would need a simple operating system to run a WEB browser and the user would download only those component of software that he or she actually needed or the user might run the job remotely on a powerful server. How the Internet will evolve is an open question.

The development of every more increasingly powerful personal computers, operating systems, and programs has lead to a potential challenge to the current trend. For most purposes such as using the Internet, the user does not need a powerful PC or powerful operating system that has numerous features the typical user does not use. Again most software programs contain numerous features that the typical user does not use. The slang term is bloatware. SUN in its competition with Microsoft has proposed thin clients of much simpler personal computers that have a simple operating system and download only those components of software packages that they actual need. Obviously, SUN would like the language for this approach to be their very own JAVA. As economists, you should realize two important features of this conflict. First, given the fact that Microsoft controls 90 percent of the operating system market, it would require a massive investment to shift. Microsoft has shown remarkable agility to shifting direction when need be. They have an operating system Windows CE that probably could run thin clients. While there are economic desirable features of such a shift it may not happen any time soon. Secondly, for some tasks, a user wants as powerful a personal computer as is possible to make economically. One simple example is gaming. What this means economically is that we should expect increasing specialization in all sizes of personal computers and other digital devices such as Palm computers.

 

Quasi-intelligent Software (Artificial Intelligence)

Artificial intelligence is the attempt to endow hardware and software with intelligence. This field started after World War II has had numerous successes, but it is important to separate hype from reality. Remember researchers in all fields have an incentive to oversell the economic potential of their field in order to obtain government funding. We will examine artificial intelligence from the perspective of economics. In viewing the field of artificial intelligence it is important to avoid extremes. For those of you who enjoy science fiction movies, you may incorrectly believe that humans have already created androids with human capabilities. At the other extreme are critics who claim that computers will never think. From the perspective of economics you need never ask the question of whether programs are capable of thought, but rather you need to ask how will increasingly capable software will affect economic behavior. It is a safe assumption that the capabilities of programs will advance much faster that the creation of intelligence by natural selection in animals.

The production function, q = f(K,L), specifies the combinations of labor, L, and capital, K, to produce output, q. Hardware and software are forms of capital. As the capabilities of software advance, economic incentives towards innovation mean that the new software is applied to the production process in a new combination of K and L. Generally, to be an innovation, the production process has to be completely reorganized and frequently the output is changed.

For software to provide an economic service, the software program need not contain any artificial intelligence whatsoever. For example, the software for an ATM machine enables the customer to select the desired service from a series of menus by pushing buttons. Let us consider how menu programs are affecting the travel agency business. With the advance of the Internet, the airline industry will make greater profits if customers buy their tickets online thus greatly reducing the labor costs. They have cut subsidies to travel agents so that many travel agents now must charge fees for their services. This greatly improves the market for Dot.Coms like Orbitz to sell airline tickets with the customers using menus. The software behind the science is more complicated, but hardly could be considered capable of thought.

Now let us consider the types of software created by artificial intelligence researchers and the types of problems they have made some headway in solving.

Expert or Knowledge-Based Systems: Obviously, the capability of software to provide economic services is enhanced by the incorporation of artificial intelligence. Let us first consider the advance of expert systems, which AI professionals prefer to call knowledge-based systems. These expert services in many cases are specialized information services which provide opinions or answers. The basis of an expert system is the knowledge base which is constructed by a knowledge engineer consulting with the expert. A rule of thumb is that if a problem takes less than twenty minutes for the expert to solve, it is not worth the effort, and if it takes over two hours, it is too complicated. The knowledge engineer attempts to reduce the expert's problem solving approach to a list of conditional (if) statements and rules. The expert program provides a search procedure to search through the knowledge base in order to solve a problem. A particular problem is solved by entering the facts of the case. The knowledge incorporated in most expert programs is empirical not theoretical knowledge. Thus, this approach works best on problems which are clearly focused. Expert programs have had some market successes since the 70s:

a. XCON of Digital: This expert program configures VAX computers for customers and makes fewer mistakes than humans.

b. Dipmeter advisor of Schlumberger: This expert program interprets readings from oil wells and performs as well as a junior geologist 90% of the time.

c. Prospector of the US Geological Service: This expert program found a major deposit worth $100M.

d. MYCIN of Stanford: This expert program can diagnose disorders of the blood better than a GP but not as well as an expert.

Before the mid 80s AI was a research activity in universities. With the advent of the first commercial successes of expert systems a new industry was created. The new industry oversold the possibility of expert systems, and sold firms software packages with the mistaken idea that the firms could easily create the knowledge base for their applications themselves. The result was a fiasco which discredited the new industry. Critics claim that the AI types are overreaching themselves because the computer limitations imply an expert program is unlikely to be more than just competent and can not deal with new situations. This is the reason the AI types prefer to call expert systems knowledge-based systems. Such systems in practice act as intelligent assistants, not experts. They change the composition of work groups by replacing assistants and offer the possibility of new services. For example, knowledge-based accounting systems reduce the need for junior accountants and enables accounting groups to answer what-if type questions for their clients.

From an economic prospective, if competency via an expert program is cheaper than competency via training humans, then the expert program industry will continue to grow. Once you have created an expert program, the cost of creating an additional copy is very low. The biggest success in expert systems is in the area of equipment maintenance programs. The use of expert systems continues to grow and an industry has developed to supply code and consulting services to implement expert systems.

Some advances:

Knowledge Based Systems

Case-based Reasoning, CBR, Systems:

In expert or knowledge-based systems the knowledge of experts on a subject is distilled into a decision tree of rules that can be used to solve problems in the subject area. Another approach is case-based reasoning systems in which a library of previous cases is stored without trying to distill the cases into a decision tree of rules.

Using a case-based reasoning system, the decision maker with a new problem:

Case Based Reasoning

Other types of quasi-intelligent software: We have already discussed artificial neural networks. Another type of software that can solve difficult problems is a genetic algorithm. This approach simulates the biological DNA process to find a solution through mutations. Possible solutions are divided into a large number of elements that are randomly combined and tested. Successful solutions are 'genetically' combined to produce new solutions and the process continues. Where natural selection can take millions of years, the simulated selection takes place quickly. This approach can provide good solutions to NP problems such as scheduling. Go to Genetic Java link below for a demo applet of a genetic algorithm.

Genetic Algorithm

Intelligent Agents

Software that a user sends to a remote server to accomplish a task is called an agent. The adjectives associated with intelligent agents are mobile, autonomous, intelligent, and represents interests.

Uses of intelligent agents:

Intelligent agents will grow because they are easier to program than trying to accomplish the task from a central site and they impose less load on the network. As the number of agents released into the Internet grows, a major congestion problem will occur. Will server charge users for memory space and server time to regulate congestion, an economic approach, or will they use a bureaucratic approach such as a queue. There is a major security problem in agents because an important class of agents is computer viruses.

Intelligent Agents