11 Tools and software
There’s no single right answer. The choice depends on your discipline, on the computational speed you need, and, importantly, on what you already know.
At every university I’ve worked at there is always this debate on what data software to teach our students: Excel, R, Python… the debate goes around, and I think I’ve seen all the arguments now. It’s irresolvable because each is good in its own way (even Excel, but only when you have to work with people who don’t know anything else and there’s no time to educate them!).
Your own familiarity is a real constraint: the time a project takes depends heavily on the languages and tools you’re already fluent in, and you can’t easily push your model and learn a new language at the same time (though leaning on AI to help with unfamiliar code softens this).
In broad strokes:
- R: the statistical engine, with an enormous ecosystem of packages. Convenient and expressive, but can be slow for heavy loops and large simulations. Increasingly it is plugged into other faster softwares, so you can leverge R’s incredible visualisation tools to access the fastest simulation engines.
- Python: a good general-purpose middle ground, the default for machine learning and, increasingly, math heavy disciplines like oceanographic modelling. Its scientific stack (NumPy, SciPy, pandas) pushes the heavy numerical work down into fast compiled libraries, and tools like
numbaorCythonlet you speed up bottlenecks without leaving the language. Like R, plain Python loops are slow, so the skill is in vectorising and letting the fast libraries do the work. - C++: much faster for computation, at the cost of being lower-level and more effort to write. Use C++ when a simulation’s inner loop really dominates your runtime.
- Interfaces and connectors: in practice people often bridge these, writing the framework in a high-level language and then using the faster languages for numerical work like simulations. R and Python both call C++ readily (via
Rcppandpybind11/Cythonrespectively) and can call each other. So you could develop the function for your dynamic model in C++, but then run it and do all the plotting in R.
Pick the combination that fits your problem and your existing skills. Its worthwhile considering learning a new language, but also consider teh cost of learning a new tool when a slower, more familiar tool might get you to a working model sooner.