Software engineering as a research practice

https://ericmjl.github.io/blog/2020/8/21/software-engineering-as-a-research-practice/

https://www.youtube.com/watch?v=nxXr0LNdQUU

At this year’s SciPy 2020, a talk and proceedings paper caught my eye: “Software Engineering as Research Method”. (Here are links to the paper and the talk.) In it, the authors, Mridul Seth and Sebastian Benthall, detailed the benefits that software skills bring to the academic and industrial research communities, both from the perspective of making scientific progress and from the perspective of pedagogy.

Building and reinforcing mental models

In the SciPy talk, and in the proceedings paper, Sebastian and Mridul make the point that building software enables “constructionist” learning, i.e. a learner learns when playing with software. I think it is plausible to extend the idea, in that a learner can learn well when building software.

The act of organizing the world around us into categories with properties and relationships is made concrete when we build software. By organizing the conceptual world into layers of abstractions and sequences of actions, we bring a clarity of thought to the flow of work. I would argue that this can only help with the construction of a consistent and productive view of a field.

Incidental benefits

In addition to these conceptual benefits, learning how to structure a codebase logically and write software tests for your code helps with reproducibility. Through tests, our code is known to run correctly, and hence can be depended upon as stable. If structured logically, they can be creatively composed to fit a variety of workflows that may show up, which can be reliably automated as well.

More