How do I choose a programming language?
This section is meant to help you choose, depending on your situation, a programming language to start with. It only focuses on the programming languages discussed in the ISEM dev catalogue. Also, the advice given here is supposed to be only valid within the scope of using programming languages for research in Biology/Ecology/Evolution.
Regardless of the language chosen, it is always good to:
- Practice on your own, even it with small, toy projects.
- Review your code with friends and colleages, to get feedback and learn cool things.
For example, you can practice for free and get feedback on your code at exercism.org (feel free to ping me there as a mentor). Or you can ask for feedback on the dedicated dev club channel.
[wikipedia] [official] [exercism]
Advised if:
- You want to automate what R has been designed for:
- Read data.
- Manipulate data tables.
- Fit statistical models.
- Produce graphics/plots.
Example resources:
- R for Data Science.
- The official "Introduction" for a detailed reference.
- R packages to learn how to make your own.
Ill-advised if:
- You need to implement your own sophisticated logic/model (poor programming features, poor naive performances).
- Your project is going to be large (poor static checking).
- You are looking for a good, general-purpose programming language.
[wikipedia] [official] [exercism]
Advised if:
- You want to learn programming.
- You want to automate scientific calculations
(numpy/scipy, matplotlib, pandas/polars, ..):
- Read data.
- Manipulate data tables.
- Perform calculations.
- Produce graphic/plots.
- You want to automate system tasks
(pathlib, subprocess..):
- Create/modify/delete files.
- Launch other system programs (bash, R, ..).
- Send e-mails.
- whatever..
- You want to use machine learning libraries like torch.
- You need to implement your own sophisticated logic/model.
Example resources:
Ill-advised if:
- Performance is a concern for your own logic/model.
[wikipedia] [official] [exercism]
Advised if:
- You want to learn programming.
- You need powerful scientific packages:
- Numerical solving of differential equations with DifferentialEquations.jl.
- Machine learning with Flux.jl.
- Formal calculation with Symbolics.jl
- etc. (browse)
- You need sophisticated meta-programming tools (code that write code).
- Performance is a concern for your own logic/model.
Example resources:
Ill-advised if:
- Your program takes a small time to run but is run frequenly (julia is fast to run but slow to start).
- Your project is going to be large (poor static checking).
Rust
[wikipedia] [official] [exercism]
Advised if:
- You want to learn programming in depth.
- Performance is a major concern for your own logic/model.
- You need to be very strict how your program behaves and make sure it handles all possible errors correctly.
- You are an experienced C/C++ programmer and (either):
- You are tired of C++ and feel like it should be deprecated.
- You spend a lot of time investigating data races and segmentation faults.
- You worry that someone (including yourself) may easily introduce data races or segmentation faults into your program.
Example resources:
- "The book".
- Rust by Example.
- Rustlings exercises.
Ill-advised if:
- Your project is going to be very simple or very small.
- You are not interested in lower-level details how programming works.