D H said:
Aerospace engineering deals with what must be extremely reliable (six nines) and yet highly computerized systems.
Let's just cleanly separate things here.
Of course, extreme reliability must be a property of key in-flight software. I don't really know what this kind of software is typically written in, but indeed Ada was designed with special considerations for reliability. To achieve this,it puts higher than average constraints on how to do things on programmers, and hence belongs to the category of the so called "bondage and discipline" languages. These comments about Ada are just to point out that writing high-reliability (e.g. flight control) software is niche in any engineering field (even aerospace), and one is not likely to stumble upon it casualy.
The other, prevaling kind of programming that an engineer will typically encounter, is custom software used in various stages of design and development, written for personal use, or developed in-house. This kind of software has no particular need for reliability, as long as it can be coerced into producing verifiable results. Much more important here are rapid development and ease of maintenance. I like to think of this as new emerging engineering culture -- once there were sliding rules, then hand-held calculators, followed by clunky spreadsheets, and now programming at large should come. A motto: Never make a computation around which you cannot wrap a loop.
z-component said:
I'm trying to get an idea on which languages I should expose myself to throughout my university career, and I'd like to use this summer to investigate some of those languages.
I'd say this falls under the "programming at large" concept above, so to that end I would suggest three things:
- Last-line, heavy-duty number cruncher: C/C++ and/or Fortran
- A computer algebra system (CAS): Matlab
- General purpose scripting language: Python
The number cruncher is there for computations which need raw speed. Also, they are still holding out as primary tools for writing bigger pieces of in-house software, and most existing computational codes are written using them. I would say that the choice between Fortran and C/C++ here depends on personal preference, and what you happen to be working on. For example, so far Fortran has bypassed me, but by a narrow margin. (In case you wonder, pure C is mostly a subset of C++, but one does need to know which subset and the practice of using it, so I lump it as C/C++ rather than just saying C++).
CAS are excellent for any own computations and actually any computation that does not require the raw speed. They may also be a less wieldy for planned developer cooperation (revision control, etc.) needed for larger codes, but don't take me on this. I relied on them heavily during my university days. Matlab seems to be the most ubiquotous of CAS, so I recommend that one.
General purpose scripting languages are the workflow glue. They can be used to link several computational tools together in an automated chain, and generaly help with any computer-related service tasks. Python is highly touted for its cleanliness (something not granted for scripting languages), has large base of usefull add-on modules, and among these some specifically numerically oriented.
Finally, the particular choices that I listed in these three categories, either are free or have free implementations (as in zero cost, source code), and exist for any imaginable and unimaginable computing platform. I hold these to be very important qualities.
--
Chusslove Illich (Часлав Илић)