Does anyone know a of a distribution of programming language usage over scientific domains?
Thanks!
Does anyone know a of a distribution of programming language usage over scientific domains?
Thanks!
I've heard FORTRAN and ADA are still very popular for high-throughput numerical calculations that need to run on "big iron" supercomputers.
Otherwise C++, usually using a visualization/plotting library on *nix, made popular by the availability of cheaper beowulf clusters to replace the old mainframes.
I think Java, Python, C#, F# (for it's parallelization features) and other high-level languages are starting to make some inroads as well, as more of this work can be done directly on a single high-performance multi-core workstation.
My guess is that in the future it'll be C/C++ again, using the GPU-access libraries provided by nVidia/ATi.
But this is all anecdotal.
Matlab (and equivalents) are still quite popular in radio engineering. You really need to be more specific with your question though -- "science" is so broad that it's almost like asking which kinds of shoes are most popular in Europe.
EDIT: Based on your comments I suggest the TIOBE Software Index as a starting point, although it is not restricted to scientific programming.
EDIT: Here's another link to a DoD study. Not sure what date.
Fortran, SAS, C, Java. It really depends on the type of science, and what you're doing with it. Fortran kicks around because of legacy code that just gets added to instead of replaced. SAS and Matlab for math-based programming. C for intensive processing, especially with the increased amount of use of parallel processing. Java for quick and dirty applications that may require a GUI (and because you can find lots of undergrads who can write you programs in Java).
Some of the more complicated (in terms of data processing) problems make use of distributed solutions like MPI. Things like Boink show up as well.
Python seems to be used a lot in numerical computing and simulation (I've seen a couple of case studies involving simulation of weather patterns). It's still pretty new for scientific use, but I've seen it progress over the last few years.
In my experience of soft-matter physics, lots of FORTRAN, more recently C/C++ and Matlab / IDL. I understand Python is being used a bit more nowadays.
Scientific computing covers quite a range of sins, there are people who need serious computing power but it isn't necessarily the case.
What comes to my mind now is:
Perl is used in a lot of sciences because it is easy to make it fit just about anything.
One example is Bioinformatics to map DNA sequences. I'm sure google will have some examples, and I know there are books specifically addressing Perl's usage for DNA.
EDIT:
I forgot to mention PDL, the Perl Data Language. It is used for many different sciences, they have a Success Stories page with some examples.
Mathematics academics tend to use Fortran, Matlab, Maple, and Mathematica.
From my experience in Physics, it seems to be C, Matlab, Mathematica and FORTRAN.
In Electrical Engineering, Matlab is very common. You'll also see a lot of VHDL (a hardware design language). If you consider PSPICE to be a language, then you've got that too :) Then there's the typical embedded systems languages like assembly of all kinds, C, BASIC. Maybe some perl to glue various things together (a lot of old time EE's are from the mainframe days and use *nix a lot)
I also know of Biomedical Engineering using LabView a lot. I guess that might count as a programming language. I think LabView is used a lot in the biological sciences, probably because it is ostensibly easy to use.
Perl is definitly the language of bio informatics. It is heavily used in the "Human genome project (HGP)" as mentioned in this GTAC video (around 3'23)
See this too "How perl save the Human Genome Poject" and bioperl website. You can find more on perl & bio in books from an editor that is known to put black & white pictures of animals on the covers of his books (guess who, no ad)
You'll find some relevant (but not identical) information in http://stackoverflow.com/questions/38239/practices-for-programming-in-a-scientific-environment.
Hey, don't forget R for statistical computing:
R got a good article in the NYT recently.
It depends on usage, but:
Fortran for hard-core (mainly because of the math libraries coded in it).
SPlus/R/SAS for statistics
Matlab for linear algebra
NONMEM for population-based pharma modeling
C/C++ is up-and-coming, largely due to Numerical Recipes in C book.
If you are having to choose between Fortran and C/C++, be aware of the pitfalls of Fortran. Supported compilers are becoming hard to get. Fortran is full of dangerous anachronisms, like the "stop" statement, common blocks, and implicit declarations.
The common belief that Fortran is faster than C is only a myth. It can only make a difference in hotspot code not calling functions (i.e. matrix inverse), and in true apples-to-apples comparisons it's hard to find a consistent difference.
Also, if you need to use the math libraries, they can be called just as easily from C/C++ as from Fortran.
Here at the University Of Florida, within the Mech + Aerospace it's
Matlab - for almost everything: from astrodynamics, aerodynamics to acoustics
Labview - for control/simulation
Fortran - on the cluster
but they teach c++ ...
In Astronomy/Astrophysics, IDL (Interactive Data Language) is used a lot. I've also seen a fair amount of FORTRAN. Java and C get some use. Python seems to be growing. Perl was popular 5 to 10 years ago, but seems to be waning.
In Biology Perl seems to be the most used language (see BioPerl : http://www.bioperl.org/). Blast, the major software used in genetics was writtern with C : http://www.ncbi.nlm.nih.gov/IEB/ToolBox/C_DOC/lxr/source/demo/blastall.c 20 years ago.
But many other languages are used: java, C,... Python seems more and more used
Most (bio)-statisticians use R.
The "Bioinformatics Career Survey 2008" http://openwetware.org/wiki/Biogang:Projects/Bioinformatics_Career_Survey_2008 contains a list of the languages used by numerous bioinformatician.
In financial mathematics (whether this is actually science, theology or just a scam it's up for debate) people use Matlab quite a lot.
In Europe I have seen mainly Matlab, Maple and LabVIEW in research. All three products are actively pushed on Universities with student licenses. Data acquisition is most of the time done LabVIEW or instrument-supplied software. Matlab is quite used for number crunching and plotting. Advanced data analysis seems to be preferred with Maple.
My experience is that institutes don't change easily of their preferred programming language, if you want to use your programming skills inside such institutions I would learn these languages.
Ton
Symbolic computing: Agda, Coq, Isabelle, Minlog.
The latter three are not programming languages in the precise sense but proof assistants. They can be used for writing specifications of programs. However, one can extract specifications written in Coq as text written in one of a few programming languages. The languages of extraction supported by Coq are Ocaml, Haskell and Scheme which are also good at symbolic computing.
There is an "emerging" trend in dependently typed programming languages (e.g., Agda). These are meant to supercede proof assistants at some stage.
FORTH, mostly due to Chuck Moore, was used extensively in astronomy for telescope control and data acquisition.
Perl is a very popular language for Bioinformatics, because string parsing in Perl is very easy and data files are often made up of strings.
Python is gaining a lot of traction in Bioinformatics because it requires you to be more structured in your coding, and many people in computational biology are not well-trained in software engineering principles.
FORTRAN is very popular in fields like physics, chemistry and biochemistry and because many of the computational problems in this field are trying to solve big math problems using computers.
R is becoming very popular in statistical research, because it is has several useful tools available (such as optimization of arbitrary functions), and it can make reasonably nice graphics.
Chemistry has several subdisciplines, each of which has its own approaches.
In computational chemistry (quantum mechanics and molecular dynamics) FORTRAN has been used for about 40 years. Many of the codes are very large and would be very expensive to port. Much of the emphasis is on performance and so new evrsions are often produced for different architectures (e.g. 64-bit, multicore, etc.) Many calculations scale horribly (e.g. N^4 where N is the number of atoms, and often require parallel language libraries (e.g. MPI)).
In chemical informatics (much of which attempts to relate chemical properties to structure) the interactive approaches are mainly based on Java, C++ and with Python becoming popular. C# is not widely used in academia yet (though we are doing so) but we believe that a significant amount of commercial software uses C#. However the architecture of commercial apps are often kept fairly secret.
There are also machine-learning applications which often use existing libraries such as R, MATLAB, Weka and Octave.
There is a highly active Open Source community - see http://www.blueobelisk.org)
Scientific Computing - e.g. fluid dynamics - Fortran, C, C++
AI - Lisp, Prolog
Algebraic Specification - SDF+SDF, Maude
Experimental Mathematics - Mathematical, C
Language Theory - Prolog (especially the Definite Clause Grammar feature)
LISP has been and always will be popular for a very large variety of very specific things. You can learn more about it's use in the book SICP.