For RSE candidates and community
See also
We occasionally hire people. To get notified (of this and other similar jobs):
From time to time, job advertisements are posted on the Aalto University job portal. If you are considering Aalto, CSC also quite often has jobs open.
If you are looking for jobs inside and outside of Aalto, consider following the Society-RSE job vacancies form.
If you are inside of Aalto, join the RSE community mailing list (mailing list). This will get announcements of both our jobs, events, and other research groups looking to hire a RSE skillset.
If you are in Nordics/Baltics/etc, consider joining Nordic-RSE or CodeRefinery and participating in their events. We are active in these organizations and this is a good way to learn how they work.
This page guides people into the interesting world of research software engineering: providing a view to what this career is like, and what you could do if you want to develop your skills. This isn’t what you have to know to start off. It’s a map of ideas for both before and after, not a list of requirements.
If (some of) the following apply to you, you are a good candidate:
I like the academic environment, but don’t want to focus just on making publications.
I am reasonably good at some programming concepts, and am eager to learn more. I know one language well, can shell script, and generally familiar with Linux.
I am interested in going to a scientist-developer kind of role in a company, but need more experience before I can make the transition.
Components of RSE skills
Research practices: Research is its own special thing, with special ways of working (this includes data management and open science). Research experience helps you connect to our target audience and know what works and doesn’t.
Programming and software development: Programming and general development and project management practices are important - but we must keep in mind the relatively small-scale nature of our projects. Basics are useful, enterprise-grade usually isn’t.
Open-source/open-project knowledge: We emphasize making research results reusable, and open source practices are a key way to do that.
A person coming from a research background will be probably be good at (1) but likely need to improve more in (2). Someone coming from an industry background will probably be good at (2) but need to improve in (1). (3) is very person-dependent.
Let’s not forget a final
Mentoring and teaching: As in every job, social skills are the most important aspect, since you are working closely with a wide variety of researchers.
Research practices
To get experience with this, there is a fairly clear academic career path which can provide good RSE education, especially if you look beyond producing as many papers as possible. To broaden your skills, try:
Try to get involved in a wide variety of computing, data, and software related research.
Publish datasets and software (properly) along with your papers - either separately or in a software/data paper.
Try to work on more collaborative projects (sharing code/data), rather than focusing on your own work.
Manage your data well (remember, it’s not just about the software).
Use different types of computing environments for your work, especially cluster environments (see our HPC cluster lessons).
Software development
Technical skills are an important part of what we do: computing, data, and software. Many people basic programming courses, but there are many important practices beyond that: version control, other tools, methods (Scrum, agile, etc), deployment strategies, and so on.
Don’t let “software” trick you into under-valuing other forms of skills: data managers, computational specialists, etc are all important, too.
To develop these skills, try:
Get at least minimally comfortable with the command line.
Use version control (at the right level for your project). Can you make your project a bit more professional and level up your version control?
Add a command line interface to a code.
Make a modular, reusable code.
Add automated tests, continuous integration.
Play with a new language or tool for some small project - do you have experience in both high and low level languages?
Automate your workflow to make it reproducible.
Use the best data storage methods possible.
Make a merge request / pull request to a project you want to contribute to.
CodeRefinery workshops cover most of what you need.
Look at the Zen of Scientific Computing for other ways to advance some projects up those levels.
Open source / open project knowledge
One of our most important goals is to make research reusable and more open. For computational research, the practices of open-source projects are our main toolbox, since they are often shareable and reusable by design. Don’t limit your vision to just software projects, for example Wikipedia and OpenStreetMap are open projects focused on data curation.
To develop these skills, try:
On Github, subscribe to a project of interest to you. See how it is run. (see if you find some that are large enough to use best practices and active communication, but not so large there is a flood of messages). Or, subscribe to some mailing lists of the project.
Report issues and try to help debug a project of interest to you.
Make a contribution to a project of interest to you.
Package and release one your projects…
… and see if you can get others to use it.
Help others use one of your tools.
Mentoring and teaching
The job of a RSE, at least in our vision, is as much mentoring and teaching others as it is doing things. To improve this, you could try:
Mentor younger researchers in computational tools.
Become the “local computational expert” in your group.
Teach someone about how to use a tool you use.
Help teach some relevant courses.
Motivation and demotivation, a chapter in Teaching Tech Together.
Check out and get involved in being an exercise leader/co-instructor at CodeRefinery.
Role at Aalto
At least at Aalto, you will:
Provide software development and consulting as a service, depending on demand from research groups.
Provide one-on-one research support from a software, programming, Linux, data, and infrastructure perspective: short-term projects helping researchers with specific tasks, so that the researchers gain competence to work independently.
As needed and desired, teach and provide other research support.
A typical cycle involves evaluating potential projects, meeting, formulating a work plan, co-working to develop a solution, teaching and mentoring for skill development, and follow-up.
All will be done as part of a team to round out skills and continuous internal knowledge-sharing.
You may also be interested in these presentations on the topic of “what we do”:
Training resources
These resources may be interesting to support your career as an RSE:
Skillset
Below, we have a large list of the types of technologies which are valued by our researchers and useful to our RSEs. No one person is expected to know everything, but we will hire a variety of people to cover many of the things you see here.
Most important is do you want to learn things from this list? Can you do so mostly independently but with the help of a great team?
More detailed list of relevant skills
This was an older long list of relevant skills. This is inspiration, not a list of things you must know. No one knows all of these when they start off.
General tech skills: Our broad background on which we build:
Basic mandatory skills include Linux, shell scripting, some low-level programming language (C, Fortran), and programming in several more languages (Python particularly advantageous).
Good knowledge of computer clusters, batch systems, and high-performance computing.
Any additional programming, workflow, research, or system tools are a plus. You should have a wide range of skills, but the exact skills are not so important. Most important is sufficient fluency to pick up anything quickly. These skills should be listed as an appendix to the cover letter if not included in the CV.
Advanced parallel programming skills are a plus, but equally important is the ability to create good, simple, practical tools.
Git, GitHub, git-based collaborative workflows.
Software testing, CI, documentation, reproducible, portability, etc.
As an example, the ideal candidate will have near-perfect knowledge of all Software Carpentry, CodeRefinery, and the generic parts of our HPC lessons - or be able to fill in gaps with minimal effort.
But at the same time, we don’t just want people from purely computational backgrounds. You’ll work with people from experimental sciences, digital humanities, etc, and good people from these backgrounds are important, too.
A good attitude towards mentoring and teaching and an ability to explain complex subjects in an accessible way.
Commitment to diversity and equality of researchers among many different backgrounds.
Good knowledge of English. Finnish is advantageous but not required, our internal working language is English.
Specific examples: This is a selection of advanced skills which are useful (remember, this is what you might learn, not what you already know):
Advanced experience of debugging/profiling/developing Linux tools, including Git, Intel and GNU compiler suits and corresponding tools.
Software building tools like Make, CMake and alike.
Advanced knowledge of parallel programming models, experience of parallel programming (OpenMP, MPI).
Advanced GPU computing / programming (CUDA, OpenACC, OpenMP models), experience of porting software to GPUs.
Profiling and optimization - both of low-level languages and high-level.
Knowledge of scientific software and packages including Matlab, Mathematica, Python libs, others is beneficial.
Experimental data collection, LabView, etc.
Workflow automation, shell scripting, porting from single machines to clusters.
Docker, Singularity, containers.
Data analysis tools like R, Python, pandas, numpy, etc. are beneficial.
Julia, Matlab, Mathematica.
Web development, cloud operations.
Scientific Computing on other operating systems.