E: Scientific coding

About

Questions

Video Intro

Reading

Aalto

E60 Modular code development

Break your large programs into small problems by separating aspects of desired functionality to different sub-modules.

>How to divide code into independent modules? >What are pure functions like?

>Python example of breaking code into small components

>Lesson on Modular code development by CodeRefinery

E61 Software testing

It is important to ensure that your program performs effectively and without failures. Adding tests for your software can save a lot of your time later.

>How to test code on different levels? >What kind of testing tools are there?

>Software testing fundamentals by Software Carpentry

>Lesson on testing by CodeRefinery

E62 Profiling

Code efficiency is critical especially in HPC. Learn to measure the performance of your programs.

>What is profiling used for?

>Profiling Python code with cProfile

>Profiling tools for Linux >Profiling for C and Python >An intro article on Ruby and Python’s profilers

Triton profiling guide

E63 Debugging

Detect, investigate and resolve bugs.

>How to debug different types of errors?

>Debugging strategies

>Debugging in a nutshell. >See Triton’s debugging guide >A hands-on tutorial on pdb debugger

E02 Software Licensing

Sharing your work can be very beneficial. Take a look at social coding and software licensing.

>What is free software? >Why should you share your code?

>Brief introduction to differences between open and closed source software

>Lesson on social coding by CodeRefinery >Brief guide to licensing

E04 Documentation

Document your project so other people can easily use the code and even contribute to it.

>What should be included in a documentation?

>Documentation with Sphinx

>Tools for documentation >CodeRefinery lesson on documentation

E03 Reproducible research

How different tools can improve reproducibility.

>Which tools can help with reproducibility?

>What is reproducible research

>Lesson by CodeRefinery