Software Understanding in the Sciences is Really Uneven

19 points by nrposner 17 days ago on lobsters | 17 comments

might be worth checking out Software Carpentry if you haven't come across it already. Their mission is to teach workshops to help scientists improve programming skills.

I was loosely involved in helping at Software Carpentry sessions for a while, and I found it a bit if a mixed bag (although I didn't stay at that workplace for long, and so didn't get a chance to see all aspects of the program). For some stuff, it's really good, like inducing introducing version control or learning a new language. But for research teams that are already writing lots of code but running into problems like OP, it was more of a frustrating experience.

The group I was with would spend a lot of time teaching the sorts of skills that professional software developers might have, but they often felt kind of disjointed from the actual problems people were running into when they were coming to us for help. So we'd look at a project that was just chaotic spaghetti Python, and the best we could offer was a workshop on running tests with GitLab's CI/CD system. Which isn't necessarily a bad skill, but it didn't really solve the underlying problem that the scientists had, which was that they didn't understand how to decompose a complex problem into useful components in a software system.

And like, how do you even teach that? That's something I was still figuring out after four years of university specifically learning how to write software. I still mostly do it by intuition and feeling - I like to think I'm quite good at it, but I struggle to describe what exactly I'm doing. How do you condense that sort of knowledge into a set of courses for someone for whom code is just a means to a an end? Someone doing brilliant work in Organic Neuroquantum Dynamics is not interested in the finer points if software coupling, they just want their code to work so they can get on with discovering useful things about the world.

Relax | 17 days ago

Well, software engineering is a whole discipline itself. It's not that surprising that scientists and other non-SWEs don't really have the understanding and experience to make good decisions on projects like this. I think we're just so close to it and have internalized a lot that we often forget this.

I don't necessarily disagree with your missing-semester idea but I think it'll take more than a semester...

Anywho, I spent a lot of time in biotech and ran into this quite often myself. So many conventions in bioinformatics are weird and wacky. My favorite is cDNA coordinates: they're one-based, which is annoying but not bad, but the coordinate that comes before 1 is not zero but negative one! That one has been the source of many bugs, especially in range computations.

th0ma5 | 17 days ago

The last decade or so of my professional career was to try to assist PhDs with rapid prototyping. If we can get people to understand abstracting all of the I/O into separate functions, that everything is essentially an if statement or a for loop, and that strategies for dividing and conquering data tasks are paramount, then we're doing pretty good.

But I feel like everyone who works in a career getting eaten by software all have to go through a process of feeling super empowered to the crash realization that the code in their makeMeJeffBezosFinally function isn't working just because of their code. I wish all of these kinds of people luck, but, they also need less snake oil salesmen telling them things should be easier so just buy their snakeoil.

madhadron | 17 days ago

University of Virginia's physics department offers basically that course for its undergraduates. I advised on its curriculum when it was created. That being said, there's a big tool gap that I gave up fighting when I left science: software engineering is about producing a program as a reproducible artifact. Computational science is about producing an execution of a program as a reproducible artifact. The last step I took on this path was https://github.com/madhadron/bein which generates an execution and in it you pull its inputs from a tiny LIMS (Laboratory Information Management System) and write the results back, and have a web page to see and track the executions. It doesn't track the source code, sadly.

If I were starting from scratch I'd take something like Oberon plus modern Fortran style array capabilities, give it direct access to Parquet for reading and writing, and only let you load files from the LIMS and write files to the LIMS or specify parameters in your run options. Each run gets recorded along with its source code, parameters, and links to its inputs. Set it up so it's easy to restart an execution in the middle so you can write checkpoints, and make it easy to enable/disable tracing of specific functions and what they're called with and what they return, or what the values a specific variable takes during a loop, while it's running. You need a good plotting library, of course.

marginalia | 16 days ago

As someone who regularly juggles terabyte datasets, might I suggest duckdb for whatever you're doing with the data?

Like that 200 GB CSV is likely going to be like a 5-10 GB as a zstd-compressed .parquet-file (which duckdb can help you with, and it can query both formats as though they were database tables).

[OP] nrposner | 16 days ago

Good point, I’ll take a look. Right now I’m just working on a CLI to turn our existing data into parquet and run some standard workflows. But once we expand to let other people query this data, Duckdb looks like a good option.

freddyb | 16 days ago

TIL snakeviz. thank you :)

[OP] nrposner | 16 days ago

One of today’s lucky ten-thousand!

natfu | 16 days ago

It's a good time to mention that Python 3.15 will get an incredible new profiler with a lot of the graphing included.

[OP] nrposner | 16 days ago

Oh sweet.

rainbow_bird | 16 days ago

In the final year of my undergraduate degree, I took a bioinformatics class which was shared with biology students. I think it was pretty clear that most of the heavy programming stuff was going over their heads. I had to ask the lecturer questions about computer science a few times which I'm sure they just didn't understand because they didn't have the background. Similarly, I had to stop the lecturer and ask questions when I didn't understand some of the biology concepts which seemed to be a given for the other students -- sometimes they jumped in to help me understand the lecturer's answer to a question.

itamarst | 16 days ago

I have written a book that addresses some angles of this missing knowledge, although this particular failure mode is as you say pretty common and I don't cover it as explicitly as I should, so I'll add that in the next revision. If you @nrposner send me your email I can invite you to the early access version.

mempko | 17 days ago

At this point is science possible without computers? Some scientists are now using LLMs to build software for their research. What are your thoughts on that? Could that enable scientists to do better work or will it worsen what they are doing?

madhadron | 17 days ago

At this point is science possible without computers?

Of course. It's important not to confuse the small areas of science where computation and writing code is the limiting factor with all of science. The vast majority of science is limited by the actual observation. Most scientists aren't limited by software at all. They're limited by growth rates of organisms or access to telescope time or the dozens of steps and incubation time of biochemical reactions or the number of person-hours you can get doing surveys in a bog.

[OP] nrposner | 17 days ago

I don't have numbers on this, but would assume that most scientific use of computers isn't intensive. You use Python/R/Excel to record and run the numbers produced by an experiment or produce visualizations. In the past, the same work would have been done more laboriously with calculators and pencils, computers just accelerate the process.

I expect the proportion of scientific research that makes use of truly custom-built software (and where poor performance of that software is a real problem) is small, but growing. In many of those cases, I do think that LLMs have utility. I don't want that stuff to be vibecoded, but a quick audit/review by LLM can catch the biggest issues quite effectively, show them how to run a profile, point them towards useful tools, tell them why looping over thousands of small files is a bad idea, etc.

The problem with that is that these researchers are not primarily software engineers, and yet their understanding of the code they write and what it does is arguably the core product, as much or more than its actual output. If they lean on the LLM and vibe-code it, that goes away. You could plausibly get 'better' software (in that it makes the lives of people like me easier) and it wouldn't be worth it. Maybe with a light touch, but it has to be a light touch.

th0ma5 | 17 days ago

This is good question that could be restated as what corners should people cut?