
For the record: that was ages ago, the language has improved a lot since then. Ada 2012 includes features for contracts, for example. Read the "Preface" of "Programming in Ada 2012" for details. :)
AdaCore's got some decent learn-by-example stuff here, but it doesn't cover every aspect of the language. https://learn.adacore.com/courses/intro-to-ada/index.html
Wikibooks has a pretty comprehensive book on Ada Programming, but there are still a lot of missing pages. https://en.wikibooks.org/wiki/Ada_Programming
Finally, the language reference covers everything, but it's formatted in the most unusable and difficult to search way I've ever seen. The source files for the reference are maintained by a single editor who invented his own markup language and parser for converting that into HTML and PDF. That may have been acceptable in 1995, but it provides a significant barrier to adoption today. I've made a few attempts at coercing these sources into docbook, but so far I've found I'm not clever enough to untangle this mess. http://www.ada-auth.org/standards/ada12.html
So yeah, just buy the textbook... Skip the first few chapters, they're basically just advertising that tells you how great the thing you're about to learn is, which I find to be in poor taste.
https://www.amazon.com/Programming-Ada-2012-John-Barnes/dp/1...
900+ pages of Good Luck With That. All other resources I've seen regarding Ada are really scattered around, so this book is the one go-to reference.
(Also, SPARK is a more demanding subset of Ada, so maybe wait until you have come to grip with the language before breaching that topic.)
The gnat and base library license confusion has been discussed in the thread.
In addition to that I'm missing a succinct and to the point introduction to ADA. The signal to noise ratio of the standard "programming in ADA 2012" book was freaking me out. I stopped looking into the language not because the language was hard but because it was explained so poorly.
> C history ... The essence of BCPL was the array and pointer model which abandoned any hope of strong typing and (with hindsight) a proper mathematical model of the mapping of the program onto a computing engine. Even the use of := for assignment was lost in this evolution which reverted to the confusing use of = as in Fortran. Having hijacked = for assignment, C uses == for equality thereby conflicting with several hundred years of mathematical usage. About the only feature of the elegant CPL remaining in C is the unfortunate braces {} and the associated compound statement structure which was abandoned by many other languages in favour of the more reliable bracketed form originally proposed by Algol 68. It is again tragic to observe that Java has used the familiar but awful C style.
Programming in Ada 2012 by John Barnes: http://amzn.com/110742481X
I wonder if ADA wouldn't be better if they were subtracting features rather than adding them.