Senior Research Software Engineer
In the RSE group, we collectively provide computational research expertise to multiple divisions within the University. As a central team of software experts, we are focused on improving the quality, performance, and sustainability of Princeton's computational research software. Our group is committed to building collaborative environments in which the best software engineering practices are valued, and to sharing and applying cross-disciplinary computational techniques in new and emerging areas.
In this position, you will be an integral member of a dynamic research team focused on cutting-edge optimization algorithms for power grid research. You will lead the development of software associated with a new project “Stochastic Models, Indices & Optimization Algorithms for Pricing & Hedging Reliability Risks in Modern Power Grids” funded by ARPA-E. You'll join a team of researchers in the Department of Operations Research & Financial Engineering (ORFE) to develop efficient and scalable research code by providing expertise in software design and development. You'll also have the opportunity to co-author scientific publications.
If you have a strong background in scientific programming or research software engineering, academic research, and an interest in data, optimization and operations research, you have the right skill set to make an immediate impact on this high-profile research project. You will be poised to grow and expand your programming skills and expertise into a dynamic new set of research problems.
This position will require you to work closely with colleagues in the Office of Information Technology (OIT) as well as with faculty, student/postdoctoral researchers, and technical staff in the ORFE department to enable and accelerate new research efforts. As a senior member of the RSE team, you will also mentor and provide technical leadership to the Research Software Engineering team, as well as teach advanced computational techniques to raise the computational capability of the team.
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 Senior Research Software Engineer to join the fast-growing Research Software Engineering (RSE) Group.
- Apply broad and extensive research software engineering experience to develop novel, creative, and robust software solutions to the most challenging research problems
Working both independently and collaboratively with researchers, quickly translate research priorities into flexible software solutions that will meet potentially vague and nebulous requirements due to the inherent unpredictability of academic research.
Perform software engineering and development activities including requirements analysis, design, implementation, testing, deployment, and maintenance.
Communicate complex software engineering concepts with large project teams consisting of domain experts each with a varying degree of software engineering knowledge.
Continually keep abreast of a rapidly changing landscape of software engineering best practices, software development techniques, and computational research solutions.
Collaborate with department leadership and other senior RSEs on strategic planning and organizational activities
- Strong programming skills, particularly in the languages used in 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.