Otherwise it's not science.
But we don't always them effectively.
Formats: csv, YAML, Hierarchical Data Format (HDF), Flexible Image Transport System (FITS), etc.
Management: C++/Python/Fortran APIs, HDF5, Pandas, astropy, etc.
Version Control Systems: svn, hg, git
Hint: tools like git-annex or git-lfs can help you manager large data files
git log
git blame
gitk
, git gui blame
Hint: GUIs are great to explore and look around
Hint: try a tutorial on BASH, ZSH, Python, or Perl, e.g. the bash lesson by Software Carpentry.
Build system tools: make, docker, cmake, autoconf, automake, etc.
Reference: The Carpentries have an associated Automation and Make lesson
Hint: In C++, learn about structs, unordered_maps, maps, vectors, and (maybe) classes, etc. In Python the power lies in dictionaries, and numpy arrays, and DataFrames when analyzing data.
DRY: Don't Repeat Yourself. Code replication is bug proliferation.
KISS: Keep it simple, stupid.
Hints: Best practices for writing code comments, Python PEP-8
Tools: Linux perf, hotspot, gprof, igprof, coz, NVIDIA nsight, Python cprofile, line_profiler, snakeviz
Hints: A good algorithm will outperform a locally optimized bad one
Formats: Python argparse, libconfig, yaml-cpp, spify, etc.
Tools: cpplint, pyflakes, gdb, lldb, pdb, idb, perf, hotspot, coz, valgrind, kernprof, kcachegrind, cprofile/snakeviz
Hint: reviewing changes is work, keep them simple, stupid.
Tools: LaTeX, markdown, restructured text
Example: SpECTRE
Many of these slides were originally in presentations by Dr. Katy Huff and Dr. Madicken Munk at
which are licensed under a Creative Commons Attribution 4.0 International License.
This work has been supported by NSF grants 2004879, 2103680. Any opinions, findings, and conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the National Science Foundation.
General programing best practices by Roland Haas is licensed under a Creative Commons Attribution 4.0 International License.
Based on a work at http://munkm.github.io/2021-09-24-NCSA.