Some best practices for computer exploration

July 9th of 2019

Free and Practical Software for Algebraic Combinatorics 2019

this document as slides


Conducting computer exploration

A great reference: François Bergeron's talk Mathématiques Expérimentales

Two key recommendations:

Seek Beauty and Surprise

Interact with the computer in your own language


Correctness, Reproducibility, Reusability

A great reference: Mike Croucher's talk: Is Your Research Software Correct

Croucher's Law: I am an idiot, and I will make mistakes

We all do.

How hard does it affect us?

What can we do about it?


Document our experiments

  • What was the goal? The hypothesis to be tested?

  • What was the process?

  • What artefacts were used? (software stack, )

  • What was our interpretation?


Maintain a laboratory notebook!

To enable:

  • retrieving what was tried, when, what was the outcome

  • checking the process: is it really doing what we meant?

  • reproducing the process: is it still the same outcome?

  • reusing the artefacts for related experiments

  • sharing it with others!


How to write great lab notebooks?


Automate

Ideal description of the process:

​​​​Results = MyAnalysis(Data)

where MyAnalysis:

  • reveals the business logic
  • hides the technical details

Use literate computing

Write the notebook as a narrative text mixing prose and computation.

  • Jupyter notebooks
  • Rich text files (Markdown, org-mode, RST)
  • Code file with documentation strings
  • Code snippets in your LaTeX file

Desirable features:

  • easy to read
  • easy to reexecute
  • easy to version control
  • easy to test
  • easy to share
  • standard

Interact with the computer in your own language

The logic should be easy to read by the casual scientist in your field, with no special preparation

  • Express what you compute rather than how
    E.g. comprehensions rather than loops

  • Model the business objects
    E.g. with Object Oriented Programming

  • Model the business processes
    E.g. with functions

  • Write code in a high level language


Separate lab notebook and code

  • In the lab notebook: the bare necessary to document the process
  • Every other bit of code: as reusable functions/class, in separate files

Rationale:

  • Easier to reuse
  • Easier to document
  • Easier to test
  • Easier to version control

Get some training!

Learn basic computer science skills:


Publish your code and logbooks!

Provide or document all artefacts:

  • Personal code
  • Software stack
  • Data
  • Use open source software / open data

Instant bonus: reproducibility with Binder!


References about computational logbooks in Sciences

Computational maths tends to be a bit different, with less reliance on data Nevertheless much of the analysis and tips in the following pages remains relevant up to adaption:


Watch for your health!

  • Watch your back!
  • Watch your wrists!
  • Watch your eyes!
  • Watch your ears!
  • Get some sleep!
Select a repo