This post is a work in progress. It contains unfinished thoughts.
Way back in the 1960s there was a language called LISP. LISP is the second-oldest high-level programming language still in use. Only FORTRAN is older by one year. In the 1970s along came C. C was originally developed by Dennis Ritchie between 1972 and 1973 at Bell Labs. It was created to make utilities running on Unix.
Many programmers joke that C was a language for making UNIX, and that beyond that job, it failed to fulfill the basic necessities for a programming language: allowing programmers to create maintainable and reusable code.
Frequently, in the software industry, we talk about programmers having to “refactor” their code so that they can adapt it to a new feature or use an existing feature in a novel way. Most of the time, this additional “refactored” code is entirely common-place functionality that is needed on an every-day basis: for example, looking for textual patterns in files via pattern-matching. It turns out that this refactoring that has become so prevalent that it is what programmers spend most of their time doing when writing code, not introducing new ideas. They’re wasting alot of time doing routine maintenance. Add to that the fact that roughly 80% of a programmer’s time is spent reading other people’s code, and you’re basically looking at a profession with an efficiency rating of less than 10%.
This inefficiency is a consequence of the imperative paradigm of C-like programming languages.
In the 1980s and early 1990s, along came the Object-oriented paradigm (OO). Object-oriented paradigm was originally called “Object Oriented Programming Systems” (OOPS). I learned this from my C++ teacher in college, and I originally thought it was just an inconvenient name and an unfair joke. However, I was wrong. For the next 9 years, I didn’t know how wrong I was.
The complexity of C++ (even more complexity has been added in the new C++), and the resulting impact on productivity, is no longer justified. All the hoops that the C++ programmer had to jump through in order to use a C-compatible language make no sense anymore — they’re just a waste of time and effort. Go makes much more sense for the class of problems that C++ was originally intended to solve.Bruce Eckel, computer programmer, author and consultant. His best known works are Thinking in Java and Thinking in C++
Ada puts unique emphasis on, and provides strong support for, good software engineering practices that scale well to very large software systems (millions of lines of code, and very large development teams).
Consequences of these qualities are superior reliability, reusability and maintainability. For example, compared to programs written in C, programs written in Ada 83 contain “70% fewer internal fixes and 90% fewer bugs”, and cost half as much to develop in the first place. Ada shines even more in software maintenance, which often accounts for about 80% of the total cost of development. With support for object-oriented programming, Ada 95 may bring even more cost benefit, depending on how objects are used; although no serious study comparable to Zeigler’s has been published.Ada Programming, Wikibooks