---
tags: eduit, education
---
# Languages for Scientific Programming #
There are three facets to take into account when chosing a language for scientific programming: general features, definition of scientific programming, and domain-specific requirements
## General Features ##
1. Easy to code: high-level programming language that is accessible (fast learning curve) and developer-friendly (scalability)
2. Free and Open Source
3. Multi-paradigm (should allow for OOP)
4. GUI programming support
5. High-level langauge: should now require extensive knowledge og system architecture or memory management
6. Extensible feature: write in code into low-level languages like C and C++ (compile in) - scalability feature
7. Portability: should work on all OSs
8. Integrated: easily integrate with other languages - pipeline
9. interpreted: execute line by line, no need to compile makes it easier to debug
10. Large standard library
11. Dynamically typed: type is decided at run time
12. Large (and friendly) user-community
## Definition of Scientific Programming ##
1. PRAGMATIC: languages used for programming in science: Python and C++
2. PRINCIPAL: languages designed and optimized for the use of mathematical formula and matrices. these features should be built into the syntax, not depend on the availability of libraries: Fortran, Julia, MATLAB, R
However, there are good reasons why `numpy` and `matplotlib` are not included in the standard libraries of Python.
## Domain-specific requirements ##
background of students and research domain set constraints. often we find that undergraduate engineering assumes MATLAB
examples
* Cogntive Neuroscience: statistical parametric mapping, SPM (NIpype in Python)
* Bayesian Modeling:
* Deep Learning: TensorFlow, Torch
## Additional Criteria ##
* Scalability
* IDE/environment
* use of software development practice: version control
* terminal and SSH
## Examples ##
* MATLAB: engineering/applied math, rapid prototyping for numerical tech, 3D visualization
* OCTAVE: drop-in compatible with many Matlab scripts, OSS
* Python: ML/DL, OSS
* R:
---
## Recommendation ##
Python is a general-purpose programming langauge that 1) have all features, 2) has been taking over the scientific programming during the last decade, 3) has a very extensive set of libraries that cover almost every field, and is leading in machine learning, data science &c
Python integrates well with R and Julia via Jupyter Notebooks
Python is the fast growing programming language that is (among scientific programming languages) the most marketable
A little more software engineering in scientific programming is not bad
easier to go from Python to MATLAB than vice versa
---
## Introductions ##
CHCAA: We develop custom solutions for social sciences, humanities, and health reseach (software development, hardware/compute, data management)
* teach intro and advanced scientific programming (ML/DL, reproducibility, version control, containerization, debugging), scientific computing (parallelization, accelerators, profiling, benchmarking)
CR: We offer training opportunities to researchers from Nordic research groups (but we aim to expand beyond Nordics) to learn basic-to-advanced research computing skills and become confident in using state-of-the-art tools and practices from modern collaborative software engineering.