A review of the existing software situation leading to the suggestion for a new language for expressing software systems.
FEW would deny today, the vital importance of automatic computing to the world of science, commerce and technology. Yet, it was only a relatively short while ago that computers were used by scientists solving problems very far removed from reality and regarded by the general public with some awe and suspicion.
The early computer was a really primitive affair, not only was it electronically unreliable but the means of using it were awkward and unstereotyped, often bearing indelibly the imprint of the groups of people who designed it. Today, the computer is more often regarded as a nerve centre of communication linked to a host of other electronics equipment including perhaps other computers sometimes many miles away. So in the short space of 20 years of the most rapid technological advance that mankind has ever known--the second industrial revolution, as it has often been called--the computer has evolved from the mathematicians' toy into an item of equipment that will be commonly found today in Universities, industrial and research establishments, offices and laboratories all over the world.
This change was initiated early in the history of computing by commercial and industrial firms presenting to the computer manufacturer, evidence that their requirements were very much different from the military and academic users of earlier years. These earlier computer groups because of their specialised training had evolved systems which were far too complicated for the ordinary user to understand or appreciate. The distress call of the average user was quite simple--they wanted the machines made easier to use. Over the years this demand has become more and more strident--as the number of computers installed has risen so inevitably has the quality of programming and systems expertise in the average user been drastically diluted.
Thus, the tendency over the last decade has been to move the interface between man and machine continually towards the user--thus making it possible for the user to hand over his problem to the machine in a form which is problem orientated rather than machine orientated. To facilitate this motivation, manufacturers have in recent years not only supplied the electronic 'hardware' but have made some attempt, quite often with reluctance, to supply programming and systems support, programming languages as well as the usual standard routines. Thus, we have seen during the last few years the emergence of a complete new industry dedicated to the production of software.
SOFTWARE--THE NEW INDUSTRY
A modern computer consists of a central processor, an assorted array of memory devices with varying access times together with a set of peripheral equipment through which communication to the central processor is made. The central processor is capable of interpreting and executing at a very fast speed binary coded signals stored in the memory or even more important, generated within it. These signals are either instructions to perform simple arithmetic operations or symbol manipulation on data stored in the memory devices or to move data internally inside the computer from the memory to the various peripheral devices. As such the computer would be of little use to any user--unless it was provided with an inordinate amount of programming effort in the way of programs to facilitate its use.
Thus, Software can be defined as the provision and subsequent maintenance and enhancement of all the necessary programs required by the computer users and as such is the only mechanism which can turn inert electronic equipment into marvels of productivity. Computer software support falls into 3 main categories:
(1) basic user programs for the machine.
(2) computer languages, and
(3) special purpose application programs.
User programs for the computer usually incorporates an operating system for all but the smaller machines. Such a system can greatly increase the volume of useful work which a computer can achieve, as well as remove a considerable administrative burden from the computer operators. In fact, for the larger machines in which several unrelated programs are run concurrently--it would be quite impossible to operate the machine efficiently without the aid of this supervisory program. As well as handling a number of jobs simultaneously by printing out diagnostic information to aid testing, it also monitors and prints out information about the progress of the work. In addition, it issues instructions to the computer operators as what magnetic discs or tape reels are required by the programs being run. The efficiency of the operating system is vital, to the performance of the computer. Advanced electronic instruction and elegant peripheral machinery offering very fast speeds does not guarantee that this latent computing power can ever be effectively harnessed.
Secondly, software may include a number of language compilers which enable a user to program the computer in an easy comprehensive language. Compilers--as the programs which translate from the user's language to the machine's own language are called--are very sophisticated programs aimed at achieving a suitable compromise between the completeness and flexibility of the user language on the one hand and the efficient program generated by the compiler on the other.
There are a number of computer languages which have wide international acceptance, these are almost invariably provided by the computer manufacturers. These languages provide the hoped for program interchangeability which is so necessary for the wide acceptance of computer usage throughout the world.
Finally, software programs include a number of standard application packages which enables the user to perform sophisticated calculations on the computer. A typical example of these is a stock control program, a scientific library program, involving mathematical and statistical routines, a P.E.R.T. or network analysis program or a linear programming package.
There have been rapid changes in this area. For example in 1957, computers were delivered with very little software support from the manufacturers. This support usually consisted of a basic machine code input program, a simple version of Autocode, utility testing systems such as memory print, query print, tape copy, etc. Miscellaneous contributions in the form of scientific subroutines from various users were circulated by either the manufacturers or a specially appointed group of interested users. Unfortunately many of these programs were not fully tested. No application programs of the type mentioned earlier were offered by the manufacturers or the software houses (which of course were non existent in the 1950's).
The 1969 software line up looks entirely different. For example, a recent new computer series offered complete operating systems for each model in the range. A full suite of languages consisting of an assembly language, 2 scientific compiler languages, Fortran and Algol, a commercial compiler language, Cobol, a simulation language together with a wide range of scientific, statistical and technical support programs. In addition, an impressive list of application packages on topics such as Stock and Inventory control, Information Retrieval, Network Analysis, Financial and Production Control, Payroll, Numerical Control and Linear programming are available.
So, in 10 years by the recognition of user requirements by the manufacturers, the gains have been quite substantial. These gains are not however as startling as the 100 to 1 gains in hardware that have been accomplished. A similar software improvement of 100 to 11 would have been of great significance in maintaining the growth rate of the computer industry. The main problem, therefore, is that the development of computer hardware has outstripped the evolution of software.
The major differences in the above comparisons can be seen to be in the application programs area where the changes have had, in general, the effect of reducing the cost of programming to the user.
If our utilisation of computers is to keep pace with the development of hardware, then new efforts must be invested in software. In particular, the software must be engineered with specific applications in mind to an even greater degree than before
DESIGN & PRODUCTION OF SOFTWARE
To cater for the required expansion in software development demanded by the increasing number of computers, the automation of designing and producing software on a large scale involves an unprecedented amount of large scale planning and organisation by the manufacturers. Such software can be of many types--assemblers, subroutines, compilers, utility routines, house-keeping packages, operating systems and application programs, a truly formidable problem.
Obviously, there is a great difference between writing a software package for distribution to hundreds of computer installations and a program for one off use written and used by the originating programmer. Many programmers tend to rush ahead to write and code their programs without a proper plan.
Only properly designed software packages can be effective for programs which are to be run on all the computers envisaged throughout the world. Detailed design specifications should be available for inspection and reviewed prior to flow charting and implementation. For the hardware orientated systems software, (supervisors, monitors, peripheral handling etc.) extensive simulation studies are required to determine the pertinent parameters in the intricate queueing and allocation studies which designing this type of software requires. In the design of problem orientated packages--full consultation with the section of people who will use this package is absolutely vital. Quite often these people will not be computer experts at all just users interested in obtaining the answers to their problems.




Mobile Edition
Print
Get the Mag
Weekly Updates