From: M.Kempe@ieee.org (Magnus Kempe) Newsgroups: comp.lang.ada,comp.edu,comp.answers,news.answers Distribution: world Subject: Ada FAQ: Learning Ada Followup-To: poster Reply-To: M.Kempe@ieee.org (Magnus Kempe) Summary: Learning Ada Frequently Asked Questions (and answers). Please read before posting. Does *not* get into Ada programming questions [for that see the companion Ada/programming FAQ]. Keywords: advanced language, artificial languages, computer software, data processing, programming languages, learning, tutorials, Ada Organization: None Archive-name: computer-lang/Ada/learning Comp-lang-ada-archive-name: learning Comp-edu-archive-name: learning-Ada Posting-Frequency: monthly Last-modified: 29 June 1997 Last-posted: 31 May 1996
Recent changes to this FAQ are listed in the first section after the table of contents. This document is under explicit copyright.
This is a list of resources to learn Ada. This list includes interactive tutorials, books, source code collections, etc.
Ada is an advanced, modern programming language, designed and standardized to support and strongly encourage widely recognized software engineering principles: reliability, portability, modularity, reusability, programming as a human activity, efficiency, maintainability, information hiding, abstract data types, genericity, concurrent programming, object-oriented programming, etc.
All validated Ada compilers (i.e. a huge majority of the commercial Ada compilers) have passed a controlled validation process using an extensive validation suite. Ada is not a superset or extension of any other language. Ada does not allow the dangerous practices or effects of old languages, although it does provide standardized mechanisms to interface with other languages such as Fortran, Cobol, and C.
Ada is recognized as an excellent vehicle for education in programming and software engineering, including for a first programming course.
Ada is defined by an international standard (the language reference manual, or LRM), which has been revised in 1995. Ada is taught and used all around the world (not just in the USA). Ada is used in a very wide range of applications: banking, medical devices, telecommunications, air traffic control, airplanes, railroad signalling, satellites, rockets, etc.
This FAQ is maintained on an individual volunteer basis, by Magnus Kempe (M.Kempe@ieee.org).
The latest version of this FAQ is always accessible through the Web as
hosted by the Ada Home, http://www.adahome.com/
(Up to Table of Contents)
This document has a home on the Home of the Brave Ada Programmers (HBAP) WWW Server, in hypertext format, URL http://www.adahome.com/FAQ/learning.html#title
It is available --as posted in *.answers-- on rtfm.mit.edu, which archives all FAQ files posted to *.answers; see directory ftp://rtfm.mit.edu/pub/usenet-by-group/news.answers/computer-lang/Ada
The text-only version is also available in directory ftp://ftp.adahome.com/pub/FAQ
Magnus Kempe maintains this document; it's a hobby, not a job.
Feedback (corrections, suggestions, ideas) about it is to be sent
via e-mail to
In all cases, the most up-to-date version of the FAQ is the version maintained on the Ada Home WWW Server. Please excuse any formatting inconsistencies in the posted, text-only version of this document, as it is automatically generated from the on-line, hypertext version.
(Up to Table of Contents)
Here are some on-line Ada tutorials expressly designed for self-study:
Lovelace assumes that the user already knows some other algorithmic programming language (such as C, C++, or Pascal). Lovelace is interactive; it contains a number of short sections, and most short sections end with a question (to help ensure that you've understood the section's material). Lovelace can be used directly from the WWW (see above), downloaded from http://www.adahome.com/Tutorials/Lovelace/download.html
or run from a CD-ROM, described at http://ftp.cdrom.com/titles/ada.html
Lovelace was developed by David A. Wheeler.
LAW is concerned with initial software development education rather than with helping programmers who already know other computer languages. Also, LAW is concerned as much with providing software engineering tools over the Web as with presenting information regarding Ada. Dr. Culwin believes that the Lovelace and LAW projects are complementary rather than needless duplication of each other, since their target users are so different.
LAW includes an interesting capability to interactively create Ada programs remotely over the Web; you might want to use this LAW capability even if you choose to use another tutorial.
Dr. Culwin is at South Bank University, London, and may be contacted at firstname.lastname@example.org
for programmers who have a C or C++ style programming language background. It was written by Simon Johnson, with some additional text by Tucker Taft.
or the Ada-Tutr ftp site, located at ftp://members.aol.com/AdaTutor/sit.htm
You can also download it by calling the SaddleBag BBS, 1-407-773-0831, and log in with the name Ada Tutor and the password tutor. The Public Ada Library's copy of Ada-Tutr (mirror) is another way to retrieve Ada-Tutr. There is also an older version of Ada-Tutr for Ada 83 (mirror). AdaTutr has a number of exercises that give a more complete understanding of Ada but will take more time to complete than a tutor without such exercises (such as Lovelace).
HOT_Ada is designed for individual, self-paced learning. One version runs on Macintoshes, another on PCs with Windows. The many hypertext and hypergraphic features allow you, for instance, to click on a "hot word" to see its definition in the Glossary or click on a "hot icon" in a diagram to jump to the corresponding line of Ada source code in a previously hidden listing.
The regular price is $29 for a single volume, $49 for the two-volume set.
E-mail inquiries welcomed at: email@example.com. Regular mail inquiries or mail orders (specify Mac or Windows, personal checks accepted) can be sent to:
Stage Harbor Software 9 Patriots Drive Lexington, MA 02173
The Cooperative Bank, 12 Nagog Park, Acton, MA, 01720-9890, USA, Account: Bard S. Crawford, Stage Harbor Software, Account Number 03520457558-- and let Bard Crawford know separately that you are doing so.
[Source: Bard Crawford, Stage Harbor Software]
Here are some other Ada-related educational materials that you may find helpful:
This is a day-long short course that introduces Ada95. The purpose of the course is to explore the Ada95 language, including its facilities for object-oriented design and programming, real-time programming, distributed processing, and other domains. The course will concentrate on the practical aspects of applying the features of Ada95 to the software development process. Numerous examples of the language are presented.Richard Conn's tutorial is available in Zipped Powerpoint Postscript format. (736K). A README file accompanies the tutorial.
Free viewers for both Macintosh (602K) and PCs running Windows (1,092K) are available for those who do not own Powerpoint.
(Up to Table of Contents)
Magnus Kempe and Mike Feldman maintain annotated bibliographies. They are selected lists of useful books, with capsule reviews.
December 1997 edition
The latest version of this bibliography is always available
There are currently seventeen books reviewed within three categories; within each category, books are listed alphabetically by author or editor. If we are aware of Web pages or related documents for these books, links are included in the online version of this document. The three categories are:
While bookstores do not always stock Ada-related books, it is usually possible to order the books reviewed with the title/author/publisher/year/ISBN information listed below. Also, the Ada Home provides an online bookshop service at http://www.adahome.com/shop/
Additional texts are currently in the publication pipeline; reviews will be written and added as soon as the books appear (preliminary placeholders may already appear below).
The editor, Magnus Kempe, is the point of contact for adding reviews. There are many reviewers; you too can be one! Just write to the Ada Home editor with a capsule review in the form of the ones below, and we will be glad to add it to the list and credit you for the contribution.
Reviewers in this edition are Ted Baker, Jack Beidler, Michael B. Feldman, Magnus Kempe, Stan Kwasny, and Pat Rogers. Their initials appear after their respective reviews.
This bibliography was originally a project of the ACM SIGAda Education Working Group. Mike Feldman, the chair of this WG, started the project and served as the editor until July 1996.
Ada: A Developmental Approach
Prentice Hall Europe, 1997 (ISBN 0-13-264680-3)
As its title suggests, this is essentially an introduction to software development, using Ada. This interesting book, intended for novice programmers, has a major virtue: it stresses the importance of design and does not pretend that software engineering issues can be ignored while one is learning to create programs.
The book covers most major issues of software development: modularity, component-based programming, levels of abstractions, ADTs, design tools (Booch and JSP), user interface aspects, white/black box testing, debugging, documentation, object-oriented programming, programming by contract and formal specifications, and metrics. Simultaneously, the reader is introduced to the mechanisms of Ada 95, thus learning in context about program structure, selection, iteration, recursion; data types, structures, and files; algorithms and complexity; polymorphism, heterogeneous data structures, and generics.
Due to the number of topics found in the book, the software engineering issues are not dealt with in details, but the novice programmer will be armed with a general understanding of what skills he needs to master in order to become a professional software developer.
There are five section, with a total of 34 chapters. A few exercises are proposed at the end of the chapters; no solutions are provided in the book. Unfortunately there are frequent typographical errors in the text, WWW resources are often inaccurately cited, and formatting of the code examples is awkward --which can make them difficult to read. Concurrency is not covered.
The LAW project (Learning Ada on the Web) contains a collection of resources directly supporting the book, including a draft of the complete text and an additional section (omitted for reasons of space), all the source code, a list of errata, and more. (M.K.)
Prof. Culwin maintains
the LAW Project,
Ada 95: The Craft of Object-Oriented Programming
Prentice Hall Europe, 1996 (ISBN 0-13-230350-7)
This book introduces Ada-as-a-first-language, using an example-driven approach that gradually develops small programs into large case studies. Even for one who already knows Ada, it is a pleasure to read, especially as it emphasizes an object-oriented perspective on the development of Ada applications.
The reader is quickly introduced to "high-level" mechanisms, such as exception handling and the hierarchical library. Interestingly, the author systematically creates his examples in a namespace hierarchy rooted at a package aptly named "JE".
The book is very well-written and appropriately stresses many software engineering concerns throughout the 20 chapters; for instance, maintenance scenarios are used to underscore the essential design choices faced at various stages of development. Four annexes summarize the syntax of the language and essential predefined entities. Tasking is described, but not in detail. (M.K.)
Ada 95: Problem Solving and Program Design
Michael Feldman and Elliot Koffman
Addison-Wesley, 1996 (ISBN 0-201-30485-6)
As with the earlier edition by the same authors, the first 2/3 of the book is suitable as a CS1 text with Ada as the language of instruction, and the the last few chapters, combined with some language-independent algorithm theory, cover the rest of the Ada langauge in sufficient depth to serve as the language-specific basis of a CS2 course.
The style is like that of a musical fugue: sections that develop general programming and problem solving techniques are interleaved with sections that develop successively larger subsets of the Ada 95 language and libraries; examples recur from one chapter to another, in progressively more completely developed forms. Packages are introduced from the start; other language features are introduced very gradually at first and then at a progressively faster pace. Loops come up in chapter 5, records and arrays by chapter 8, generics by chapter 11, and pointers, tagged types, and tasks in chapters 14-16. The nearly 200 examples have all been compiled and tested, and are available in electronic format from the first author, the Addison Wesley home page, and the usual Ada archives. (T.B.)
The book is packaged with a CD-ROM which contains a special edition of the Aonix ObjectAda compiler for Windows NT/95 (useable for student projects; limited to 2000 lines per source file, 20 tasks per program, and 35 program units per program).
Prof. Feldman has made available online the full
Instructor's Manual for this book,
Ada from the Beginning, 3rd ed.
Addison-Wesley, 1997 (ISBN 0-201-40376-5)
This book was one of the first to use Ada with CS1-style pedagogy. There are excellent sections on the idiosyncracies of interactive I/O (a problem in all languages), and a sufficient number of fully-worked examples to satisfy students. Generics, linked lists and recursion are covered at the end; there is no tasking coverage, but one would not expect this at CS1-level. A very interesting addition is the new Chapter 14, in which OOP in both Ada 83 and Ada 95 is discussed. This is an especially lucid explanation of OOP in Ada, and makes a real contribution because it doesn't just discuss tagged types as a "feature" of Ada 95, but shows very nicely what is possible in Ada 83 (instead of just what is not possible), and shows how Ada 95 adds functionality. (M.B.F.)
The 2nd edition was published before the Ada 95 standard was finalized, but this 3rd edition fully takes into account the Ada 95 standard.
Data Structures and Algorithms: An Object-Oriented Approach Using Ada 95
Springer-Verlag, 1997 (ISBN 0-387-94834-1)
This book introduces classical data structures and algorithms, with a strong emphasis on object-orientation. Abstraction, encapsulation, representation, iterators, and basic measurements form the cornerstone of the presentation. Structures cover: stacks, queues, lists, trees, graphs, sets and strings; algorithms cover: sorting and searching. The writing style is informal, almost like a narrative. The book assumes a basic knowledge of Ada. The 12 chapters each end with suggestions for exercises and further explorations. Contains a bibliography and an index. The software components are available over the Internet.
Prof. Beidler has made available online
the software components
described in his book,
Concurrency In Ada
Alan Burns and Andy Wellings
Cambridge University Press, 1995 (ISBN 0-521-41471-7)
(Concurrent Programming and Real-Time Systems)
The ultimate Ada concurrency book (Burns' "Concurrent Programming In Ada") has a successor for Ada95. Written by acknowledged real-time experts, it covers the tasking model in great depth, including all the existing and new capabilities as well as the Systems Programming Annex, the Real-Time Systems Annex, and the Distributed Systems Annex. Also included are an introduction to concurrent programming and an examination of the interaction of the tasking facilities with those for object-oriented programming. More than just a detailed language examination, the book offers many examples of usage and analysis of feature interaction that only these two authors could provide. Highly recommended for introductory and advanced courses in concurrent and real-time programming with Ada. (P.R.)
Software Construction and Data Structures with Ada 95
Michael B. Feldman
Addison Wesley, 1996 (ISBN 0-201-88795-9)
As a book about data structures, this well-written, teachable book assumes a base knowledge of Ada, although a quick review of the basics is included.
Ada 95 features are incorporated smoothly into the discussion and the coded examples (which are available from the author). The book strikes a nice balance between theoretical issues and practice with a wealth of examples and much attention to detail, including a nice discussion on how to time a program. The extensive material coverage includes standard CS2 topics like "big O" analysis, linked lists, queues and stacks, graphs, trees, hash methods, and sorting, but the reader is allowed to investigate topics beyond the basics through additional topics like strings, vectors, tables, file I/O, sets, priority queues, AVL trees, and B-Trees, and several complete and illustrative examples, including an employee database, an airline passenger list, an RPN calculator, a discrete simulation, and even a simple window manager.
By introducing generic units relatively early (chapter 5), the text can focus on reusability and sound software engineering solutions to a wide variety of data structures problems, but never neglects the underlying analysis. As a capstone to the development of several generic data structures, chapter 14 covers generic sorting according to a wide variety of methods each with its own data structure nuances. The final chapter introduces concurrency.
The nearly 200 programs and packages have all been compiled and tested, and are available in electronic form from the author, the Addison Wesley home page, and the usual Ada archives. (S.K.)
Prof. Feldman has made available online
Introduction to Concurrent Programming,
Design of Dependable Ada Software
G. Motet, A. Marpinard, J.C. Geffroy
Prentice Hall, 1996 (ISBN 0-13-204967-8)
After participating in two European projects with major European aircraft manufacturers and suppliers, the authors wrote a book dealing with the development of dependable Ada software. This book gives advice on optimal use of Ada to design dependable software; it is not a presentation of the language.
Note: A review was published by "Software testing verification & reliability", Vol. 6, No 2, June 1996.
Méthodes de génie logiciel avec Ada 95 (In French)
(Software Engineering Methods with Ada 95)
Paris, InterEditions, 1995 (ISBN 2-7296-0569-X)
This is a very interesting book written by a long-standing expert in Ada and software engineering. Various methodologies are compared (Booch, HOOD, Schlaer-Mellor, etc.), all in the context of Ada 95 but not limited to language-specific discussions. Enough Ada 95 fundamentals are taught that it should not be necessary to know Ada 95 before reading the book, but this is not a book for people without some programming background.
Recommended for classes taught in French and for individuals with a good reading knowledge of French. The author is developing an English translation, which I await enthusiastically. (M.B.F.)
Object-Oriented Software in Ada 95
Michael A. Smith
International Thomson Computer Press, 1996 (ISBN 1-85032-185-X)
(Object-Oriented Programming for Advanced Undergraduates)
This book begins by providing an introduction to problem solving using a Fusion-based object-oriented design methodology, in addition to examining the basic constructs in the Ada 95 language. The book then moves on to discuss the object-oriented features of the language, using numerous examples to illustrate the ideas of encapsulation, inheritance, and polymorphism. The book's capstone is a detailed case study of the design and implementation of a textual user interface (TUI) using object-oriented design methodology. This is a nice, understandable, straightforward book on OOP with Ada 95, quite suitable for self-study or an advanced undergraduate course. The brief survey of Ada 95 at the beginning should be sufficient for readers with programming experience. The several dozen source code files are available on the Internet. (M.B.F.)
Ada 95 Rationale: The Language, The Standard Libraries
John Barnes (ed.)
Springer-Verlag, 1997 (ISBN 3-540-63143-7)
The Ada 95 Rationale is the companion to the reference manual and language standard; it introduces Ada 95 and its attractive new features and explains the rationale behind them. It should be studied in parallel with the Ada 95 Reference Manual.
It comes in four parts. The introductory part is a general discussion of the scope and objectives of Ada 95 and its major technical features. The second part contains a more detailed step by step account of the core language. The third part consists of several annexes addressing the predefined environment and specialized application areas. Finally, the three appendices of the fourth part are devoted to the upward compatibility with Ada 83, a few changes since the drafts of the standard were made public, and a summary of requirements.
Programming In Ada 95, first edition
Addison-Wesley, 1995 (ISBN 0-201-87700-7)
This new book by John Barnes continues a tradition of easy readability that belies the depth of understanding required to make a complex subject accessible. Though a new book for a new Ada, the style and humor from the earlier book remain. The new Ada standard is covered as a language in its own right, with few references to its predecessor beyond a summary of language differences in each chapter. The core facilities are covered extensively, with emphasis on rationale and the "programming in the large" issues of abstraction, OOP, tasking and exceptions. Of particular value is the chapter entitled Object Oriented Techniques, which explores the application of the OOP, tasking and generic unit facilities explained earlier in the book. Each chapter contains coding exercises for further study, with fullly worked-out answers in the back. The many who appreciated the earlier book will likewise enjoy this, the new classic on Ada95. Highly recommended for readers with programming experience. (P.R.)
Ada as a Second Language (2nd Edition)
McGraw Hill, 1996 (ISBN 0-07-011607-5)
This is more like a new book than like a new edition. The first edition of this book was a excellent reference to Ada(83), well organized and filled with excellent examples of realistic code sequences. It was the perfect reference to the language for those with substantial programming experience in another programming language. One of the more important features of the first edition is a well constructed index, which becomes the major passageway into the book as it grows old and worn.
That was the first edition, the second edition builds upon the excellent organization that made the first edition an excellent reference and adds material on the new features in Ada(95). To be more precise, the new material is not added, it is integrated into a seamless reference to Ada(95). The book is composed into twenty well focused chapters and five appendices, including an appendix on the special needs annexes. Each chapter concludes with two sections, one on differences between Ada(83) and Ada(95), and a very brief chapter summary. Isolating the discussion of '83 versus '95 differences to a single section in each chapter has kept the rest of the presentation in each chapter clean and to the point.
As an example of the quality in this book, consider Chapter Twelve, Classwide Programming. This is the chapter that describes Ada's object oriented programming support. Again the word "seamless" comes to mind. Unless you know ahead of time what are the new features in the language and what are the old features, you could not tell from the presentation. Polymorphism, type extension, dispatching are presented in a clear direct way, with excellent sample pieces of code. I was particularly impressed by the clean presentation of Ada.Finalization, and the realistic easy to follow sample code for the Initialize, Finalize, and Adjust procedures.
In conclusion, "Ada as a Second Language, is the best non-language lawyer reference to Ada(95), even for those whose first language is Ada(83). (J.B.)
Ada 95 for C and C++ Programmers
Simon K. Johnston
Addison Wesley, 1997 (ISBN 0-201-40363-3)
Simon Johnston's work makes an important contribution to the growing collection of Ada 95 texts for specific audiences. Johnston's target readers are the many programmers with experience in the C and C++ languages. Johnston's perspective is that of an active software developer fluent in all these languages; his goal is to show readers how Ada 95 helps them to do what they already know how to do in C and C++.
Johnston has shown considerable bravery by putting early versions of this text on the World Wide Web. He has revealed his ideas to the eyes of many thousands of critical readers, and this courageous approach has benefited both readers and author. The result is a very polished piece of work.
Three features of Johnston's book are especially useful. First, his prose and code are cogent and clear. Second, throughout the book the author develops and follows through one major case study, introducing Ada 95 capabilities through refinement of the design and alternative strategies. Finally, Johnston introduces and carefully explains the richness of the standard libraries, presenting these in a systematic fashion without merely paraphrasing the Reference Manual.
This book is bundled with a CDROM that includes the book's program distribution as well as the Aonix ObjectAda Special Edition development system. For the C or C++ programmer, Johnston's text, aided by this or another of the nice Ada 95 development systems, will go far in making the Ada 95 experience a pleasant and rewarding one. (M.B.F.)
Rendezvous with Ada 95
David J. Naiditch
John Wiley and Sons, 1995 (ISBN 0-471-01276-9)
This book is a revision of Naiditch's earlier "quick introduction" to Ada for experienced programmers. The second edition is no longer "quick" (it is nearly 150 pages longer) but is the best integrated introduction to Ada 95 to appear thus far. One wishes only that the author had provided more complete, compilable examples instead of the fragments so typical of Ada texts. (M.B.F.)
Ada 95 Reference Manual: Language and Standard Libraries,
International Standard ISO/IEC 8652:1995(E).
S. Tucker Taft, Robert A. Duff (eds)
Springer-Verlag, 1997 (ISBN 3-540-63144-5)
The Ada 95 Reference Manual completely documents the Ada 95 standard and thus is an indispensable working companion for anybody using Ada professionally or learning the language systematically.
Ada 95: The Lovelace Tutorial
David A. Wheeler
Springer-Verlag, 1997 (ISBN 0-387-94801-5)
This book, based on a very successful world-wide web tutorial, introduces the basic elements of Ada 95 to those who already know another programming language (e.g. Pascal, C, C++, Fortran, or Basic). It is divided into a large number of small sections (most of which end in a question) to improve understanding.
The online version
of the Lovelace tutorial is at the Ada Home,
(with contributions from Jack Beidler, Duane Jarc, Suzanne Pawlan Levy, Mathew Lodge, Pat Rogers, and David Weller, as indicated by their initials following their reviews)
As chair of the SIGAda Education Working Group, and a denizen of the Internet newsgroups, I am often asked to give references for "Ada textbooks." This list responds to these many queries for Ada 83.
The textbooks in the Group 1 are written especially for students without programming experience, who are learning Ada as their first language. Most of these can also cover at least part of a typical CS2-level course. The books in Group 2 use Ada as their language of discourse but are "subject-oriented:" data structures, file structures, compilers, comparative languages. The remaining books in Group 3 are either "Ada books" focusing on the language features or more general books that use Ada, at least in part, but do not fit obviously into a standard curriculum "pigeonhole."
I invite you to add to the list. Please write your annotated entry in the form I have used here and write or e-mail it to me, firstname.lastname@example.org . I will include it in my next version and credit you as a co-compiler of the list.
Disclaimers: I wrote two of the texts listed here; I hope the annotations are impartial enough. And any annotated bibliography is selective and opinionated. Your mileage may vary.
The maintainer has simply :-) organized, polished, or added some information for your satisfaction.
(Up to Table of Contents)
This FAQ is Copyright © 1996-1997 by Magnus Kempe. It may be freely redistributed --as posted by the copyright holder in comp.lang.ada and comp.edu-- in other forums than Usenet News as long as it is completely unmodified and that no attempt is made to restrict any recipient from redistributing it on the same terms. It may not be sold or incorporated into commercial documents or products without the explicit written permission of the copyright holder.
Permission is granted for this document to be made available under the same conditions for file transfer from sites offering unrestricted file transfer on the Internet and from Forums on e.g. Compuserve and Bix.
This document is provided as is, without any warranty.
(Up to Table of Contents)