I can give some quick answers from my own experience.
Let me begin with a similar question:
Why should I learn about Multics as and Operating System?
The answer I give is:
Becuase I knew about a dozen operating systems before I learned
and when I learned about Multics I realized that I knew very little about
Almost all of the concepts one needs to know to understand an operating
are emboddied in Multics. They exist almost no place else. And where
they are in bits and pieces, not a coherent whole.
So, to the question:
Why should any one learn Ada as their first language?
The answer I give is:
Because the concepts in programming languages one needs to understand to
do good software engineering exist in Ada, and nowhere else generally
as a coherent whole.
And I follow that with:
We know that if one does not have requirements, one generally gets a bad
There is only *one* set of requirments for programming languages
that was the Steelman (I offer them a set).
Ask yourself what you need to do, and how to do it. In general, the
available only in Ada.
If we look at other engineering disciplines, the foundation is the
"strength of materials" course.
This is where the discipline looks at the properties of materials used in
the discipline, and
how and where they can be applied. In software, the closest we come to a
is a programming languages couse.
I have been thinking for awhile about creating a strength-of-materials
There would be a set of problems, a need to implement, and test the
For example, take the simplest concept: "Discrete Enumeration".
Require the student to do a type for "days of the week" in a variety of
Then have them test:
Can they separate the physical from the logical?
Can they reach the physical representation, and write code that takes
advantage of it.
When one changes the definition, does the code break?
What is the cost (say in bytes) to store an object of that type?
What is the cost (say in fractions of a second) to set, retrieve, change
an object of the type?
What is the cost to build an IO package for that type? And how efficient
is that package?
How early in the develoment cyle does an attempt to set a "bad object"
fail? (Or not fail at all?P.
John McCormick has pointed out several times that his Ada students, who
do not know C++,
rapidly become the architects of software projects, because they can see the
styles and tradeoffs.
And the C++ students take much longer, because they can't see the concpts
So, my 1st answer is:
Because if you understand Ada, you will probably understand Software
Engineering Principles and Tradeoffs.
Because if you do not understand the Ada priciples (and it is very hard to
gain an understanding of the priciples
other than by learning Ada), it is very unlikely that you ever understand
Software Engineering Principles and Tradeoffs.
And my second answer is:
Because, as Nickolus Wirth pointed out, Programs are "Algorithms +
Since you are unable to define the basics of Data in most other
you are forced instead to write compilcated programs.
In Ada, one writes datatype definitions that look complicated (but
readable and understanable)
type Day_of_Week is new Natural range 1..7;
while the others are simple (but void of information and have little
typedef int Day_of_Week;
Then in Ada, writing correct programs is simple,
Day1 = Day_of_Week(I);
while the other languages require complex programs
if ( I >= 1 & I <= 7) then
Day1 = (Day_of_week) I;
/* what to do on an error */
which are wrong (if one uses & where one means && ). Program compiles,
runs, gives wrong answers.
[I have some examples on the tcsigada.org web-site, which is
unfortunately down at the moment.
I'm working with the ISP to get it back up, however since it is a "donated"
site, the priority is low.]
----- Original Message -----
From: "David Botton" <[log in to unmask]>
To: <[log in to unmask]>
Sent: Monday, November 29, 2004 9:00 AM
Subject: The question at hand:
> I am surprised there have been no takers yet (ok, I know, turkey
> weekend, but still). I am hoping to use responses to build a better
> FAQ, articles, etc. The question was:
> Why should any one learn Ada as their first language?
> If we can't give a compelling answer to a question like that, we are in
> big trouble....
> David Botton