Research Software Engineer II
Princeton, NJ, United States
Princeton University
Through teaching and research, we educate people who will contribute to society and develop knowledge that will make a difference in the world.Overview
Do you have a background in computational research and love to write code? Do you want to help enable and advance groundbreaking computational research? If so, Princeton University's Research Computing department is recruiting a Research Software Engineer to join the fast growing Research Software Engineering (RSE) Group.
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 the Princeton Quantum Initiative (PQI), a vibrant community at Princeton University working on quantum science and engineering across many departments. You will drive forward quantum research by partnering with experimental research teams to build low-latency, real-time control stacks for qubit hardware. A central part of the role will be contributing to open-source efforts, such as the Quantum Instrumentation Control Kit (QICK) collaboration led by Fermi National Accelerator Laboratory. This work will accelerate the development of features tailored to specific experimental needs and help to set the standard for modular, reusable development of “open firmware”.
If you have a strong background in FPGA development, system-on-chip architectures, digital signal processing, and an interest in quantum computing research, you have the right skill set to make an immediate impact on multiple high-profile research projects.
This role functions within a dynamic, supportive team environment that permits diverse backgrounds to thrive, including those wanting to make a career change and those with non-traditional career tracks, educational paths, or life experiences. If this environment sounds like a strong match or even an exciting challenge, we encourage you to apply and use your cover letter to explain why you would be a good fit for the role.
The term of this appointment is 3 years, with the possibility of renewal based upon satisfactory performance and funding.
Responsibilities
Application of Domain Expertise
- Fully understands the role within the research domain and working toward advanced proficiency in the underlying science, math, statistics, data analysis, and algorithms of computational research questions at a level sufficient to converse with Princeton’s world-class researchers to support the ongoing work. This will consist of independent research (reading publications etc) and/or studying existing code bases.
- Working independently or in collaboration with a team, initiate and/or maintain open collaboration with researchers. Regularly meet with, listen to, and ask questions of researchers to ensure that engineered solutions fit the research need. Understand and address software engineering questions that arise in research planning.
- Apply appropriate domain specific algorithms, techniques and code to advance software engineering in the research field.
Research Software Engineering
- Working independently with minimal guidance to understand and translate research priorities into flexible software solutions.
- Independently or in collaboration with a team, use researcher-provided requirements and desired end state to build complete software solutions. To achieve this, RSEs are expected to figure out the problem through independent or team research, build complete software solutions, and provide full documentation for usage by the research team.
- Identify solutions for each project, establish 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.), and enable long term maintainability and sustainability by documenting the projects in a descriptive and appropriately detailed manner. Independently or in collaboration with a team, provide technical expertise and guidance for improving the performance and quality of new and existing code bases through hands-on work with ongoing research.
- Responding to evolving research needs, apply research software engineering experience to develop robust software solutions to solve challenging research problems. Port, debug, tune and potentially parallelize existing research code to meet criteria set by the research needs.
- Provide support for the use of developed software for researchers both within and outside of Princeton University. This includes documentation of projects in a descriptive and appropriately detailed manner that can be understood by both researchers and future Research Software Engineers.
- Co-teach classes on embedded systems programming.
Professional Development
- Learn the underlying science, mathematics, statistics, data analysis, and algorithms of computational research questions. This may involve independent research, studying existing code bases, and keeping up-to-date with publications.
- Build awareness of software development tools and techniques, software engineering best practices, programming languages, high-performance computing hardware, and computational research solutions.
- Access to a community of over two dozen research software engineers as well as continued professional development opportunities at Princeton Research Computing.
Qualifications
Essential Qualifications:
- Bachelor’s degree or equivalent in computer science, engineering, sciences, or related computational field.
A minimum of 4 years as a Research Software Engineer or equivalent experience (e.g., graduate school, industry experience, open-source software development, etc.).
Exhibits programming skills, particularly in the languages used for application layer development of experimental control and data analysis applications (e.g. Python, C/C++).
- Consistently using conventional and readable coding style.
- Creating comprehensive and well-written documentation
- Using version control systems.
- Strong written and oral technical communication skills.
Preferred Qualifications:
- Experience with Xilinx FPGA development tools (Vivado) and Hardware Description Languages such as Verilog and/or VHDL.
- Experience with using instrumentation to test, characterize, and debug high-speed analog and digital electronics, including FPGAs and RF.
- Familiarity with digital signal processing
- Experience managing multi-institution collaborative software projects, including defining roadmaps, managing implementation of new features, and coordinating multiple developers.
- Experience working in an academic research environment, particularly quantum computing research.
- Experience contributing to open-source software libraries.
- A Masters/Ph.D. (or equivalent) in computer science, applied science, or other related field with a strong computational focus or equivalent experience in a research setting preferred.
Princeton University is an Equal Opportunity/Affirmative Action Employer and all qualified applicants will receive consideration for employment without regard to age, race, color, religion, sex, sexual orientation, gender identity or expression, national origin, disability status, protected veteran status, or any other characteristic protected by law. KNOW YOUR RIGHTS
Standard Weekly Hours
36.25Eligible for Overtime
NoBenefits Eligible
YesProbationary Period
180 daysEssential Services Personnel (see policy for detail)
NoPhysical Capacity Exam Required
NoValid Driver’s License Required
NoExperience Level
Mid-Senior Level #Ll-DP1* Salary range is an estimate based on our AI, ML, Data Science Salary Index 💰
Tags: Architecture Computer Science Data analysis Driver’s license Engineering FPGA Mathematics Open Source Python Research Statistics
Perks/benefits: Career development Flex hours
More jobs like this
Explore more career opportunities
Find even more open roles below ordered by popularity of job title or skills/products/technologies used.