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