Job description
We are looking for a highly motivated Research Software Engineer to work on the open-source MRtrix software project (https://www.mrtrix.org). The successful applicant will be supported by and work closely with other members of the project on a variety of tasks, outlined below.
MRtrix is an open-source software project that provides high-quality implementations of novel and important technical innovations in the field of diffusion MRI analysis. Diffusion MRI is increasingly used to identify and study brain white matter fibre tracts and to investigate brain connectivity. MRtrix is a valuable software tool used by researchers in medical image processing and visualisation, neuroscience and neurotechnology and is already in use in at least 60 medical centres worldwide, and several commercial products.
The applicant will be involved in a range of activities to support the project, including:
- implementing important new features, refactoring code where necessary, and making use of modern GPUs for computation and visualisation;
- encouraging researchers and developers to use MRtrix as the basis for the development and/or dissemination of their own methods;
- maintaining the software, fixing outstanding issues, and easing the various processes involved as much as possible;
- maximising user engagement and participation through workshops, online tutorials, and improved documentation.
The applicant should have a high level of experience with C++, Python, linear algebra, and software development and maintenance practices, and some experience with modern GPU APIs.
This is a full-time post, offered on an a fixed-term contract for up to 3 years (or to 30 September 2025)
Key responsibilities
- Implementing high-performance code in C++
- Maintaining existing codebase (mostly C++ and Python), including fixing outstanding issues, refactoring where necessary, and adding or updating documentation (generated using Doxygen)
- Streamlining the existing Continuous Integration workflow and related processes
- Adding GPU compute capabilities
- Refactoring the current visualization tool to allow its use in a range of different situations.
- Supporting and encouraging other developers and potential contributors, by improving the documentation, providing short tutorials, etc.
- Supporting users of the software, by contributing on the community forum, helping to improve the user documentation, and assisting with workshops.
General
- Demonstrate collaborative approach to software engineering
- Liaise directly with internal and external colleagues in an independent manner
- Use initiative, discretion, knowledge and experience in planning, coordination and problem-solving
- Demonstrate ownership of tasks and development of solutions to problems
- Maintain a supportive and respectful manner when interacting with users and other developers
Development
- To attend regular project meetings and training courses for professional and personal development as required
Communication & Networking
- Develop and maintain effective working relationships with staff within the School as well as externally
- Regularly communicate information in a clear and precise way
Decision Making, Planning & Problem Solving
- Lead in decisions that have a significant impact on their own work, that of others and be party to collaborative decisions
- Manage own workload, prioritising tasks in order to achieve their objectives
- Communicate to management any difficulties associated with carrying out work tasks
- Plan in advance for heavy workload
- Use own initiative and creativity to solve problems
The above list of responsibilities may not be exhaustive, and the post holder will be required to undertake such tasks and responsibilities as may reasonably be expected within the scope and grading of the post.