What programming languages are used in (chaotic) dynamical systems and nonlinear phenomena research? I'm currently considering pursuing postgraduate studies in the field of chaos/dynamical systems/nonlinear phenomena, and was wondering whether there are particular programming languages that are favoured when doing such research. Are there any that stand out in particular that would come in handy? C, C++, Python, Haskell?
I have taken one-term courses in Java and MatLab programming, so I know the basics of programming, but I haven't really programmed much or at all outside of the courses themselves. So I figured it might be useful if I also picked up a language that I'd actually use in grad school, prior to actually getting there and having to learn it on the fly.
 A: I don't know if there any special "favored" languages in this area, but I suspect that the answer is "no". In any given discipline, you will typically find people using an assortment of different programming languages to explore ideas. In many cases, people choose a particular language just because it's one they already know, not because it's especially well suited to the problems at hand. As the old saying goes -- "when your only tool is a hammer, every problem looks like a nail"  :-)
If you're going to learn a new language, here are a few criteria to consider:
(1) Pick one that's "mainstream", rather than some special niche language. So, pick C++, or C#, or Java, or Matlab. Maybe Mathematica. Maybe Python. Not Haskell. That way, the knowledge you gain will be more broadly applicable. It might help you get a job, at some point, for example.
(2) Pick one that is well suited to your problem domain, to make your life easier. So, for dynamical systems, I would expect that Matlab and Mathematica would be good. Python would be good, too, because you have access to the NumPy package. C++, Java, and C# might involve more work, depending on what helpful libraries you can find (there are many, but their quality varies greatly).
(3) Personally, the only reason I ever use C/C++ is when I want my code to run as fast as it possibly can. Unless performance is the main concern, C/C++ are just too much trouble, IMO.
The criteria are conflicting, of course, and only you can decide which ones are important to you.
A: This question is difficult to answer, because any answer is too broad for the particular problems you will face. With that in consideration, the approach I suggest is the one programmers use for software development:
Cascade from highest level (e.g. Mathematica and Matlab), down to lower levels (e.g. C/C++), in this order. You should only switch to a lower level when you know that a higher level language is not suited for your needs, either because lack of functionality or speed.
The main motivation is that, given the same programming time, higher level languages have broader applicability and faster development than low level languages. This is of course restricted to the languages you are comfortable with.
If you plan to learn a new language, as Bubba correctly pointed out, pick a mainstream language such as (in my personal opinion):


*

*Mathematica

*Python

*C/C++


ordered from higher to lower level.
