Presentation Open Access

Writing Clean Scientific Software

Murphy, Nicholas A.


MARC21 XML Export

<?xml version='1.0' encoding='UTF-8'?>
<record xmlns="http://www.loc.gov/MARC21/slim">
  <leader>00000nam##2200000uu#4500</leader>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Albert, K.; Bouquin, D.; Farber, A.; and Hoover, R. (2019). Copyright Guide for Scientific Software. Zenodo. http://doi.org/10.5281/zenodo.3581326</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Feathers, M. (2004). Working Effectively with Legacy Code.</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Fowler, M. (2011). Eradicating Non-Determinism in Tests. https://martinfowler.com/articles/nonDeterminism.html</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Gamma, E.; Helm, R.; Johnson, R.; and Vlissides, J. (1995). Design Patterns: Elements of Reusable Object-Oriented Software.</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Hicks, S. Code Is Communication. https://steven-j-hicks-speaking.netlify.app/code-is-communication/#1</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Martin, R. C. (2009). Clean Code: A Handbook of Agile Software Craftsmanship.</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Martin, R. C. (2018). Clean Architecture: A Craftsman's Guide to Software Structure and Design.</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">McConnell, S. (2004). Code Complete: A practical handbook of software construction, 2nd edition.</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Wilson, G.; Aruliah, D. A.; Brown C. T.; Chue Hong, N. P.; Davis, M.; Guy, R. T. et al. (2014). Best Practices for Scientific Computing, PLoS Biology, 12, e1001745, https://doi.org/10.1371/journal.pbio.1001745</subfield>
  </datafield>
  <datafield tag="999" ind1="C" ind2="5">
    <subfield code="x">Wilson, G.; Bryan, J.; Cranston, K.; Kitzes, J.; Nederbragt, L.; Teal, T. K. (2017). Good enough practices in scientific computing. PLoS Computational Biology, 13, e1005510, https://doi.org/10.1371/journal.pcbi.1005510</subfield>
  </datafield>
  <datafield tag="041" ind1=" " ind2=" ">
    <subfield code="a">eng</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">Research software engineering</subfield>
  </datafield>
  <datafield tag="653" ind1=" " ind2=" ">
    <subfield code="a">Clean coding</subfield>
  </datafield>
  <controlfield tag="005">20200630021910.0</controlfield>
  <datafield tag="500" ind1=" " ind2=" ">
    <subfield code="a">This work was created with support from National Science Foundation (US) grant 1931388 to the Smithsonian Astrophysical Observatory.  A minor portion of this presentation was adapted from the paper entitled "Best Practices for Scientific Computing" by G. Wilson et al., which is available under the Creative Commons Attribution 4.0 International (CC BY 4.0) license.</subfield>
  </datafield>
  <controlfield tag="001">3922957</controlfield>
  <datafield tag="856" ind1="4" ind2=" ">
    <subfield code="s">643129</subfield>
    <subfield code="z">md5:4229bff05d7e36bd63e489bf891affa8</subfield>
    <subfield code="u">https://zenodo.org/record/3922957/files/WritingCleanScientificSoftware.pdf</subfield>
  </datafield>
  <datafield tag="542" ind1=" " ind2=" ">
    <subfield code="l">open</subfield>
  </datafield>
  <datafield tag="260" ind1=" " ind2=" ">
    <subfield code="c">2020-06-29</subfield>
  </datafield>
  <datafield tag="909" ind1="C" ind2="O">
    <subfield code="p">openaire</subfield>
    <subfield code="p">user-plasmapy</subfield>
    <subfield code="o">oai:zenodo.org:3922957</subfield>
  </datafield>
  <datafield tag="100" ind1=" " ind2=" ">
    <subfield code="u">Center for Astrophysics | Harvard &amp; Smithsonian</subfield>
    <subfield code="0">(orcid)0000-0001-6628-8033</subfield>
    <subfield code="a">Murphy, Nicholas A.</subfield>
  </datafield>
  <datafield tag="245" ind1=" " ind2=" ">
    <subfield code="a">Writing Clean Scientific Software</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">user-plasmapy</subfield>
  </datafield>
  <datafield tag="540" ind1=" " ind2=" ">
    <subfield code="u">https://creativecommons.org/licenses/by/4.0/legalcode</subfield>
    <subfield code="a">Creative Commons Attribution 4.0 International</subfield>
  </datafield>
  <datafield tag="650" ind1="1" ind2="7">
    <subfield code="a">cc-by</subfield>
    <subfield code="2">opendefinition.org</subfield>
  </datafield>
  <datafield tag="520" ind1=" " ind2=" ">
    <subfield code="a">&lt;p&gt;This presentation discusses strategies for writing clean scientific software.&amp;nbsp; Choosing meaningful variable names improves readability.&amp;nbsp; Functions should be short, do exactly one thing, and have no side effects.&amp;nbsp; High-level big picture code should be separated from low-level implementation details, for example by writing code as a top-down narrative.&amp;nbsp; Because comments often become out-of-date as code evolves, it is preferable to refactor code to improve readability rather than describe how it works.&amp;nbsp; Well-written tests increase the flexibility of code.&amp;nbsp; This presentation encourages us to think of code as communication.&lt;/p&gt;</subfield>
  </datafield>
  <datafield tag="773" ind1=" " ind2=" ">
    <subfield code="n">doi</subfield>
    <subfield code="i">hasPart</subfield>
    <subfield code="a">10.5281/zenodo.3491142</subfield>
  </datafield>
  <datafield tag="773" ind1=" " ind2=" ">
    <subfield code="n">doi</subfield>
    <subfield code="i">isVersionOf</subfield>
    <subfield code="a">10.5281/zenodo.3922956</subfield>
  </datafield>
  <datafield tag="024" ind1=" " ind2=" ">
    <subfield code="a">10.5281/zenodo.3922957</subfield>
    <subfield code="2">doi</subfield>
  </datafield>
  <datafield tag="980" ind1=" " ind2=" ">
    <subfield code="a">presentation</subfield>
  </datafield>
</record>
471
203
views
downloads
All versions This version
Views 471471
Downloads 203203
Data volume 130.6 MB130.6 MB
Unique views 450450
Unique downloads 188188

Share

Cite as