Research Software Engineer I
Overview:
Princeton University seeks candidates for a new position within the fast-growing Research Software Engineering (RSE) Group. The successful candidate will play a crucial role in advancing our research efforts, bringing a strong background in software development, High-Performance Computing, and Machine Learning to the team.
In this position, you will be an integral part of the Maxwell research group in Princeton, collaborating with the Condon Lab at the University of Arizona. You will work on a project that provides fast and accurate watershed forecasting across the US to inform decisions about water management better.This tool will build on the success of HydroGEN, part of the HydroFrame framework, which combines outputs from ParFlow, Machine Learning, and field observations gathered using hf_hydrodata. In this role, you will be part of a team of RSEs, faculty, postdocs, and graduate students at Princeton University and the University of Arizona.
Part of your role will involve interfacing ParFlow, our hydrology code written in C/C++ and CUDA, with an ML library (e.g., PyTorch) to generate fast and physically consistent results. You will also participate in developing, training, and fine-tuning the Machine Learning model.
The RSE Group collectively provides computational research expertise to multiple divisions within the University. As a central team of software experts, we focus on improving the quality, performance, and sustainability of Princeton's computational research software.Our group is dedicated to creating collaborative and inclusive environments that value the best software engineering practices and to sharing and applying cross-disciplinary computational techniques in new and emerging areas.
If you have a strong background in scientific computing and Machine Learning, you have the proper skill set to impact a high-profile research project immediately. You will have the opportunity to work on a cutting-edge project and learn from experienced professionals, fostering your personal and professional growth.We encourage you to bring your unique perspective and skills to our team.
The role is initially for two years, with the option to extend based on available funding and job performance.
A remote work arrangement within the United States may be considered for candidates with the appropriate background and experience during this term period. University-paid business travel to Princeton, NJ may be required approximately 2-4 times per year.
Responsibilities:
Application of Domain Expertise- Work toward understanding relevant topical areas and corresponding numerical methods in Hydrology necessary for software development projects. This involves team research and independent studies, such as reading publications and studying existing code bases.
- Through collaborations and independent efforts, work with researchers to understand their needs and challenges to develop software solutions that support their work.
- Foster open collaboration via regular meetings and effective communication to ensure software development meets the research objectives.
- Work independently or as a self-directed team member towards designing, developing, and maintaining software tools and applications for scientific research projects.
- Write efficient, robust, and maintainable code that is well-documented and tested.
- Optimize code performance for large-scale, parallel simulations and modeling.
- Write technical reports and documentation to communicate software development processes and usage.
- Assist in managing software projects by contributing to developing project scopes and planning delivery timelines. Collaborate with the scientific research team to communicate project plans and provide regular progress updates.
- Communicate software engineering concepts to project teams with varying levels of software engineering knowledge.
- Keep up to date with new software technologies and tools that could improve research outcomes.
Qualifications:
ESSENTIAL minimum required knowledge, skills, competencies, and abilities- At least two years as a Research Software Engineer or equivalent experience (e.g., graduate school, industry experience, open-source software development, etc.)
- Strong programming skills, particularly in C/C++, CUDA, and Python
- Expertise in Machine Learning.
- Experience in High-Performance Computing (HPC). Particularly:
- Parallel computing (MPI, OpenMP, hybrid CPU/GPU code).
- GPU programming.
- Experience with:
- Code performance tuning using performance analysis tools (e.g., profilers.)
- Working with large gridded datasets.
- Cloud-based data. Geospatial data and tools.
- Demonstrated success in:
- Consistently using conventional and readable coding style.
- Creating comprehensive and well-written documentation.
- Developing and maintaining reproducible build systems.
- Using modern software development workflows based on Git and Continuous Integration/Continuous Development methods.
- Demonstrated enthusiasm for acquiring new skills and understanding emerging technologies beyond your current areas of expertise.
- Ability to communicate efficiently with users who have different degrees of technical proficiency./
- Experience with HPC cluster environments (e.g., workflow manager, parallel file system).
- Demonstrated successes working independently and in a collaborative software development environment ("team science," often geographically distributed).
- Education: A Master's degree in computer science, engineering, physical science, or a related computational field is required.
- Experience with numerical methods in scientific programming.
- Experience working in an academic research environment.
KNOW YOUR RIGHTS
Standard Weekly Hours:- 25
Eligible for Overtime: No
Benefits Eligible: Yes
Probationary Period: 180 days
Essential Services Personnel (see policy for detail): No
Physical Capacity Exam Required: No
Valid Driver’s License Required: No
Experience Level: Associate- #Ll-DP1