I recently visited the University of Maryland
to give a colloquium
(slides here).
This was my first in-person colloquium as faculty because of COVID.
I had a great meeting with the grad students over lunch, and they asked several good
questions. I've thought over some of them a little more and wanted to fill out my answers.
I'll paraphrase two questions:
"How do you balance coding work with other research work?"
My answer was essentially, "All of my coding work is research work - I don't write
code that doesn't contribute to my research." That is broadly true, but not exclusively
so, and there are some exceptions.
All of the coding work I have done has been either to enable my research, support
someone else's research, enable my research career, or (in theory) make my life easier.
The research stuff is mostly obvious - my work on and with data reduction software
(see all the CASA-tagged blog posts here, all development on radio-astro-tools, etc),
pyspeckit, and most of astroquery. On the astroquery side, a lot of my research work
wasn't directly going to papers, but was instead to dig through the archives to see
if data were available, or if I needed to obtain new data. It was then useful
for supporting observing proposal writing.
The "enable my research career" component included a lot of side-work on things
that aren't directly research, but are research-adjacent. These projects
included building tools to deploy my papers to github (which was a bit
obsoleted by overleaf), automatically updating reference lists (it turns
out I often cite 5-10 arXiv papers in an article, but by publication time, I
need to update them to official journal article citations), assemble lists of
coauthors, add citation counts to the CV, writing this
blog, etc.
The exceptions are some of the 'pure service' coding. This necessarily had to
be the lowest priority most of the time, but this is still career-motivated.
Some of the contributions I've made to astropy & other open-source projects are
just to improve their code bases, either with bugfixes, added features, or
things to improve robustness. Most of my contributions were directly motivated
by need, of course - either there was something basic missing, or I was the
expert in that particular subtopic. A good example is the J-to-K equivalency;
it wasn't directly research-motivated, but was something I found myself needing
in day-to-day work.
The 'pure service' coding also entails maintaining projects. There is still a
selfish motivation here: if the code is maintained (if other people are using
iti and finding bugs), it is more likely to be functional when I need it next.
But, most of this work isn't triggered by my own needs, but by others.
The astropy Moore grant now funds some of this work, which helps ensure that
I'm motivated to continue the maintenance - but I was doing a lot of this work
as a postdoc long before I could be directly paid for it.
"How do you avoid being typecast as a coder?"
This question came from students who got to be known in their research
collaborations as "good at coding". My answer was basically, "learn to say
no", but there's more nuance to add.
First, there are some solid career paths to follow by being the science coder
in a group. Many observatory jobs, for example, would prioritize this coding
experience. There are a lot of positions in observatory jobs at places
like STSCI, NRAO, NOAO, etc. that value this sort of skill over many others.
So if you want to pursue one of these paths, or an industry path, because
you <i> enjoy </i> the coding, then great! Do it!
If you really enjoy the coding, you'll get to do a lot more of it in a job
focused on software development than in an R1 research job.
That said, if you are interested in pursuing an R1 faculty job, you need to
strike a more careful balance. It's fine if you're the coder in the group -
that can land you a coauthorship on a lot of papers, which is a good thing!
However, first and foremost, you need to publish your own (first-author)
papers, which means prioritizing your work over collaborative work. Ideally,
you'd just do both - that's what's expected of faculty members (faculty members
can't choose to prioritize teaching or research, really - they have to do well
at both, which often means just putting in more hours). But if you're faced
with the choice, a few first-author papers are more important than many
co-author papers.
The way I struck the balance was to focus entirely on research papers during my
grad school career, but still do a lot of software support work on the side - I
put in more time, but it was all stuff that was useful both for me and for
collaborators. Later, in my second postdoc, I started publishing code-only
papers; I would advise grad students to do this sooner, though. Since AAS
journals now accept code papers, if you want coding to be a big part of your
research portfolio, it's a good idea to have a refereed paper on a piece of
software. Note that some of the most highly-cited papers in astronomy are code
papers, like the DAOPHOT, SEXTRACTOR, and astropy papers.
Last bit of advice closing this out: Avoid GUI development. That way lays madness.