QUESTION: I would like to know the kind of computer programming language you are using to create models, software programs, etc.? Is FORTRAN still a good computer programming language or is it being replaced by C and C++? ANSWER from David Saunders on April 1, 1998: The bulk of scientific applications such as Navier-Stokes flow solvers and numerical optimization packages continue to use FORTRAN 77 and (now) Fortran 90. Graphical applications such as flow vizualization packages and some grid generation packages tend to use C. I don't think C++ has made many inroads into the scientific world yet--it tends to be the choice for modern networking and real-time-type applications. The main limitations of FORTRAN 77 are its lack of composite data structures and its inability to allocate memory dynamically, meaning work-space has to be declared with some maximum size and if a case being run exceeds those limits then the program has to be recompiled and relinked with larger limits first. Fortran 90 does allow dynamic memory allocation and composite data structures, among other valuable features. Since it is a superset of FORTRAN 77, it is allowing scientists and numerical analysts to improve existing software as the needs arise, and write new applications more conveniently, while still making use of their older software without significant changes. There is an enormous legacy of existing FORTRAN in the scientific world, translation of which to some other language (for whatever reason) is essentially out of the question. Thus some form of FORTRAN will continue to be used indefinitely, and the current Fortran 90 incarnation is an excellent, powerful language that is still straightforward to learn and use. Those with a higher tolerance for cryptic code and "elegance" as apparently defined to be the fewest symbols performing the most work tend to like C for some of its powerful features (a variety of pointer types, operators, and data structures). The object-oriented technology of C++ is by all accounts even more difficult to master, but evidently pays off by enabling the proliferation of extremely elaborate software we see in the PC world today. It is also possible on most systems to combine software modules written in different languages. For instance, a modern graphical user interface might be written in C for an existing scientific package written in FORTRAN, which would not necessarily have to be translated. Translations can be hazardous. For example, FORTRAN has always stored matrices by columns (that is, for elements (i,j) of and m x n matrix A, the elements A(1:m,j) for a given j are contiguous in memory, and this fact is (or should be) kept in mind at all times for efficiency reasons. Perversely (?), the authors of C chose to order the elements the other way (by rows). People have written software to automate such translations, but the results tend to be not pretty, and possibly unreliable. Each language has its place. My bias towards Fortran 90 will be evident, because I work on numerical applications where it is proving a pleasure to use. Graphical interfaces have not been required in my work, but there is no doubt they are becoming generally desirable in this age of information technology. Learning more than one software language would be wise, as long as you are able to apply them regularly so as not to forget what you have learned. I hope this answers your question. Today's opportunities for competent software engineers appear more varied and interesting (and challenging) than ever. ANSWER from Opal Lemmer on April 1, 1998: Fortran is a wonderful language for mathematical equations and many programs use this language. However, more and more programs that do mathematical computations are written in C and often the newer systems don't have a Fortran compiler. One reason for this is that C goes well with the Unix operating system. Another reason is that programmers like C and the Universities use this and it would be hard to get a new programmer to come to work in a place where the programming was done in Fortran. So I think a young person should really concentrate on learning C. C++ is a little more complicated but is especially useful for graphics programs. Also, it allows systems to be changed very easily. Perhaps you have heard that maintaining software is more costly than writing it. Often a programmer writes some little test program just to use himself and people like it so well it becomes widely used. Well, he probably wasn't very careful to make it general and changes have to be made. Another good example of the problems that arise is the big fuss over the year 2000. So anything that makes changes easier is a good thing. One of the big wind tunnel systems at Ames Research Center uses C++. One of the problems they had was that all of the programmers were Fortran programmers and had to learn C++. However, just because C and C++ are the big languages now does not mean that will be the case a few years from now. You have to be willing to learn new things all the time. The important thing to recognize is how much is common between the languages. It is quite easy to learn a new language if you already know one well. Some old Fortran programmers who learn C write C that looks like Fortran. In mathematical equations this could be a good thing because one problem with C is that it lets programmers write code that is very hard for another programmer to read. I am sorry to say that there are some programmers who just love to write that kind of code. Their supervisors have to watch this very carefully.