The debate over the top or ‘best’ programming language has been ongoing for a number of years and is renewed each time a new language or variant surfaces. When asked, some engineers will have a fervent response ready to this within a heartbeat, while others might be more ambivalent. According to this year’s IEEE Spectrum Rankings, taking in an average of various metrics into account; C, Java, Python, C++, and R rank within the top 5. This month’s TIOBE Index, on the other hand, favours Java, C, C++, C#, and Python. There has also been mention of new contender languages, Swift and Go, which have been gaining ground. This is a mere sample of the various spectrum of options out there. Presenting an answer to the question of which programming language is the best for the aerospace industry is far more complex than a set of rankings, especially when talking about safety-critical software.
Most will agree with the consensus that this is a multi-faceted issue with no definite answer. The ideal choice of programming language will depend on its intended purpose or utility, the industry it will be used within, the experience levels of the engineer or programmer at hand, the skillset of the available workforce and, possibly, the personal preferences of the individuals involved. It is no surprise that a lot of these factors come into play in the context of avionics development or within the aerospace industry at large.
Due to the prevalence of embedded systems development within the industry, one would think C, Java, Python, C++, and R (amongst the top 5 in IEEE Spectrum’s Embedded Systems category) play a crucial role. The truth is a bit further from this—systems used on aircraft have to conform to certain industry safety standards, with no room for error, and thus the importance of safety-critical code heavily influences the decision-making involved in language selection.
Avionics systems in Canada are held to the rigour of DO-178, and this standard states that code developed should be deterministic (with reproducible and predictable outcomes). Certain features or practices associated with a language (such as polymorphism, excessive use of pointers, inheritance, garbage collection etc) can hinder this, and thus, many popular languages at this time are not ideal in this particular area. Other factors taken into consideration when selecting a particular language include how a specific language handles error-detection, the ability of a language to interface with hardware or real-time systems, language portability, the existence of reliable compilers, linkers, and debuggers, and ease of testing. Some of the languages that are given some level of precedence within the industry are outlined below.
With its namesake being Ada Lovelace, the emergence of this language can be traced to 1980 and credited to the US Department of Defense. Ada is a language that is valued for its tendency to catch errors at compile-time rather than runtime, and its key safety-critical support features. For instance, Ada syntax favours the use of words rather than symbols which reduces the risk of errors via typos and enhances readability. It supports both object-oriented and non-object-oriented programming and works well for large-scale systems as well as low-level systems programming.
Possibly and probably the oldest language in use on this list, Assembly is a low-level language that materialized in 1949, and which exists in numerous forms that vary based on the processor of the machine it is run on. It is not known for being portable across different systems and often requires a programmer to have considerable understanding of a computer’s architecture. Assembly is the language closest to the actual machine code of a processor, and thus its favoured use in the past can be attributed to its perceived ‘clarity’.
Often championed as the ‘lingua franca’ of operating systems, C originated in 1972 and is heavily used in systems software programming. It is valued for its high-performance (particularly on large amounts or sizes of input), flexibility, and inexpensive compilers. Whether it can be described as a high-level or low-level language is a matter of debate, since it possesses a medley of high-level and low-level features (such as the support for bitwise arithmetic).
Developed with the goal of adding object-oriented programming features to C in mind, C++ emerged nearly a decade after C. Its current form is often favoured in embedded systems development, game programming, mobile and desktop application development, and anything related to hardware. Its design can increase the likelihood of non-deterministic or unused code (which can impede verification efforts), and some the features it offers (such as inheritance and polymorphism) are deemed unsafe, but this can be avoided by adopting certain coding standards during development.
FORTRAN is frequently associated with legacy products, and it has seen extensive use in the realm of science and engineering for several decades. It is favoured for use in the numerical processing of inputs and was introduced in the 1950s as an alternative to assembly, reducing the time taken to generate programs by multiple orders of magnitude. This language is one of the few from the era that are still acknowledged today.
Similar to FORTRAN, MATLAB is favoured for computations, and its purpose often involves the use of analysis of statistical or flight data, as well as the development of models and simulations in aerospace.
Python is relatively new compared to other languages on this list, but its current use is limited to non-safety critical software, as well for scripting. It is an open-source, object-oriented, high-level language known for its easy syntax, ease of learning, and concise code, and is often used in other industries for back-end development of applications and data analysis.
Do you have a favourite programming language? Is there one you’d like to see used more often in the industry? Tell us in the comments below!