Why we need to create careers for research software engineers
scientific-computing.com
scientific-computing.com
It is problematic when a team of scientists collaborate with a product group (not research software engineers but regular developers). In the limited projects I've been involved in, we ask if any product group engineer wants to collaborate on a paper we are writing. No one is typically interested and we would at least add them to acknowledgements. I found product group developers were interested in collaborating for patent submissions. I definitely don't want to generalize but take this as a data point.
FWIW product engineers usually get bonuses for patents, so there's the obvious incentive of $5k in your pocket.
Also, if you're on a patent, you get the cube (and the cash).
There are plenty of Principal RSDEs and some become Managers of technical leaders of teams, which sometimes even include researchers.
But of course, the track is not as clear and common as for plain Researcher or SDE (in a product team).
PS: As far as I know, the patent bonus are there for all (though I can't comment on values).
Can you be more specific about the nature of your contributions? Writing code would seem analogous to performing experiments, which alone is insufficient to warrant authorship (but should get an acknowledgment).
That said… in my career so far, I don't think I've ever seen a clean example of coding someone else's idea to spec. If you successfully take an idea from concept to working software, or if a research project requires complex software to be written, I think it is almost inevitable that the software developer will end up making a creative contribution.
I'm also a bit suspicious about the justification that you can't be listed because aren't a "scientist". Of course, I don't know the details, but it seems fishy.
eI see software development as somewhat similar to writing a novel - someone could give you an idea, a general outline, even a fairly detailed outline, but the writer who puts it into words will almost inevitably make a meaningful creative contribution.
Here's one way to think about it - if you had two different writers, or software developers, how different would the end product look?
Beyond creative input, there's also the question of liability in case of academic misconduct. I'd question if someone acting in a technician role (say a programming professional) would have a full understanding of the manuscript and so could accept authorship; they may also lack the ability to check the findings of the manuscript which is also problematic.
> If you successfully take an idea from concept to working software, or if a research project requires complex software to be written, I think it is almost inevitable that the software developer will end up making a creative contribution.
I think we need to be careful about how we define creative contribution; there's a line to be drawn somewhere in there between a creative contribution for the sake of the software (i.e., speeding up execution time by 4x for a simulation running on a cluster) versus a creative contribution that enables the research (i.e., a novel real-time optimization algorithm for electrostimulation). The latter certainly warrants authorship, but I don't think the former does.
> I'm also a bit suspicious about the justification that you can't be listed because aren't a "scientist". Of course, I don't know the details, but it seems fishy.
Ditto, which is why I asked. My first thought was that it sounded like scholarly authorship was poorly explained and if so I was hoping to help out with that.
I agree, and the distinction you have made is a big part of why I consider the notion of an academic research programmer to be an intriguing idea. I think you've identified exactly the kind of innovation that isn't really recognized or rewarded through the current academic system. Your "former" example, for example, might still require a high level of innovation (perhaps a novel way of splitting up a calculation so that it can be solved in parallel on a cluster), but this innovation isn't really part of the study itself. How do you recognize this as creative work? And even if it isn't part of the study itself, what if this "solution in parallel" was an essential part of the study (i.e.., solution times without would have been so long that it wouldn't have been possible to refine the model to the point of having usable results?)
So a contribution is only a contribution if it contains an appropriate amount of NIH?
No programmer is going to going to want to work with academics, if they are forced to inject bogus novelty in order to get fair attribution for the real work.
As geebee pointed out, current practice may not be enough to acknowledge the role of technicians, core facilities, etc. in research and the issue is ripe for discussion. Nevertheless, I don't think that changes the meaning of scholarly authorship.
Expanding on this, writing research code is quite a bit different than writing production code. In particular, requirements can change quickly and drastically. This means that very open designs where you don't hide data (e.g. as is common in OO programming) are often the best designs.
the implication that this threat is not present for production code is completely ridiculous.
Just because you may only use the program once doesn't mean that you can neglect good software engineering practices.
I run into bad code all of the time (some of it mine!) in our research, and it's very frustrating.
But, hey it's not like reproduceable results are important in science or anything.
Ever tried multiple algorithm variants? Wrapping an algorithm in an object and then passing it to the data provisioning code means you can be 100% sure that the only thing that has changed in your code is the algorithm.
Me: Recent graduate (2012), early career. All dev, all the time.
Lead Dev: ~15-20 years experience, minor project management tasks, mostly just dev work. Gets author credit on scientists' papers every once in a while for his help in generating visualizations.
Principal Investigator: 30-40 years experience, created the software package that we develop in the early 90s, almost entirely project management.
Our organization doesn't expect publications from us (though they're a perk at raise time). There are a few conferences that we present at annually, some posters to make, but for the most part, I just write software that helps scientists do their jobs better. I'm just down the hall from some of the leading minds in climate science, and it's really a great environment.
Of course, our lab varies wildly internally; any different project could have a drastically different experience, and different departments would have very different expectations.
The consensus is that this promotes a more egalitarian culture, and prevents people from being locked in to roles they don't prefer. Senior staff are free to spend a few years managing a large project or in a leadership role, then back off to get back into the research.
Working in a university 'lab', our jobs are completely dependent on our PI's ability to continue winning grants. The problem space is fascinating (genomics) and the scientists I work with are really great. But as an experienced developer joining the group, it often feels more like a long consulting gig than a career move.
Universities already do this for essential services like janitorial work, administrative work, and centralized IT provisioning, like university-wide email or supercomputing infrastructure.
They even already try to do this to some degree with software. For example, there's been a lot of software-focused hiring at the Cornell Weill school in New York City, and some political science research groups at NYU banded together to hire some big data and development staff to service more than just one professor's line of grant-funded projects.
The problem is that they still fundamentally undervalue software labor and look at a programmer as simulatenously a low-level grunt and a wizard. You're a low-level grunt because your opinion isn't supposed to matter as much as a domain expert's opinion and your 'creative' contributions (in terms of expressing the research idea in software) is supposed to be less valuable than the domain experts' creative work in coming up with the ideas in a more abstract sense. But you're also supposed to be a magic wizard because you're supposed to juggle unreasonable and conflicting sets of requirements, overcome fundamental computational complexity hurdles, and take a bunch of crappy copy/paste code that none of the domain experts are interested in properly refactoring, and somehow make all of that work correctly, reproducibly, and acceptably fast all in time for various paper and reviewer deadlines.
Many labs don't have any really competent software people in place, which means they don't have effective mentoring and training of new people as they join, which means they don't have a solid mechanism for generating competence in this area (unlike the focus area of their research).
A lot of research code is writing in fits and starts by a revolving door of post docs and graduate students, who don't understand software development, supervised by people who also don't understand software development. The results are really hit and miss, dependent mostly on individuals desire to learn these things outside of their area, or on the luck of hiring the right student or post doc who already happens to know quite a bit (but this probably isn't why you hired them). Some labs know they have this problem but have a structural issue with funding - they can't possibly come up with a competitive salary. Others don't even realize it's a problem.
You end up with a lot of people coming out of these labs with deep domain knowledge but only rudimentary software engineering skill. From an industry point of view it becomes hard to hire many of them because they will need the same amount of supervision and mentoring as an entry level programmer for the first year or two, but if you're running an R&D group you often don't have enough mentors to go around... so there is a shortage of people with 3-5 years of industry experience and an oversupply of those with 0.
Academia needs to stop taking advantage and accept that it should pay double, so they can actually hire inwards from the private sector and gain good knowledge and skills, or somehow increase the prestige and power to be equivalent to other PI positions. I don't the latter is attainable [1], and I'm sure plenty of people would be happy to just be paid well rather than leave for data science/finance/building web apps.
[1] E.g. If you're in physics, and not doing physics, you're fighting a losing battle to get respect and that lectureship/professorship. Everyone doing coding as their main job has to pretend to do research as well.
I don't really see the issue with how it appears to work right now though? My understanding is currently if your research requires you to program, then you program it yourself, or collaborate with others. Thus, being a good coder actually helps some people publish more. At least this is what I saw with people in the more practical research topics like systems research, but even in theoretical research.
On the other hand, I suppose this is a problem for people who are not in CS. However, I imagine these people just hire programmers to do the work in the same way they might hire lab assistants. In any case, I'm not really convinced just putting a new title or career track will help.. how is this career track any different from just a normal software development track?
It seems more like the real issue is that you are hiring a postdoc when what you really want is just a software developer, but perhaps they only want to pay post doc salaries?
However one thing to note is that many cases, research programming has specialized requirements that are rare for most industry positions and domain scientists. For example, numerical analysis to ensure stability of models, distributed computing to scale massive simulations or analytics, algorthims and visualizations to explore datasets, NLP, ML, etc. Some of these skills domain scientists develop but for the most part these are likely going to require someone with a CS background.
From what I know (decades ago, and from a very low-N and non-representative (biology, psychology) sample), "in the same way" = not.
The typical lab assistants are students or Ph.D. students; the researchers cannot do software engineering, so they write programs.
Things likely are different in medicine and hard physics. When people are used to spending huge sums on hardware, they tend to accept that spending money on a professional is worth it. Similarly, in the humanities, people probably are more likely to realize/accept that paying a professional is worth it.
And the career track should be different from a normal one in the sense that one has more control over what one does, how one does it and when one does it, has higher job security, and works on things that are more fun and/or more fulfilling, all at the expense of lower financial reward.
I see three solutions:
1) Have the universities band to together to fund a software source for research. Something that would hire software developers who would provide tools for researchers who were with member universities. Pay a market salary for those programmers and release everything under a sharing friendly license, both for recognition and to aid in reproducing results in other labs.
2) Mandate a single source for all software acquisition through some software consulting company and add riders to all research grants that provide some number of "software supplies" for the team.
3) Get rid of the whole publish or perish paradigm and restructure scientific research so that everyone is accorded rank based on the novelty and repeatability of the research done in the lab.
- sharing code may mean risk of being scooped (instead of milking the same code for years),
- cleaning up code takes time, which can be used for writing another publications.
In short, as long as publications (i.e. papers accepted to prestigious journals or conferences) are the only credit in academia, quality programming is lost.
See my longer answer: http://academia.stackexchange.com/a/23238/49
Once you get used to the indexing and quirks, it's a prototyping dream. In a day I can do what would take weeks to implement in C++ or even Python, and I can decide if the algorithm is good enough to warrant a full port. Once I make that call, it's trivial to decide which parts of the algorithm I should work on optimizing for speed during the port because you can analyze perf of each step. Granted, I do a lot of image processing which is sort of an ideal matlab use case.
I totally agree though, writing software to solve real world problems is much more riveting than writing endless web apps (I've done both.)
In another case, I interviewed with a school of public health at an Ivy university. It was in a medium-to-large city on the east coast, where the cost of living was certainly higher than national average, but not insanely high. Even still, they were looking to pay in the range of $75k for someone with significant years of experience in the scientific Python stack.
Not only does this fail to compare even with start-ups that aren't located in major tech hubs, but also when compared against salaries offered by established companies in the same cities, it's almost a 2x pay jump (more in some cases), for the same skill set.
To boot, these lab/university environments tend to have many of the same political issues that any other organization has. Sometimes they are slightly more generous with vacation time and work/life balance, but not always. But you are generally also working with a lot of research staff who see "programming" as a nuisance that gets in the way of their research, rather than seeing programming as the medium of expression of their research. So when you lobby for using good tools, good workflow practices, and try to teach people how to write reasonable software, you usually get a lot of pushback that people just don't like doing it that way, and since you're the super low-status programmer, your opinion generally doesn't count for much, even if you can back it up with more substance.
You also carry some employment risk when projects are funded by grants. Even large, well-established, multi-year grants can be suddenly changed or reduced when there is significant political change in the funding organizations. And a lot of the universities, at least, are unwilling to hire these kinds of expensive programmers as permanent university employees.
You'd probably have a much better career if you instead went to work as a programming-literate business analyst in some part of the university's fundraising / business departments.
In the end, these places can only afford developers with very little experience, or people who don't understand the cost of living differential in the city they are moving to, or I guess are independently wealthy and just prefer to be a low-status programmer in one of these labs.
Edit: Another thing that struck me -- in a lot of these university research situations, the programming talent that they need to hire is genuinely just harder to find / harder to replace than even the research talent you would be working for.
Since there's a huge surplus of Ph.D. and post-doc labor, you could staff the domain expert research side of things much more easily than the programmer side -- especially if you need someone who is truly full-stack to do things ranging from migrating legacy research data to a cloud platform all the way up to designing fancy UI demos with d3.
If you look at another set of industries where the lower-level contributors are much harder to employ than the manager -- professional team sports -- you see that the market dictates that the lower level experts (the actual players on a sports team) almost always command more salary than the coach. There can be exceptions, like Phil Jackson (but even he didn't earn more than his best players) and there will be backup players who earn less. But the general idea seems to hold true.
This means that a lot of these scientific labs and universities will eventually have to face the market reality that the domain expert labor is just not worth as much as the software design labor. Or else they can just keep on compromising on the quality of the software and try to hold on to a worldview where scraping by with bottom-of-the-barrel software development is good enough. It might work for them for a while longer, but I doubt it will work for too long.
I used to get paid about 1/3rd of what the scientific civil service paid for the same entry level.
Of course, this means getting authorship (doesn't have to be first, but it needs to be there), recommendation letters, and so forth. It is also a temporary situation, since what is happening here is that the postdoc is doing software development for well below market rate in order to get a boost in climbing an academic career ladder.
Unfortunately, this scenario makes it even less appealing for a software developer who isn't part of the academic ladder. Because they aren't getting any special boost, career-wise, it just becomes a demanding job with long hours and low pay.
The setup is virtually guaranteed to result in very low quality software. Post docs may be brilliant people, but it's unlikely they will learn to write high quality, maintainable software in a transitional period between grad school and a faculty position, especially since it's something they'd like to leave behind as quickly as possible. And it's equally unlikely that someone talented at software development will stick around in an organization like this where they will never get the chance to lead a project and make a decent salary, especially when those opportunities exist outside universities.
The idea of a research programmer role is a really good one but I'm not sure I can really see faculty accepting it. It would be a major cultural transition for them.
I take theoretical paper and turn it into practical implementation. I make money on consulting. Lot of independence and freedom.
I dont think it is possible to do such thing in academia. Software guys I know in astronomy are underfunded and on short contracts. Most guys will leave for commercial company before starting a family.
I'm doing the same sort of thing at Google. I've been a software engineer for 13 years or so and I switched over to a research group in 2014. There is definitely a culture difference, even though Google is one of the places which has the least "pure" research. All research teams have software engineers pretty much, and they mostly work with the same codebase that engineers do.
It's the same problem for software devs, postdocs, research assistants, adjunct professors - basically everyone except tenured university professors. We're not rewarding the right things.
I have been peripherically involved with some recent academic research projects in Europe. The way I see it it's basically a way of keeping senior academics occupied and also diverting tax revenues to EU companies for no good reason. It's also a breeding ground for corruption - who chooses which companies get these pointless deals?
You might want to tell that to the students and faculty at MIT, Berkeley and CMU who wrote the papers and much of the software powering your shiny new macbook and iphone.
Since you mention MIT: I guess one example is how much effort Marvin Minsky's influence wasted in AI research and how he single-handedly killed more relevant research in that area for decades.
What I was trying to get at though is what I have seen in the EU. Basically they don't even attempt to do basic research - most of the money goes to building product-like software systems, but without any realistic customer feedback loop (they already got the funding from oblivious tax payers thousands of miles away!). It's just wanking.
This is so so true (I spent some time working as a post-doc in England). There are tables filled up this very moment with dignified scientists arguing about bikesheds in CRUD applications that wouldn't get three upvotes here on Hacker News. And remember: if you can't open it in MS Excel, that makes it "Big Data"!
All joking aside though, what universities are doing with their postdocs is abusive and immoral and they're going to regret killing the golden goose when they've squandered all the prestige in these positions.