Ada 2012: A New Language for Safe and Secure Software (2012)
cotsjournalonline.com
cotsjournalonline.com
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...
I've not written a single line of either post-graduation.
Although Ada seems to be quite well in high integrity systems. At least that is my perception from the, now regular presence, at FOSDEM and European safety conferences.
...although the lack of inheritance was peculiar for an OO language
I almost see that as a feature. ;)Edited because I was misleading about the introduction of OO.
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.
http://www.adahome.com/History/Steelman/steeltab.htm http://www.adahome.com/History/Steelman/intro.htm
Is it wrong to read this sentence as snarky?
Honest question, honest answer: yes. Dry humor maybe.
The reason why my snark detector passes this one is because there is no reason for the author to be snarky here.
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?
> Uh, what?
Sarcasm, presumably; cf. Golang.
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.
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.
http://www.folklore.org/StoryView.py?story=Negative_2000_Lin...
I do remember entering a negative number one week on the manager's "status spreadsheet (an excel spreadsheet on a network share that he asked everyone to edit)" next to my name. Of course he came by asking for an explanation, and if memory serves had me enter the number of lines deleted as a positive number, so that the 'metrics' he reported up the chain didn't look bad.
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.
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.
Besides, Ada is actually being used a lot in high integrity systems, just not on the Facebook clone of the month.
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.
Well, that's enough for ISO 9001, so that should be enough for engineering, right?
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.
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.
Berlin is one of the better non-SV startup locations from what I hear.
I'm not very familiar with any of the other examples you mention, but, uh,....
Have you ever gone anywhere near SAP?
There's some cultural indicators that programming is a topic of interest as well (the existence and size of the CCC for example).
The quality expectation is a bit higher than what other countries are willing to accept.
I'm sure if you really want to sw development you would probably be better of working in USA/Uk than at Audi. Working on a direct competitor in germany, and I'm knowing the situation of the industry in the meantime quite well.
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)
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.