• Stars
    star
    183
  • Rank 210,154 (Top 5 %)
  • Language
    Julia
  • License
    MIT License
  • Created over 2 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A workshop on writing good scientific code.

Good Scientific Code Workshop

DOI

Table of Contents

  1. Elevator Pitch
  2. Information
  3. Contents
  4. Bring your own code!
  5. YouTube recording
  6. Citing

Elevator Pitch

Scientific code is notorious for being hard to read and navigate, difficult to reproduce, and badly documented. One reason leading to this situation is that curricula that traditionally train scientists do not explicitly treat writing good code, and during the scientific life there is little time for the individual to practice this on their own. In this intensive block-based-workshop we will change that and teach you all you need to know to write code that is Clear, Easy to understand, Well-documented, Reproducible, Testable, Reliable, Reusable, Extendable, and Generic.

Sounds too good to be true…? Join this workshop, and you will be surprised to find out that attributing all these properties to your code does not take much effort; once you have the proper education on the subject, you get all of this good stuff practically for free!

Information

This repository contains the materials (presentation slides and exercises) for the "Good Scientific Code" workshop. Powerpoint version of the slides (for editing) is available on demand.

The workshop is (mostly) language-agnostic, meaning that the principles are about general coding. Examples and exercises will be in Julia and Python. It is structured as an intensive six-blocks course, aimed to be performed with tutors overseeing the exercises parts and helping the students. Students and their tutors are recommended to go through each block, one by one, and spend as much time as necessary until the students have understood the block and were able to solve all exercises (especially the application to their own code, see below). The expected time span for this to happen is about a day or two for each block.

This workshop was developed over 3 years by George Datseris, combining textbooks, other workshops, online tutorials from field experts, blog posts, personal experience developing and documenting 10+ software, and research on how to make reproducible science.

Lukas Kluft helped the workshop substantially by providing Python examples, translating Julia code to Python, reviewing the slides, and being a tutor during a live version.

Contents

The workshop is divided into the following six blocks:

  • Version control: retraceable and safe code history using git
  • Clear code: write code that is easy to understand and reason for
  • Software developing paradigms: write your code like a software developer
  • Collaboration & publishing code: modern team-based code development on GitHub
  • Documenting software: documentation that conveys information efficiently and intuitively
  • Scientific project reproducibility: publish reproducible papers

Bring your own code!

The exercise sessions have two components. On the first, illustrative but simple exercises are given to the participants to practice each topic. Participants are expected to solve the exercises live during the workshop! The second component requires the participants to apply this new knowledge to their very own code base. Therefore, please bring along all code you have used in your latest published paper. If you haven’t published yet, no worries, bring along all the code you have at the moment for your science project. Decide in advance on 2-3 figures of your paper/project, which will be the central focus of the exercises. The exercise plan will transform your code from random scripts to a self-contained code base that is understandable, extendable, continuously tested, documented, and hosted on open and accessible platforms.

Note: for this plan to have meaningful impact, you should bring a code base where you had to write a substantial amount of source code.

YouTube recording

A video recording of the live version of this workshop, performed at the Max Planck Institute for Meteorology, is available on YouTube: https://youtu.be/x3swaMSCcYk .

Citing

You can cite this material using the DOI 10.5281/zenodo.7789872 or the following BibTeX entry:

@software{goodscientificcode,
  author       = {George Datseris},
  title        = {{Good scientific code workshop}},
  month        = mar,
  year         = 2023,
  publisher    = {Zenodo},
  version      = {v1.0},
  doi          = {10.5281/zenodo.7789872},
  url          = {https://doi.org/10.5281/zenodo.7789872}
}

More Repositories

1

Agents.jl

Agent-based modeling framework in Julia
Julia
757
star
2

DrWatson.jl

The perfect sidekick to your scientific inquiries
Julia
749
star
3

DynamicalSystems.jl

Award winning software library for nonlinear dynamics and nonlinear timeseries analysis
Julia
743
star
4

ChaosTools.jl

Tools for the exploration of chaos and nonlinear dynamics
Julia
183
star
5

ConcurrentSim.jl

A discrete event process oriented simulation framework written in Julia. Formerly named SimJulia!
Julia
176
star
6

NonlinearDynamicsTextbook

Nonlinear Dynamics: A concise introduction interlaced with code
Julia
167
star
7

InteractiveDynamics.jl

Fast, general-purpose interactive applications for complex systems
Julia
167
star
8

ResumableFunctions.jl

C# style generators a.k.a. semi-coroutines for Julia.
Julia
158
star
9

NetworkDynamics.jl

Julia package for simulating Dynamics on Networks
Julia
128
star
10

CausalityTools.jl

Algorithms for detecting associations, dynamical influences and causal inference from data.
Julia
124
star
11

TimeseriesPrediction.jl

Prediction of timeseries using methods of nonlinear dynamics and timeseries analysis
Julia
101
star
12

DynamicalBilliards.jl

An easy-to-use, modular, extendable and absurdly fast Julia package for dynamical billiards in two dimensions.
Julia
98
star
13

JuliaDynamics

Website for JuliaDynamics and various resources, like notebooks, videos, etc.
Jupyter Notebook
61
star
14

DiscreteEvents.jl

Discrete event generation and simulation in Julia
Julia
56
star
15

DynamicalSystemsBase.jl

Definition of dynamical systems and integrators for DynamicalSystems.jl
Julia
51
star
16

ARFIMA.jl

Simulate stochastic timeseries that follow ARFIMA, ARMA, ARIMA, AR, etc. processes
Julia
47
star
17

TimeseriesSurrogates.jl

A Julia package for generating timeseries surrogates
Julia
43
star
18

RecurrenceAnalysis.jl

Recurrence Quantification Analysis in Julia
Julia
43
star
19

ComplexityMeasures.jl

Estimators for probabilities, entropies, and other complexity measures derived from observations in the context of nonlinear dynamics and complex systems
Julia
39
star
20

SignalDecomposition.jl

Decompose a signal/timeseries into structure and noise or seasonal and residual components
Julia
33
star
21

DynamicSumTypes.jl

Easy-to-use sum types in Julia
Julia
27
star
22

CriticalTransitions.jl

A Julia package for critical transitions in dynamical systems with time-dependent forcing
Julia
26
star
23

NonlinearDynamicsComplexSystemsCourse

Material for a full course on applied nonlinear dynamics, nonlinear timeseries analysis, and complex systems, in Julia
Jupyter Notebook
24
star
24

DelayEmbeddings.jl

Delay coordinates embeddings and optimizing them
Julia
23
star
25

StreamSampling.jl

Sampling methods for data streams
Julia
20
star
26

ChaosThroughBilliards

Code repository for an educational video on deterministic chaos
Julia
19
star
27

Attractors.jl

Find attractors of dynamical systems, their basins, and continue them across parameters. Also tipping points for analytic systems.
Julia
19
star
28

RigorousInvariantMeasures.jl

Package for the Rigorous Computation of Invariant Measures
Julia
11
star
29

TransferEntropy.jl

Transfer entropy (conditional mutual information) estimators for the Julia language
Julia
10
star
30

HardSphereDynamics.jl

Dynamics of elastic hard balls in arbitrary number of dimensions in Julia
Julia
9
star
31

PredefinedDynamicalSystems.jl

Collection of predefined dynamical systems for DynamicalSystems.jl
Julia
9
star
32

AgentsExampleZoo.jl

Examples written with Agents.jl
Julia
8
star
33

FractalDimensions.jl

Estimating the fractal dimension of timeseries or multidimensional datasets
Julia
7
star
34

ABM_Framework_Comparisons

Benchmarks and comparisons of leading ABM frameworks with Agents.jl
NetLogo
6
star
35

TransitionsInTimeseries.jl

Transition Indicators / Early Warning Signals / Regime Shifts / Change Point Detection
Julia
6
star
36

SpatioTemporalSystems.jl

Simulations of spatio temporal dynamical systems
Julia
5
star
37

AgentsPlots.jl

Plotting functionality for Agents.jl - Agent-Based Modelling in Julia
Julia
5
star
38

LagrangianDescriptors.jl

Painting the phase portrait of random and deterministic systems
Julia
5
star
39

ExercisesRepo

wip
Julia
4
star
40

PerronFrobenius.jl

Estimating the transfer operator (Perron Frobenius operator) and invariant measures from time series.
Julia
4
star
41

CaosDB.jl

CaosDB interface for Julia
Julia
4
star
42

doctheme

Documentation theme for the packages of JuliaDynamics
SCSS
3
star
43

StateSpaceReconstruction.jl

State space reconstruction (SSR) for the study of dynamical system from time series.
Julia
3
star
44

CausalityToolsBase.jl

Base functionality used throughout the CausalityTools ecosystem
Julia
2
star
45

CrossMappings.jl

A Julia package for computing cross mapping causality measures between time series.
Julia
2
star
46

StateSpaceSets.jl

The `StateSpaceSet` interface for packages of JuliaDynamics
Julia
2
star
47

Simplices.jl

Compute exact simplex intersections in N dimensions.
Julia
1
star
48

TreeEmbedding.jl

This project implements the MCDTS algorithm outlined in the paper Nonlinear Dynamics volume 108, pages 1525–1545 (2022).
Julia
1
star