We are looking for a highly motivated research software engineer to work on open-source MRtrix software project ( https://www.mrtrix.org). The successful candidate will be supported by and work closely with other project members on a variety of tasks, outlined below.
MRtrix is an open-source software project that provides high-quality implementations of new and important technical innovations in the field of diffusion MRI analysis. Diffusion MRI is increasingly being used to identify and study the brain’s white matter fiber bundles and to study brain connectivity. MRtrix is a valuable software tool used by researchers in medical image processing and visualization, neuroscience and neurotechnology. It is already used in at least 60 medical centers around the world and in several commercial products.
The candidate will be involved in a range of activities to support the project, including:
– implement significant new features, refactor code where necessary and use modern GPUs for computation and visualization;
– encourage researchers and developers to use MRtrix as a basis for the development and/or dissemination of their own methods;
– maintaining the software, resolving outstanding issues and facilitating the various processes involved as much as possible;
– Maximize user engagement and participation through workshops, online tutorials, and enhanced documentation.
The candidate 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 position, offered on a 3-year fixed-term contract (until September 30, 2025).
• High performance code implementation in C++
• Maintenance of existing code base (mainly C++ and Python), including fixing open issues, refactoring if necessary and adding or updating documentation (generated using Doxygen)
• Streamlined existing continuous integration workflow and associated processes
• Added GPU computing capabilities
• Refactor the current visualization tool to allow its use in a range of different situations.
• Support and encourage other developers and potential contributors, by improving documentation, providing short tutorials, etc.
• Support software users, by contributing to the community forum, helping to improve user documentation and attending workshops.
• Demonstrate a collaborative approach to software engineering
• Liaise directly with internal and external colleagues independently
• Demonstrate 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 attitude when interacting with users and other developers
• Attend regular project meetings and training courses for professional and personal development as needed
Communication and networking
• Develop and maintain effective working relationships with staff within the school as well as outside
• Regularly communicate information in a clear and precise manner
Decision making, planning and problem solving
• Direct decisions that have a significant impact on own work, that of others and participate in collaborative decisions
• Manage own workload, prioritizing tasks to achieve their goals
• Communicate to management any difficulties associated with the performance of work tasks
• Plan ahead for a 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 the duties and responsibilities reasonably expected within the scope and classification of the post.
Skills, knowledge and experience
1. Doctorate or graduate degree (MSc or PhD) in a computer science/engineering field OR equivalent industry experience in software development.
2. Strong coding ability in C++ and Python
3. Proven ability to convert research papers or math into code
4. Knowledge of version control systems, e.g. git
5. Knowledge of at least one of numerical optimization, linear algebra or graphical/accelerated programming options
6. Ability to work collaboratively with people from a variety of technical and non-technical backgrounds
7. History of proactive and independent work (at home and in the office)
1. Experience in software engineering of large projects
2. Experience in continuous integration / continuous delivery
3. Experience with code release management and user support
4. Experience in producing documentation, online tutorials and/or video tutorials