As mathematical models grow larger and more complex they become harder to
analyse and understand.
Once a model is sufficiently complex, the likelihood of someone being able to
replicate its behaviour based on the model description in a publication
becomes negligible.
Making the model source code available is necessary but insufficient to render
a model comprehensible, hence the proliferation of
semantic markup
languages and
detailed
guidelines to describe models and *in silico*
experiments.

The importance of clear, concise and helpful documentation is also
paramount to ensuring a
published model and the accompanying simulations are sufficiently
well-described that the published results can be replicated independently of
the original model implementation.
It can be hard to write good
prose
and to *teach* the user rather than simply
telling them what to do.
That’s why it’s important a have good editor; only edit the documentation
yourself as
a last resort.
Good documentation means that your model/software is
learnable.

The discipline of software engineering has led to the production of a plethora of languages, tools and processes that can help improve the design, description and maintenance of a complex piece of software. Below is a (very incomplete) list of languages and tools that I have found helpful for the design, implementation, validation and documentation of non-trivial mathematical models.

- How to produce interactive plots using D3; last
updated
*2014-06-08*.

- The R Project (and contributed docs) — a statistical computing and plotting tool
- SymPy — a symbolic solver / computer algebra system (CAS)
- SciPy — a suite of numerical science and engineering tools
- GNU Octave — a numerical solver and plotting tool, mostly Matlab-compatible

- ggplot2 — an elegant and powerful plotting system for R
- Gnuplot — a command-line plotting tool, also used by GNU Octave
- PLplot — a plotting package with a number of language bindings
- g3data (or g3data2) — great for extracting data from published plots
- D3.js (and book) — a JavaScript library for creating interactive data-driven visualisations.

- OCaml (manual, libraries, testing, examples)
- JoCaml (concurrent and distributed programming)
- Real World OCaml
- Python (and documentation)
- PyMC and Bayesian Methods for Hackers
- Real World Haskell
- Learn You A Haskell
- What I Wish I Knew When Learning Haskell 2.0
- Write Yourself a Scheme in 48 hours
- Learn Prolog Now
- Mercury
- Monad tutorials
- Macros in Racket
- Functional programming book reviews
- Fortran standards, practices, examples and compiler support