comp.lang.ada
 help / color / mirror / Atom feed
From: billwolf%hazel.cs.clemson.edu@hubcap.clemson.edu (William Thomas Wolfe, 2847 )
Subject: Re: What's really wrong with COBOL?
Date: 22 Mar 90 02:18:38 GMT	[thread overview]
Message-ID: <8458@hubcap.clemson.edu> (raw)
In-Reply-To: 420@mck-csc.UUCP

From article <420@mck-csc.UUCP>, by jw@mck-csc.UUCP (Jeffrey Weiss):
> All these recent jokes about COBOL's age and verbosity are fun, but, if
> we can get serious for just a sec. or two...
> 
> What are the real SUBSTANTIVE problems with COBOL?  Suppose I were suddenly in
> charge of a large DP shop.  Would it make sense for me to migrate away from
> COBOL?  Remember that my DP shop has billions of lines of installed code in
> COBOL, and conversion will require enormous time and cost.  Not to mention
> exposing me to the risk of problems when installing new softwares.
> 
> Now, I'm a reasonably hi-tech guy, not long out of Engineering school, but
> I need real arguments (that make business sense) to give to my boss, the CEO.
> And, are there viable alternatives such as "re-engineering" the existing code
> and investing in tools that make the COBOL environment more palatable?

   From a business perspective, the real substantive problem with COBOL
   is that typically 80% of effort is spent trying to maintain code which
   fundamentally is unmaintainable.  The reason for this is that COBOL has
   found itself unable to evolve quickly enough to keep up with the last
   20-30 years' worth of evolution in programming language technology.

   The language COBOL was invented by the US Department of Defense, and
   later abandoned because it was no longer adequate as a tool for the
   effective support of good software engineering practices.  Since the
   DoD also has had a large installed base of COBOL software, it has been
   the leader in applying effective strategies for dealing with that
   particular problem.

   The Ada programming language was designed with a mechanism called
   "pragma Interface" which enables it to call code written in other
   languages.  If you have one of the compilers which supports calls
   to COBOL (the IBM Ada compiler should certainly be able to do this),
   you can simply call upon your existing COBOL software system for as
   long as it remains serviceable.  Ultimately, old COBOL systems become
   so unmaintainable that it makes sense to rewrite the system, and at
   that point the system should be rewritten in Ada.  So the conversion
   need not be done all at once (although there are a number of companies
   which will gladly do such a conversion for you, for enough $$$); by 
   simply using Ada for all NEW code, it is possible to upgrade to Ada 
   incrementally without too much stress on the organization.

   Now let me just briefly sketch out why COBOL is considered to be no
   longer adequate.  In Ada there is a concept of separating specification
   from implementation.  You can design a software system in terms of 
   different subsystems by specifying (in a "package specification") how
   each of the subsystems is to function.  Then you compile these into
   the Ada program library.  Now there is an agreement among the members
   of the software development team that this is what the different 
   subsystems will do, and all that remains is to write the software 
   which will cause the subsystems to do what is expected of them.  What
   has happened is: we have broken down a large problem into several
   smaller subproblems.  Now the project can be broken up into several
   different programming teams, NONE OF WHICH KNOWS ANYTHING ABOUT HOW
   ANY OF THE OTHER SUBSYSTEMS ARE ACTUALLY IMPLEMENTED.  It is enough
   that they understand how the other subsystems are to operate.  They
   can then write their particular subsystem relying only on the services
   which the other subsystems have agreed to provide -- the specification
   of their subsystem is a "contract" that they must fulfill, and in turn
   the other teams must fulfill their contracts.  The Ada compiler will
   ensure that the terms of the contract are adhered to.  

   So why is this going to help us in maintenance?  Well, let's assume
   that a change is needed.  Unless it's a truly major change which would
   basically invalidate the entire system, we can almost always limit the
   scope of the change to a particular subsystem.  If that subsystem is
   in turn partitioned into different sub-subsystems, the change can be
   limited even further.  Only the changed area will have to be recompiled,
   and soon the modified system is up and running.  But what if there has
   to be a change in the terms of a contract?  Now the Ada compiler REALLY
   helps you out... it will automatically identify parts of the software
   system which depended upon the old contract but which are no longer
   being satisfied due to the changes which were made.  It helps you to
   minimize the extent of any needed changes, and helps you to track and
   control the effects of any major change.  But more than this -- think
   about the potential for reusing subsystems.  Once you have a very useful
   subsystem written and tested, you can use it over and over again without
   any copying of code.  With copying of code there is the problem of trying
   to find all the copies to update them in case there is a change, but in
   Ada there is no need.  If you find a defect in the implementation of a 
   subsystem, you can simply correct the implementation and let the Ada 
   compiler handle the rest.  And there is even the ability to construct
   "generic" subsystems -- subsystems which are written to do something
   generally and which (with you supplying a small amount of information)  
   can be quickly customized to do it in a particular fashion.  For one
   example, suppose that you wanted to have a priority queue (a system
   in which items are deposited with different priorities, and you always
   want to retrieve the item which has the minimum or maximum priority).
   In Ada, you can write a package Generic_Priority_Queue in which the
   idea of a priority queue is programmed, without knowing exactly what
   type of object is to be carried in the queue (the user will decide this).
   Later, the user comes along, describes the type of object to be carried,
   and all that software for handling a priority queue is immediately made
   available for use with that type of object, courtesy of your Ada compiler.
   You could also describe a network and how to do things with it (compute
   the shortest path between two points, find out how many connections will
   have to break in order to cut off all paths between two given points, etc.)
   independently of the type of object at each point or the nature of the 
   connections.  As you can see, this is a very powerful mechanism for reuse.

   This article is long enough already, but if you pick up a book on the
   Ada programming language and study it, you will begin to realize just
   how much advancement has occurred over the last 20-30 years, and how
   COBOL has not kept up with the times.  Please contact me via electronic
   mail (the address is wtwolfe@hubcap.clemson.edu) if there is anything
   I can provide (such as hard numbers on exactly how much Ada has been
   demonstrated to improve productivity) which would fall outside of the
   intended scope of the alt.cobol newsgroup.  As a specialist in Business
   Information Systems who has chosen Ada as the preferred technology for
   that domain, I will be happy to provide assistance to anyone who would
   like more information on why I believe this is far and away the best 
   language technology for the domain of Information Systems applications.
   

   Bill Wolfe, wtwolfe@hubcap.clemson.edu

       reply	other threads:[~1990-03-22  2:18 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <420@mck-csc.UUCP>
1990-03-22  2:18 ` William Thomas Wolfe, 2847  [this message]
1990-03-22 20:34   ` What's really wrong with COBOL? Jeffrey Weiss
1990-03-23  6:27     ` William Thomas Wolfe, 2847 
1990-03-24 15:43       ` jim frost
1990-03-24 21:38         ` William Thomas Wolfe, 2847 
1990-03-25 22:19           ` jim frost
1990-03-28  6:21           ` a.lawrence
1990-03-29 13:52             ` Mike Feldman
1990-03-25  3:41         ` Steve Bridges
1990-03-23 11:07   ` Mike Harrison
1990-03-23 16:43     ` William Thomas Wolfe, 2847 
1990-03-29 18:31   ` Andy DeFaria
1990-03-29  0:52 ext_iai
  -- strict thread matches above, loose matches on Subject: below --
1990-06-02  2:39 jay
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox