|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
||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
||Detect, investigate and resolve bugs.
||>How to debug different types of errors?
||>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
||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