These articles give the worst impression of Ada possible. It's not the it's a specialized language for the military, but a language created to cleanup the DoD's software nightmare of the 70s, which is not unlike the software nightmares of today. It just happens that they had a pretty good grasp, even at that time, of what helps make good software easier to write, large software projects easier to manage and maintain, and strong ideas about how much a language should intervene if the programmer is doing things that look pretty dumb.
Ada has a neat OO system (not like the Javas or C++s), built-in state-of-the-art tasking (since 1983!), ranged types (one of the things I can hardly bare to live without), but also simple things like switches that aren't useless and just a general appreciation for what a discrete type can allow you to do. It has generics, too, though I know they've been proven irrelevant by newer languages. Have you seen that new Java 8 date time stuff? It's playing catch up to Ada. Ada's numerics are, hands down, the best facilities of any mainstream language.
Most importantly, it's probably already available for your Linux distribution because it's a part of the GNU Compiler Collection, which means that it's on the commercial OS you've settled for, as well.
An out of print book that I always recommend to those who are interested in playing with Ada is John English's "The Craft of Object-Oriented Programming". Enjoy.
It's a seriously nice language --- it feels like a mature, well-thought-out C++ without a lot of the craziness and ancient edge cases. There are moments of sheer brilliance: the pointer scoping semantics mean that it's actually _syntactically invalid_ to leak pointers from an inner stack frame to an outer one. Its tasking and concurrency support is amazingly good. Having proper nested functions are amazing. The type system, while no Haskell, is easily good enough to say things like 'bounded array of tagged unions with length not known at compile time', with both compile and run-time error detection. And all this produces code that performs on a par with a modern C++ compiler!
Here's a multithreaded Mandelbrot renderer what I wrote: http://ideone.com/a1ky4l Note that each thread is a scoped object nested inside a function, communicating with each other via strongly typed and named messages --- startup and shutdown synchronisation happens automatically...
That's not to say there aren't warts; the OO system is pretty painful, with some annoying hidden requirements (e.g. you have to define a class' methods adjacent to the class structure itself, otherwise the compiler gets confused; if this is a requirement there should be explicit syntax for it). Having case insensitive identifiers is a complete failure. Exceptions are just plain clunky. There are a number of syntactic weirdnesses where the language got expanded beyond the original syntax' ability to cope. But the big omission is that there's no garbage collector, even though the language was obviously designed to have one. It would be so, so much nicer to write real code in if it had one.
Ada really deserves to be better known than it is.
I did the first couple years of my undergrad (starting 1990) in Ada. I liked the generics, although the lack of inheritance was peculiar for an OO language. As a Pascal programmer in high school, Ada was pleasant and familiar, but I quickly lost interest when I discovered Eiffel. Eiffel felt like what Ada should have been from the beginning.
I've not written a single line of either post-graduation.
"It's not the it's a specialized language for the military, but a language created to cleanup the DoD's software nightmare of the 70s, which is not unlike the software nightmares of today."
The nightmares aren't like each other, they are the same nightmare, just with the spooge scraped into slightly different piles.
Further, a language won't clean it up; that's going to take something seriously different. In fact, I suspect the spooge is irreducable past a certain point. I believe it is the nature of the problems.
That being said, Ada is a significant improvement over many others, in many cases for the reasons you describe.
"though I know they've been proven irrelevant by newer languages"
A non-free resource that I found very helpful in learning Ada was "Ada for Software Engineers" (http://www.springer.com/us/book/9781848823136). Although it covered Ada 2005, not Ada 2012, it otherwise has excellent coverage of the Ada feature set, with a focus on programming-in-the-large.
I was an Ada programmer for about 4 years in the aerospace industry.
I remember my last Ada project. It was run as a traditional 'waterfall' project (In the early 2010s). I sat in my hole (cubicle, in the very center of a massive cube farm) coding away on a simulation model for a satellite's attitude control system, while the other devs worked on their own modules in silence and isolation. Integration and testing was pushed all the way to the end of the project.
I was a scumbag contractor, hence I was not allowed to see the complete code base like the regular employees were, so I couldn't, say, do a complete build to verify my stuff worked (because some of the libraries I needed to build my module I wasn't allowed access to). So I was armed with the Ada compiler as one of my only tools (I just had to ignore the link errors. Though, I was able to code up a few tests for some of the algorithms I was able to isolate, even though unit testing was neither expected nor encouraged, as it did nothing to increase my SLOC numbers -- i.e., "wasting time").
I worked slowly and deliberately (getting constant flak for my SLOC numbers not going up fast enough -- and apparently if you ever reduce your SLOC, you've made negative progress), and at the end when I passed my code off to the 'build master' to my amazement my module built and largely just worked. I have to give credit to the language -- it caught a ton of stuff at compile time.
Suddenly I was no longer a slacker (Gee, thanks). At the end of that project I left and never touched Ada again. I now (probably unfairly) associate Ada with old-school waterfall-driven software development and dank, dark offices with flickering, soul-sucking fluorescent lights.
American programmers like to think they are engineers. German ones cannot because "engineer" is a legally protected title here and programming is not recognized as an engineering discipline.
I think that is justified by the way. Programming is a fad / fashion driven industry more than anything.
This is relevant here because whenever I look at Ada source code I hear synth pop. It is so 1980s. Sorry, maybe if Google or some other hip company took Ada, and simply changed the superficial appearance (i.e. syntax, identifier names) to look more 2010ish, gave it a cool name, and marketed it as the hot new thing it might go somewhere.
Sad fact is, whatever merits Ada has or does not have is completely irrelevant until that happens.
It used to be that only mechanical engineering was engineering. Now we have civil, chemical, electrical, et cetera. What is happening to software engineering is quite similar to what happened to other branches of engineering. The main difference is that the cost of producing software is usually dominated by design and labor costs (but not always). Before we had a grand tradition of aerospace engineering there were a couple bicycle manufacturers who strapped wings to their contraptions and tested them in a wind tunnel. The dawn of aerospace was all about fashion the same way you describe software engineering today: rock stars cavorting about the globe designing airplanes out of wood, cloth, and instinct, all to adoring crowds.
But the reason it seems like software is all about fashion is because you are browsing Hacker News. Hacker News is a fashion website for computer hackers, not unlike Wired but without its own articles. If you go look at actual software companies you will find a lot more reliance on well-researched tools and techniques. If you restrict yourself to places where other costs outweigh design costs, you'll see that it's much more familiar. Look at the software engineering effort for the STS, for example. Incredibly low defect rate.
> I think that is justified by the way. Programming is a fad / fashion driven industry more than anything.
I do not disagree with the latter statement, but for the most part I consider myself a software engineer. I have a degree in CS, and my approach to making components for our systems is very much engineer like. I design, develop, test, evaluate, modify, install, inspect and maintain a system where I have applied science and theory to make to solution work. I have not have the pleasure to work with hardcore mathmaticians yet, but I hope I will some day.
I agree that developers that never touch the backbone and algorithms probably aren't doing engineering, at least not in the theory and science way, but saying that no developer is an engineer is wrong.
Probably explains why Germany is such a powerhouse in software development NOT.
I do wonder about the effect of all the bright kids who would do CS/Computing in the USA/Uk instead want to work for Audi.
Rigid hierarchies do have down sides until recently get put on the vocational track in the German school system that was it you where on it for life and it was almost impossible to go from Aprentice-> Technician to Engineer.
In the US, the legally-protected title is Professional Engineer. I switched majors from CS to CS & Engineering because of the former was not accredited to allow becoming a PE, whereas the latter is recognized by the PE licensuring body. http://www.nspe.org/resources/licensure/what-pe
The only thing I remember about Ada is that it introduced exceptions (or maybe was one of the languages that spread it). Useful little tidbit since I like to keep a mental picture of what languages roughly influenced other languages.
+it has a military/secure programming background (and thus is inherently friendly towards proving/verification)
It was fairly widespread in Austria for a while (90s).
Never really used it and kind of expected it to be dead or only used in specific old systems. Interesting to see that there's a new version (I have to admit I'm still stuck on 95 and missed 2007 completely).
Edit: I think SAP generates roughly 1/3 of all European software revenue so that's already pretty major. Germany has always hovered around 50% of the European software market (last time I checked was a couple of years ago)
[+] [-] jmilkbal|11 years ago|reply
Ada has a neat OO system (not like the Javas or C++s), built-in state-of-the-art tasking (since 1983!), ranged types (one of the things I can hardly bare to live without), but also simple things like switches that aren't useless and just a general appreciation for what a discrete type can allow you to do. It has generics, too, though I know they've been proven irrelevant by newer languages. Have you seen that new Java 8 date time stuff? It's playing catch up to Ada. Ada's numerics are, hands down, the best facilities of any mainstream language.
Most importantly, it's probably already available for your Linux distribution because it's a part of the GNU Compiler Collection, which means that it's on the commercial OS you've settled for, as well.
An out of print book that I always recommend to those who are interested in playing with Ada is John English's "The Craft of Object-Oriented Programming". Enjoy.
http://www.adaic.org/resources/add_content/docs/craft/html/c...
[+] [-] david-given|11 years ago|reply
It's a seriously nice language --- it feels like a mature, well-thought-out C++ without a lot of the craziness and ancient edge cases. There are moments of sheer brilliance: the pointer scoping semantics mean that it's actually _syntactically invalid_ to leak pointers from an inner stack frame to an outer one. Its tasking and concurrency support is amazingly good. Having proper nested functions are amazing. The type system, while no Haskell, is easily good enough to say things like 'bounded array of tagged unions with length not known at compile time', with both compile and run-time error detection. And all this produces code that performs on a par with a modern C++ compiler!
Here's a multithreaded Mandelbrot renderer what I wrote: http://ideone.com/a1ky4l Note that each thread is a scoped object nested inside a function, communicating with each other via strongly typed and named messages --- startup and shutdown synchronisation happens automatically...
That's not to say there aren't warts; the OO system is pretty painful, with some annoying hidden requirements (e.g. you have to define a class' methods adjacent to the class structure itself, otherwise the compiler gets confused; if this is a requirement there should be explicit syntax for it). Having case insensitive identifiers is a complete failure. Exceptions are just plain clunky. There are a number of syntactic weirdnesses where the language got expanded beyond the original syntax' ability to cope. But the big omission is that there's no garbage collector, even though the language was obviously designed to have one. It would be so, so much nicer to write real code in if it had one.
Ada really deserves to be better known than it is.
[+] [-] stickfigure|11 years ago|reply
I've not written a single line of either post-graduation.
[+] [-] krylon|11 years ago|reply
Ranged types are awesome. Like I said, I did not use Ada a lot, but I have on a few occasions when programming in other languages missed them.
Also, the diagnostics the GNU Ada compiler gave me were a lot more helpful than anything a C++ or C compiler ever gave me.
[+] [-] mcguire|11 years ago|reply
The nightmares aren't like each other, they are the same nightmare, just with the spooge scraped into slightly different piles.
Further, a language won't clean it up; that's going to take something seriously different. In fact, I suspect the spooge is irreducable past a certain point. I believe it is the nature of the problems.
That being said, Ada is a significant improvement over many others, in many cases for the reasons you describe.
"though I know they've been proven irrelevant by newer languages"
Uh, what?
[+] [-] gmfawcett|11 years ago|reply
[+] [-] ble|11 years ago|reply
Is it wrong to read this sentence as snarky?
[+] [-] endgame|11 years ago|reply
[+] [-] jcadam|11 years ago|reply
I remember my last Ada project. It was run as a traditional 'waterfall' project (In the early 2010s). I sat in my hole (cubicle, in the very center of a massive cube farm) coding away on a simulation model for a satellite's attitude control system, while the other devs worked on their own modules in silence and isolation. Integration and testing was pushed all the way to the end of the project.
I was a scumbag contractor, hence I was not allowed to see the complete code base like the regular employees were, so I couldn't, say, do a complete build to verify my stuff worked (because some of the libraries I needed to build my module I wasn't allowed access to). So I was armed with the Ada compiler as one of my only tools (I just had to ignore the link errors. Though, I was able to code up a few tests for some of the algorithms I was able to isolate, even though unit testing was neither expected nor encouraged, as it did nothing to increase my SLOC numbers -- i.e., "wasting time").
I worked slowly and deliberately (getting constant flak for my SLOC numbers not going up fast enough -- and apparently if you ever reduce your SLOC, you've made negative progress), and at the end when I passed my code off to the 'build master' to my amazement my module built and largely just worked. I have to give credit to the language -- it caught a ton of stuff at compile time.
Suddenly I was no longer a slacker (Gee, thanks). At the end of that project I left and never touched Ada again. I now (probably unfairly) associate Ada with old-school waterfall-driven software development and dank, dark offices with flickering, soul-sucking fluorescent lights.
[+] [-] monocasa|11 years ago|reply
http://www.folklore.org/StoryView.py?story=Negative_2000_Lin...
[+] [-] copx|11 years ago|reply
I think that is justified by the way. Programming is a fad / fashion driven industry more than anything.
This is relevant here because whenever I look at Ada source code I hear synth pop. It is so 1980s. Sorry, maybe if Google or some other hip company took Ada, and simply changed the superficial appearance (i.e. syntax, identifier names) to look more 2010ish, gave it a cool name, and marketed it as the hot new thing it might go somewhere.
Sad fact is, whatever merits Ada has or does not have is completely irrelevant until that happens.
[+] [-] dietrichepp|11 years ago|reply
But the reason it seems like software is all about fashion is because you are browsing Hacker News. Hacker News is a fashion website for computer hackers, not unlike Wired but without its own articles. If you go look at actual software companies you will find a lot more reliance on well-researched tools and techniques. If you restrict yourself to places where other costs outweigh design costs, you'll see that it's much more familiar. Look at the software engineering effort for the STS, for example. Incredibly low defect rate.
[+] [-] pjmlp|11 years ago|reply
Besides, Ada is actually being used a lot in high integrity systems, just not on the Facebook clone of the month.
[+] [-] rpcope1|11 years ago|reply
Seriously though, I agree with you on the first part, we throw the title engineer around a lot more than we should on this side of the pond.
[+] [-] hvidgaard|11 years ago|reply
I do not disagree with the latter statement, but for the most part I consider myself a software engineer. I have a degree in CS, and my approach to making components for our systems is very much engineer like. I design, develop, test, evaluate, modify, install, inspect and maintain a system where I have applied science and theory to make to solution work. I have not have the pleasure to work with hardcore mathmaticians yet, but I hope I will some day.
I agree that developers that never touch the backbone and algorithms probably aren't doing engineering, at least not in the theory and science way, but saying that no developer is an engineer is wrong.
[+] [-] mauricemir|11 years ago|reply
I do wonder about the effect of all the bright kids who would do CS/Computing in the USA/Uk instead want to work for Audi.
Rigid hierarchies do have down sides until recently get put on the vocational track in the German school system that was it you where on it for life and it was almost impossible to go from Aprentice-> Technician to Engineer.
[+] [-] trimble-alum|11 years ago|reply
[+] [-] wyager|11 years ago|reply
[+] [-] Dewie3|11 years ago|reply
[+] [-] kriro|11 years ago|reply
Never really used it and kind of expected it to be dead or only used in specific old systems. Interesting to see that there's a new version (I have to admit I'm still stuck on 95 and missed 2007 completely).
Edit: I think SAP generates roughly 1/3 of all European software revenue so that's already pretty major. Germany has always hovered around 50% of the European software market (last time I checked was a couple of years ago)
[+] [-] pjmlp|11 years ago|reply
[+] [-] jeff_carr|11 years ago|reply
Haha. Did I just take some acid and end up back in 1973. That would be cool if this is true. Now I can really see Pink Floyd live.
[+] [-] snom320|11 years ago|reply
[+] [-] progman|11 years ago|reply