Background
Last year, I did an internship in a physics research group at a university. In this group, we mostly used LabVIEW to write programs for controlling our setups, doing data acquisition and analyzing our data. For the first two purposes, that works quite OK, but for data analysis, it's a real pain. On top of that, everyone was mostly self-taught, so code that was written was generally quite a mess (no wonder that every PhD quickly decided to rewrite everything from scratch). Version control was unknown, and impossible to set up because of strict software and network regulations from the IT department.
Now, things actually worked out surprisingly OK, but I have been wondering how other people in the natural sciences do their software development. Is there anyone around here with experience in that field?
Questions
Some concrete questions:
- What languages/environments have you used for developing scientific software, esp. data analysis? What libraries? (E.g., what do you use for plotting?)
- Was there any training for people without any significant background in programming?
- Did you have anything like version control, bug tracking?
- How would you go about trying to create a decent environment for programming, without getting too much in the way of the individual scientists (esp. physicists are stubborn people!)
I realize this is a rather broad question, but I do think it'd be interesting to gather some experiences here. I'll try to summarize things later on and perhaps change this into a wiki-style topic.
Summary of answers thus far
The answers (or my interpretation of them) thus far: (20081011)
- Languages/packages that seem to be the most widely used:
- LabVIEW
- Python
- with SciPy, NumPy, PyLab etc. (See also Brandon's reply for downloads and links)
- C/C++
- MATLAB
- Version control is used by nearly all respondents; bug tracking and other processes are much less common.
- The Software Carpentry course is a good way to teach programming and development techniques to scientists.
- How to improve things?
- Don't force people to follow strict protocols.
- Set up an environment yourself, and show the benefits to others. Help them to start working with version control, bug tracking, etc. themselves.
- Reviewing other people's code can help, but be aware that not everyone may appreciate that.
Onno (a self-taught programmer and stubborn physicist myself.)