Software engineering

Good practices in software engineering will contribute considerably to the quality of your scientific software.

graph TD Best_practices_for_scientific_computing[Best practices for scientific computing] --> Version_control_with_git[Version control with git] Best_practices_for_scientific_computing --> Containers_on_HPC[Containers on HPC] Best_practices_for_scientific_computing --> Programming[Programming] Programming --> Defensive_programming_and_debugging[Defensive programming and debugging] Defensive_programming_and_debugging --> Code_optimization[Code optimization] Programming --> Code_optimization Programming --> Generative_AI_in_software_engineering_and_data_analysis[Generative AI in software engineering and data analysis] Code_optimization --> Parallel_computing[Parallel computing] Code_optimization --> GPU_computing[GPU computing] click Best_practices_for_scientific_computing "https://gjbex.github.io/Training-sessions/best_practices_for_scientific_computing" "Best practices for scientific computing" click Version_control_with_git "https://gjbex.github.io/Version-control-with-git/" "Version control with git" click Containers_on_HPC "https://gjbex.github.io/Containers-for-HPC/" "Containers on HPC" click Programming "https://gjbex.github.io/Training-sessions/programming" "Programming" click Defensive_programming_and_debugging "https://gjbex.github.io/Defensive_programming_and_debugging/" "Defensive programming and debugging" click Code_optimization "https://gjbex.github.io/Code-optimization/" "Code optimization" click Parallel_computing "https://gjbex.github.io/Training-sessions/parallel_computing" "Parallel computing" click GPU_computing "https://gjbex.github.io/Training-sessions/gpu_computing" "GPU computing" click Generative_AI_in_software_engineering_and_data_analysis "https://gjbex.github.io/Training-sessions/generative_ai_for_software_engineering_and_data_analysis" "Generative AI in software engineering and data analysis"

If you are new to software engineering in the context of scientific computing, you may want to start with "Best practices for scientific computing".

Of course, you coding skills should be up to par. For more information on this topic, see "Programming".

Version control is an essential part of software engineering. For more information on this topic, see "Version control with git".

Containers are useful tools in the context of software engineering both to create a complete, stable and portable development environment, but also as a means to distribute your software.

Writing robust code that has been well-tested is an essential part of software development. Having tests in place is also essential when trying to optimize your code. For more information on this topic, see "Defensive programming and debugging".

Effectively optimizing your code implies that you have a thorough understanding of the hardware you are using and how your code interacts with it. For more information on this topic, see "Code optimization".

Parallel or GPU computing is often required to take full advantage of modern compute nodes. For more information on this topic, see "Parallel computing" and "GPU computing".