In [1]:
%load_ext load_style
%load_style talk.css


Software development tools

Git/GitHub

  • Version control systems promote good software engineering practices
  • In the last few years, Git has emerged as one the best in class
  • GitHub has completely transformed collaborative software development
    • Contributions to open source projects have exploded as a result
    • Makes software development deeply social: "Facebook for coders"
  • Public repositories are free
    • Encourages open collaboration
    • All code, history, discussions are public
    • Some scientists are uncomfortable with this
    • The benefits outweight any downsides
    • Most contributions are peer reviewed!
  • You can have private repositories, but they cost $
  • Let's have a look at IPython's GitHub repo

Git/GitHub as a path to reproducibility

  • Version control systems are not the final answer to reproducibility, but they are a necessary beginning
  • Developer behavior changes when they know that everything they do is public
    • Their reputation is on the line - employers routinely consult GitHub profiles
    • Documentation and tests magically appear ;-)
  • A case study with an undergraduate physics major
    • Zach Sailer graduated from Cal Poly in 2013 with a physics B.S.
    • He did his senior project on "Dielectric Behavior of de Vries Liquid Crystals"
    • "Hey you should post your senior project on GitHub"
    • Reproducibility magically follows...
    • Here is his GitHub repo

Science inherits the attributes of the software tools used

Travis CI (continuous integration)

  • Let's assume that all of us are writing tests for our software ;-)
  • Everytime you make a change, the test suite should automatically run
  • You should get an email if a test fails
  • That is what Travis CI does
  • Let's have a look at the Travis CI site for IPython
  • Language independent, complete control of dependency installation
  • Free for open source projects, $ for others
  • Seamless integration with GitHub

Science inherits the attributes of the software tools used

Good software development tools and practices allow you to create projects with adoring communities of developers and users

Impact by attraction rather than promotion