The F-35 jet fighter is programmed using what??

It’s funny to read about the F-35 Lightning II jet fighter. It may be an example of a colossal project development  failure. Read this article “Meanwhile, the F-35 is still a train wreck“… a projected US$1.3 trillion train wreck. Why is it so bad? If has often been pointed out that it suffers from software problems. Of course this is all speculation, but considering how many years planes have been flying, it can’t really be the planes superstructure. So what’s the problem? Too much software? Inexperienced programmers? OR maybe it’s the programming language being used.

The project for the Joint Strike Fighter, was supposedly the first DoD project which allowed the use of C++. Now for those that know the background to programming languages in the DoD, you will understand what a big issue this might be. DoD spent a LOT of effort in the design of Ada for exactly these kind of projects. So why not use Ada? I mean real-time systems are it’s thing – it LIVES for them. Ada is extensively used by Boeing, 99.9% of the code in the Boeing 777 is Ada. It may be because software written in Ada would be too costly? Or maybe there are too few Ada programmers. According to report on the net, the majority of the code is written in C/C++, with only 5% written in Ada.

C++ is not a bad language per se. It’s just, well kinda suffers from bloat. In the words of Richard E. Gooch, “It seduces the programmer, making it much easier to write bloatware“. This is somewhat of a concern when developing embedded and real-time systems. In addition, as early as 2002, the Certification Authorities Software Team (CAST)  identified common problems with C++ in DO-178B-compliant applications including compile and run-time issues (the FAA recommends using DO-178B as the vehicle to demonstrate that software is airworthy). There are issues such as dynamic memory allocation in C/C++, which is forbidden, under the DO-178B standard, in safety-critical embedded avionics code. Some of the concerns with D)-178B have to do with the OO features of languages such as C++. Examples include: the overuse of inheritance, particularly multiple inheritance, which can lead to unintended connections among classes, and ambiguity resulting from Inheritance, polymorphism, and operator overloading through dynamic or run-time linkage.

There was once an attempt to create an embedded version of C++ known as “Embedded C++” (yeah, go figure). It basically chopped out multiple inheritance, virtual base classes, templates, exceptions, runtime type identification, virtual function tables, and mutable specifiers. But Stroustrup didn’t exactly like it, expressing that “To the best of my knowledge EC++ is dead and if it isn’t it ought to be” in 2004.

Is C++ better than Ada? It is hard to say. Is Java better than Cobol? Some legacy Cobol code has been translated to Java – does it work, sure. Is it the best idea – who knows? The bottom line is that many programming languages are well suited to the task they are designed for, so why change them? Ada is well suited to tasks involving real-time systems, largely because it was designed that way from the ground up.

Diversity in programming languages is a good thing. Use the one that best suits the task at hand.

For those who are interested, the C++ Coding Standards for the Joint Strike Fighter, can be found here.


Internet of things? It’s probably foolhardy.

The internet of things. That’s where a physical object that is somehow “smart”, communicates with other objects. For example, a fridge that reminds its owner to pick up milk via their smartphones as they pass a supermarket, or a self-governing HVAC system that tracks weather via a weather station and modifies climate control accordingly. It may all seem like a neat idea, I mean let’s put a chip in everything. We could make Lego kits that build themselves, or I could put an embedded system in my apricot tree to notify me when one of those thieving squirrels is raiding the tree.  But the reality is that we don’t need this level of pervasiveness in our lives. Yeah, sure it would be neat if my fridge warned me when something was nearing its expiry date, but in order for this to work I have to scan things as I put them in, or have the fridge keep track of it but adding yet more complex technology to it. But this also means that fruit and vegetables would have to have a bar code as well. Will the fridge have some sort of olfactory sensors to tell when food is going off? Look, at the end of the day, a fridge keeps food cold. It doesn’t need to do anything else. More intelligence means more complexity, and a greater likelihood of problems occuring.

Do we need this many devices connected to the Internet? Do I need my washing machine connected? My toaster? Do I need to be providing the manufacturer with a whole slew of data on my clothes washing habits, or what bread I toast? The simple answer is NO. Because it’s all about “Big Data” – companies collecting data about your consumer habits. If you believe its designed to actually help you, you’re kidding yourself.  The more things that get connected, the bigger the security risk. Anything has the potential to be hacked.


I like programming, and computers do some cool things for us. But they don’t need to run our lives the way they do. We spend too much time in front of the machine, and not enough time actually thinking. There was a time when I thought about putting in a smart thermostat, but when Nest had that issue with the “hand-waving” algorithm in their smoke detectors, and just remotely switched the algorithm off, I thought otherwise. What if they could remotely switch off my furnace? It is all too big-brotherish, so I’ll stick with simplicity for the moment. My refrigerator isn’t going to be any less efficient because it is “dumb”. In fact knowing how badly tested some of this software is, I’m okay not having it in my house.

Every once in a while we should realize that there is a world around us, go outside, and experience it. Not automate it.

P.S. As food for thought, the average modern refrigerator has a lifespan of 10-18 years, due largely to lack-of-quality, and the ubiquitous “built-in obsolescence”. There is at least one fridge in the US which is 87 years old and still running. So modern refrigerators are more efficient, but I need to buy more of them over time because they don’t last as long. Go figure.