---
# System prepended metadata

title: Languages for Scientific Programming
tags: [eduit, ' education']

---

---
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.