“Heavier-than-air flying machines are impossible” - Lord Kelvin, 1895
“ Organized Skepticism. Scientists are critical: All ideas must be tested and are subject to rigorous structured community scrutiny.” - R.K. Merton, 1942
“the first principle is that you must not fool yourself, and you are the easiest person to fool.” - R. Feynman, 1974
“I am thinking about something much more important than bombs. I am thinking about computers.” - John von Neumann, 1946.
Otherwise it's not science.
Since 6th century BCE, science has been perfecting these tenents.
Open source software is now superior at all of them.
But scientists aren't trained to use them effectively.
“ Computational science is a special case of scientific research: the work is easily shared via the Internet since the paper, code, and data are digital and those three aspects are all that is required to reproduce the results, given sufficient computation tools. ” - Stodden, 2010.
“ Organized Skepticism. Scientists are critical: All ideas must be tested and are subject to rigorous structured community scrutiny.” - R.K. Merton, 1942
Formats: Evaluated Nuclear Data File (ENDF), Evaluated Nuclear Structure Data File (ENSDF), Hierarchical Data Format (HDF), etc.
Management: C/Python/Fortran APIs, SQL, MySQL, MongoDB, etc.
Version Control Systems: cvs, svn, hg, git
“ It takes just as much time to write a good paper as it takes to write a bad one. ” - Polterovich, 2014
Hint: Python, scipy, numpy, numba, pandas, scikit-learn, scikit-image, etc.
Hint: try a tutorial on BASH, CSH, Python, or Perl.
Build System Tools: make, autoconf, automake, cmake, etc.
Hint: In FORTAN, learn about arrays. In C++, learn about maps, vectors, deques, queues, etc. In python, the power lies in dictionaries and numpy arrays.
DRY: Dont Repeat Yourself. Code replication is bug proliferation.
Tools: python argparse, xml rng, etc.
“ The scientific method’s central motivation is the ubiquity of error—the awareness that mistakes and self-delusion can creep in absolutely anywhere and that the scientist’s effort is primarily expended in recognizing and rooting out error. ” - Donoho, 2009.
Tools: cpplint, pyflakes, gdb, lldb, pdb, idb, valgrind, kernprof, kcachegrind
“ just-in-time review of small code changes is more likely to succeed than large-scale end-of-work reviews. ” - Petre, Wilson 2014
Books: Clean Code, Working Effectively with Legacy Code
Tools: sphinx, doxygen, gooletest, unitttest, nosetests
“ If a piece of scientific software is released in the forest, does it change the field? ”
Tools: LaTeX, markdown, restructured text
Example: github.com/cyclus
Export control is serious.
''Reading brings us unknown friends'' - Honore de Balzac
A lot of these thoughts came from my personal experience. However, much of it was annealed from conversations with colleagues throughout the scientific and computing communities (too many of you to name).