[comp.lang.ada] Ada, "Software Fantasyland," and Quick Courses

balcer@gypsy.siemens-rtl (Marc J Balcer) (02/16/89)

Two articles today caught my interest, giving me an opportunity to
let loose some frustrations. 

In the Spring '88 and Fall '88 semesters, I taught an "Ada
Programming Language" course at a small college.  This was a rather
popular course; as one student put it, "I can put Ada on my resume.  
Now I can get a job with <generic DoD contractor>."

The official prerequisites for the course included only one semester
of Pascal programming.  I told the students that they really needed
CS2 (Advanced Pascal) and Data Structures as well; I did not intend
to spend 3 lectures explaining what arrays, records, and pointers
were.  Nor did I want students who thought a "big program" was
anything over 50 lines long.

When I first taught the course, a local DoD contractor sent about 15
of its people to "take the course and learn Ada."  I had been assured
that all of these people were "experienced programmers and software
managers."  However I soon learned that the depth of experience for
most of them was assembly languages and CMS-2 on a single project.
Most had learned programming while in the service, or had been
"promoted" from computer operations.  Not only were many unfamilar
with high-level languages, I had to justify structured programming!
Strong typing was something to be defeated.  (Was I naive for making
assumptions about their background?)

(And the Army still recruits people by promising to teach them
"computer programming.")

Not only that, but the "Ada myths" were rampant.  Example:  "We can't
use Ada because you can't AND and OR bit fields (integers)."  I
asked, "What kind of problem are you trying to solve?"  (The problem
they had could be solved easily with a record type and a rep clause.)
However, they had spent their entire careers focused on the
machine-level rather than the problem-level.

But the worst part is that few, if any, of the software managers had
any background in "modern software engineering principles" (other
than contempt for the people who practiced them).  Ed Berard is
right:  nearly all of them felt forced to use Ada.  For them, the
programming assignments were sheer torture (many hadn't coded
anything in years).  There was little appreciation for style and
structure---all that mattered was that the program worked on the test
data.

These people seemed to be learning Ada in a vacuum.  Most had never
heard of ACM, none were aware of SIGADA, SEI, STARS, APSE, and such.
They were unaware of any "Ada mentors" in their company.  Upper
management seemed to believe that they could simply buy a compiler,
throw copies of the LRM at the engineers, and expect them to be
coding Ada the next week.  After all, it's "just another language,
right?"

ADA IS NOT "JUST ANOTHER LANGUAGE."

Many of the features of Ada make no sense to a programmer who is
unaware of, and not motivated toward the concepts of structured
programming, modularity, information hiding, object-oriented design,
....  I could go on and on.  

There seems to be no end to the desire for "quick Ada" courses.
(Maybe I should have left it misspelled -- "quack Ada.")  However,
there's a BIG difference between exposure to the language and
competence in it.  Although I had learned structured programming (in
Pascal) from the beginning, and had practiced (and taught) "good
software engineering principles" for 7 years, it took two more years
of working full-time on an Ada project to develop a minimal
competence in the language---to learn "how to do it the Ada way."

Stricter qualifications are needed, but I object to the establishment
of a specific "competency exam" for software engineers.  (No one
suggested it, but...)  The field is still too dynamic.  Too much is
changing.  To establish a fixed criteria would lock in certain
practices and make them very difficult to change.  At the worst, any
examination would be little more than a trivia quiz.

I'll conclude with a few questions:

1.  How much re-educating of DoD software enginners is necessary
    BEFORE teaching Ada?  In other words, should we be teaching
    software engineering fundamentals first?  What's the most
    effective way to do this?

2.  How long does it take to properly re-educate a generic software
    engineer into an Ada developer?  Can the cost be recovered?

3.  Where does Ada fit into the college curriculum?  How can we
    educate students in good software engineering, not just give them
    "Ada" on their resumes?

4.  What qualifications (read "experience working on Ada projects")
    should be required for those teaching Ada?

5.  Can some of these efforts lead to an expansion of the Ada base
    beyond DoD and DoD contractors into other industries?
---------------------------------------------------------------------------
Marc J. Balcer
[balcer@gypsy.siemens.com]
Siemens Research Center, 755 College Road East, Princeton, NJ 08540
(609) 734-6531
---------------------------------------------------------------------------

rjh@cs.purdue.EDU (Bob Hathaway) (02/17/89)

>In the Spring '88 and Fall '88 semesters, I taught an "Ada
>Programming Language" course at a small college.  This was a rather

Some good schools have a "Software Engineering with Ada" course or
use Ada in their "Software Engineering" curriculum.  Teaching a simple
Ada programming course seems to be the problem.

>"promoted" from computer operations.  Not only were many unfamiliar
>with high-level languages, I had to justify structured programming!
>Strong typing was something to be defeated.  (Was I naive for making
>assumptions about their background?)

A "Software Engineering" in the course title would have alerted them modern
principles were being taught.

>
>ADA IS NOT "JUST ANOTHER LANGUAGE."
>
>Many of the features of Ada make no sense to a programmer who is
>unaware of, and not motivated toward the concepts of structured
>programming, modularity, information hiding, object-oriented design,
>....  I could go on and on.  
>

But many programmers are aware of all of this, I for one before learning
Ada.  How long before my first Ada program worked (with generics, Adts,
dynamic arrays, arbitrary length strings, etc.)  A few hours.  

I would change the above quotation to read:
ADA is an incremental improvement in programming languages encompassing
modern software engineering principles.

>software engineering principles" for 7 years, it took two more years
>of working full-time on an Ada project to develop a minimal
>competence in the language---to learn "how to do it the Ada way."

It depends on your background.  After a few years of C and Modula
programming and some independent reading on Ada, programming in
Ada was an incredible delight from the start: greater power than C
with the structure of Modula.  I could see giving a one semester 
"Software Engineering With Ada" course by simply using some good
references (Booch, Ada Letters, LRM) and by having a few experts
available.

>1.  How much re-educating of DoD software enginners is necessary
>    BEFORE teaching Ada?  In other words, should we be teaching
>    software engineering fundamentals first?  What's the most
>    effective way to do this?

I suggest a short time with "Software Engineering with Ada" by Grady Booch
is sufficient, possibly along with "Software Components With Ada" and the
LRM.

>2.  How long does it take to properly re-educate a generic software
>    engineer into an Ada developer?  Can the cost be recovered?

This should depend on their previous experience and background.

>3.  Where does Ada fit into the college curriculum?  How can we
>    educate students in good software engineering, not just give them
>    "Ada" on their resumes?

Simple, offer a "Software Engineering with Ada" course like several 
universities.  I think Ada is currently by far the best language
for software engineering for both teaching and practice.

>
>4.  What qualifications (read "experience working on Ada projects")
>    should be required for those teaching Ada?
>

I know of one qualification which may be underemphasized: a genuine desire
to program in state of the art languages using state of the art methodologies.
I'm sure everyone on all the Ada committes could pass this test with ease...

>
>5.  Can some of these efforts lead to an expansion of the Ada base
>    beyond DoD and DoD contractors into other industries?

I certainly hope so.  Since Ada offers the most modern programming constructs
and methodology I see little reason to use anything else.  With
conferences discussing future enhancements I expect the situation to stay
that way, since other groups (such as the Modula-3 group) will keep the
leading edge in state of the art programming language design moving.

Bob Hathaway
rjh@purdue.edu

gore@eecs.nwu.edu (Jacob Gore) (02/17/89)

/ comp.lang.ada / balcer@gypsy.siemens-rtl (Marc J Balcer) / Feb 15, 1989 /
> 1.  How much re-educating of DoD software enginners is necessary
>     BEFORE teaching Ada?  In other words, should we be teaching
>     software engineering fundamentals first?  What's the most
>     effective way to do this?

Very frequently, when I try to explain to people that there is a big
problem with the software-related part of the CS curriculum at
Northwestern, I am asked, "Well, what language would you teach?"

Wrong question.

Programming languages are tools.  Teaching Ada for the sake of teaching Ada
is a waste of everybody's time.  Most (all, hopefully :-) of the people
taking courses here are literate; they can read on their own enough Ada
books and manuals to learn anything from how to write a BASIC program in
Ada syntax, to the most intricate details of the language.

Ada IS just another language.  What is different about it is what was meant
to be expressed in it.

What needs to be taught are the skills, methodologies, techniques,
approaches... whatever else you wish to call them.  The language used in
a course is there to help illustrate the concepts and to experiment with
their implementations.

In this light, the question of what (if anything) to teach (or re-teach)
before teaching Ada turns into the question of whether or not Ada is the
first language to use to illustrate such concepts.

I think it can be, but it doesn't have to be (in fact, it may not be my
first choice).  Ada can be taught either concurrently with teaching the
concepts, using it to illustrate them, or, if another language is used to
present the concepts, after those concepts are already presented.  In the
latter case, a "quick course" in Ada will be sufficient to let the students
get on with their work.  Of course, real proficiency in using Ada can only
come with experience.

Jacob Gore				Gore@EECS.NWU.Edu
Northwestern Univ., EECS Dept.		{oddjob,gargoyle,att}!nucsrl!gore

billwolf@hubcap.clemson.edu (William Thomas Wolfe,2847,) (02/18/89)

From article <6660@siemens.UUCP>, by balcer@gypsy.siemens-rtl (Marc J Balcer):
> The official prerequisites for the [rather popular Ada] course included 
> only one semester of Pascal programming.  I told the students that they 
> really needed CS2 (Advanced Pascal) and Data Structures as well; I did 
> not intend to spend 3 lectures explaining what arrays, records, and pointers
> were.  Nor did I want students who thought a "big program" was
> anything over 50 lines long.  [...] Not only were many unfamilar
> with high-level languages, I had to justify structured programming!
> Strong typing was something to be defeated.  (Was I naive for making
> assumptions about their background?)

    The problem is with the prerequisites, I think.  Another poster
    (Bob Hathaway) recently said that he had no trouble with Ada, etc.,
    while posting from purdue.edu; this indicates that the people who
    are coming up from college TODAY are being properly trained in
    software engineering concepts.  The problem is that vast numbers
    of people graduated from college back in the days when hacking 
    was the dominant paradigm.  These people evidently did not absorb
    basic concepts of professionalism, such as "A professional maintains 
    membership in professional organizations such as the ACM, and must
    continuously strive to stay abreast of both the state of the science
    and the state of the technology".

    Ada cannot be taught in isolation.  Software engineering must be either
    a prerequisite or a corequisite.  Data Structures should also be a 
    prerequisite, so the students will understand what an ADT is.  

    Specify these topics as unconditionally required for admission, and
    let the Registrar do the enforcement.  This should eliminate such problems.


    Bill Wolfe, wtwolfe@hubcap.clemson.edu

beal@mussel.cis.ohio-state.edu (Alan Beal) (02/27/89)

In article <6660@siemens.UUCP> balcer@gypsy.siemens.com (Marc J Balcer) writes:
>When I first taught the course, a local DoD contractor sent about 15
>of its people to "take the course and learn Ada."  I had been assured
>that all of these people were "experienced programmers and software
>managers."  However I soon learned that the depth of experience for
>most of them was assembly languages and CMS-2 on a single project.
>Most had learned programming while in the service, or had been
>"promoted" from computer operations.  Not only were many unfamilar
>with high-level languages, I had to justify structured programming!
>Strong typing was something to be defeated.  (Was I naive for making
>assumptions about their background?)

   This is a common problem in the government.  The majority of the 
   government's software is in COBOL, and a good many of its programmers
   know nothing about C, PASCAL, etc.  The major reason for this is that
   the government can not recruit people with any type of CS degree.  How
   many CS majors out there would be willing to start at $14,000?  But a
   lot of secretaries, computer operators, and low level managers are 
   willing to become 'programmers' in order to reap the riches of computer
   industry.  I worked for the government for awhile and everything was
   done in COBOL with a little systems work done in Algol(Burroughs shop).
   Management kept saying that the DOD had mandated ADA as a programming
   language of the future but from what I saw, only about 10% of the
   programmers would be able to comprehend ADA or would be willing to try.
   Personally, I don't see the government completely switching from COBOL to ADA
   because of the expense of conversion, cost of training, and resistance
   to change.  However, the trend in the government is to contract out this
   type of work, so who knows.

-=-
 Alan Beal
 The Ohio State University
 Department of Computer and Information Science
 beal@cis.ohio-state.edu      {pyramid,killer}!osu-cis!cis.ohio-state.edu!beal