I'm at a point in my Mathematica journey where I need to be a little bit more strategic about my coding. Presently, I have a bunch of notebook files organized using the filesystem of the OS and tossed on to a cloud drive (Ubuntu One, Google Drive, whatever) so that I have access to the code from the 3-4 machines upon which I use Mathematica.
Since I'm not a programmer by trade, I suspect a number of the following questions will be fairly generic, but since we've discussed using Mathematica as a first language (multiple times) my issues may arise with other relatively new users of the software.
I am trying to address the following concerns:
- What are some best practices for maintaining notebooks and packages across multiple computers?
- How does one effectively implement version control for notebooks?
- What strategies are useful for managing tasks in large projects?
- How can packages be distributed efficiently, especially to a user-base that may have limited Mathematica knowledge.
Multicomputer use: As alluded to above, I'm using a cloud service to maintain my notebooks; however I've run in to syncing problems enough times that I wonder if there aren't better solutions. I understand that CVS is an option for team-based programming, but I've never used this system before, have no prior knowledge of how hard it is to set up a server, and wonder if this would be overkill for projects that are effectively written by me on multiple computers. My experience with git is limited to downloading the SEUploader and getting scared away by rm-rf's answer to using git.
Version control: I have no idea how to do this properly. Presently whenever I start a project, I name it project-v01.nb and move on from there. I arbitrarily change the version number, typically when my cloud drive service throws a syncing error. There's not a chance in the world that my current system can provide differences between versions.
Task management: In an ideal world, I would finish every project at one, uninterrupted sitting. Presently I've tried two approaches: I use the heading styles of a notebook to create a type of outline. These notebooks get convoluted quickly because they are a mix of project design and project application. I then thought to move the project design components to a new notebook, which I named currentproblems-v01.nb. Then, like bunnies, currentproblems-v02, v03, ... popped up. I have no idea which current problem is, uh, current.
Distribution: I suspect other programmers have delusions of grandeur as well, thinking that their code will be used by millions. At the very least, I'd like to port my projects to the computers used by my research students, who have to use my code or I can fire them... I suspect this will involve using the Wolfram Workbench, but then I've heard some folks prefer Eclipse. I don't have a preference since I've used neither; I think the only real requirements of the software are (a) make my life easier and (b) maintain development so I don't become dependent on abandoned software. I envision creating notebooks and packages that undergraduate students (in Chemistry) will use in research and the classroom. Given that my students (the first-years, anyway) will have limited experience with Mathematica, I wonder if asking them to install packages is the best option to distribute code.