I use a variety of different programming tools. I work in multiple programming languages so it makes sense for me to keep code snippets that I like in one location. I have somewhat of a complicated development environment since I work both on a cluster and on a personal computer. Normally I would get rid of a Windows environment completely, but I have to do documents in Microsoft Word instead of LaTeX.
I use a variety of operating systems so the tools that I choose are often available on different platforms. Currently, I have way too many different computers: a fairly new two monitor Windows desktop, a fairly old Linux desktop, an new Apple MacBook Pro, and a fairly new Windows desktop.
I find that the use of Microsoft Office software is somewhat unavoidable which is unfortunate because I prefer to use LaTeX to write documents. However, most of my computational work is done on Linux based MPI clusters so I prefer to do software development on an operating system that is Unix-like (Linux/Apple OSX).
MATLAB is a mathematics program that is built around matrix libraries. It's a highly level development environment which makes an ideal environment for developing algorithms quickly. However, outside of academia MATLAB is quite expensive, and I use an open-source alternative Octave on my Linux workstation. However, Octave isn't generally available on production supercomputer clusters.
http://www.mathworks.com/products/matlab/
https://www.gnu.org/software/octave/
Cluster Environment
Although I have a personal computer, I share work on computing clusters at the University of Florida in the Materials Science Department. My research group is The Florida Laboratory for Materials Engineering Simulation (FLAMES) which units the work of Prof. Simon Phillpot (my advisor), Prof. Susan Sinnott, and Prof. Richard Hennig. Within our group we have three computing clusters:
Many tutorials assume that the user has administrative rights on the server that they are using. This is not the case in FLAMES since many people have modified computational software for the specific research application. As a result, many of the tutorials here assume only access to the necessary compilers and libraries.
Since my work is split between three different clusters, I have similar directory structures on each cluster to make life easier on myself.
I've used version control systems in the past, but I've normally had control of the system. Getting with modern times, I'm using a free, cloud based version control service called GitHub, which uses git as the front end for the version control system. Git is a free and open source version control system. I publish scripts, input files, and code which I wish to share with other people to GitHub.
So I work out of a root directory on a cluster where admin support is fairly weak. As a result, I've had to figure out how to do a lot of this stuff while working out of a shell environment. I currently use the Anaconda distribution for python support. It's a fairly standard distribution and is supported at NERSC.
Fortran is the default programming language of the research group I belong to.
I prefer the C++ programming language but I may not be able convert my code in decent C++ code.
I like using gnuplot of unix system to create graphs.