I’ve been thinking a lot lately about why we need to teach scientists at least a little computational science. Most scientists and students of science have no desire to be programmers. Many of them are a little bit afraid of (or at least angry with) computers. All those blue screens of death. All that inexplicably lost work. All those documents that didn’t quite print the way they were supposed to, that were all but unfixable. All those networks that wouldn’t connect. All those rude and unintelligible error messages. All those times being ignominiously rescued by the techies. It’s an entirely logical response.
And yet computation is now inextricably linked with science. There is no longer a single discipline whose results will not at some point be computationally stored, analyzed, visualized, and/or simulated computationally.
That’s ok, right? Scientists can just hire competent programmers to go sort that icky stuff out for them, and hand them back the results, surely?
But here’s the thing: Even if you have funding for a programmer, how can you be sure your programmer got it right?
How do you even know how to hire a competent programmer?
I’ve seen too many “awesome techies” hired on the basis that they could spout unintelligible gibberish at a fantastic rate. Leading to the “I don’t understand them. They must be good!” school of hiring. This rarely ends well.
A competent programmer analyzing data effectively has to have some domain knowledge to be sure she is analyzing the right things and coming up with accurate results. This does not mean the scientist has to be the programmer, but it does mean the scientist has to be able to talk to the programmer. You have to know what you are asking, and what’s possible and what’s not. You have to be able to explain what you need. You have to know what your output should look like, so that you can verify your results. You have to be able to talk algorithms with your programmer, to ensure that the program she has written does what you want it to do. You have to have at least some understanding of why 0.1 + (0.2 +0.3) does not equal (0.1+0.2)+0.3, despite everything you thought you knew about maths.
Most scientists still can’t do this, and this is in part because Computational Science hasn’t always been shared in an intelligible fashion. When you add all those befuddling acronyms on top of that generalized antipathy towards computers, you wind up with scientists who would rather crawl naked through a horde of bull ants than do a course in computational science. “Never mind, thanks. We’ll do our research the slow way. We’ll use Excel. We’ll do the damned calculations by hand if we have to!”
Fortunately there are now organizations like Shodor and sites like Computer Science Unplugged that are making CS ever more accessible to people who don’t live, eat, sleep, and breathe computer science. There is even Software Carpentry running CS courses for scientists, and at the same time building teaching capacity so that the courses can spread.
What we are still missing, as far as I can see, is the spread of CS into science education itself. Science at university. Science at high schools. It’s still largely taught using traditional methods and traditional curricula. There are courses here and there that bridge the gap, but I think there is a conceptual leap we have to make before computer science will find itself properly embedded in the sciences. We have to shift Computer Science from “icky, confusing, and scary stuff that we’d rather leave to those freaky nerd people” to something that’s interesting, fun, and fundamental to science.