Science is messing around with things you dont know.
This practices of code writing for day-to-day lab research are therefore completely unlike anything software engineers are taught.
Just reading these lines and seeing other issues Ive seen with academic code makes me think of a few things. (1) Scientific programmers are either poor programmers or lazy programmers. That means that a lot of the reasons scientific code is not robust or maintainable is because they dont know how to write robust code.
Based on our experience of working in almost all branches of science (electrical engineering, theoretical physics, computational biology, computational chemistry) as well as at large and small Silicon Valley companies and for US government, we believe the main difference of two opinions is money.
The monetary aspects of a company is straightforward. A company makes one or more products useful for customers, and customers pay them for making their life easy. The executives of the company allocate part of that revenue among various projects. If the allocations are correct, productive groups thrive and unproductive groups die. If the allocations are consistently wrong, the company dies or get bailed out (i.e. taken over by the government).
The monetary aspects of a research project are far more complex. Academia is already where companies reach after failing. It is run and paid by the government.
Step 1. A researcher is asked by his institution to raise research funds from government, even though more money is not directly proportional to more innovation. In fact, some times the opposite is true.
Step 2. The researcher does not know how research can lead to more grants, because the process is completely unpredictable. Some researchers assume that publishing voluminously gets them more money. Some assume that publishing in high-profile journal makes the granting gods happy. Some build rapport with fund administrators.
Pray tell what the value of writing code properly is in the above complex and opaque process.