Research Software Engineer
Job description
Research Software Engineer
US-NJ-Princeton
Job ID: 2020-12153
Type: Full-Time
# of Openings: 1
Category: Information Technology
Princeton University
Overview
Do you have a background in computational science/engineering research and love to write code? Do you want to help enable and advance groundbreaking computational operations research and financial engineering, with application to energy and the environment? If so, Princeton University's Research Computing department is recruiting a Research Software Engineer to join the fast growing Research Software Engineering (RSE) Group.
Responsibilities
- Quickly understand underlying science, math, statistics, data analysis, and algorithms of computational research questions at a level sufficient to converse on project with Princeton’s world-class researchers. This may consist of independent research (reading publications etc) and/or studying existing code bases.
- Working independently, quickly translate research priorities into flexible software solutions that will meet potentially vague and nebulous requirements due to the inherent unpredictability of academic research.
- Regularly meet with, listen to, and ask questions of researchers to ensure that engineered solutions fit the research need.
- Communicate complex software engineering concepts with large project teams consisting of domain experts each with a varying degree of software engineering knowledge.
- Identify appropriate solutions for each project and architect a set of applicable best practices uniquely appropriate for that project (e.g version control, continuous integration and continuous delivery, software design, programming model, etc.).
- To ensure long term maintainability and sustainability of solutions document projects in a descriptive and appropriately detailed manner that can be understood by both researchers and future Research Software Engineers.
- Provide technical expertise and guidance for improving the performance and quality of new and existing code bases.
- Lead the design and construction of increasingly complex research software systems in a way that ensures projects are usable, maintainable, and sustainable.
- Parallelize, debug, port, and tune existing research code to meet criteria set by the research needs.
- Understand and address software engineering questions that arise in research planning.
- Maintain knowledge of current and future software development tools and techniques, programming languages, and high-performance computing hardware.
- Continually keep abreast of a rapidly changing landscape of software engineering best practices, software development techniques, and computational research solutions.
Qualifications
- Strong programming skills, particularly in the languages scientific computing applications (e.g. Python, C/C++, and R).
- Demonstrated success:
- Consistently using conventional and readable coding style.
- Performing test-driven development.
- Creating comprehensive and well-written documentation.
- Participating in regular code reviews as both a reviewer and reviewee.
- Developing and maintaining reproducible build systems.
- Using version control systems.
- Demonstrated successes contributing to a collaborative research team.
- Ability to work independently.
- Ability to learn new systems beyond area of core knowledge.
- Ability to communicate effectively with a diverse user base having varied levels of technical proficiencies.
- Experience working in an academic research environment.
- Operations research experience
- Experience tuning and optimizing research software and algorithms.
- Parallel programming expertise.
- Experience developing research software outside of core domain knowledge.
PI133375735