Reflections on the Ada Language

I go through periods where I have a crave to learn new programming technology.  I’ve tried Java in the past, but in the end I fell back on C++.  Same thing for Python and Haskell–the syntax (sorry, freedom with white-space is just a personal preference!) and lack of familiarity with the libraries led me back to C++.  But sometimes I want to try something new and feel that “wow” moment when you really appreciate a new way of doing something.  So far only Erlang has managed to cause that reaction.  I still need to have a go at Eiffel one of these days.  The software engineering aspect of Eiffel looks really interesting.

Speaking of software engineering, I have always been interested in evaluating Ada and understanding the how and why it is known for safety and reliability.  I have been trying to make myself more comfortable with Ada since my days in the university.  After all, unlike Java, C# or many modern languages, Ada is not managed and I can use the GNU tool chain for development and debugging.  Yet somehow Ada never sticks to me–I don’t know why.  Ada is used in some of the most interesting software in the world: avionics, rail transport control in the EU, satellites, and more.  Even with such an impressive track record, I still find it difficult to buckle down and really go at Ada!  Those applications are so much more interesting that what I currently work on.

Whenever someone in the Ada community publishes and article about the strength of Ada in software engineering and the lack of developers who know the language, I get the urge to try and pick it up again.  I really want to understand what makes it so well suited for mission critical applications, yet when I start reading a book on Ada, I loose interest in a few days.

One major factor may be that I cannot really use it in my job. I could, but my boss would probably throw a telephone book at me if he wanted to update my software and found it was not C, C++ or C#.

I just cannot put my finger on it though.  I don’t mind that Ada is a verbose language–it helps to keep my C/C++ style of thinking out of any Ada code.  Reflecting on my FPGA designs, when I write Verilog (required at work) I sometimes catch myself writing it like a C program.  I never had that issue with VHDL (from my school days)  because the syntax is just so different from C–in fact, VHDL is based on Ada.

So why the personal trouble with Ada?   Am I just not motivated enough?  Perhaps.  Honestly, I think the biggest hurdle for me with Ada is the constant reference to the ARM, the Ada Reference Manual, in Ada learning materials.  I understand that the ARM is a “contract” and Ada programmers should refer to it when it doubt.  However, it has to be the driest reading I’ve ever attempted–even my undergraduate electromagnetics textbook was more interesting! In “Ada for Software Engineers”, I can feel myself nodding off whenever a reference/quote is made to the ARM.

Perhaps the reverence for the ARM is the difference between Ada and other languages.  When I first learned C++, I learned little-by-little, and as I gained more experience and felt more confident in my ability to write C++, I could then attempt to read Stroustrup’s C++ book and Lippman’s C++ Object Model book.  I was at the level where I really could understand C++ and I could understand how it worked under the hood.  Perhaps I should try some other Ada books, I don’t know.

Nonetheless, I still toy around with the language during downtime.  I often wonder if there are there any interesting open-source Ada projects out there?  It always helps to see how a language is applied.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s